)]}'
{"cinder/api/contrib/types_extra_specs.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d64b13d17437f653957383eed216d792b6793d10","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if id not in body:"},{"line_number":100,"context_line":"            expl \u003d _(\u0027Request body and URI mismatch\u0027)"},{"line_number":101,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        db.volume_type_extra_specs_update_or_create(context,"},{"line_number":104,"context_line":"                                                    type_id,"},{"line_number":105,"context_line":"                                                    body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d509b183","line":102,"updated":"2019-11-22 13:29:43.000000000","message":"We also need to validate store_id before updating extra_specs of any existing volume type","commit_id":"044ffc21cef4964dc88d7227478cc1b03f68077b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"10fabf177c27b91fbf56f393cb5e5f05b1483e8c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if id not in body:"},{"line_number":100,"context_line":"            expl \u003d _(\u0027Request body and URI mismatch\u0027)"},{"line_number":101,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        db.volume_type_extra_specs_update_or_create(context,"},{"line_number":104,"context_line":"                                                    type_id,"},{"line_number":105,"context_line":"                                                    body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_bbe89415","line":102,"in_reply_to":"3fa7e38b_d509b183","updated":"2019-11-25 06:38:14.000000000","message":"If you try to update the value associated with volume type extra specs it will always call POST method, it will never come here as it will call create method of controller which is at line @67","commit_id":"044ffc21cef4964dc88d7227478cc1b03f68077b"}],"cinder/exception.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b985857eb4f078ea33da479b0b07498c15a7acd5","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    safe \u003d True"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"class InvalidStore(NotFound):"},{"line_number":335,"context_line":"    message \u003d _(\"Store %(store_id)s not enabled in glance.\")"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_12cb17a4","line":334,"range":{"start_line":334,"start_character":6,"end_line":334,"end_character":18},"updated":"2019-12-07 22:51:06.000000000","message":"We have some other Glance* exceptions.  Let\u0027s use the prefix \u0027GlanceStore\u0027 for the exceptions related to this feature.  I suggest calling this \u0027GlanceStoreNotFound\u0027.","commit_id":"1fea238f9faa4b76edf7c25237a01652cc86fa12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b985857eb4f078ea33da479b0b07498c15a7acd5","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    message \u003d _(\"Store %(store_id)s not enabled in glance.\")"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"class ReadOnlyStore(NotFound):"},{"line_number":339,"context_line":"    message \u003d _(\"Store %(store_id)s is read-only in glance.\")"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_92b62725","line":338,"range":{"start_line":338,"start_character":6,"end_line":338,"end_character":29},"updated":"2019-12-07 22:51:06.000000000","message":"I think name this \u0027GlanceStoreReadOnly\u0027 and make it a subclass of Invalid (which has a 400 code).","commit_id":"1fea238f9faa4b76edf7c25237a01652cc86fa12"}],"cinder/image/glance.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9af41bc94b9c07578dbe514d0ba23e61854833c5","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        try:"},{"line_number":299,"context_line":"            return self._client.call(context,"},{"line_number":300,"context_line":"                                     \u0027get_stores_info\u0027)"},{"line_number":301,"context_line":"        except Exception:"},{"line_number":302,"context_line":"            _reraise_translated_exception()"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def show(self, context, image_id):"},{"line_number":305,"context_line":"        \"\"\"Returns a dict with image data for the given opaque image id.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_7f6d532d","line":302,"range":{"start_line":301,"start_character":8,"end_line":302,"end_character":43},"updated":"2019-11-21 07:24:23.000000000","message":"IMO this should be \nexcept glanceclient.exc.HTTPNotFound:\n    raise exception.MultiStoreNotEnabled()","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"55c14d13e72607af736cabd1d8c83573de527aef","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        try:"},{"line_number":299,"context_line":"            return self._client.call(context,"},{"line_number":300,"context_line":"                                     \u0027get_stores_info\u0027)"},{"line_number":301,"context_line":"        except Exception:"},{"line_number":302,"context_line":"            _reraise_translated_exception()"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def show(self, context, image_id):"},{"line_number":305,"context_line":"        \"\"\"Returns a dict with image data for the given opaque image id.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_c578382c","line":302,"range":{"start_line":301,"start_character":8,"end_line":302,"end_character":43},"in_reply_to":"3fa7e38b_7f6d532d","updated":"2019-11-22 05:48:21.000000000","message":"I have removed this exception, so no need to change this now.","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"}],"cinder/image/image_utils.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ce555e9895c9083f3e70d51049b8e3aca72149be","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    stores_info \u003d image_service.get_stores(context)[\u0027stores\u0027]"},{"line_number":95,"context_line":"    for info in stores_info:"},{"line_number":96,"context_line":"        if image_service_store_id \u003d\u003d info[\u0027id\u0027]:"},{"line_number":97,"context_line":"            if info.get(\u0027read-only\u0027):"},{"line_number":98,"context_line":"                raise exception.ReadOnlyStore(store_id\u003dimage_service_store_id)"},{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_efccbf35","line":97,"range":{"start_line":97,"start_character":15,"end_line":97,"end_character":36},"updated":"2019-11-29 15:12:44.000000000","message":"so we will never get a store with info[\u0027read-only\u0027] \u003d False ?","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0986426f019327748a924ca39e261d86cb84834","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    stores_info \u003d image_service.get_stores(context)[\u0027stores\u0027]"},{"line_number":95,"context_line":"    for info in stores_info:"},{"line_number":96,"context_line":"        if image_service_store_id \u003d\u003d info[\u0027id\u0027]:"},{"line_number":97,"context_line":"            if info.get(\u0027read-only\u0027):"},{"line_number":98,"context_line":"                raise exception.ReadOnlyStore(store_id\u003dimage_service_store_id)"},{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_d5462651","line":97,"range":{"start_line":97,"start_character":15,"end_line":97,"end_character":36},"in_reply_to":"3fa7e38b_efccbf35","updated":"2019-12-02 08:18:20.000000000","message":"No","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b06cb0e5c938e09373afb1c53d30e34bb372ed44","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    stores_info \u003d image_service.get_stores(context)[\u0027stores\u0027]"},{"line_number":95,"context_line":"    for info in stores_info:"},{"line_number":96,"context_line":"        if image_service_store_id \u003d\u003d info[\u0027id\u0027]:"},{"line_number":97,"context_line":"            if info.get(\u0027read-only\u0027) \u003d\u003d \"true\":"},{"line_number":98,"context_line":"                raise exception.ReadOnlyStore(store_id\u003dimage_service_store_id)"},{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_7804f7c5","line":97,"range":{"start_line":97,"start_character":36,"end_line":97,"end_character":46},"updated":"2019-12-03 08:57:12.000000000","message":"so the return value will always be a string \"true\" ?\nif you plan to do an update then i would prefer \"strutils.bool_from_string(info.get(\u0027read-only\u0027))\" here.","commit_id":"61b283c99b105360295d0e7d56fb2524995bedca"}],"cinder/tests/unit/api/contrib/test_types_extra_specs.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ce555e9895c9083f3e70d51049b8e3aca72149be","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                \u0027id\u0027: \u0027cheap\u0027"},{"line_number":198,"context_line":"            }, {"},{"line_number":199,"context_line":"                \u0027id\u0027: \u0027read_only_store\u0027,"},{"line_number":200,"context_line":"                \u0027read-only\u0027: \u0027true\u0027"},{"line_number":201,"context_line":"            }]"},{"line_number":202,"context_line":"        }"},{"line_number":203,"context_line":"        body \u003d {\"extra_specs\": {\"image_service:store_id\": \"read_only_store\"}}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_afffa733","line":200,"range":{"start_line":200,"start_character":29,"end_line":200,"end_character":35},"updated":"2019-11-29 15:12:44.000000000","message":"if we set this as \u0027false\u0027 then also the validation will return same (exception.ReadOnlyStore),\nI\u0027m not sure but shouldn\u0027t we have boolean values instead of string for this case","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0986426f019327748a924ca39e261d86cb84834","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                \u0027id\u0027: \u0027cheap\u0027"},{"line_number":198,"context_line":"            }, {"},{"line_number":199,"context_line":"                \u0027id\u0027: \u0027read_only_store\u0027,"},{"line_number":200,"context_line":"                \u0027read-only\u0027: \u0027true\u0027"},{"line_number":201,"context_line":"            }]"},{"line_number":202,"context_line":"        }"},{"line_number":203,"context_line":"        body \u003d {\"extra_specs\": {\"image_service:store_id\": \"read_only_store\"}}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_3561bad5","line":200,"range":{"start_line":200,"start_character":29,"end_line":200,"end_character":35},"in_reply_to":"3fa7e38b_afffa733","updated":"2019-12-02 08:18:20.000000000","message":"This is what I get in actual response from glance, may be need to change the implementation from the controller to handle this.","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"}],"cinder/tests/unit/utils.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a0e3b2f0de0290c20235cd2379833ae0aba15656","unresolved":false,"context_lines":[{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class DotDict(dict):"},{"line_number":42,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":43,"context_line":"        super(DotDict, self).__init__(*args, **kwargs)"},{"line_number":44,"context_line":"        for arg in args:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_3d91ce9c","line":41,"updated":"2020-01-14 08:24:16.000000000","message":"Why don\u0027t you use munch library here? It\u0027s should be OK to add it to test-requiremennts","commit_id":"89a318d407504c4c46e768047a1ac028af155bb1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9633838884df2bc0eaaa6f82a53d72ce83afc0db","unresolved":false,"context_lines":[{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class DotDict(dict):"},{"line_number":42,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":43,"context_line":"        super(DotDict, self).__init__(*args, **kwargs)"},{"line_number":44,"context_line":"        for arg in args:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_973160f1","line":41,"in_reply_to":"3fa7e38b_2a561e60","updated":"2020-01-20 15:57:38.000000000","message":"I hate to do this to you, but Eric is right.  We\u0027ve had bugs in the past that weren\u0027t caught because unit tests were passing around a dict or something, whereas what the driver is actually going to get is an oslo versioned object.  So it\u0027s going to be hard to get +2s on new code that doesn\u0027t use OVOs.\n\nThe function cinder.tests.unit.fake_volume.fake_volume_obj() will give you a OVO volume to work with.  See what happens with that.\n\nThanks!","commit_id":"89a318d407504c4c46e768047a1ac028af155bb1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"6fcee4ab3b7ffc3cf2b116484db650213f8d2918","unresolved":false,"context_lines":[{"line_number":38,"context_line":"CONF \u003d cfg.CONF"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class DotDict(dict):"},{"line_number":42,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":43,"context_line":"        super(DotDict, self).__init__(*args, **kwargs)"},{"line_number":44,"context_line":"        for arg in args:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_2a561e60","line":41,"in_reply_to":"3fa7e38b_3d91ce9c","updated":"2020-01-17 16:44:34.000000000","message":"Please don\u0027t add DotDict or use another library for this -- this is only used for making volume objects, and there are unit test methods that will do that for you.","commit_id":"89a318d407504c4c46e768047a1ac028af155bb1"}],"cinder/tests/unit/volume/drivers/test_spdk.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"87fd810c9f273d3421987ceb357a6e247c1da9ec","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                               self.jsonrpcclient.call):"},{"line_number":741,"context_line":"            provider_location \u003d \"127.0.0.1:3262 RDMA 2016-06.io.spdk:cnode2\""},{"line_number":742,"context_line":"            volume \u003d test_utils.create_volume("},{"line_number":743,"context_line":"                self._context, volume_type_id\u003dfake.VOLUME_TYPE_ID,"},{"line_number":744,"context_line":"                updated_at\u003dself.updated_at,"},{"line_number":745,"context_line":"                provider_location\u003dprovider_location)"},{"line_number":746,"context_line":"            extra_specs \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_c257e7f4","line":743,"range":{"start_line":743,"start_character":46,"end_line":743,"end_character":65},"updated":"2020-01-23 07:03:06.000000000","message":"I\u0027m not sure regarding the impact of creating a \u0027real\u0027 volume type with the fake constants we use.\nThis might impact other tests using this as a constant to create a volume directly into db (or not)\nmaybe creating a volume type with random UUID and using it here would be better","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"58f25f62009ffef339ab1f889c24703f49bc887b","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                               self.jsonrpcclient.call):"},{"line_number":741,"context_line":"            provider_location \u003d \"127.0.0.1:3262 RDMA 2016-06.io.spdk:cnode2\""},{"line_number":742,"context_line":"            volume \u003d test_utils.create_volume("},{"line_number":743,"context_line":"                self._context, volume_type_id\u003dfake.VOLUME_TYPE_ID,"},{"line_number":744,"context_line":"                updated_at\u003dself.updated_at,"},{"line_number":745,"context_line":"                provider_location\u003dprovider_location)"},{"line_number":746,"context_line":"            extra_specs \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_e2c0e37f","line":743,"range":{"start_line":743,"start_character":46,"end_line":743,"end_character":65},"in_reply_to":"3fa7e38b_02909f95","updated":"2020-01-23 07:23:35.000000000","message":"Yep, but i\u0027ve seen previous cases where tests were using other tests resources (in general, not proper cleanup) so raised the concern.","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"1b914dba237fb49724283b68339e7d3870e177eb","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                               self.jsonrpcclient.call):"},{"line_number":741,"context_line":"            provider_location \u003d \"127.0.0.1:3262 RDMA 2016-06.io.spdk:cnode2\""},{"line_number":742,"context_line":"            volume \u003d test_utils.create_volume("},{"line_number":743,"context_line":"                self._context, volume_type_id\u003dfake.VOLUME_TYPE_ID,"},{"line_number":744,"context_line":"                updated_at\u003dself.updated_at,"},{"line_number":745,"context_line":"                provider_location\u003dprovider_location)"},{"line_number":746,"context_line":"            extra_specs \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_02909f95","line":743,"range":{"start_line":743,"start_character":46,"end_line":743,"end_character":65},"in_reply_to":"3fa7e38b_c257e7f4","updated":"2020-01-23 07:11:57.000000000","message":"I don\u0027t think so there will be any impact as these resources will be cleaned after every iteration of test. If there have been impact it could have been resulted in failure as I have ran these tests in local environment more than 10 times.","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"87fd810c9f273d3421987ceb357a6e247c1da9ec","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            extra_specs \u003d {"},{"line_number":747,"context_line":"                \u0027image_service:store_id\u0027: \u0027fake-store\u0027"},{"line_number":748,"context_line":"            }"},{"line_number":749,"context_line":"            test_utils.create_volume_type(self._context.elevated(),"},{"line_number":750,"context_line":"                                          id\u003dfake.VOLUME_TYPE_ID,"},{"line_number":751,"context_line":"                                          name\u003d\"test_type\","},{"line_number":752,"context_line":"                                          extra_specs\u003dextra_specs)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":755,"context_line":"            volume_get.return_value \u003d volume"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_ba7f99dc","line":752,"range":{"start_line":749,"start_character":0,"end_line":752,"end_character":66},"updated":"2020-01-23 07:03:06.000000000","message":"this should\u0027ve been created before the volume creation.\nthere doesn\u0027t seem to be a check for volume type in test_utils.create_volume method","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"58f25f62009ffef339ab1f889c24703f49bc887b","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            extra_specs \u003d {"},{"line_number":747,"context_line":"                \u0027image_service:store_id\u0027: \u0027fake-store\u0027"},{"line_number":748,"context_line":"            }"},{"line_number":749,"context_line":"            test_utils.create_volume_type(self._context.elevated(),"},{"line_number":750,"context_line":"                                          id\u003dfake.VOLUME_TYPE_ID,"},{"line_number":751,"context_line":"                                          name\u003d\"test_type\","},{"line_number":752,"context_line":"                                          extra_specs\u003dextra_specs)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":755,"context_line":"            volume_get.return_value \u003d volume"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_c2b36734","line":752,"range":{"start_line":749,"start_character":0,"end_line":752,"end_character":66},"in_reply_to":"3fa7e38b_a288ab6b","updated":"2020-01-23 07:23:35.000000000","message":"Ok, the general idea is we create a volume type first and then create a volume from it.\nMaybe we need some refactoring there also.","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"1b914dba237fb49724283b68339e7d3870e177eb","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            extra_specs \u003d {"},{"line_number":747,"context_line":"                \u0027image_service:store_id\u0027: \u0027fake-store\u0027"},{"line_number":748,"context_line":"            }"},{"line_number":749,"context_line":"            test_utils.create_volume_type(self._context.elevated(),"},{"line_number":750,"context_line":"                                          id\u003dfake.VOLUME_TYPE_ID,"},{"line_number":751,"context_line":"                                          name\u003d\"test_type\","},{"line_number":752,"context_line":"                                          extra_specs\u003dextra_specs)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":755,"context_line":"            volume_get.return_value \u003d volume"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_a288ab6b","line":752,"range":{"start_line":749,"start_character":0,"end_line":752,"end_character":66},"in_reply_to":"3fa7e38b_ba7f99dc","updated":"2020-01-23 07:11:57.000000000","message":"I have referred this from other tests, so decided to follow same pattern.","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"}],"cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a860a6eaeae27cbf2adabd4056b8468e82dd9fc3","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"            session\u003dsession,"},{"line_number":1212,"context_line":"            host\u003dself._config.vmware_host_ip,"},{"line_number":1213,"context_line":"            port\u003dself._config.vmware_host_port,"},{"line_number":1214,"context_line":"            store_id\u003d\u0027fake-store\u0027,"},{"line_number":1215,"context_line":"            vm\u003dbacking,"},{"line_number":1216,"context_line":"            vmdk_file_path\u003dvmdk_file_path,"},{"line_number":1217,"context_line":"            vmdk_size\u003dvolume[\u0027size\u0027] * units.Gi,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_a529e7f1","line":1214,"updated":"2019-12-19 23:25:04.000000000","message":"This is being passed to oslo_vmware.image_transfer.upload_image(), but that function is calling .update() on the image_service that\u0027s passed in -- which is fine, it\u0027s our image_service, but the store_id isn\u0027t being pulled out of the kwargs and passed to image_service.update().\n\nI think we\u0027re going to have to modify oslo_vmware.image_transfer.upload_image *or* pass in an image_service defined in this file that wraps the update method so that the store_id is already defined for the image service and doesn\u0027t have to be passed in as a parameter.\n\nI don\u0027t want that to hold up this patch, though.  We may have to file a bug and round up some vmware people to figure out how to best fix it.","commit_id":"97f2062d785d49e60d2f97921234202f344154e8"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"890b50948e63d2eed5f7c7d8bbff746ec5e9a307","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"            session\u003dsession,"},{"line_number":1212,"context_line":"            host\u003dself._config.vmware_host_ip,"},{"line_number":1213,"context_line":"            port\u003dself._config.vmware_host_port,"},{"line_number":1214,"context_line":"            store_id\u003d\u0027fake-store\u0027,"},{"line_number":1215,"context_line":"            vm\u003dbacking,"},{"line_number":1216,"context_line":"            vmdk_file_path\u003dvmdk_file_path,"},{"line_number":1217,"context_line":"            vmdk_size\u003dvolume[\u0027size\u0027] * units.Gi,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_fed76c4f","line":1214,"in_reply_to":"3fa7e38b_a529e7f1","updated":"2019-12-20 06:29:32.000000000","message":"https://bugs.launchpad.net/oslo.vmware/+bug/1857094","commit_id":"97f2062d785d49e60d2f97921234202f344154e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5344ad05351445838989e393d61a09508c00db3d","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"            session\u003dsession,"},{"line_number":1212,"context_line":"            host\u003dself._config.vmware_host_ip,"},{"line_number":1213,"context_line":"            port\u003dself._config.vmware_host_port,"},{"line_number":1214,"context_line":"            store_id\u003d\u0027fake-store\u0027,"},{"line_number":1215,"context_line":"            vm\u003dbacking,"},{"line_number":1216,"context_line":"            vmdk_file_path\u003dvmdk_file_path,"},{"line_number":1217,"context_line":"            vmdk_size\u003dvolume[\u0027size\u0027] * units.Gi,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_e8aae017","line":1214,"updated":"2020-01-08 13:20:01.000000000","message":"This test shows that the Cinder vmware driver is sending the correct info, so I don\u0027t think anything will need to be changed once https://bugs.launchpad.net/oslo.vmware/+bug/1857094 is fixed.  It will just be a matter of updating the requirements file to use the appropriate oslo.vmware release.","commit_id":"7310cb9ac43887128d204d5ffc1964ce946db120"}],"cinder/volume/driver.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9af41bc94b9c07578dbe514d0ba23e61854833c5","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.volume import driver_utils"},{"line_number":37,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":38,"context_line":"from cinder.volume import throttling"},{"line_number":39,"context_line":"from cinder.volume import volume_types"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_3fd6fb28","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":38},"updated":"2019-11-21 07:24:23.000000000","message":"same","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9af41bc94b9c07578dbe514d0ba23e61854833c5","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        attach_info, volume \u003d self._attach_volume(context, volume, properties)"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        # retrieve store information from extra-specs"},{"line_number":898,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":899,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"        try:"},{"line_number":902,"context_line":"            image_utils.upload_volume(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_7f1233ff","line":899,"range":{"start_line":898,"start_character":0,"end_line":899,"end_character":64},"updated":"2019-11-21 07:24:23.000000000","message":"volume.volume_type.extra_specs.get(\u0027image_service:store_id\u0027)","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"55c14d13e72607af736cabd1d8c83573de527aef","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        attach_info, volume \u003d self._attach_volume(context, volume, properties)"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        # retrieve store information from extra-specs"},{"line_number":898,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":899,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"        try:"},{"line_number":902,"context_line":"            image_utils.upload_volume(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_8588006b","line":899,"range":{"start_line":898,"start_character":0,"end_line":899,"end_character":64},"in_reply_to":"3fa7e38b_7f1233ff","updated":"2019-11-22 05:48:21.000000000","message":"Done","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9af41bc94b9c07578dbe514d0ba23e61854833c5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from cinder import utils"},{"line_number":36,"context_line":"from cinder.volume import configuration"},{"line_number":37,"context_line":"from cinder.volume import driver"},{"line_number":38,"context_line":"from cinder.volume import volume_types"},{"line_number":39,"context_line":"from cinder.volume import volume_utils"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_bf1c2b13","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":38},"updated":"2019-11-21 07:24:23.000000000","message":"this also won\u0027t be needed","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"55c14d13e72607af736cabd1d8c83573de527aef","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from cinder import utils"},{"line_number":36,"context_line":"from cinder.volume import configuration"},{"line_number":37,"context_line":"from cinder.volume import driver"},{"line_number":38,"context_line":"from cinder.volume import volume_types"},{"line_number":39,"context_line":"from cinder.volume import volume_utils"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_2537ccb2","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":38},"in_reply_to":"3fa7e38b_bf1c2b13","updated":"2019-11-22 05:48:21.000000000","message":"Done","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"af42a653be07cd6f8e71b515fafaf33e80009bb9","unresolved":false,"context_lines":[{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":511,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":512,"context_line":"        # retrieve store information from extra-specs"},{"line_number":513,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":514,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        image_utils.upload_volume(context,"},{"line_number":517,"context_line":"                                  image_service,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_4b46ebc2","line":514,"range":{"start_line":512,"start_character":0,"end_line":514,"end_character":64},"updated":"2019-11-14 18:36:53.000000000","message":"same","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"55c14d13e72607af736cabd1d8c83573de527aef","unresolved":false,"context_lines":[{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":511,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":512,"context_line":"        # retrieve store information from extra-specs"},{"line_number":513,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":514,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        image_utils.upload_volume(context,"},{"line_number":517,"context_line":"                                  image_service,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_453a0898","line":514,"range":{"start_line":512,"start_character":0,"end_line":514,"end_character":64},"in_reply_to":"3fa7e38b_4b46ebc2","updated":"2019-11-22 05:48:21.000000000","message":"Done","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9af41bc94b9c07578dbe514d0ba23e61854833c5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"from cinder import utils"},{"line_number":44,"context_line":"from cinder.volume import configuration"},{"line_number":45,"context_line":"from cinder.volume import driver"},{"line_number":46,"context_line":"from cinder.volume import volume_types"},{"line_number":47,"context_line":"from cinder.volume import volume_utils"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_1fd3ff39","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":38},"updated":"2019-11-21 07:24:23.000000000","message":"not needed","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"55c14d13e72607af736cabd1d8c83573de527aef","unresolved":false,"context_lines":[{"line_number":43,"context_line":"from cinder import utils"},{"line_number":44,"context_line":"from cinder.volume import configuration"},{"line_number":45,"context_line":"from cinder.volume import driver"},{"line_number":46,"context_line":"from cinder.volume import volume_types"},{"line_number":47,"context_line":"from cinder.volume import volume_utils"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_65bb840e","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":38},"in_reply_to":"3fa7e38b_1fd3ff39","updated":"2019-11-22 05:48:21.000000000","message":"Done","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"af42a653be07cd6f8e71b515fafaf33e80009bb9","unresolved":false,"context_lines":[{"line_number":1584,"context_line":""},{"line_number":1585,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":1586,"context_line":"        # retrieve store information from extra-specs"},{"line_number":1587,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":1588,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":1589,"context_line":""},{"line_number":1590,"context_line":"        tmp_dir \u003d self._image_conversion_dir()"},{"line_number":1591,"context_line":"        tmp_file \u003d os.path.join(tmp_dir,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_ab375f4b","line":1588,"range":{"start_line":1587,"start_character":0,"end_line":1588,"end_character":64},"updated":"2019-11-14 18:36:53.000000000","message":"since we already have the volume_type parameter in volume[1], we don\u0027t need to make this db call in every driver, we can directly access the extra specs with volume.volume_type.extra_specs.get(\"image_service:store_id\")\n\n[1]https://github.com/openstack/cinder/blob/master/cinder/objects/volume.py#L123","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"55c14d13e72607af736cabd1d8c83573de527aef","unresolved":false,"context_lines":[{"line_number":1584,"context_line":""},{"line_number":1585,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":1586,"context_line":"        # retrieve store information from extra-specs"},{"line_number":1587,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":1588,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":1589,"context_line":""},{"line_number":1590,"context_line":"        tmp_dir \u003d self._image_conversion_dir()"},{"line_number":1591,"context_line":"        tmp_file \u003d os.path.join(tmp_dir,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_85b6c024","line":1588,"range":{"start_line":1587,"start_character":0,"end_line":1588,"end_character":64},"in_reply_to":"3fa7e38b_ab375f4b","updated":"2019-11-22 05:48:21.000000000","message":"Done","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ce555e9895c9083f3e70d51049b8e3aca72149be","unresolved":false,"context_lines":[{"line_number":1589,"context_line":"        # retrieve store information from extra-specs"},{"line_number":1590,"context_line":"        store_id \u003d volume.volume_type.extra_specs.get(\u0027image_service:store_id\u0027)"},{"line_number":1591,"context_line":""},{"line_number":1592,"context_line":"        tmp_dir \u003d self._image_conversion_dir()"},{"line_number":1593,"context_line":"        tmp_file \u003d os.path.join(tmp_dir,"},{"line_number":1594,"context_line":"                                volume.name + \u0027-\u0027 + image_meta[\u0027id\u0027])"},{"line_number":1595,"context_line":"        with fileutils.remove_path_on_error(tmp_file):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_2f16575a","line":1592,"range":{"start_line":1592,"start_character":18,"end_line":1592,"end_character":23},"updated":"2019-11-29 15:12:44.000000000","message":"shouldn\u0027t this be volume_utils._image_conversion_dir() ?","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0986426f019327748a924ca39e261d86cb84834","unresolved":false,"context_lines":[{"line_number":1589,"context_line":"        # retrieve store information from extra-specs"},{"line_number":1590,"context_line":"        store_id \u003d volume.volume_type.extra_specs.get(\u0027image_service:store_id\u0027)"},{"line_number":1591,"context_line":""},{"line_number":1592,"context_line":"        tmp_dir \u003d self._image_conversion_dir()"},{"line_number":1593,"context_line":"        tmp_file \u003d os.path.join(tmp_dir,"},{"line_number":1594,"context_line":"                                volume.name + \u0027-\u0027 + image_meta[\u0027id\u0027])"},{"line_number":1595,"context_line":"        with fileutils.remove_path_on_error(tmp_file):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_d55f060d","line":1592,"range":{"start_line":1592,"start_character":18,"end_line":1592,"end_character":23},"in_reply_to":"3fa7e38b_2f16575a","updated":"2019-12-02 08:18:20.000000000","message":"ack","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"}],"cinder/volume/drivers/remotefs.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"6cde5dd7c5a1a533dc551cfd5061f5c3b47043ee","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        return self.base"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"    def _copy_volume_to_image(self, context, volume, image_service,"},{"line_number":950,"context_line":"                              image_meta, store_id\u003dNone):"},{"line_number":951,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        # If snapshots exist, flatten to a temporary image, and upload it"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_d961bfd7","line":950,"range":{"start_line":950,"start_character":40,"end_line":950,"end_character":55},"updated":"2020-01-30 11:24:05.000000000","message":"i think i missed this, this doesn\u0027t seem right.\nthe calling functions at (L#1675, L#1719) aren\u0027t passing this extra parameter and isn\u0027t required either","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b9397bd56735aac6b8b821e21e6f0a14c6069d8a","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        return self.base"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"    def _copy_volume_to_image(self, context, volume, image_service,"},{"line_number":950,"context_line":"                              image_meta, store_id\u003dNone):"},{"line_number":951,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        # If snapshots exist, flatten to a temporary image, and upload it"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_242d47fc","line":950,"range":{"start_line":950,"start_character":40,"end_line":950,"end_character":55},"in_reply_to":"3fa7e38b_8ebbfc72","updated":"2020-01-30 15:18:11.000000000","message":"So the call to this method is done by quobyte internally that\u0027s why the extra parameter is required.","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b864b587c2799f3a6ea84166692988593f6c8ab8","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        return self.base"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"    def _copy_volume_to_image(self, context, volume, image_service,"},{"line_number":950,"context_line":"                              image_meta, store_id\u003dNone):"},{"line_number":951,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        # If snapshots exist, flatten to a temporary image, and upload it"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_8ebbfc72","line":950,"range":{"start_line":950,"start_character":40,"end_line":950,"end_character":55},"in_reply_to":"3fa7e38b_d961bfd7","updated":"2020-01-30 13:42:56.000000000","message":"Isn\u0027t this handled at line 978?","commit_id":"350973f3dddd8e3b1d521238c69a5bd8c8df3fec"}],"cinder/volume/drivers/sheepdog.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a860a6eaeae27cbf2adabd4056b8468e82dd9fc3","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"SheepDog Volume Driver."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":"import errno"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_251e57bc","line":19,"updated":"2019-12-19 23:25:04.000000000","message":"This driver is being deleted by https://review.opendev.org/#/c/699985/ , so don\u0027t worry about making this change (i.e., delete it from this patch set).","commit_id":"97f2062d785d49e60d2f97921234202f344154e8"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"890b50948e63d2eed5f7c7d8bbff746ec5e9a307","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"SheepDog Volume Driver."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":"import errno"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_1ed36865","line":19,"in_reply_to":"3fa7e38b_251e57bc","updated":"2019-12-20 06:29:32.000000000","message":"Done","commit_id":"97f2062d785d49e60d2f97921234202f344154e8"}],"cinder/volume/manager.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"9af41bc94b9c07578dbe514d0ba23e61854833c5","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"        image_registered \u003d None"},{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"        # retrieve store information from extra-specs"},{"line_number":1616,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":1617,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":1618,"context_line":"        location_metadata \u003d {}"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"        if store_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_1fbc5fda","line":1617,"range":{"start_line":1616,"start_character":0,"end_line":1617,"end_character":64},"updated":"2019-11-21 07:24:23.000000000","message":"volume.volume_type.extra_specs.get(\u0027image_service:store_id\u0027)","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"55c14d13e72607af736cabd1d8c83573de527aef","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"        image_registered \u003d None"},{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"        # retrieve store information from extra-specs"},{"line_number":1616,"context_line":"        store_id \u003d volume_types.get_volume_type_extra_specs("},{"line_number":1617,"context_line":"            volume.volume_type_id, key\u003d\u0027image_service:store_id\u0027)"},{"line_number":1618,"context_line":"        location_metadata \u003d {}"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"        if store_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_25602ca5","line":1617,"range":{"start_line":1616,"start_character":0,"end_line":1617,"end_character":64},"in_reply_to":"3fa7e38b_1fbc5fda","updated":"2019-11-22 05:48:21.000000000","message":"Done","commit_id":"832e1d8d621759a095b04e8c3562d1b2d176d755"}],"releasenotes/notes/support-glance-multiple-stores-79d11c5344f41446.yaml":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d64b13d17437f653957383eed216d792b6793d10","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    \u0027image_service:store_id\u0027 is present in the associated volume type, then"},{"line_number":11,"context_line":"    image will be uploaded to specified \u0027store_id\u0027. The value \u0027store_id\u0027 is"},{"line_number":12,"context_line":"    nothing but store identifier defined in glance-api.conf. If the value"},{"line_number":13,"context_line":"    of \u0027image_service:store_id\u0027 is null or not set in volume-type then the"},{"line_number":14,"context_line":"    image will be uploaded to default store in glance."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3fa7e38b_ceb36299","line":13,"range":{"start_line":13,"start_character":32,"end_line":13,"end_character":39},"updated":"2019-11-22 13:29:43.000000000","message":"this case isn\u0027t handled during validation\nin the current implementation it will error out with InvalidStoreException if image_service:store_id is null","commit_id":"044ffc21cef4964dc88d7227478cc1b03f68077b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ce555e9895c9083f3e70d51049b8e3aca72149be","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    image will be uploaded to specified \u0027store_id\u0027. The value \u0027store_id\u0027 is"},{"line_number":12,"context_line":"    nothing but store identifier defined in glance-api.conf. If the value"},{"line_number":13,"context_line":"    of \u0027image_service:store_id\u0027 not set in volume-type then the"},{"line_number":14,"context_line":"    image will be uploaded to default store in glance."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3fa7e38b_21242bb2","line":14,"updated":"2019-11-29 15:12:44.000000000","message":"is it worth mentioning here that \u0027image_service:store_id\u0027 can only be set when multiple glance stores are configured?","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c0986426f019327748a924ca39e261d86cb84834","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    image will be uploaded to specified \u0027store_id\u0027. The value \u0027store_id\u0027 is"},{"line_number":12,"context_line":"    nothing but store identifier defined in glance-api.conf. If the value"},{"line_number":13,"context_line":"    of \u0027image_service:store_id\u0027 not set in volume-type then the"},{"line_number":14,"context_line":"    image will be uploaded to default store in glance."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3fa7e38b_95974e9d","line":14,"in_reply_to":"3fa7e38b_21242bb2","updated":"2019-12-02 08:18:20.000000000","message":"Makes sense!","commit_id":"65297b97a9be7b3186b0b647982fdf668e2fd496"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b06cb0e5c938e09373afb1c53d30e34bb372ed44","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    of \u0027image_service:store_id\u0027 not set in volume-type then the"},{"line_number":14,"context_line":"    image will be uploaded to default store in glance. The"},{"line_number":15,"context_line":"    \u0027image_service:store_id\u0027 can only be set in volume-type when multiple"},{"line_number":16,"context_line":"    glance stores are configured. "}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3fa7e38b_98e21330","line":16,"range":{"start_line":16,"start_character":33,"end_line":16,"end_character":34},"updated":"2019-12-03 08:57:12.000000000","message":"NIT: remove this","commit_id":"61b283c99b105360295d0e7d56fb2524995bedca"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b985857eb4f078ea33da479b0b07498c15a7acd5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Support multiple stores of Glance."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Glance now has ability to configure multiple stores at a time. To use this"},{"line_number":7,"context_line":"    feature in cinder for uploading volume to image, operator"},{"line_number":8,"context_line":"    need to define a new field named \u0027image_service:store_id\u0027 in the"},{"line_number":9,"context_line":"    volume-type extra-specs. At a time of volume upload to image request, if"},{"line_number":10,"context_line":"    \u0027image_service:store_id\u0027 is present in the associated volume type, then"},{"line_number":11,"context_line":"    image will be uploaded to specified \u0027store_id\u0027. The value \u0027store_id\u0027 is"},{"line_number":12,"context_line":"    nothing but store identifier defined in glance-api.conf. If the value"},{"line_number":13,"context_line":"    of \u0027image_service:store_id\u0027 not set in volume-type then the"},{"line_number":14,"context_line":"    image will be uploaded to default store in glance. The"},{"line_number":15,"context_line":"    \u0027image_service:store_id\u0027 can only be set in volume-type when multiple"},{"line_number":16,"context_line":"    glance stores are configured."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3fa7e38b_01f7448e","line":16,"range":{"start_line":6,"start_character":0,"end_line":16,"end_character":33},"updated":"2019-12-07 22:51:06.000000000","message":"I suggest replacing this with:\n\nThis release includes support for Glance multiple stores.  An operator\nmay now specify which Glance store will be used when a volume is\nuploaded to Glance as an image.  Some details about this feature:\n\n* This feature is not directly user-facing.  To enable it, an operator\n  must add the field ``image_service:store_id`` in the volume-type\n  extra-specs.  The value of the field is a valid store identifier\n  (``id``) configured in Glance, which may be discovered by making a\n  ``GET /v2/info/stores`` call to the Image Service API.\n* If ``image_service:store_id`` is not set in the extra-specs for a\n  volume-type, then any volume of that type uploaded as an image will\n  be uploaded to the default store in Glance.\n* The ``image_service:store_id`` can only be set in the extra-specs\n  for a volume-type when multiple glance stores are configured.\n* Cinder validates proposed Glance store identifiers by contacting\n  Glance at the time the ``image_service:store_id`` is added to a\n  volume-type\u0027s extra-specs.  Thus the Image Service API must be\n  available when a volume-type is updated.","commit_id":"1fea238f9faa4b76edf7c25237a01652cc86fa12"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d4b99afc30393f1c3ac537a3f2e31558d6d46e31","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Support multiple stores of Glance."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Glance now has ability to configure multiple stores at a time. To use this"},{"line_number":7,"context_line":"    feature in cinder for uploading volume to image, operator"},{"line_number":8,"context_line":"    need to define a new field named \u0027image_service:store_id\u0027 in the"},{"line_number":9,"context_line":"    volume-type extra-specs. At a time of volume upload to image request, if"},{"line_number":10,"context_line":"    \u0027image_service:store_id\u0027 is present in the associated volume type, then"},{"line_number":11,"context_line":"    image will be uploaded to specified \u0027store_id\u0027. The value \u0027store_id\u0027 is"},{"line_number":12,"context_line":"    nothing but store identifier defined in glance-api.conf. If the value"},{"line_number":13,"context_line":"    of \u0027image_service:store_id\u0027 not set in volume-type then the"},{"line_number":14,"context_line":"    image will be uploaded to default store in glance. The"},{"line_number":15,"context_line":"    \u0027image_service:store_id\u0027 can only be set in volume-type when multiple"},{"line_number":16,"context_line":"    glance stores are configured."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3fa7e38b_2277db90","line":16,"range":{"start_line":6,"start_character":0,"end_line":16,"end_character":33},"in_reply_to":"3fa7e38b_01f7448e","updated":"2019-12-11 08:56:11.000000000","message":"\u003e I suggest replacing this with:\n \u003e \n \u003e This release includes support for Glance multiple stores.  An\n \u003e operator\n \u003e may now specify which Glance store will be used when a volume is\n \u003e uploaded to Glance as an image.  Some details about this feature:\n \u003e \n \u003e * This feature is not directly user-facing.  To enable it, an\n \u003e operator\n \u003e must add the field ``image_service:store_id`` in the volume-type\n \u003e extra-specs.  The value of the field is a valid store identifier\n \u003e (``id``) configured in Glance, which may be discovered by making a\n \u003e ``GET /v2/info/stores`` call to the Image Service API.\n \u003e * If ``image_service:store_id`` is not set in the extra-specs for a\n \u003e volume-type, then any volume of that type uploaded as an image will\n \u003e be uploaded to the default store in Glance.\n \u003e * The ``image_service:store_id`` can only be set in the extra-specs\n \u003e for a volume-type when multiple glance stores are configured.\n \u003e * Cinder validates proposed Glance store identifiers by contacting\n \u003e Glance at the time the ``image_service:store_id`` is added to a\n \u003e volume-type\u0027s extra-specs.  Thus the Image Service API must be\n \u003e available when a volume-type is updated.","commit_id":"1fea238f9faa4b76edf7c25237a01652cc86fa12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a860a6eaeae27cbf2adabd4056b8468e82dd9fc3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Support multiple stores of Glance."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    This release includes support for Glance multiple stores.  An"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3fa7e38b_c543c3af","line":3,"range":{"start_line":2,"start_character":0,"end_line":3,"end_character":38},"updated":"2019-12-19 23:25:04.000000000","message":"I should\u0027ve noticed this last time, but don\u0027t include a prelude on this note.  Thanks!","commit_id":"97f2062d785d49e60d2f97921234202f344154e8"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"890b50948e63d2eed5f7c7d8bbff746ec5e9a307","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Support multiple stores of Glance."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    This release includes support for Glance multiple stores.  An"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3fa7e38b_dedcf072","line":3,"range":{"start_line":2,"start_character":0,"end_line":3,"end_character":38},"in_reply_to":"3fa7e38b_c543c3af","updated":"2019-12-20 06:29:32.000000000","message":"Done","commit_id":"97f2062d785d49e60d2f97921234202f344154e8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5344ad05351445838989e393d61a09508c00db3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"3fa7e38b_4893f400","line":24,"updated":"2020-01-08 13:20:01.000000000","message":"Looks like the oslo.vmware bug will be fixed soon.  If it\u0027s not, in a follow-up patch we can add an \u0027issues\u0027 section with something like the following:\n\nAs a consequence of `Bug #1857094 \u003chttps://bugs.launchpad.net/oslo.vmware/+bug/1857094\u003e`_\nan ``image_service:store_id`` added to the extra-specs of a volume-type using a VMware backend is ignored and the volume will be uploaded as an image to the default store.\n\n(just leaving that here in case it\u0027s needed)","commit_id":"7310cb9ac43887128d204d5ffc1964ce946db120"}]}
