)]}'
{"tempest/api/volume/admin/test_volume_nested_quotas.py":[{"author":{"_account_id":16425,"name":"Bin Bin Cong","email":"binbin.cong@easystack.cn","username":"stephen_cong"},"change_message_id":"95be0e8090e434532d9b748a0538a0dc9585382c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # Make sure we can update it to something reasonable"},{"line_number":189,"context_line":"        self.quotas_client.update_quota_set(self.B[\u0027id\u0027], volumes\u003d5)"},{"line_number":190,"context_line":"        # Make sure we can\u0027t give more to the child than the parent"},{"line_number":191,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":192,"context_line":"                          self.quotas_client.update_quota_set,"},{"line_number":193,"context_line":"                          self.B[\u0027id\u0027], volumes\u003d11)"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_f0c0972c","line":191,"updated":"2016-03-09 06:31:28.000000000","message":"Should we separate these negative test cases from the positive ones, and create a new py file for them?","commit_id":"fc90775ee489ecbf9ba79da45ed4582e119d5b46"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"db86b9b034366bd4ab9b44138e729357941d1fd6","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # Make sure we can update it to something reasonable"},{"line_number":189,"context_line":"        self.quotas_client.update_quota_set(self.B[\u0027id\u0027], volumes\u003d5)"},{"line_number":190,"context_line":"        # Make sure we can\u0027t give more to the child than the parent"},{"line_number":191,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":192,"context_line":"                          self.quotas_client.update_quota_set,"},{"line_number":193,"context_line":"                          self.B[\u0027id\u0027], volumes\u003d11)"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_1eca051b","line":191,"in_reply_to":"5aef4532_f0c0972c","updated":"2016-03-10 17:16:43.000000000","message":"That\u0027s a good question.  I\u0027m not sure what the typical process is for Tempest - I found this (http://docs.openstack.org/developer/tempest/HACKING.html#negative-tests) but not sure how that would fit with this case. Some of these test scenarios are a bit complex (update quotas, create volumes, update quotas again), so I\u0027m not sure if it\u0027s better to split them up.\n\nI\u0027ll remove the WIP from this patch and hopefully we\u0027ll get additional feedback.","commit_id":"fc90775ee489ecbf9ba79da45ed4582e119d5b46"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"f3e6e84b438bc96d3f5f6602a75aff255a0d5067","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def _delete_project_quotas(cls):"},{"line_number":90,"context_line":"        for proj in cls.projects:"},{"line_number":91,"context_line":"            cls._change_clients_to_use_project(proj)"},{"line_number":92,"context_line":"            waiters.wait_for_no_volumes(cls.volumes_client)"},{"line_number":93,"context_line":"            cls._change_clients_to_use_project(cls.A)"},{"line_number":94,"context_line":"            cls.quotas_client.delete_quota_set(proj[\u0027id\u0027])"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_8ec81f24","line":92,"updated":"2016-08-09 19:17:21.000000000","message":"I am not for sure this change:\n\nThe previous:\ncls.volumes_client.wait_for_no_volumes()\n\nThe modified now:\nwaiters.wait_for_no_volumes(cls.volumes_client)\n\nJordan Pittier suggest not using the wrapper:\n\nhttps://review.openstack.org/#/c/285640/6/tempest/services/volume/base/base_volumes_client.py","commit_id":"9d18ec76ebebfbb70659621141aa2ff08dc5b4b5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1fdb40e71cc8f2828ce5067d2bb4b408df3dae8d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        cls.D \u003d _create_project(\u0027D\u0027, parent\u003dcls.B)"},{"line_number":52,"context_line":"        # Need the proper order for delete"},{"line_number":53,"context_line":"        # TODO(mc_nair): look into cascaded delete"},{"line_number":54,"context_line":"        cls.projects \u003d [cls.D, cls.B, cls.C, cls.A]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        cls.user_pass \u003d \u0027quota_pass\u0027"},{"line_number":57,"context_line":"        # Create a user and give access to all of the newly created projects"}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_ab6551e2","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":51},"updated":"2016-08-15 12:35:20.000000000","message":"you can use self.addCleanup() as you create the projects. Actually, it can be part of the _create_project() function","commit_id":"93340bc80d0c60831605def52698facba7663c64"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1fdb40e71cc8f2828ce5067d2bb4b408df3dae8d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        cls.user \u003d cls.os_admin.users_client.create_user("},{"line_number":59,"context_line":"            data_utils.rand_name(\u0027nested_quota_user\u0027), password\u003dcls.user_pass,"},{"line_number":60,"context_line":"            tenant_id\u003dcls.A[\u0027id\u0027], email\u003d\u0027fake@email.com\u0027)[\u0027user\u0027]"},{"line_number":61,"context_line":"        roles \u003d cls.os_admin.roles_client.list_roles()[\u0027roles\u0027]"},{"line_number":62,"context_line":"        admin_role \u003d next(iter([x for x in roles if x[\u0027name\u0027] \u003d\u003d \u0027admin\u0027]))"},{"line_number":63,"context_line":"        cls.auth_provider_dict \u003d {}"},{"line_number":64,"context_line":"        v3_cred_client \u003d cred_client.V3CredsClient("},{"line_number":65,"context_line":"            cls.identity_client, cls.projects_client,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_cb4b6d2a","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":75},"updated":"2016-08-15 12:35:20.000000000","message":"add a new method in the \"roles_client\" to get a role based on its name","commit_id":"93340bc80d0c60831605def52698facba7663c64"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"957afb557c6e04349a490170099298f8008f6933","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            return cls.projects_client.create_project("},{"line_number":46,"context_line":"                data_utils.rand_name(name), parent_id\u003dparent_id)[\u0027project\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        cls.A \u003d _create_project(\u0027A\u0027)"},{"line_number":49,"context_line":"        cls.B \u003d _create_project(\u0027B\u0027, parent\u003dcls.A)"},{"line_number":50,"context_line":"        cls.C \u003d _create_project(\u0027C\u0027, parent\u003dcls.A)"},{"line_number":51,"context_line":"        cls.D \u003d _create_project(\u0027D\u0027, parent\u003dcls.B)"},{"line_number":52,"context_line":"        # Need the proper order for delete"},{"line_number":53,"context_line":"        # TODO(mc_nair): look into cascaded delete"},{"line_number":54,"context_line":"        cls.projects \u003d [cls.D, cls.B, cls.C, cls.A]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        cls.user_pass \u003d \u0027quota_pass\u0027"},{"line_number":57,"context_line":"        # Create a user and give access to all of the newly created projects"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a89bdaa_74141be8","line":54,"range":{"start_line":48,"start_character":0,"end_line":54,"end_character":51},"updated":"2016-09-08 17:50:25.000000000","message":"take a look on how it is done at [1]. Since you have a \"_create_project()\" method in line 43, you can put the \"addCleanup()\" inside of that method.\n\n[1] https://github.com/openstack/tempest/blob/master/tempest/api/identity/admin/v3/test_projects.py#L68-L86","commit_id":"f7cb9b693cad436026c0a44ddc19fc777042a037"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"6975461fc87d51c5b0036f7d1a922bcce8b72552","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            return cls.projects_client.create_project("},{"line_number":46,"context_line":"                data_utils.rand_name(name), parent_id\u003dparent_id)[\u0027project\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        cls.A \u003d _create_project(\u0027A\u0027)"},{"line_number":49,"context_line":"        cls.B \u003d _create_project(\u0027B\u0027, parent\u003dcls.A)"},{"line_number":50,"context_line":"        cls.C \u003d _create_project(\u0027C\u0027, parent\u003dcls.A)"},{"line_number":51,"context_line":"        cls.D \u003d _create_project(\u0027D\u0027, parent\u003dcls.B)"},{"line_number":52,"context_line":"        # Need the proper order for delete"},{"line_number":53,"context_line":"        # TODO(mc_nair): look into cascaded delete"},{"line_number":54,"context_line":"        cls.projects \u003d [cls.D, cls.B, cls.C, cls.A]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        cls.user_pass \u003d \u0027quota_pass\u0027"},{"line_number":57,"context_line":"        # Create a user and give access to all of the newly created projects"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a89bdaa_2324170b","line":54,"range":{"start_line":48,"start_character":0,"end_line":54,"end_character":51},"in_reply_to":"9a89bdaa_74141be8","updated":"2016-09-08 19:58:28.000000000","message":"Rodrigo:\n\nThank you very much for your code reviewing, and I modified code according to the sample:\n        def _create_project(name, parent\u003dNone):\n            parent_id \u003d parent[\u0027id\u0027] if parent else None\n            project \u003d cls.projects_client.create_project(\n                data_utils.rand_name(name), parent_id\u003dparent_id)[\u0027project\u0027]\n            cls.addCleanup(\n                cls.project_client.delete_project, project[\u0027id\u0027])\n            return project\n\n\nThe test passed.\n\nwhy do we need add the method addCleanup() ?\nwhat does this method?\n\nXinli","commit_id":"f7cb9b693cad436026c0a44ddc19fc777042a037"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d4842bdbbce9b87b5b5fddb59c44332c4dc22a55","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        cls.B \u003d _create_project(\u0027B\u0027, parent\u003dcls.A)"},{"line_number":53,"context_line":"        cls.C \u003d _create_project(\u0027C\u0027, parent\u003dcls.A)"},{"line_number":54,"context_line":"        cls.D \u003d _create_project(\u0027D\u0027, parent\u003dcls.B)"},{"line_number":55,"context_line":"        # Need the proper order for delete"},{"line_number":56,"context_line":"        # TODO(mc_nair): look into cascaded delete"},{"line_number":57,"context_line":"        cls.projects \u003d [cls.D, cls.B, cls.C, cls.A]"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a89bdaa_ccec4092","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":42},"updated":"2016-09-09 17:32:32.000000000","message":"you can remove this comment","commit_id":"02680de506635dcf9cc5545ca4d9bf08cddcc28d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3930fc1d8febbfb6d515b459a3f1588d77045ba7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        cls.user_pass \u003d \u0027quota_pass\u0027"},{"line_number":56,"context_line":"        # Create a user and give access to all of the newly created projects"},{"line_number":57,"context_line":"        cls.user \u003d cls.os_admin.users_client.create_user("},{"line_number":58,"context_line":"            data_utils.rand_name(\u0027nested_quota_user\u0027), password\u003dcls.user_pass,"},{"line_number":59,"context_line":"            tenant_id\u003dcls.A[\u0027id\u0027], email\u003d\u0027fake@email.com\u0027)[\u0027user\u0027]"},{"line_number":60,"context_line":"        roles \u003d cls.os_admin.roles_client.list_roles()[\u0027roles\u0027]"},{"line_number":61,"context_line":"        admin_role \u003d next(iter([x for x in roles if x[\u0027name\u0027] \u003d\u003d \u0027admin\u0027]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_af300909","line":58,"range":{"start_line":58,"start_character":12,"end_line":58,"end_character":53},"updated":"2016-10-10 23:11:06.000000000","message":"here should be\n\n name\u003ddata_utils.rand_name(\u0027nested_quota_user\u0027)\n\nlike http://developer.openstack.org/api-ref/identity/v3/?expanded\u003dcreate-user-detail#create-user\n\nIn addition, tenant_id should be changed to default_project_id according to the api-ref doc.\n\nPlease see https://github.com/openstack/tempest/blob/master/tempest/api/identity/admin/v3/test_users.py#L33 as the sample.","commit_id":"d07a3a7b07fd0242a09a948f2020470eebdf03b1"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"e03e3563139b6d79aef8c800526b67b9b47d0143","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        cls.user_pass \u003d \u0027quota_pass\u0027"},{"line_number":56,"context_line":"        # Create a user and give access to all of the newly created projects"},{"line_number":57,"context_line":"        cls.user \u003d cls.os_admin.users_client.create_user("},{"line_number":58,"context_line":"            data_utils.rand_name(\u0027nested_quota_user\u0027), password\u003dcls.user_pass,"},{"line_number":59,"context_line":"            tenant_id\u003dcls.A[\u0027id\u0027], email\u003d\u0027fake@email.com\u0027)[\u0027user\u0027]"},{"line_number":60,"context_line":"        roles \u003d cls.os_admin.roles_client.list_roles()[\u0027roles\u0027]"},{"line_number":61,"context_line":"        admin_role \u003d next(iter([x for x in roles if x[\u0027name\u0027] \u003d\u003d \u0027admin\u0027]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa6399be_25d95c22","line":58,"range":{"start_line":58,"start_character":12,"end_line":58,"end_character":53},"in_reply_to":"fa6399be_af300909","updated":"2016-10-11 13:55:57.000000000","message":"Ken\u0027ichi;\n\nI fixed the issues in your code review comments and will submit new patch set.\n\nThanks a lot","commit_id":"d07a3a7b07fd0242a09a948f2020470eebdf03b1"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"45edfe3619246cb85ccac463300c9a47b14619b7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        for client in clients:"},{"line_number":104,"context_line":"            client.auth_provider \u003d cls.auth_provider_dict[project[\u0027id\u0027]]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def setUp(self):"},{"line_number":107,"context_line":"        super(VolumesNestedQuotasTest, self).setUp()"},{"line_number":108,"context_line":"        self._change_clients_to_use_project(self.A)"},{"line_number":109,"context_line":"        # Clear any previous quotas that may have been set"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_74f30774","line":106,"range":{"start_line":106,"start_character":4,"end_line":106,"end_character":20},"updated":"2017-01-03 09:04:06.000000000","message":"it is better to put setUp immediately after resource_cleanup","commit_id":"5ec0b72d7d09b83f0a883922a5147edb6ea338c5"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"45edfe3619246cb85ccac463300c9a47b14619b7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        # Clear any previous quotas that may have been set"},{"line_number":110,"context_line":"        self._delete_project_quotas()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def create_volume(self):"},{"line_number":113,"context_line":"        volume \u003d super(VolumesNestedQuotasTest, self).create_volume()"},{"line_number":114,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":115,"context_line":"                        volume[\u0027id\u0027])"},{"line_number":116,"context_line":"        return volume"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _create_volume_ignore_error(self):"},{"line_number":119,"context_line":"        volume \u003d self.volumes_client.create_volume()[\u0027volume\u0027]"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        def delete():"},{"line_number":122,"context_line":"            try:"},{"line_number":123,"context_line":"                self.volumes_client.delete_volume(volume[\u0027id\u0027])"},{"line_number":124,"context_line":"            except lib_exc.NotFound:"},{"line_number":125,"context_line":"                pass"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.addCleanup(delete)"},{"line_number":128,"context_line":"        return volume"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _show_quota(self, proj):"},{"line_number":131,"context_line":"        quota \u003d self.admin_quotas_client.show_quota_set("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_74306757","line":128,"range":{"start_line":112,"start_character":0,"end_line":128,"end_character":21},"updated":"2017-01-03 09:04:06.000000000","message":"These two functions can be merged into one, such as:\n    def create_volume(self):\n        volume \u003d super(VolumesNestedQuotasTest, self).create_volume()\n        self.addCleanup(test_utils.call_and_ignore_notfound_exc,\n                        self.delete_volume,\n                        volume[\u0027id\u0027])\n        return volume","commit_id":"5ec0b72d7d09b83f0a883922a5147edb6ea338c5"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"45edfe3619246cb85ccac463300c9a47b14619b7","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.admin_quotas_client.update_quota_set("},{"line_number":149,"context_line":"                proj[\u0027id\u0027], **type_updates)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _get_quota_volume_usage(self, proj):"},{"line_number":152,"context_line":"        return self.admin_quotas_client.show_quota_usage("},{"line_number":153,"context_line":"            proj[\u0027id\u0027])[\u0027quota_set\u0027][\u0027volumes\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_94b6ab88","line":151,"range":{"start_line":151,"start_character":38,"end_line":151,"end_character":42},"updated":"2017-01-03 09:04:06.000000000","message":"project. to use abbreviation in function parameters seems not a good idea.","commit_id":"5ec0b72d7d09b83f0a883922a5147edb6ea338c5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        self.quotas_client.update_quota_set(proj[\u0027id\u0027], **updates)"},{"line_number":140,"context_line":"        self.quotas_client.update_quota_set(proj[\u0027id\u0027],"},{"line_number":141,"context_line":"                                            **dict(per_volume_gigabytes\u003d-1))"},{"line_number":142,"context_line":"        # Update the default volume_type quota as well if one exists"},{"line_number":143,"context_line":"        if update_vol_type_quota and self.def_type_name:"},{"line_number":144,"context_line":"            type_updates \u003d {\"%s_%s\" % (key, self.def_type_name): value"},{"line_number":145,"context_line":"                            for key, value in updates.items()}"},{"line_number":146,"context_line":"            self.quotas_client.update_quota_set("},{"line_number":147,"context_line":"                proj[\u0027id\u0027], **type_updates)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _get_quota_volume_usage(self, proj):"},{"line_number":150,"context_line":"        return self.quotas_client.show_quota_usage("}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_808c8980","line":147,"range":{"start_line":142,"start_character":0,"end_line":147,"end_character":43},"updated":"2017-01-16 09:17:32.000000000","message":"do we need ton update volume type quota also, i mean we just verify the quota bits with volume one.","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            if \u0027per_volume_gigabytes\u0027 not in key:"},{"line_number":164,"context_line":"                self.assertEqual(0, value)"},{"line_number":165,"context_line":"        # Parent should be the same as non-nested quota defaults"},{"line_number":166,"context_line":"        self.assertEqual(10, parent_quota[\u0027volumes\u0027])"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @test.idempotent_id(\u0027cc5e172e-b058-43ef-acc2-7aa795e4a2ff\u0027)"},{"line_number":169,"context_line":"    def test_quota_defaults_enforced(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_e0262d67","line":166,"range":{"start_line":166,"start_character":25,"end_line":166,"end_character":28},"updated":"2017-01-16 09:17:32.000000000","message":"this is something default one and can be different depends on cloud. you should get the quotas for volume and then compare. or here just checking the \u0027volume\u0027 is in quota or not","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        # Make sure we can\u0027t give more to the child than the parent"},{"line_number":193,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":194,"context_line":"                          self.quotas_client.update_quota_set,"},{"line_number":195,"context_line":"                          self.B[\u0027id\u0027], volumes\u003d11)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @test.idempotent_id(\u002728f811ae-c680-4ebc-8f3b-01f58c029348\u0027)"},{"line_number":198,"context_line":"    def test_child_quota_hard_limits_affects_parents_allocated(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_80ee49b2","line":195,"range":{"start_line":195,"start_character":48,"end_line":195,"end_character":50},"updated":"2017-01-16 09:17:32.000000000","message":"you need to calculate the number here by fetching the parent quota limit.","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"54ed09a851cf1751ea92b375779181aae75def6f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def setup_credentials(cls):"},{"line_number":34,"context_line":"        super(VolumesNestedQuotasTest, cls).setup_credentials()"},{"line_number":35,"context_line":"        cls.demo_tenant_id \u003d cls.os.credentials.tenant_id"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_8fa2c7fb","line":35,"range":{"start_line":35,"start_character":12,"end_line":35,"end_character":26},"updated":"2017-01-17 06:14:09.000000000","message":"seems no use","commit_id":"3c676dc263c4ff179b031fa1bae7120573713b21"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"54ed09a851cf1751ea92b375779181aae75def6f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def resource_setup(cls):"},{"line_number":39,"context_line":"        super(VolumesNestedQuotasTest, cls).resource_setup()"},{"line_number":40,"context_line":"        cls.identity_client \u003d cls.os_admin.identity_v3_client"},{"line_number":41,"context_line":"        cls.projects_client \u003d cls.os_admin.projects_client"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        def _create_project(name, parent\u003dNone):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_2a02a40b","line":40,"range":{"start_line":40,"start_character":30,"end_line":40,"end_character":61},"updated":"2017-01-17 06:14:09.000000000","message":"it depends on CONF.identity.auth_version","commit_id":"3c676dc263c4ff179b031fa1bae7120573713b21"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"54ed09a851cf1751ea92b375779181aae75def6f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                v3_cred_client.get_credentials(cls.user, proj, cls.user_pass))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            cls.def_type_name \u003d (cls.volumes_client.show_default_volume_type()"},{"line_number":77,"context_line":"                                 [\u0027volume_type\u0027][\u0027name\u0027])"},{"line_number":78,"context_line":"        except lib_exc.NotFound:"},{"line_number":79,"context_line":"            cls.def_type_name \u003d None"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_5572304a","line":76,"range":{"start_line":76,"start_character":16,"end_line":76,"end_character":29},"updated":"2017-01-17 06:14:09.000000000","message":"the variable name is confusing","commit_id":"3c676dc263c4ff179b031fa1bae7120573713b21"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"54ed09a851cf1751ea92b375779181aae75def6f","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @classmethod"},{"line_number":82,"context_line":"    def resource_cleanup(cls):"},{"line_number":83,"context_line":"        cls._change_clients_to_use_project(cls.A)"},{"line_number":84,"context_line":"        cls._delete_project_quotas()"},{"line_number":85,"context_line":"        for proj in cls.projects:"},{"line_number":86,"context_line":"            cls.projects_client.delete_project(proj[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_75df2c0d","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":49},"updated":"2017-01-17 06:14:09.000000000","message":"what\u0027s this for?","commit_id":"3c676dc263c4ff179b031fa1bae7120573713b21"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"e6c194e2ade1c858e91676d3d3438dc27b68806e","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @classmethod"},{"line_number":82,"context_line":"    def resource_cleanup(cls):"},{"line_number":83,"context_line":"        cls._change_clients_to_use_project(cls.A)"},{"line_number":84,"context_line":"        cls._delete_project_quotas()"},{"line_number":85,"context_line":"        for proj in cls.projects:"},{"line_number":86,"context_line":"            cls.projects_client.delete_project(proj[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a3905b3_46c0e6e0","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":49},"in_reply_to":"7a3c09a3_75df2c0d","updated":"2017-01-20 20:35:14.000000000","message":"zhufl:\n\nThank you very much for code review. The purpose call\n\"_change_clients_to_use_project(project)\" is to delete (in this case ) the quotas.\n\nBest regards;\nxinli","commit_id":"3c676dc263c4ff179b031fa1bae7120573713b21"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"64127f0e51d8758828c081dbc432b83359609034","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def resource_setup(cls):"},{"line_number":39,"context_line":"        super(VolumesNestedQuotasTest, cls).resource_setup()"},{"line_number":40,"context_line":"        cls.identity_client \u003d cls.os_admin.identity_v3_client"},{"line_number":41,"context_line":"        cls.projects_client \u003d cls.os_admin.projects_client"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        def _create_project(name, parent\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a3905b3_e05cf14c","line":40,"range":{"start_line":40,"start_character":30,"end_line":40,"end_character":61},"updated":"2017-01-24 06:27:45.000000000","message":"it depends on CONF.identity.auth_version","commit_id":"cb94ef8f7d974ecabcd58088fa6ad3103d589e05"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"37c021a46bc50c724b08cd4ab76f240c6540bd34","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def resource_setup(cls):"},{"line_number":39,"context_line":"        super(VolumesNestedQuotasTest, cls).resource_setup()"},{"line_number":40,"context_line":"        cls.identity_client \u003d cls.os_admin.identity_v3_client"},{"line_number":41,"context_line":"        cls.projects_client \u003d cls.os_admin.projects_client"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        def _create_project(name, parent\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a461143_e4367ee6","line":40,"range":{"start_line":40,"start_character":30,"end_line":40,"end_character":61},"in_reply_to":"3a461143_dce52009","updated":"2017-02-02 08:50:53.000000000","message":"https://github.com/openstack/tempest/search?utf8\u003d%E2%9C%93\u0026q\u003dauth_version\n\nhttps://github.com/openstack/tempest/blob/6a610504d04804c48b96a8302d203ef7c1d4ead6/tempest/config.py","commit_id":"cb94ef8f7d974ecabcd58088fa6ad3103d589e05"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"c5e04a1b2d35fdb33b0d9c7b98463cfe1fd831ba","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def resource_setup(cls):"},{"line_number":39,"context_line":"        super(VolumesNestedQuotasTest, cls).resource_setup()"},{"line_number":40,"context_line":"        cls.identity_client \u003d cls.os_admin.identity_v3_client"},{"line_number":41,"context_line":"        cls.projects_client \u003d cls.os_admin.projects_client"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        def _create_project(name, parent\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a461143_dce52009","line":40,"range":{"start_line":40,"start_character":30,"end_line":40,"end_character":61},"in_reply_to":"5a3905b3_e05cf14c","updated":"2017-01-31 16:57:27.000000000","message":"zhufl, \n\nI review the code, /opt/stack/tempest/tempest/config.py and /opt/stack/tempest/etc/tempest.conf\nbut I don\u0027t find this item in the configuration file: \nCONF.identity.auth_version\n\nCould you please provide more details regarding \"CONF.identity.auth_version\"?\n\nBest Regards;\n\nxinli","commit_id":"cb94ef8f7d974ecabcd58088fa6ad3103d589e05"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"64127f0e51d8758828c081dbc432b83359609034","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @classmethod"},{"line_number":82,"context_line":"    def resource_cleanup(cls):"},{"line_number":83,"context_line":"        cls._change_clients_to_use_project(cls.A)"},{"line_number":84,"context_line":"        cls._delete_project_quotas()"},{"line_number":85,"context_line":"        for proj in cls.projects:"},{"line_number":86,"context_line":"            cls.projects_client.delete_project(proj[\u0027id\u0027])"},{"line_number":87,"context_line":"        cls.os_admin.users_client.delete_user(cls.user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a3905b3_3b854c59","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":36},"updated":"2017-01-24 06:27:45.000000000","message":"In _delete_project_quotas, you use a loop,\n        for proj in cls.projects:\n            cls._change_clients_to_use_project(proj)\n\nSo I don\u0027t understand why _change_clients_to_use_project(cls.A)\nis needed before _delete_project_quotas","commit_id":"cb94ef8f7d974ecabcd58088fa6ad3103d589e05"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"37c021a46bc50c724b08cd4ab76f240c6540bd34","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @classmethod"},{"line_number":82,"context_line":"    def resource_cleanup(cls):"},{"line_number":83,"context_line":"        cls._change_clients_to_use_project(cls.A)"},{"line_number":84,"context_line":"        cls._delete_project_quotas()"},{"line_number":85,"context_line":"        for proj in cls.projects:"},{"line_number":86,"context_line":"            cls.projects_client.delete_project(proj[\u0027id\u0027])"},{"line_number":87,"context_line":"        cls.os_admin.users_client.delete_user(cls.user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a461143_c4c34289","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":36},"in_reply_to":"3a461143_175061d3","updated":"2017-02-02 08:50:53.000000000","message":"not catch it, do we must _change_clients_to_use_project(cls.A) first before _change_clients_to_use_project(proj)? \nHere you _change_clients_to_use_project(cls.A), and do nothing, then _change_clients_to_use_project(proj).","commit_id":"cb94ef8f7d974ecabcd58088fa6ad3103d589e05"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"c5e04a1b2d35fdb33b0d9c7b98463cfe1fd831ba","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @classmethod"},{"line_number":82,"context_line":"    def resource_cleanup(cls):"},{"line_number":83,"context_line":"        cls._change_clients_to_use_project(cls.A)"},{"line_number":84,"context_line":"        cls._delete_project_quotas()"},{"line_number":85,"context_line":"        for proj in cls.projects:"},{"line_number":86,"context_line":"            cls.projects_client.delete_project(proj[\u0027id\u0027])"},{"line_number":87,"context_line":"        cls.os_admin.users_client.delete_user(cls.user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a461143_175061d3","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":36},"in_reply_to":"5a3905b3_3b854c59","updated":"2017-01-31 16:57:27.000000000","message":"zhufl:\n\nI verified with Ryan(original author), basically to call _change_clients_to_use_project(cls.A) is to switch the current project to the parent / grand parent \"project A\", and then to delete the project quota with (project \"id\") recursively.\n\nBest regards;\nxinli","commit_id":"cb94ef8f7d974ecabcd58088fa6ad3103d589e05"}],"tempest/common/waiters.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2143a23ed2e1282fb5fcd119a9d851dc6d8ad30a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            raise exceptions.TimeoutException(message)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"def wait_for_no_volumes(client):"},{"line_number":193,"context_line":"    \"\"\"Waits until no volumes are present.\"\"\""},{"line_number":194,"context_line":"    body \u003d client.list_volumes()[\u0027volumes\u0027]"},{"line_number":195,"context_line":"    start \u003d int(time.time())"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_34a35d51","line":192,"updated":"2016-09-19 15:22:53.000000000","message":"We can use wait_for_resource_deletion() of each client instead of adding the same one.","commit_id":"4fda00f8b2ad87f6ecd41cfe1c53f308743acf6c"}],"tempest/config.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":831,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":832,"context_line":"                deprecated_reason\u003d\u0027This config switch was added for Liberty \u0027"},{"line_number":833,"context_line":"                                  \u0027which is not supported anymore.\u0027),"},{"line_number":834,"context_line":"    cfg.BoolOpt(\u0027nested_quotas\u0027,"},{"line_number":835,"context_line":"                default\u003dFalse,"},{"line_number":836,"context_line":"                help\u003d\"Does the test environment support nested quotas?\")"},{"line_number":837,"context_line":"]"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_e5839fca","line":836,"range":{"start_line":834,"start_character":0,"end_line":836,"end_character":72},"updated":"2017-01-16 09:17:32.000000000","message":"do we need this, i think it was added in liberty cycle.","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"}],"tempest/lib/services/volume/v1/volumes_client.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b80cd87bdfbdeac9efec975c1006c7d88c0cb24b","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":287,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def show_default_volume_type(self):"},{"line_number":290,"context_line":"        url \u003d \"types/default\""},{"line_number":291,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":292,"context_line":"        body \u003d json.loads(body)"},{"line_number":293,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":294,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def retype_volume(self, volume_id, **kwargs):"},{"line_number":297,"context_line":"        \"\"\"Updates volume with new volume type.\"\"\""},{"line_number":298,"context_line":"        post_body \u003d json.dumps({\u0027os-retype\u0027: kwargs})"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_b6af13e2","line":295,"range":{"start_line":289,"start_character":0,"end_line":295,"end_character":0},"updated":"2016-10-19 22:18:44.000000000","message":"Now we don\u0027t need this change, right?","commit_id":"de66ddb81764c7514076cd6a5b6aa3e070dc3aef"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"ec469ce89f827c9c11e8af4efa97b22f0cb7f170","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":287,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def show_default_volume_type(self):"},{"line_number":290,"context_line":"        url \u003d \"types/default\""},{"line_number":291,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":292,"context_line":"        body \u003d json.loads(body)"},{"line_number":293,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":294,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def retype_volume(self, volume_id, **kwargs):"},{"line_number":297,"context_line":"        \"\"\"Updates volume with new volume type.\"\"\""},{"line_number":298,"context_line":"        post_body \u003d json.dumps({\u0027os-retype\u0027: kwargs})"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_56ecf728","line":295,"range":{"start_line":289,"start_character":0,"end_line":295,"end_character":0},"in_reply_to":"fa6399be_b6af13e2","updated":"2016-10-19 22:22:01.000000000","message":"yes, I need to remove this method","commit_id":"de66ddb81764c7514076cd6a5b6aa3e070dc3aef"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b80cd87bdfbdeac9efec975c1006c7d88c0cb24b","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        post_body \u003d json.dumps({\u0027os-retype\u0027: kwargs})"},{"line_number":299,"context_line":"        resp, body \u003d self.post(\u0027volumes/%s/action\u0027 % volume_id, post_body)"},{"line_number":300,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":301,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_f6b98b2f","line":301,"updated":"2016-10-19 22:18:44.000000000","message":"Here also is not used in this new test..","commit_id":"de66ddb81764c7514076cd6a5b6aa3e070dc3aef"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"ec469ce89f827c9c11e8af4efa97b22f0cb7f170","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        post_body \u003d json.dumps({\u0027os-retype\u0027: kwargs})"},{"line_number":299,"context_line":"        resp, body \u003d self.post(\u0027volumes/%s/action\u0027 % volume_id, post_body)"},{"line_number":300,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":301,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_16e35f34","line":301,"in_reply_to":"fa6399be_f6b98b2f","updated":"2016-10-19 22:22:01.000000000","message":"Ohmichi:\n\nthank you very much for code reviewing, I need to remove this retrun statement","commit_id":"de66ddb81764c7514076cd6a5b6aa3e070dc3aef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":295,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def update_volume_image_metadata(self, volume_id, **kwargs):"},{"line_number":298,"context_line":"        \"\"\"Update image metadata for the volume."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        Available params: see http://developer.openstack.org/"},{"line_number":301,"context_line":"                              api-ref-blockstorage-v2.html"},{"line_number":302,"context_line":"                              #setVolumeimagemetadata"},{"line_number":303,"context_line":"        \"\"\""},{"line_number":304,"context_line":"        post_body \u003d json.dumps({\u0027os-set_image_metadata\u0027: {\u0027metadata\u0027: kwargs}})"},{"line_number":305,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"},{"line_number":306,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":307,"context_line":"        body \u003d json.loads(body)"},{"line_number":308,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":309,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def show_default_volume_type(self):"},{"line_number":312,"context_line":"        url \u003d \"types/default\""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_ca0872dc","line":309,"range":{"start_line":297,"start_character":0,"end_line":309,"end_character":51},"updated":"2017-01-16 09:17:32.000000000","message":"why we need these for quota tests.","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"1c4900fca1c69d35a1132e0a0f254ae477c40b8e","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":295,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def update_volume_image_metadata(self, volume_id, **kwargs):"},{"line_number":298,"context_line":"        \"\"\"Update image metadata for the volume."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        Available params: see http://developer.openstack.org/"},{"line_number":301,"context_line":"                              api-ref-blockstorage-v2.html"},{"line_number":302,"context_line":"                              #setVolumeimagemetadata"},{"line_number":303,"context_line":"        \"\"\""},{"line_number":304,"context_line":"        post_body \u003d json.dumps({\u0027os-set_image_metadata\u0027: {\u0027metadata\u0027: kwargs}})"},{"line_number":305,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"},{"line_number":306,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":307,"context_line":"        body \u003d json.loads(body)"},{"line_number":308,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":309,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def show_default_volume_type(self):"},{"line_number":312,"context_line":"        url \u003d \"types/default\""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_b204584a","line":309,"range":{"start_line":297,"start_character":0,"end_line":309,"end_character":51},"in_reply_to":"7a3c09a3_ca0872dc","updated":"2017-01-16 20:50:36.000000000","message":"Ghanshyam: \nthank you very much for code reviewing, this method has been called by test_volume_nested_quotas.py\n\nThanks;\n\nXinli","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":309,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def show_default_volume_type(self):"},{"line_number":312,"context_line":"        url \u003d \"types/default\""},{"line_number":313,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":314,"context_line":"        body \u003d json.loads(body)"},{"line_number":315,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":316,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def delete_volume_image_metadata(self, volume_id, key_name):"},{"line_number":319,"context_line":"        \"\"\"Delete image metadata item for the volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_403b8138","line":316,"range":{"start_line":311,"start_character":0,"end_line":316,"end_character":51},"updated":"2017-01-16 09:17:32.000000000","message":"this also not needed for quota testing at least.","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"1c4900fca1c69d35a1132e0a0f254ae477c40b8e","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":309,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def show_default_volume_type(self):"},{"line_number":312,"context_line":"        url \u003d \"types/default\""},{"line_number":313,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":314,"context_line":"        body \u003d json.loads(body)"},{"line_number":315,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":316,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def delete_volume_image_metadata(self, volume_id, key_name):"},{"line_number":319,"context_line":"        \"\"\"Delete image metadata item for the volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_2d4f296c","line":316,"range":{"start_line":311,"start_character":0,"end_line":316,"end_character":51},"in_reply_to":"7a3c09a3_403b8138","updated":"2017-01-16 20:50:36.000000000","message":"Ghanshyam:\n\nThank you very much for code reviewing, this method called by test_volume_nested_quotas.py\n\nThanks;\n\nXinli","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":316,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def delete_volume_image_metadata(self, volume_id, key_name):"},{"line_number":319,"context_line":"        \"\"\"Delete image metadata item for the volume.\"\"\""},{"line_number":320,"context_line":"        post_body \u003d json.dumps({\u0027os-unset_image_metadata\u0027: {\u0027key\u0027: key_name}})"},{"line_number":321,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"},{"line_number":322,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":323,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":324,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def retype_volume(self, volume_id, **kwargs):"},{"line_number":327,"context_line":"        \"\"\"Updates volume with new volume type.\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_8a9bca71","line":324,"range":{"start_line":318,"start_character":0,"end_line":324,"end_character":51},"updated":"2017-01-16 09:17:32.000000000","message":"ditto","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"1c4900fca1c69d35a1132e0a0f254ae477c40b8e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":316,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def delete_volume_image_metadata(self, volume_id, key_name):"},{"line_number":319,"context_line":"        \"\"\"Delete image metadata item for the volume.\"\"\""},{"line_number":320,"context_line":"        post_body \u003d json.dumps({\u0027os-unset_image_metadata\u0027: {\u0027key\u0027: key_name}})"},{"line_number":321,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"},{"line_number":322,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":323,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":324,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def retype_volume(self, volume_id, **kwargs):"},{"line_number":327,"context_line":"        \"\"\"Updates volume with new volume type.\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_4d3395ab","line":324,"range":{"start_line":318,"start_character":0,"end_line":324,"end_character":51},"in_reply_to":"7a3c09a3_8a9bca71","updated":"2017-01-16 20:50:36.000000000","message":"Ghanshyam:\nThis function has been called by new function\"test_volume_nested_quotas.py\"\n\nthanks a lot\n\nXinli","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"001322c5315a2fe90bf71f8a519261ba5bf902ce","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        post_body \u003d json.dumps({\u0027os-retype\u0027: kwargs})"},{"line_number":329,"context_line":"        resp, body \u003d self.post(\u0027volumes/%s/action\u0027 % volume_id, post_body)"},{"line_number":330,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":331,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_4a78022c","line":331,"range":{"start_line":331,"start_character":0,"end_line":331,"end_character":51},"updated":"2017-01-16 09:17:32.000000000","message":"unrelated change","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"1c4900fca1c69d35a1132e0a0f254ae477c40b8e","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        post_body \u003d json.dumps({\u0027os-retype\u0027: kwargs})"},{"line_number":329,"context_line":"        resp, body \u003d self.post(\u0027volumes/%s/action\u0027 % volume_id, post_body)"},{"line_number":330,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":331,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_47ce142f","line":331,"range":{"start_line":331,"start_character":0,"end_line":331,"end_character":51},"in_reply_to":"7a3c09a3_4a78022c","updated":"2017-01-16 20:50:36.000000000","message":"This is a bug when checking code, and is being fixed in next patch set","commit_id":"5d030dd76ff2d222b07fd196f44e0f1d6ba806c9"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"54ed09a851cf1751ea92b375779181aae75def6f","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    def update_volume_image_metadata(self, volume_id, **kwargs):"},{"line_number":298,"context_line":"        \"\"\"Update image metadata for the volume."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        Available params: see http://developer.openstack.org/"},{"line_number":301,"context_line":"                              api-ref-blockstorage-v2.html"},{"line_number":302,"context_line":"                              #setVolumeimagemetadata"},{"line_number":303,"context_line":"        \"\"\""},{"line_number":304,"context_line":"        post_body \u003d json.dumps({\u0027os-set_image_metadata\u0027: {\u0027metadata\u0027: kwargs}})"},{"line_number":305,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_0a1fa8b7","line":302,"range":{"start_line":300,"start_character":0,"end_line":302,"end_character":53},"updated":"2017-01-17 06:14:09.000000000","message":"Please refer to accept_volume_transfer for current available params link format(to put the link in one line).","commit_id":"3c676dc263c4ff179b031fa1bae7120573713b21"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"e6c194e2ade1c858e91676d3d3438dc27b68806e","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    def update_volume_image_metadata(self, volume_id, **kwargs):"},{"line_number":298,"context_line":"        \"\"\"Update image metadata for the volume."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        Available params: see http://developer.openstack.org/"},{"line_number":301,"context_line":"                              api-ref-blockstorage-v2.html"},{"line_number":302,"context_line":"                              #setVolumeimagemetadata"},{"line_number":303,"context_line":"        \"\"\""},{"line_number":304,"context_line":"        post_body \u003d json.dumps({\u0027os-set_image_metadata\u0027: {\u0027metadata\u0027: kwargs}})"},{"line_number":305,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a3905b3_4b62afae","line":302,"range":{"start_line":300,"start_character":0,"end_line":302,"end_character":53},"in_reply_to":"7a3c09a3_0a1fa8b7","updated":"2017-01-20 20:35:14.000000000","message":"zhufl:\n\nThank you very much for code review, this issue will be fixed in next patch set\n\nxinli","commit_id":"3c676dc263c4ff179b031fa1bae7120573713b21"}],"tempest/services/identity/v3/json/projects_client.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d321313cbca62ecd02edff80b01c14ae07e4ed5b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            \u0027name\u0027: name,"},{"line_number":42,"context_line":"            \u0027parent_id\u0027: parent_id"},{"line_number":43,"context_line":"        }"},{"line_number":44,"context_line":"        post_body \u003d json.dumps({\u0027project\u0027: post_body})"},{"line_number":45,"context_line":"        resp, body \u003d self.post(\u0027projects\u0027, post_body)"},{"line_number":46,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":47,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_6be15dd0","line":44,"updated":"2016-08-09 18:46:43.000000000","message":"unrelated change, right? The intention is to leave the clients as simple as possible","commit_id":"9d18ec76ebebfbb70659621141aa2ff08dc5b4b5"}],"tempest/services/volume/base/base_volumes_client.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"8b4ec15219ce7cfeaad67abb40b4b11c90b9ba66","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \"\"\"Waits for a Volume to reach a given status.\"\"\""},{"line_number":153,"context_line":"        waiters.wait_for_volume_status(self, volume_id, status)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def wait_for_no_volumes(self):"},{"line_number":156,"context_line":"        waiters.wait_for_no_volumes(self)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def is_resource_deleted(self, id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_8b40fd35","line":155,"updated":"2016-03-17 11:37:11.000000000","message":"We don\u0027t accept \"wrapper\"/utility method in client anymore. \n\nEach method in this class should map to an endpoint/URL in the cinder api.","commit_id":"c5064654e798d41292d32c2ea65c96f0a37e9c20"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d97ab109e85f1942bab37f0331473a422c70ee21","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \"\"\"Waits for a Volume to reach a given status.\"\"\""},{"line_number":153,"context_line":"        waiters.wait_for_volume_status(self, volume_id, status)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def wait_for_no_volumes(self):"},{"line_number":156,"context_line":"        waiters.wait_for_no_volumes(self)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def is_resource_deleted(self, id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_07fbfe47","line":155,"in_reply_to":"1af94dfe_8b40fd35","updated":"2016-08-05 22:05:56.000000000","message":"Just use waiters.wait_for_no_volumes in the test case, don\u0027t introduce a new method.","commit_id":"c5064654e798d41292d32c2ea65c96f0a37e9c20"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38579c92f32d5da7749cdf0741884b29adfe5721","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":302,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def update_volume_image_metadata(self, volume_id, **kwargs):"},{"line_number":305,"context_line":"        \"\"\"Update image metadata for the volume."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        Available params: see http://developer.openstack.org/"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_1094f140","line":304,"updated":"2016-09-16 20:50:25.000000000","message":"Changes in this file are not related to nested quota.  Why are they in the same patch?","commit_id":"4fda00f8b2ad87f6ecd41cfe1c53f308743acf6c"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"4035b07778dbdd6472d5ea212108131bc287aa8d","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":302,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def update_volume_image_metadata(self, volume_id, **kwargs):"},{"line_number":305,"context_line":"        \"\"\"Update image metadata for the volume."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        Available params: see http://developer.openstack.org/"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_5ecd9c2f","line":304,"in_reply_to":"7a8ec9b2_1094f140","updated":"2016-09-17 23:10:25.000000000","message":"xing-yang;\n\nthank you very much fro your code review, the method: update_volume_image_metadata() has been added by another patch, in the nested quotas, we added show_default_volume_type().\n\nThanks;\n\nCharley","commit_id":"4fda00f8b2ad87f6ecd41cfe1c53f308743acf6c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2143a23ed2e1282fb5fcd119a9d851dc6d8ad30a","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        Available params: see http://developer.openstack.org/"},{"line_number":308,"context_line":"                              api-ref-blockstorage-v2.html"},{"line_number":309,"context_line":"                              #setVolumeimagemetadata"},{"line_number":310,"context_line":"        \"\"\""},{"line_number":311,"context_line":"        post_body \u003d json.dumps({\u0027os-set_image_metadata\u0027: {\u0027metadata\u0027: kwargs}})"},{"line_number":312,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_942ef1a3","line":309,"updated":"2016-09-19 15:22:53.000000000","message":"If this API is available on v2 API only, please add these methods into tempest/services/volume/v2/json/volumes_client.py instead of common place.","commit_id":"4fda00f8b2ad87f6ecd41cfe1c53f308743acf6c"},{"author":{"_account_id":21144,"name":"Xinli Guan","email":"xinli@us.ibm.com","username":"xinli"},"change_message_id":"769ef3b4de001c07bb305f870a49e7a16d4f619e","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        Available params: see http://developer.openstack.org/"},{"line_number":308,"context_line":"                              api-ref-blockstorage-v2.html"},{"line_number":309,"context_line":"                              #setVolumeimagemetadata"},{"line_number":310,"context_line":"        \"\"\""},{"line_number":311,"context_line":"        post_body \u003d json.dumps({\u0027os-set_image_metadata\u0027: {\u0027metadata\u0027: kwargs}})"},{"line_number":312,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_c68fe4ca","line":309,"in_reply_to":"7a8ec9b2_942ef1a3","updated":"2016-09-19 17:55:10.000000000","message":"Ken\u0027ichi:\n\nAfter reviewing code: tempest/services/volume/v2/json/volumes_client.py, I figure out that \ndef update_volume_image_metadata and \ndef delete_volume_image_metadata have been moved to tempest/services/volume/v2/json/volumes_client.py. I will remove both of them from tempest/services/volume/base/base_volumes_client.py\n\nThanks a lot;\n\nxinli","commit_id":"4fda00f8b2ad87f6ecd41cfe1c53f308743acf6c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0d8c2f195e8ec05679c9f185c5f4b719e16f83f9","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        Available params: see http://developer.openstack.org/"},{"line_number":308,"context_line":"                              api-ref-blockstorage-v2.html"},{"line_number":309,"context_line":"                              #setVolumeimagemetadata"},{"line_number":310,"context_line":"        \"\"\""},{"line_number":311,"context_line":"        post_body \u003d json.dumps({\u0027os-set_image_metadata\u0027: {\u0027metadata\u0027: kwargs}})"},{"line_number":312,"context_line":"        url \u003d \"volumes/%s/action\" % (volume_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_f0d2a833","line":309,"in_reply_to":"7a8ec9b2_c68fe4ca","updated":"2016-09-20 12:56:54.000000000","message":"Ah, yeah you are right.\nIt is ok to just remove them.","commit_id":"4fda00f8b2ad87f6ecd41cfe1c53f308743acf6c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d9b6dd68b5368cb9f8630e46d9b1c8c8e9140fa9","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def show_default_volume_type(self):"},{"line_number":319,"context_line":"        url \u003d \"types/default\""},{"line_number":320,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":321,"context_line":"        body \u003d json.loads(body)"},{"line_number":322,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_30125063","line":319,"range":{"start_line":319,"start_character":8,"end_line":319,"end_character":29},"updated":"2016-09-20 13:03:54.000000000","message":"This seems type URL, so it is better to migrate this method into tempest/services/volume/v2/json/admin/types_client.py","commit_id":"4fda00f8b2ad87f6ecd41cfe1c53f308743acf6c"}]}
