)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ca468bf01a7e580a89cc40d4a22238f25184ab65","unresolved":false,"context_lines":[{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"},{"line_number":17,"context_line":"console proxies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0f672f5667d42b67d869ff9f467dbb64eb6c9ff9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"df3967d1_afe90c81","line":16,"updated":"2017-07-31 14:10:53.000000000","message":"Hum I do not think we should store such information which is going to be redundant. The proxies are going to run on the compute nodes, right? so can\u0027t we just generate this URL in fly?","commit_id":"96a64f991eb0ce9e77493e9e80168b1059312c09"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d14ec532d0cfa721e0d8a1c6024f1f10d50faad7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"},{"line_number":17,"context_line":"console proxies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0f672f5667d42b67d869ff9f467dbb64eb6c9ff9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f2577a7_4a8480b1","line":16,"in_reply_to":"5f2577a7_223f94d7","updated":"2017-09-14 09:10:12.000000000","message":"Hum... something is not clear, there are one proxy per compute node and the access_url is referring the proxies.\n\na) User is going to call API to generate an access, in compute manager where the instance is located we create a token, create an entry in console_auth_tokens table and then generate that access_url+token which will be returned one time only to user.\nb) That access_url is pointing to the proxy on that compute node which is hosting the guest. The proxy is going to receive that request, grab the token from the URL, check the database to verify whether the token is still valid, get instance name and redirect the stream to the QEMU process which have a port open waiting for connections.\n\nCan you explain me you implementation?","commit_id":"96a64f991eb0ce9e77493e9e80168b1059312c09"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"434b29b51cae791dd08b1ab13dab53b401d4d454","unresolved":false,"context_lines":[{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"},{"line_number":17,"context_line":"console proxies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0f672f5667d42b67d869ff9f467dbb64eb6c9ff9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f2577a7_8c3ddfc5","line":16,"in_reply_to":"5f2577a7_4a8480b1","updated":"2017-09-14 15:26:04.000000000","message":"On part b), the proxy isn\u0027t on the compute node, it\u0027s on a global node (such as the controller) and doesn\u0027t have access to the access_url config option and needs to get the access_url_base from the database.","commit_id":"96a64f991eb0ce9e77493e9e80168b1059312c09"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"175e81e9b52bb67fb22e90491e923219dab2889c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"},{"line_number":17,"context_line":"console proxies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0f672f5667d42b67d869ff9f467dbb64eb6c9ff9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f2577a7_ec9b4315","line":16,"in_reply_to":"5f2577a7_8c3ddfc5","updated":"2017-09-14 15:44:01.000000000","message":"Currently, the access_url is being stored in the oslo.cache [1]. This series is changing from using consoleauth + oslo.cache to using the database instead. And so the access_url still has to be stored, but this series stores the access_url_base so as to avoid storing the token itself in the database.\n\n[1] https://github.com/openstack/nova/blob/efae7d7/nova/consoleauth/manager.py#L87","commit_id":"96a64f991eb0ce9e77493e9e80168b1059312c09"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5bc49812b883b7d5a02454967ebe7e5d4bf43ebd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"},{"line_number":17,"context_line":"console proxies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0f672f5667d42b67d869ff9f467dbb64eb6c9ff9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f2577a7_223f94d7","line":16,"in_reply_to":"df3967d1_afe90c81","updated":"2017-09-08 21:13:45.000000000","message":"The proxies (websocketproxy) don\u0027t run on compute nodes actually, and that\u0027s why the access url is needed in the database. \n\nThe current architecture is that they run globally for a deployment. At the end of this patch series, they will run per cell (but still not on compute nodes). They could be co-located with some other service in the cell.","commit_id":"96a64f991eb0ce9e77493e9e80168b1059312c09"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"627c32f4f77e4d4d90d7aef67b0f548f51a0bc63","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Unfortunately this column was missed off when console_auth_tokens"},{"line_number":10,"context_line":"was added to the database. This change adds it in."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"We cannot store the entire access_url in the database because"},{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"bf8cb3f7_6be43cad","line":13,"range":{"start_line":12,"start_character":0,"end_line":13,"end_character":21},"updated":"2017-12-22 21:42:18.000000000","message":"I read the spec first before I started reviewing this, and I thought this meant we wouldn\u0027t store the token in the database, which was confusing because the spec talks quite a bit about storing a token hash in the database, but I guess this isn\u0027t that, this is just saying we can\u0027t store the access_url with the token in it because...it would be too long? It wouldn\u0027t be hashed? Other?","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5e1e0841c095c26894d906aae2852ae36adb3443","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Unfortunately this column was missed off when console_auth_tokens"},{"line_number":10,"context_line":"was added to the database. This change adds it in."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"We cannot store the entire access_url in the database because"},{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9f91af0f_43411139","line":13,"range":{"start_line":12,"start_character":0,"end_line":13,"end_character":21},"in_reply_to":"bf8cb3f7_6be43cad","updated":"2018-01-03 21:44:09.000000000","message":"We do store the token hash in the database, separately. The full access_url includes an unhashed token. We need to store at least part of the access_url in the database because the info only exists on the compute host nova.conf, and we\u0027re not running console proxies on compute hosts. So, in order to store the part of the access_url we really need and avoid storing an unhashed token, we store the access_url_base which is something like \"http://127.0.0.1:6080/vnc_auto.html\", for example.\n\nI\u0027ll try to make this part of the commit message clearer.","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"627c32f4f77e4d4d90d7aef67b0f548f51a0bc63","unresolved":false,"context_lines":[{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"},{"line_number":17,"context_line":"console proxies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0f672f5667d42b67d869ff9f467dbb64eb6c9ff9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"bf8cb3f7_2bf07467","line":16,"range":{"start_line":16,"start_character":25,"end_line":16,"end_character":36},"updated":"2017-12-22 21:42:18.000000000","message":"for a","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5e1e0841c095c26894d906aae2852ae36adb3443","unresolved":false,"context_lines":[{"line_number":13,"context_line":"it contains the token, but we can keep the base part of the url"},{"line_number":14,"context_line":"and generate the full access_url on demand."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The access_url is needed for a for a protocol check in the"},{"line_number":17,"context_line":"console proxies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0f672f5667d42b67d869ff9f467dbb64eb6c9ff9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9f91af0f_633c55bf","line":16,"range":{"start_line":16,"start_character":25,"end_line":16,"end_character":36},"in_reply_to":"bf8cb3f7_2bf07467","updated":"2018-01-03 21:44:09.000000000","message":"Oops.","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b6a6b045178d16d15ca4a50b612f4508a45d34","unresolved":false,"context_lines":[{"line_number":10,"context_line":"was added to the database. This change adds it in."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The access_url is needed for a protocol check in the console proxies."},{"line_number":13,"context_line":"Console proxies run globally per cell and do not run on compute hosts"},{"line_number":14,"context_line":"and thus do not have access to the access_url config options in the"},{"line_number":15,"context_line":"compute hosts nova.conf files."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9f91af0f_94aac4cf","line":13,"range":{"start_line":13,"start_character":20,"end_line":13,"end_character":37},"updated":"2018-01-05 16:43:05.000000000","message":"This seems like an oxymoron. I\u0027d have just said \"per cell\". I guess you mean it\u0027s global to the cell since it\u0027s not per-compute. I tend to think of \u0027global\u0027 as across the entire nova deployment.","commit_id":"36246c135acbe50101395bce9c91fccce4dab35a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2cc4e69012a47b242f121d65f3431319c921666f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"was added to the database. This change adds it in."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The access_url is needed for a protocol check in the console proxies."},{"line_number":13,"context_line":"Console proxies run globally per cell and do not run on compute hosts"},{"line_number":14,"context_line":"and thus do not have access to the access_url config options in the"},{"line_number":15,"context_line":"compute hosts nova.conf files."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9f91af0f_942084b2","line":13,"range":{"start_line":13,"start_character":20,"end_line":13,"end_character":37},"in_reply_to":"9f91af0f_94aac4cf","updated":"2018-01-05 17:14:14.000000000","message":"Yeah, I debated saying just \"per cell\" but I\u0027ve had a number of confusing discussions in this series previously where people were thinking console proxies run on compute hosts, which they don\u0027t. I can change it to \"per cell\" when I split out the index change.","commit_id":"36246c135acbe50101395bce9c91fccce4dab35a"}],"nova/db/sqlalchemy/migrate_repo/versions/374_add_access_url_to_console_auth_tokens.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"627c32f4f77e4d4d90d7aef67b0f548f51a0bc63","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    meta \u003d MetaData()"},{"line_number":23,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    table \u003d Table(\u0027console_auth_tokens\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":"    new_column \u003d Column(\u0027access_url_base\u0027, String(255), nullable\u003dTrue)"},{"line_number":27,"context_line":"    if not hasattr(table.c, \u0027access_url_base\u0027):"},{"line_number":28,"context_line":"        table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf8cb3f7_0ba49056","line":25,"updated":"2017-12-22 21:42:18.000000000","message":"I was checking to see if we needed to update the shadow table too, but it doesn\u0027t look like there is a shadow table for this, so nothing to update. Does that mean we also don\u0027t do soft deletes on these (console_auth_tokens.deleted !\u003d 0)?","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5e1e0841c095c26894d906aae2852ae36adb3443","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    meta \u003d MetaData()"},{"line_number":23,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    table \u003d Table(\u0027console_auth_tokens\u0027, meta, autoload\u003dTrue)"},{"line_number":26,"context_line":"    new_column \u003d Column(\u0027access_url_base\u0027, String(255), nullable\u003dTrue)"},{"line_number":27,"context_line":"    if not hasattr(table.c, \u0027access_url_base\u0027):"},{"line_number":28,"context_line":"        table.create_column(new_column)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f91af0f_c3d2015d","line":25,"in_reply_to":"bf8cb3f7_0ba49056","updated":"2018-01-03 21:44:09.000000000","message":"Right, no soft deletes on these.","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"}],"nova/db/sqlalchemy/migrate_repo/versions/375_add_access_url_to_console_auth_tokens.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17b6a6b045178d16d15ca4a50b612f4508a45d34","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    idx_name \u003d \u0027console_auth_tokens_token_hash_instance_uuid_idx\u0027"},{"line_number":33,"context_line":"    indexes \u003d Inspector(migrate_engine).get_indexes(\u0027console_auth_tokens\u0027)"},{"line_number":34,"context_line":"    if idx_name not in (i[\u0027name\u0027] for i in indexes):"},{"line_number":35,"context_line":"        Index(idx_name, table.c.token_hash, table.c.instance_uuid).create()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_34e73843","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":52},"updated":"2018-01-05 16:43:05.000000000","message":"This isn\u0027t the best way to check for an index because I could have an index on the same columns with a different name. We have other examples of schema migrations that add an index but check for duplicates based on the columns in the index rather than the name, which is a bit better.\n\nShould probably also call out the index add in the commit message since it doesn\u0027t really have anything to do with adding access_url_base - or move it to a separate change. Honestly it\u0027s probably better to make it separate in case someone wanted to backport the index add.","commit_id":"36246c135acbe50101395bce9c91fccce4dab35a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2cc4e69012a47b242f121d65f3431319c921666f","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    idx_name \u003d \u0027console_auth_tokens_token_hash_instance_uuid_idx\u0027"},{"line_number":33,"context_line":"    indexes \u003d Inspector(migrate_engine).get_indexes(\u0027console_auth_tokens\u0027)"},{"line_number":34,"context_line":"    if idx_name not in (i[\u0027name\u0027] for i in indexes):"},{"line_number":35,"context_line":"        Index(idx_name, table.c.token_hash, table.c.instance_uuid).create()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_df0ce53c","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":52},"in_reply_to":"9f91af0f_34e73843","updated":"2018-01-05 17:14:14.000000000","message":"I see, thanks for explaining that. I\u0027m going to separate the index change.","commit_id":"36246c135acbe50101395bce9c91fccce4dab35a"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9e8e3c5d2f52c18e1b478b0e02c1e59bf8ffcfeb","unresolved":false,"context_lines":[{"line_number":1591,"context_line":"    internal_access_path \u003d Column(String(255))"},{"line_number":1592,"context_line":"    instance_uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":1593,"context_line":"    expires \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":1594,"context_line":"    access_url_base \u003d Column(String(255))"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"    instance \u003d orm.relationship("},{"line_number":1597,"context_line":"        \"Instance\","}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_0a8d31d2","line":1594,"updated":"2017-10-25 07:00:34.000000000","message":"I still think there is a problem here and we should not have this field stored. The full URL should be generated one time only by host when the user is calling API to get a token - The host is generating the full URL by using its CONF.base_url_access + token, that full URL is returned to user in the response of the request, that\u0027s it.\n\nNow we have to store it for some checks in the websocketproxy... I think a work should be done to avoid that.","commit_id":"772443b4a0035169e6d9ca3d8da74e4834231d30"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"004d0dbbe548a0f81eaab4e238ea9d0a846cef07","unresolved":false,"context_lines":[{"line_number":1591,"context_line":"    internal_access_path \u003d Column(String(255))"},{"line_number":1592,"context_line":"    instance_uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":1593,"context_line":"    expires \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":1594,"context_line":"    access_url_base \u003d Column(String(255))"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"    instance \u003d orm.relationship("},{"line_number":1597,"context_line":"        \"Instance\","}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_16b0ab89","line":1594,"in_reply_to":"3f4b6375_0a8d31d2","updated":"2017-10-25 15:41:34.000000000","message":"FWIW, we are storing the access_url + token *before* this change already -- it\u0027s stored in the oslo.cache (formerly memcached) [1]. This series is changing from oslo.cache -\u003e database backend and we\u0027re still going to store the base access_url. In other words, the design hasn\u0027t changed, FWIW.\n\n[1] https://github.com/openstack/nova/blob/master/nova/consoleauth/manager.py#L81-L91","commit_id":"772443b4a0035169e6d9ca3d8da74e4834231d30"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5bfd0b53ed44552c3aeabbfca7d3b052bc41c569","unresolved":false,"context_lines":[{"line_number":1591,"context_line":"    internal_access_path \u003d Column(String(255))"},{"line_number":1592,"context_line":"    instance_uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":1593,"context_line":"    expires \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":1594,"context_line":"    access_url_base \u003d Column(String(255))"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"    instance \u003d orm.relationship("},{"line_number":1597,"context_line":"        \"Instance\","}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_7c58e154","line":1594,"in_reply_to":"3f4b6375_16b0ab89","updated":"2017-10-25 16:17:01.000000000","message":"Yes you are right, sorry if my phrasing made thought that your implementation is updating the design.","commit_id":"772443b4a0035169e6d9ca3d8da74e4834231d30"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"223c4a8794c6b9b8c78dac336729e7e076859463","unresolved":false,"context_lines":[{"line_number":1591,"context_line":"    internal_access_path \u003d Column(String(255))"},{"line_number":1592,"context_line":"    instance_uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":1593,"context_line":"    expires \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":1594,"context_line":"    access_url_base \u003d Column(String(255))"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"    instance \u003d orm.relationship("},{"line_number":1597,"context_line":"        \"Instance\","}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_c58b78c0","line":1594,"in_reply_to":"3f4b6375_7c58e154","updated":"2017-10-25 18:08:57.000000000","message":"Gotcha, sorry I misunderstood you. Thanks for clarifying.","commit_id":"772443b4a0035169e6d9ca3d8da74e4834231d30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"627c32f4f77e4d4d90d7aef67b0f548f51a0bc63","unresolved":false,"context_lines":[{"line_number":1577,"context_line":""},{"line_number":1578,"context_line":"    __tablename__ \u003d \u0027console_auth_tokens\u0027"},{"line_number":1579,"context_line":"    __table_args__ \u003d ("},{"line_number":1580,"context_line":"        Index(\u0027console_auth_tokens_instance_uuid_idx\u0027, \u0027instance_uuid\u0027),"},{"line_number":1581,"context_line":"        Index(\u0027console_auth_tokens_host_expires_idx\u0027, \u0027host\u0027, \u0027expires\u0027),"},{"line_number":1582,"context_line":"        Index(\u0027console_auth_tokens_token_hash_idx\u0027, \u0027token_hash\u0027),"},{"line_number":1583,"context_line":"        schema.UniqueConstraint(\"token_hash\","},{"line_number":1584,"context_line":"                                name\u003d\"uniq_console_auth_tokens0token_hash\")"},{"line_number":1585,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf8cb3f7_4bc378ee","line":1582,"range":{"start_line":1580,"start_character":8,"end_line":1582,"end_character":66},"updated":"2017-12-22 21:42:18.000000000","message":"Looks like we have a query method that filters on both the token hash and the instance uuid, so we should have an index on those columns together, yeah? Could be done in a separate optimization patch though.","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5e1e0841c095c26894d906aae2852ae36adb3443","unresolved":false,"context_lines":[{"line_number":1577,"context_line":""},{"line_number":1578,"context_line":"    __tablename__ \u003d \u0027console_auth_tokens\u0027"},{"line_number":1579,"context_line":"    __table_args__ \u003d ("},{"line_number":1580,"context_line":"        Index(\u0027console_auth_tokens_instance_uuid_idx\u0027, \u0027instance_uuid\u0027),"},{"line_number":1581,"context_line":"        Index(\u0027console_auth_tokens_host_expires_idx\u0027, \u0027host\u0027, \u0027expires\u0027),"},{"line_number":1582,"context_line":"        Index(\u0027console_auth_tokens_token_hash_idx\u0027, \u0027token_hash\u0027),"},{"line_number":1583,"context_line":"        schema.UniqueConstraint(\"token_hash\","},{"line_number":1584,"context_line":"                                name\u003d\"uniq_console_auth_tokens0token_hash\")"},{"line_number":1585,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f91af0f_83ccf9bc","line":1582,"range":{"start_line":1580,"start_character":8,"end_line":1582,"end_character":66},"in_reply_to":"bf8cb3f7_4bc378ee","updated":"2018-01-03 21:44:09.000000000","message":"Good point.","commit_id":"8deb079ecb4f4afcd4bbe92a90fc8d3c44ab9777"}],"nova/tests/unit/db/test_migrations.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0215d746d9e7cfd73f70165a5280765ff1e34d8a","unresolved":false,"context_lines":[{"line_number":980,"context_line":"    def _check_375(self, engine, data):"},{"line_number":981,"context_line":"        self.assertColumnExists(engine, \u0027console_auth_tokens\u0027,"},{"line_number":982,"context_line":"                                \u0027access_url_base\u0027)"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"class TestNovaMigrationsSQLite(NovaMigrationsCheckers,"},{"line_number":985,"context_line":"                               test_base.DbTestCase,"},{"line_number":986,"context_line":"                               test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f91af0f_11c241ea","line":983,"updated":"2018-01-05 19:50:25.000000000","message":"pep8 failure here","commit_id":"b421b31730ace955ea98ac136c4a9731a74377b1"}]}
