)]}'
{"doc/source/conf.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"8fd71e11e9355574dcfd52eaa4e0fdad7553bc25","unresolved":true,"context_lines":[{"line_number":96,"context_line":"# from cinder store after the config are loaded but to handle doc"},{"line_number":97,"context_line":"# failures, we mock it here."},{"line_number":98,"context_line":"autodoc_mock_imports \u003d [\u0027glance_store.common.fs_mount\u0027,"},{"line_number":99,"context_line":"                        \u0027glance_store.common.cinder_utils\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a22f82b_53edc403","line":99,"range":{"start_line":99,"start_character":25,"end_line":99,"end_character":57},"updated":"2021-07-23 16:24:50.000000000","message":"nit: if new patch is needed then add why this is added to list, above comment just talks about fs_mount only.","commit_id":"17c79c303cbe9c177239cf9f3c590fbb4bb46a15"}],"glance_store/_drivers/cinder.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":470,"context_line":"                                \u0027project_name\u0027, \u0027auth_address\u0027]])"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def get_cinderclient(self, context\u003dNone, legacy_update\u003dFalse,"},{"line_number":473,"context_line":"                         version\u003d\u00273.0\u0027):"},{"line_number":474,"context_line":"        # NOTE: For legacy image update from single store to multiple"},{"line_number":475,"context_line":"        # stores we need to use admin context rather than user provided"},{"line_number":476,"context_line":"        # credentials"}],"source_content_type":"text/x-python","patch_set":14,"id":"696f333a_95122c88","line":473,"range":{"start_line":473,"start_character":25,"end_line":473,"end_character":38},"updated":"2021-04-19 19:12:49.000000000","message":"Am I to assume that we currently work against v2.0, or is 3.0 already the default, and we\u0027re just mirroring that here so it can be overridden by callers?\n\nAlso, is there any reason not to just set this to 3.54? That way we won\u0027t get halfway through some behavior, only to find out that the attachment part can\u0027t proceed if cinder is too old. If we have some minimum cinder version we require, we might as well require it everywhere to make it consistent and not have \"everything is working fine until I go to attach...\" behaviors.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":true,"context_lines":[{"line_number":470,"context_line":"                                \u0027project_name\u0027, \u0027auth_address\u0027]])"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def get_cinderclient(self, context\u003dNone, legacy_update\u003dFalse,"},{"line_number":473,"context_line":"                         version\u003d\u00273.0\u0027):"},{"line_number":474,"context_line":"        # NOTE: For legacy image update from single store to multiple"},{"line_number":475,"context_line":"        # stores we need to use admin context rather than user provided"},{"line_number":476,"context_line":"        # credentials"}],"source_content_type":"text/x-python","patch_set":14,"id":"bda2452d_f365fbb6","line":473,"range":{"start_line":473,"start_character":25,"end_line":473,"end_character":38},"in_reply_to":"696f333a_95122c88","updated":"2021-04-23 12:13:33.000000000","message":"We\u0027re currently working with v3 but there is no support to specify microversion, this parameter allows callers to specify the needed mv and the same cinderclient is provided. 3.0 is kept as it is the default used currently.\n\nThe reason I didn\u0027t set this to 3.54 as all the operations don\u0027t require that microversion.\nThe delete, get_size, configure_add and is_image_associated_with_store calls can work with 3.0 MV whereas the get and add (create) methods require 3.54.\nAlso it seemed confusing to me to set it to an arbitary 3.54, that\u0027s why I\u0027ve set it to the lower 3.0 which currently cinderclient does if no MV is specified.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644d1c640f28672f0789ba6245a625a66ea89347","unresolved":true,"context_lines":[{"line_number":470,"context_line":"                                \u0027project_name\u0027, \u0027auth_address\u0027]])"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def get_cinderclient(self, context\u003dNone, legacy_update\u003dFalse,"},{"line_number":473,"context_line":"                         version\u003d\u00273.0\u0027):"},{"line_number":474,"context_line":"        # NOTE: For legacy image update from single store to multiple"},{"line_number":475,"context_line":"        # stores we need to use admin context rather than user provided"},{"line_number":476,"context_line":"        # credentials"}],"source_content_type":"text/x-python","patch_set":14,"id":"72b25e52_cb3df0dd","line":473,"range":{"start_line":473,"start_character":25,"end_line":473,"end_character":38},"in_reply_to":"7f1eca33_acb911af","updated":"2021-04-28 13:52:51.000000000","message":"Yeah, I\u0027m talking about a case where cinder and nova are not the same version. Not everyone upgrades all of their services every time, and not all at the same time. Some of the largest clouds leave some of their services on older versions because their API layers should still be compatible and there is no need to change them.\n\nWhat you\u0027re introducing here is effectively a hard dependency on a new cinder (which is okay, not saying we shouldn\u0027t do that). All I\u0027m saying is that it might make sense to bring all our calls up to 3.54 and not just the one we need. But, it\u0027s really not a big deal, just a \"best practice\" sort of thing.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"775571438a1837574e4ae28fb107e9c079d10bc3","unresolved":true,"context_lines":[{"line_number":470,"context_line":"                                \u0027project_name\u0027, \u0027auth_address\u0027]])"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def get_cinderclient(self, context\u003dNone, legacy_update\u003dFalse,"},{"line_number":473,"context_line":"                         version\u003d\u00273.0\u0027):"},{"line_number":474,"context_line":"        # NOTE: For legacy image update from single store to multiple"},{"line_number":475,"context_line":"        # stores we need to use admin context rather than user provided"},{"line_number":476,"context_line":"        # credentials"}],"source_content_type":"text/x-python","patch_set":14,"id":"ca5e4081_d763544a","line":473,"range":{"start_line":473,"start_character":25,"end_line":473,"end_character":38},"in_reply_to":"bda2452d_f365fbb6","updated":"2021-04-27 13:29:25.000000000","message":"well, the reason to pick the higher one is just because it may be confusing. Imagine an operator has a cloud running Wallaby, and they upgrade their glance and nova to Xena, but don\u0027t upgrade cinder because they don\u0027t think they need to. After glance comes up, they do a quick test to make sure that they can access the images stored in cinder, and they can. However, later the first user goes to upload an image and... they find out that we now require 3.54, and thus a new cinder. It\u0027s kinda their fault for not reading the release notes, but... they will won\u0027t be happy.\n\nAnyway, if there are other changes we\u0027d have to incorporate to bring the rest of the calls up to 3.54 then it might not be worth it, but, just something to think about.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d447fd4c0c863ae98918beef912b7b546900ab77","unresolved":true,"context_lines":[{"line_number":470,"context_line":"                                \u0027project_name\u0027, \u0027auth_address\u0027]])"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def get_cinderclient(self, context\u003dNone, legacy_update\u003dFalse,"},{"line_number":473,"context_line":"                         version\u003d\u00273.0\u0027):"},{"line_number":474,"context_line":"        # NOTE: For legacy image update from single store to multiple"},{"line_number":475,"context_line":"        # stores we need to use admin context rather than user provided"},{"line_number":476,"context_line":"        # credentials"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f1eca33_acb911af","line":473,"range":{"start_line":473,"start_character":25,"end_line":473,"end_character":38},"in_reply_to":"ca5e4081_d763544a","updated":"2021-04-28 11:32:11.000000000","message":"I\u0027m not sure if i understand your concern correctly. MV 3.54 is available since rocky and if their cinder is running on wallaby, then they don\u0027t need to upgrade cinder. Maybe I\u0027m missing something.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"52614b4b_d7ae955f","line":519,"updated":"2021-04-19 19:12:49.000000000","message":"It looks like 3.0 has been around for quite a while, so I doubt this is really a problem. However, in the past I know of at least one provider that left cinder un-upgraded for a long time. If this is our first use of 3.0 in glance, presumably this can and will raise some error if 3.0 is not available from the cinder endpoint right? Or does it happen later? Even still, 3.54 is new enough that it\u0027s more possible we might be working with a cinder that supports 3.0, but not 3.54 and we will fail in that case. Regardless, it seems like we should be catching that and logging it in some sane way if it were to happen.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"81706d8c7c6c7c840ca879ad5292fdc42b616459","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"6916886b_a98717b9","line":519,"in_reply_to":"361ec1ac_5dba8bf9","updated":"2021-04-29 11:36:45.000000000","message":"While trying out this case i noticed the BackendException we raise for all stores is just directly inherited from Exception (no special handling on glance_store or glance side) and we still end up with a 500 error anyway.\nIn summary, If i try to catch it appropriately and raise a BackendException instead, it will still show the user a 500 Internal server error message.\nNot sure how to proceed from here.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":true,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"dffe0f42_606ca21c","line":519,"in_reply_to":"52614b4b_d7ae955f","updated":"2021-04-23 12:13:33.000000000","message":"the transition from v2 to v3 was done in ussuri with change[1].\nThis was discussed during PTG and the general consensus was we aren\u0027t going to be using this with cinder as old as rocky so no need for special handling here.\n\n[1] https://review.opendev.org/c/openstack/glance_store/+/714467","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d447fd4c0c863ae98918beef912b7b546900ab77","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"856ccace_9b6c409d","line":519,"in_reply_to":"60c8379f_ed8514a8","updated":"2021-04-28 11:32:11.000000000","message":"The problem with this is that this call doesn\u0027t raise any error here doesn\u0027t matter which microversion we specify. It errors out on the first operation we perform with this client which is different for different methods. Like add method performs a create_volume whereas a get method calls _open_cinder_volume which performs attachment_create as the first operation with client and they will raise error.\nOne other way is to call cinderclient first to get the max API version and then verify if it is \u003e\u003d3.54 and recreate the cinderclient again with the microversion if the call is coming from get or add method which will add additional API call and additional parameter to determine which method is calling get_cinderclient.\nAlso I\u0027m still unsure how in an upgrade usecase we can end up with a glance with xena and cinder with queens.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9fb88e1187cc74c7162a21188f4091f64b5f05e2","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"c64a3251_adfa149f","line":519,"in_reply_to":"6916886b_a98717b9","updated":"2021-04-29 15:50:31.000000000","message":"Okay, I\u0027ve been thinking about this a bit. The thing I\u0027m focused on is making sure we log something useful to the operator and return something useful to the client. In retrospect, 500 is probably appropriate in terms of an error code, because it\u0027s indicating that there\u0027s something on the server side that needs to be fixed by the operator, and not something the user can do. It\u0027s unfortunate, because so many 500s *are* retry-able because they tend to be a catch all for \"oops this failed now, but will work if you try again.\" In this case, it\u0027s an actual server error that won\u0027t work a second time, so even though most users probably will try, I guess it\u0027s the most appropriate thing.\n\nSo I think what\u0027s important is that we\u0027re logging something useful for the operator. Second most important is that we report something appropriate to the user.\n\nSince I assume you\u0027ve been testing this, can you show me what the log and 500 returned to the user look like? Maybe they\u0027re already suitable and sufficient. If so, I\u0027ll apologize for bringing it up :)","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"644d1c640f28672f0789ba6245a625a66ea89347","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"361ec1ac_5dba8bf9","line":519,"in_reply_to":"856ccace_9b6c409d","updated":"2021-04-28 13:52:51.000000000","message":"Okay, that\u0027s what I was asking originally: does it raise here or does it happen later?\" If there\u0027s no exception here, then there\u0027s not much we can do other than probe to see if the version is supported.\n\nIt\u0027s entirely possible to have a very old cinder in a deployment. Many deployment tools (including Red Hat\u0027s) bring all the services forward together, but this is not always the case. Even though we\u0027re saying that we are requiring a new cinder at this point, I think we should make sure to handle the situation as robustly as possible, just so we can communicate what is going on instead of logging a stack trace or something else.\n\nI\u0027m guessing it will raise a ClientException when that happens, so the code in the next file will log it, but then re-raise that cinder exception up the stack. What happens in that case? As long as it\u0027s not a 500 or something to the user, I\u0027m fine with it.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e7c4a15e363f2e50b395c27107f45289be3866ac","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"e53b4601_545536ba","line":519,"in_reply_to":"a957362a_893ebdbb","updated":"2021-04-30 14:33:30.000000000","message":"Okay, so that big stack trace is what I think would be nice to avoid. It makes it look like a bug, or something unexpected happened. IMHO we should only log a stack trace if something happens that we really don\u0027t anticipate, but this is something we know can happen.\n\nAnyway, I won\u0027t hold this up further based on that, since the information about the microversions is in there on either side of it. Maybe we can follow up with a more concise log handler.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0df9c8800a119285cc43e0484e7ded66c6a69241","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"a957362a_893ebdbb","line":519,"in_reply_to":"c64a3251_adfa149f","updated":"2021-04-30 11:01:59.000000000","message":"This[1] is the output when the microversion isn\u0027t supported by API\n\nFor an operator, i think the following log messages from the error trace should be good:\n\nERROR glance.common.wsgi [None req-7d9e69cd-06db-4d56-b68f-1161209740a6 admin admin] Caught error: Version 3.68 is not supported by the API. Minimum is 3.0 and maximum is 3.64. (HTTP 406) (Request-ID: req-9c4690c9-4421-46e8-b07e-a97352717822): cinderclient.exceptions.NotAcceptable: Version 3.68 is not supported by the API. Minimum is 3.0 and maximum is 3.64. (HTTP 406) (Request-ID: req-9c4690c9-4421-46e8-b07e-a97352717822)\n\nERROR glance.common.wsgi cinderclient.exceptions.NotAcceptable: Version 3.68 is not supported by the API. Minimum is 3.0 and maximum is 3.64. (HTTP 406) (Request-ID: req-9c4690c9-4421-46e8-b07e-a97352717822)\n\nFor user, it is the generic 500 error:\n\nHTTP 500 Internal Server Error: The server has either erred or is incapable of performing the requested operation.\n\nI would like to also mention that for users, even if we handle this case, there are several other areas where the same BackendException is raised and we see the same 500 error.\n\nLet me know if the current logs seems sufficient or we need to have some extra handling for this case.\n\n[1] http://paste.openstack.org/show/804879/","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"775571438a1837574e4ae28fb107e9c079d10bc3","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            insecure\u003dself.store_conf.cinder_api_insecure,"},{"line_number":517,"context_line":"            retries\u003dself.store_conf.cinder_http_retries,"},{"line_number":518,"context_line":"            cacert\u003dself.store_conf.cinder_ca_certificates_file,"},{"line_number":519,"context_line":"            api_version\u003dapi_version)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        LOG.debug("},{"line_number":522,"context_line":"            \u0027Cinderclient connection created for user %(user)s using URL: \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"60c8379f_ed8514a8","line":519,"in_reply_to":"dffe0f42_606ca21c","updated":"2021-04-27 13:29:25.000000000","message":"Okay, I dunno what the exception will look like, but at least catching it and reporting it clearly *should* be a priority, IMHO. We just had a long TC session about how we _absolutely_ need to be airtight on FFU things. Someone doing a slow roll from queens to xena could get bitten by this and having it just log a stack trace would be considered broken.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":629,"context_line":"            client, attachment[\u0027id\u0027], connector_prop,"},{"line_number":630,"context_line":"            mountpoint\u003d\u0027glance_store\u0027)"},{"line_number":631,"context_line":"        self.volume_api.attachment_complete(client, attachment.id)"},{"line_number":632,"context_line":"        volume \u003d volume.manager.get(volume_id)"},{"line_number":633,"context_line":"        connection_info \u003d attachment.connection_info"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a109924_1b4528ea","line":632,"updated":"2021-04-19 19:12:49.000000000","message":"I had comments here about seemingly removing the exception translation from cinderclient to glance exceptions. However, for other reviewers, the handle_exceptions decorator in the next file does that as a general rule.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":true,"context_lines":[{"line_number":629,"context_line":"            client, attachment[\u0027id\u0027], connector_prop,"},{"line_number":630,"context_line":"            mountpoint\u003d\u0027glance_store\u0027)"},{"line_number":631,"context_line":"        self.volume_api.attachment_complete(client, attachment.id)"},{"line_number":632,"context_line":"        volume \u003d volume.manager.get(volume_id)"},{"line_number":633,"context_line":"        connection_info \u003d attachment.connection_info"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"54d8e2c2_3a4682d2","line":632,"in_reply_to":"5a109924_1b4528ea","updated":"2021-04-23 12:13:33.000000000","message":"Also the methods attachment_create, attachment_update ... have their try except blocks so it was redundant here hence removed.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":638,"context_line":"                conn\u003dconnection_info, use_multipath\u003duse_multipath)"},{"line_number":639,"context_line":"            if connection_info[\u0027driver_volume_type\u0027] \u003d\u003d \u0027nfs\u0027:"},{"line_number":640,"context_line":"                if volume.encrypted:"},{"line_number":641,"context_line":"                    self.volume_api.attachment_delete(client, attachment.id)"},{"line_number":642,"context_line":"                    msg \u003d (_(\u0027Encrypted volume creation for cinder nfs is not \u0027"},{"line_number":643,"context_line":"                             \u0027supported from glance_store. Failed to create \u0027"},{"line_number":644,"context_line":"                             \u0027volume %(volume_id)s\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"e7b5d821_50d43376","line":641,"updated":"2021-04-19 19:12:49.000000000","message":"The old code deleted the volume, but the new code does not. Does that mean we\u0027ll leak volumes now where we wouldn\u0027t have before?","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d447fd4c0c863ae98918beef912b7b546900ab77","unresolved":true,"context_lines":[{"line_number":638,"context_line":"                conn\u003dconnection_info, use_multipath\u003duse_multipath)"},{"line_number":639,"context_line":"            if connection_info[\u0027driver_volume_type\u0027] \u003d\u003d \u0027nfs\u0027:"},{"line_number":640,"context_line":"                if volume.encrypted:"},{"line_number":641,"context_line":"                    self.volume_api.attachment_delete(client, attachment.id)"},{"line_number":642,"context_line":"                    msg \u003d (_(\u0027Encrypted volume creation for cinder nfs is not \u0027"},{"line_number":643,"context_line":"                             \u0027supported from glance_store. Failed to create \u0027"},{"line_number":644,"context_line":"                             \u0027volume %(volume_id)s\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"04ab4e94_f7f7a8c4","line":641,"in_reply_to":"309afa7f_cc9c8be2","updated":"2021-04-28 11:32:11.000000000","message":"I agree completely and try my best not to but this is a single line change (with no functionality change) and will require separate review bandwidth hence included here.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"775571438a1837574e4ae28fb107e9c079d10bc3","unresolved":true,"context_lines":[{"line_number":638,"context_line":"                conn\u003dconnection_info, use_multipath\u003duse_multipath)"},{"line_number":639,"context_line":"            if connection_info[\u0027driver_volume_type\u0027] \u003d\u003d \u0027nfs\u0027:"},{"line_number":640,"context_line":"                if volume.encrypted:"},{"line_number":641,"context_line":"                    self.volume_api.attachment_delete(client, attachment.id)"},{"line_number":642,"context_line":"                    msg \u003d (_(\u0027Encrypted volume creation for cinder nfs is not \u0027"},{"line_number":643,"context_line":"                             \u0027supported from glance_store. Failed to create \u0027"},{"line_number":644,"context_line":"                             \u0027volume %(volume_id)s\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"309afa7f_cc9c8be2","line":641,"in_reply_to":"b9e4b143_8ff3389d","updated":"2021-04-27 13:29:25.000000000","message":"Ah, okay I see now. This is a good reason not to intermix cleanups with features, FWIW :)","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":true,"context_lines":[{"line_number":638,"context_line":"                conn\u003dconnection_info, use_multipath\u003duse_multipath)"},{"line_number":639,"context_line":"            if connection_info[\u0027driver_volume_type\u0027] \u003d\u003d \u0027nfs\u0027:"},{"line_number":640,"context_line":"                if volume.encrypted:"},{"line_number":641,"context_line":"                    self.volume_api.attachment_delete(client, attachment.id)"},{"line_number":642,"context_line":"                    msg \u003d (_(\u0027Encrypted volume creation for cinder nfs is not \u0027"},{"line_number":643,"context_line":"                             \u0027supported from glance_store. Failed to create \u0027"},{"line_number":644,"context_line":"                             \u0027volume %(volume_id)s\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"b9e4b143_8ff3389d","line":641,"in_reply_to":"e7b5d821_50d43376","updated":"2021-04-23 12:13:33.000000000","message":"While doing this change i realized we already delete the volume on L#893 so there was no need to delete the volume here (although it\u0027s safe) so removed the delete call.\nIt\u0027s just a correction on my last patch which added the delete call.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":804,"context_line":"        \"\"\""},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"        self._check_context(context, require_tenant\u003dTrue)"},{"line_number":807,"context_line":"        client \u003d self.get_cinderclient(context, version\u003d\u00273.54\u0027)"},{"line_number":808,"context_line":"        os_hash_value \u003d utils.get_hasher(hashing_algo, False)"},{"line_number":809,"context_line":"        checksum \u003d utils.get_hasher(\u0027md5\u0027, False)"},{"line_number":810,"context_line":"        bytes_written \u003d 0"}],"source_content_type":"text/x-python","patch_set":14,"id":"35d41111_e01f9df1","line":807,"updated":"2021-04-19 19:12:49.000000000","message":"Note for other reviewers, 3.54 is rocky:\n\nhttps://docs.openstack.org/cinder/rocky/contributor/api_microversion_history.html","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":642,"context_line":"                    msg \u003d (_(\u0027Encrypted volume creation for cinder nfs is not \u0027"},{"line_number":643,"context_line":"                             \u0027supported from glance_store. Failed to create \u0027"},{"line_number":644,"context_line":"                             \u0027volume %(volume_id)s\u0027)"},{"line_number":645,"context_line":"                           % {\u0027volume_id\u0027: volume.id})"},{"line_number":646,"context_line":"                    LOG.error(msg)"},{"line_number":647,"context_line":"                    raise exceptions.BackendException(msg)"},{"line_number":648,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"c32b123a_5e6cced9","line":645,"range":{"start_line":645,"start_character":43,"end_line":645,"end_character":52},"updated":"2021-06-04 06:47:33.000000000","message":"NIT: can use volume_id here.","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":false,"context_lines":[{"line_number":642,"context_line":"                    msg \u003d (_(\u0027Encrypted volume creation for cinder nfs is not \u0027"},{"line_number":643,"context_line":"                             \u0027supported from glance_store. Failed to create \u0027"},{"line_number":644,"context_line":"                             \u0027volume %(volume_id)s\u0027)"},{"line_number":645,"context_line":"                           % {\u0027volume_id\u0027: volume.id})"},{"line_number":646,"context_line":"                    LOG.error(msg)"},{"line_number":647,"context_line":"                    raise exceptions.BackendException(msg)"},{"line_number":648,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"bfde65b7_94c72306","line":645,"range":{"start_line":645,"start_character":43,"end_line":645,"end_character":52},"in_reply_to":"c32b123a_5e6cced9","updated":"2021-06-04 11:17:00.000000000","message":"Done","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"}],"glance_store/common/cinder_utils.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":84,"context_line":"            # Make a copy of the connector so we don\u0027t modify it by"},{"line_number":85,"context_line":"            # reference."},{"line_number":86,"context_line":"            _connector \u003d copy.deepcopy(connector)"},{"line_number":87,"context_line":"            _connector[\u0027mountpoint\u0027] \u003d mountpoint"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            attachment_ref \u003d client.attachments.create("}],"source_content_type":"text/x-python","patch_set":14,"id":"b86719c8_2a61ae0d","line":87,"updated":"2021-04-19 19:12:49.000000000","message":"Why the second variable? Keeping these separate just makes it easier to come back later and accidentally use one over the other. Is there any reason not to just do:\n\n connector \u003d copy.deepcopy(connector)\n\n?","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":true,"context_lines":[{"line_number":84,"context_line":"            # Make a copy of the connector so we don\u0027t modify it by"},{"line_number":85,"context_line":"            # reference."},{"line_number":86,"context_line":"            _connector \u003d copy.deepcopy(connector)"},{"line_number":87,"context_line":"            _connector[\u0027mountpoint\u0027] \u003d mountpoint"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            attachment_ref \u003d client.attachments.create("}],"source_content_type":"text/x-python","patch_set":14,"id":"dd9bc3e2_7d719140","line":87,"in_reply_to":"b86719c8_2a61ae0d","updated":"2021-04-23 12:13:33.000000000","message":"I\u0027m not sure regarding this. I don\u0027t see any issue doing it but I\u0027ve taken reference from nova but nova might be modifying/using it at other places that causes issue. I will try without the secondary dict.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":99,"context_line":"                              \u0027%(volume_id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":100,"context_line":"                              {\u0027volume_id\u0027: volume_id,"},{"line_number":101,"context_line":"                               \u0027msg\u0027: str(ex),"},{"line_number":102,"context_line":"                               \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @handle_exceptions"},{"line_number":105,"context_line":"    def attachment_get(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"50971328_8438626f","line":102,"updated":"2021-04-19 19:12:49.000000000","message":"AFAICT, this exception handler isn\u0027t tested. It\u0027s easy to typo a log statement and cause a failure at runtime if we don\u0027t actually run this code anywhere.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":true,"context_lines":[{"line_number":99,"context_line":"                              \u0027%(volume_id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":100,"context_line":"                              {\u0027volume_id\u0027: volume_id,"},{"line_number":101,"context_line":"                               \u0027msg\u0027: str(ex),"},{"line_number":102,"context_line":"                               \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @handle_exceptions"},{"line_number":105,"context_line":"    def attachment_get(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"31c14b09_0cf5b277","line":102,"in_reply_to":"50971328_8438626f","updated":"2021-04-23 12:13:33.000000000","message":"Agree, i will add the tests.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":121,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":122,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":123,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":124,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @handle_exceptions"},{"line_number":127,"context_line":"    def attachment_update(self, client, attachment_id, connector,"}],"source_content_type":"text/x-python","patch_set":14,"id":"220da41e_8ebbe198","line":124,"updated":"2021-04-19 19:12:49.000000000","message":"AFAICT, this exception handler isn\u0027t tested.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":122,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":123,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":124,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @handle_exceptions"},{"line_number":127,"context_line":"    def attachment_update(self, client, attachment_id, connector,"}],"source_content_type":"text/x-python","patch_set":14,"id":"a29fa809_ad988d07","line":124,"in_reply_to":"220da41e_8ebbe198","updated":"2021-04-23 12:13:33.000000000","message":"Done","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":147,"context_line":"            # Make a copy of the connector so we don\u0027t modify it by"},{"line_number":148,"context_line":"            # reference."},{"line_number":149,"context_line":"            _connector \u003d copy.deepcopy(connector)"},{"line_number":150,"context_line":"            _connector[\u0027mountpoint\u0027] \u003d mountpoint"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        try:"},{"line_number":153,"context_line":"            attachment_ref \u003d client.attachments.update("}],"source_content_type":"text/x-python","patch_set":14,"id":"f2b31819_80d88675","line":150,"updated":"2021-04-19 19:12:49.000000000","message":"Same argument as above.\n\nAlso, this case doesn\u0027t seem to be tested.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            # Make a copy of the connector so we don\u0027t modify it by"},{"line_number":148,"context_line":"            # reference."},{"line_number":149,"context_line":"            _connector \u003d copy.deepcopy(connector)"},{"line_number":150,"context_line":"            _connector[\u0027mountpoint\u0027] \u003d mountpoint"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        try:"},{"line_number":153,"context_line":"            attachment_ref \u003d client.attachments.update("}],"source_content_type":"text/x-python","patch_set":14,"id":"cabe9fd2_3e49016b","line":150,"in_reply_to":"f2b31819_80d88675","updated":"2021-04-23 12:13:33.000000000","message":"Done","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":159,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":160,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":161,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":162,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @handle_exceptions"},{"line_number":165,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d5,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3c02687b_3267b824","line":162,"updated":"2021-04-19 19:12:49.000000000","message":"AFAICT, this exception handler isn\u0027t tested.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":160,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":161,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":162,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @handle_exceptions"},{"line_number":165,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d5,"}],"source_content_type":"text/x-python","patch_set":14,"id":"85079627_9e33b557","line":162,"in_reply_to":"3c02687b_3267b824","updated":"2021-04-23 12:13:33.000000000","message":"Done","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":164,"context_line":"    @handle_exceptions"},{"line_number":165,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d5,"},{"line_number":166,"context_line":"                    retry_on_exception\u003dlambda e:"},{"line_number":167,"context_line":"                    type(e) \u003d\u003d cinder_apiclient.exceptions.InternalServerError)"},{"line_number":168,"context_line":"    def attachment_delete(self, client, attachment_id):"},{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            client.attachments.delete(attachment_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"0c4d033e_50a1ee9d","line":167,"updated":"2021-04-19 19:12:49.000000000","message":"I dunno about others, but I\u0027d much prefer to see this defined elsewhere and not in multiple lines inside a decorator :)","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    @handle_exceptions"},{"line_number":165,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d5,"},{"line_number":166,"context_line":"                    retry_on_exception\u003dlambda e:"},{"line_number":167,"context_line":"                    type(e) \u003d\u003d cinder_apiclient.exceptions.InternalServerError)"},{"line_number":168,"context_line":"    def attachment_delete(self, client, attachment_id):"},{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            client.attachments.delete(attachment_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"152d034b_9200f6ea","line":167,"in_reply_to":"0c4d033e_50a1ee9d","updated":"2021-04-23 12:13:33.000000000","message":"Done","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":174,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":175,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":176,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":177,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @handle_exceptions"},{"line_number":180,"context_line":"    def attachment_complete(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1b499571_747a78ff","line":177,"updated":"2021-04-19 19:12:49.000000000","message":"Same argument about a test.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":175,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":176,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":177,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @handle_exceptions"},{"line_number":180,"context_line":"    def attachment_complete(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"19dcc3a4_d4460909","line":177,"in_reply_to":"1b499571_747a78ff","updated":"2021-04-23 12:13:33.000000000","message":"Done","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":195,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":196,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":197,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":198,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":14,"id":"dd39449d_dcb29a59","line":198,"updated":"2021-04-19 19:12:49.000000000","message":"Also test here.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":196,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":197,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":198,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":14,"id":"5d28daf6_33a2ae0c","line":198,"in_reply_to":"dd39449d_dcb29a59","updated":"2021-04-23 12:13:33.000000000","message":"Done","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f0169a629cb9568e1644a23b7cc8b1ee3bf9c33","unresolved":true,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @handle_exceptions"},{"line_number":183,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d5,"},{"line_number":184,"context_line":"                    retry_on_exception\u003d_retry_on_internal_server_error)"},{"line_number":185,"context_line":"    def attachment_delete(self, client, attachment_id):"},{"line_number":186,"context_line":"        try:"},{"line_number":187,"context_line":"            client.attachments.delete(attachment_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"d61e8256_fd952d06","line":184,"updated":"2021-04-30 15:28:13.000000000","message":"I don\u0027t think that you\u0027ve got a test to make sure we actually retry do you?","commit_id":"c9c908488fc6709c236eb1604a54767fcc94cfe2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @handle_exceptions"},{"line_number":68,"context_line":"    def attachment_create(self, client, volume_id, connector\u003dNone,"},{"line_number":69,"context_line":"                          mountpoint\u003dNone, mode\u003dNone):"},{"line_number":70,"context_line":"        \"\"\"Create a volume attachment. This requires microversion \u003e\u003d 3.54."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        The attachment_create call was introduced in microversion 3.27. We"}],"source_content_type":"text/x-python","patch_set":16,"id":"6220b32f_9600797a","line":69,"range":{"start_line":69,"start_character":43,"end_line":69,"end_character":47},"updated":"2021-06-04 06:47:33.000000000","message":"NIT:\nmode is not explained in the docstring","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @handle_exceptions"},{"line_number":68,"context_line":"    def attachment_create(self, client, volume_id, connector\u003dNone,"},{"line_number":69,"context_line":"                          mountpoint\u003dNone, mode\u003dNone):"},{"line_number":70,"context_line":"        \"\"\"Create a volume attachment. This requires microversion \u003e\u003d 3.54."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        The attachment_create call was introduced in microversion 3.27. We"}],"source_content_type":"text/x-python","patch_set":16,"id":"7b967a19_6e68c9c7","line":69,"range":{"start_line":69,"start_character":43,"end_line":69,"end_character":47},"in_reply_to":"6220b32f_9600797a","updated":"2021-06-04 11:17:00.000000000","message":"Done","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":96,"context_line":"                # NOTE: It is unnecessary to output BadRequest(400) error log,"},{"line_number":97,"context_line":"                # because operators don\u0027t need to debug such cases."},{"line_number":98,"context_line":"                if getattr(ex, \u0027code\u0027, None) !\u003d 400:"},{"line_number":99,"context_line":"                    LOG.error(\u0027Create attachment failed for volume \u0027"},{"line_number":100,"context_line":"                              \u0027%(volume_id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":101,"context_line":"                              {\u0027volume_id\u0027: volume_id,"},{"line_number":102,"context_line":"                               \u0027msg\u0027: str(ex),"},{"line_number":103,"context_line":"                               \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @handle_exceptions"},{"line_number":106,"context_line":"    def attachment_get(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"43b95b7c_1d8de63d","line":103,"range":{"start_line":99,"start_character":29,"end_line":103,"end_character":66},"updated":"2021-06-04 06:47:33.000000000","message":"Need to use _LE for translation??","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                # NOTE: It is unnecessary to output BadRequest(400) error log,"},{"line_number":97,"context_line":"                # because operators don\u0027t need to debug such cases."},{"line_number":98,"context_line":"                if getattr(ex, \u0027code\u0027, None) !\u003d 400:"},{"line_number":99,"context_line":"                    LOG.error(\u0027Create attachment failed for volume \u0027"},{"line_number":100,"context_line":"                              \u0027%(volume_id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":101,"context_line":"                              {\u0027volume_id\u0027: volume_id,"},{"line_number":102,"context_line":"                               \u0027msg\u0027: str(ex),"},{"line_number":103,"context_line":"                               \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @handle_exceptions"},{"line_number":106,"context_line":"    def attachment_get(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"802fc998_a69f7aaa","line":103,"range":{"start_line":99,"start_character":29,"end_line":103,"end_character":66},"in_reply_to":"43b95b7c_1d8de63d","updated":"2021-06-04 11:17:00.000000000","message":"Done","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":118,"context_line":"            return attachment_ref"},{"line_number":119,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":120,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":121,"context_line":"                LOG.error(\u0027Show attachment failed for attachment \u0027"},{"line_number":122,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":123,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":124,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":125,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @handle_exceptions"},{"line_number":128,"context_line":"    def attachment_update(self, client, attachment_id, connector,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5addb43f_99dabc69","line":125,"range":{"start_line":121,"start_character":16,"end_line":125,"end_character":62},"updated":"2021-06-04 06:47:33.000000000","message":"ditto","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            return attachment_ref"},{"line_number":119,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":120,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":121,"context_line":"                LOG.error(\u0027Show attachment failed for attachment \u0027"},{"line_number":122,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":123,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":124,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":125,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @handle_exceptions"},{"line_number":128,"context_line":"    def attachment_update(self, client, attachment_id, connector,"}],"source_content_type":"text/x-python","patch_set":16,"id":"74fafa4d_2a1e6b7c","line":125,"range":{"start_line":121,"start_character":16,"end_line":125,"end_character":62},"in_reply_to":"5addb43f_99dabc69","updated":"2021-06-04 11:17:00.000000000","message":"Done","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":152,"context_line":"            return attachment_ref"},{"line_number":153,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":154,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":155,"context_line":"                LOG.error(\u0027Update attachment failed for attachment \u0027"},{"line_number":156,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":157,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":158,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":159,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @handle_exceptions"},{"line_number":162,"context_line":"    def attachment_complete(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"82973d74_3e1a93f8","line":159,"range":{"start_line":155,"start_character":16,"end_line":159,"end_character":62},"updated":"2021-06-04 06:47:33.000000000","message":"ditto, also why BadRequest is not excluded here as well?","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":true,"context_lines":[{"line_number":152,"context_line":"            return attachment_ref"},{"line_number":153,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":154,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":155,"context_line":"                LOG.error(\u0027Update attachment failed for attachment \u0027"},{"line_number":156,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":157,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":158,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":159,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @handle_exceptions"},{"line_number":162,"context_line":"    def attachment_complete(self, client, attachment_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"a4668289_4faeddb8","line":159,"range":{"start_line":155,"start_character":16,"end_line":159,"end_character":62},"in_reply_to":"82973d74_3e1a93f8","updated":"2021-06-04 11:17:00.000000000","message":"I think i missed it while referring to nova.\nSo we provide the volume id incase of nova attach hence that method had special handling for 400 but incase of glance, user doesn\u0027t create the volume so there\u0027s no chance of user providing a wrong volume id hence we don\u0027t need the 400 case in attachment_create as well.\nIncase of attachment_update, we get the attachment_id from cinder and connector from os_brick so again no user provided values.\nThanks for catching this.","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":173,"context_line":"            client.attachments.complete(attachment_id)"},{"line_number":174,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":175,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":176,"context_line":"                LOG.error(\u0027Complete attachment failed for attachment \u0027"},{"line_number":177,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":178,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":179,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":180,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @handle_exceptions"},{"line_number":183,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d5,"}],"source_content_type":"text/x-python","patch_set":16,"id":"b94e309b_d07b91bc","line":180,"range":{"start_line":176,"start_character":16,"end_line":180,"end_character":62},"updated":"2021-06-04 06:47:33.000000000","message":"ditto","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            client.attachments.complete(attachment_id)"},{"line_number":174,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":175,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":176,"context_line":"                LOG.error(\u0027Complete attachment failed for attachment \u0027"},{"line_number":177,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":178,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":179,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":180,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @handle_exceptions"},{"line_number":183,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d5,"}],"source_content_type":"text/x-python","patch_set":16,"id":"e7bfa00b_32583090","line":180,"range":{"start_line":176,"start_character":16,"end_line":180,"end_character":62},"in_reply_to":"b94e309b_d07b91bc","updated":"2021-06-04 11:17:00.000000000","message":"Done","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":187,"context_line":"            client.attachments.delete(attachment_id)"},{"line_number":188,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":189,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":190,"context_line":"                LOG.error(\u0027Delete attachment failed for attachment \u0027"},{"line_number":191,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":192,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":193,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":194,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":16,"id":"ee677e79_807f4151","line":194,"range":{"start_line":190,"start_character":16,"end_line":194,"end_character":62},"updated":"2021-06-04 06:47:33.000000000","message":"ditto","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            client.attachments.delete(attachment_id)"},{"line_number":188,"context_line":"        except cinder_exception.ClientException as ex:"},{"line_number":189,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":190,"context_line":"                LOG.error(\u0027Delete attachment failed for attachment \u0027"},{"line_number":191,"context_line":"                          \u0027%(id)s. Error: %(msg)s Code: %(code)s\u0027,"},{"line_number":192,"context_line":"                          {\u0027id\u0027: attachment_id,"},{"line_number":193,"context_line":"                           \u0027msg\u0027: str(ex),"},{"line_number":194,"context_line":"                           \u0027code\u0027: getattr(ex, \u0027code\u0027, None)})"}],"source_content_type":"text/x-python","patch_set":16,"id":"eece9390_a51abc68","line":194,"range":{"start_line":190,"start_character":16,"end_line":194,"end_character":62},"in_reply_to":"ee677e79_807f4151","updated":"2021-06-04 11:17:00.000000000","message":"Done","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"}],"glance_store/tests/unit/common/test_cinder_utils.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f17f33eb40a7f3f673c13608908a12768ca5ca6a","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        self.fake_client.attachments.create.assert_called_once_with("},{"line_number":66,"context_line":"            self.fake_vol_id, fake_new_connector, mode\u003dNone)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_attachment_show(self):"},{"line_number":69,"context_line":"        self.volume_api.attachment_get(self.fake_client, self.fake_attach_id)"},{"line_number":70,"context_line":"        self.fake_client.attachments.show.assert_called_once_with("},{"line_number":71,"context_line":"            self.fake_attach_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"38afecca_e76a0893","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":28},"updated":"2021-04-19 19:12:49.000000000","message":"Can you change this to test_attachment_get()? At first I thought there was no test for attachment_get() based on the test names here.","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"61f3c2bff9781d57c601f757169f267bd94b2dcf","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.fake_client.attachments.create.assert_called_once_with("},{"line_number":66,"context_line":"            self.fake_vol_id, fake_new_connector, mode\u003dNone)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_attachment_show(self):"},{"line_number":69,"context_line":"        self.volume_api.attachment_get(self.fake_client, self.fake_attach_id)"},{"line_number":70,"context_line":"        self.fake_client.attachments.show.assert_called_once_with("},{"line_number":71,"context_line":"            self.fake_attach_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7d58feed_52e8d135","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":28},"in_reply_to":"38afecca_e76a0893","updated":"2021-04-23 12:13:33.000000000","message":"Done","commit_id":"433b9f36bedf7de0da657697d4a9a949fbbeffb2"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"995f2c3330d805a684d23acdce988ee352f4bcb4","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"30fd427b_7bdb27b9","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2021-06-04 06:47:33.000000000","message":"Add copyright statement","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5c7372b4c2bb288438ff4dbd5e4d9ac3fe1abd06","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"3d64a288_74f99f6b","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"in_reply_to":"30fd427b_7bdb27b9","updated":"2021-06-04 11:17:00.000000000","message":"Done","commit_id":"45377927c0c69348a04462364615cf2fc2ad01d1"}],"lower-constraints.txt":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"76a9bdf87421313da658a7106badab4daacf5267","unresolved":true,"context_lines":[{"line_number":72,"context_line":"requestsexceptions\u003d\u003d1.4.0"},{"line_number":73,"context_line":"requests-mock\u003d\u003d1.2.0"},{"line_number":74,"context_line":"restructuredtext-lint\u003d\u003d1.1.3"},{"line_number":75,"context_line":"retrying\u003d\u003d1.3.3"},{"line_number":76,"context_line":"rfc3986\u003d\u003d1.1.0"},{"line_number":77,"context_line":"six\u003d\u003d1.11.0"},{"line_number":78,"context_line":"smmap2\u003d\u003d2.0.3"}],"source_content_type":"text/plain","patch_set":20,"id":"11176e8e_f114da55","line":75,"updated":"2021-07-23 16:26:14.000000000","message":"This entire file should be gone from master now. I think this needs a rebase?","commit_id":"5a71ff1f19089f0b8fe111e40b2eb33bc05b6841"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"840551325c6e4f42adb361d38ef25243404c2c73","unresolved":true,"context_lines":[{"line_number":72,"context_line":"requestsexceptions\u003d\u003d1.4.0"},{"line_number":73,"context_line":"requests-mock\u003d\u003d1.2.0"},{"line_number":74,"context_line":"restructuredtext-lint\u003d\u003d1.1.3"},{"line_number":75,"context_line":"retrying\u003d\u003d1.3.3"},{"line_number":76,"context_line":"rfc3986\u003d\u003d1.1.0"},{"line_number":77,"context_line":"six\u003d\u003d1.11.0"},{"line_number":78,"context_line":"smmap2\u003d\u003d2.0.3"}],"source_content_type":"text/plain","patch_set":20,"id":"3fbdac85_2d52fdef","line":75,"in_reply_to":"11176e8e_f114da55","updated":"2021-07-23 16:51:02.000000000","message":"Sorry, forgot it\u0027s not removed from glance_store, ignore this :/","commit_id":"5a71ff1f19089f0b8fe111e40b2eb33bc05b6841"}]}
