)]}'
{"nova/compute/provider_tree.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7bf71fc7f46f8216fd05d984f3ecf9c3c9f9d241","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            is_sharing \u003d os_traits.MISC_SHARES_VIA_AGGREGATE in pdata.traits"},{"line_number":496,"context_line":"            if has_rc and is_sharing:"},{"line_number":497,"context_line":"                return True"},{"line_number":498,"context_line":"        return False"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def has_traits(self, name_or_uuid, traits):"},{"line_number":501,"context_line":"        \"\"\"Given a name or UUID of a provider, query whether that provider has"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_7026d6cd","line":498,"updated":"2018-06-12 13:10:07.000000000","message":"✔","commit_id":"7e48b227d0622b268f74d1a559aca4cd3784f7cf"}],"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            \u0027/resource_providers/%s/aggregates\u0027 % rp_uuid,"},{"line_number":460,"context_line":"            version\u003d\u00271.1\u0027).body[\u0027aggregates\u0027]"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def _post_resource_provider(self, rp_name):"},{"line_number":463,"context_line":"        return self.placement_api.post("},{"line_number":464,"context_line":"            url\u003d\u0027/resource_providers\u0027,"},{"line_number":465,"context_line":"            version\u003d\u00271.20\u0027, body\u003d{\u0027name\u0027: rp_name}).body"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def _set_inventory(self, rp_uuid, inv_body):"},{"line_number":468,"context_line":"        \"\"\"This will set the inventory for a given resource provider."},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        :param rp_uuid: UUID of the resource provider to update"},{"line_number":471,"context_line":"        :param inv_body: inventory to set on the provider"},{"line_number":472,"context_line":"        :returns: APIResponse object with the results"},{"line_number":473,"context_line":"        \"\"\""},{"line_number":474,"context_line":"        return self.placement_api.post("},{"line_number":475,"context_line":"            url\u003d (\u0027/resource_providers/%s/inventories\u0027 % rp_uuid),"},{"line_number":476,"context_line":"            version\u003d\u00271.15\u0027, body\u003dinv_body).body"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def _get_resource_provider_by_uuid(self, rp_uuid):"},{"line_number":479,"context_line":"        return self.placement_api.get("},{"line_number":480,"context_line":"            \u0027/resource_providers/%s\u0027 % rp_uuid, version\u003d\u00271.15\u0027).body"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    def _set_aggregate(self, rp_uuid, agg_id):"},{"line_number":483,"context_line":"        provider \u003d self.placement_api.get("},{"line_number":484,"context_line":"            \u0027/resource_providers/%s\u0027 % rp_uuid).body"},{"line_number":485,"context_line":"        post_agg_req \u003d {\"aggregates\": [agg_id],"},{"line_number":486,"context_line":"                        \"resource_provider_generation\": provider[\u0027generation\u0027]}"},{"line_number":487,"context_line":"        return self.placement_api.put("},{"line_number":488,"context_line":"            \u0027/resource_providers/%s/aggregates\u0027 % rp_uuid, version\u003d\u00271.19\u0027,"},{"line_number":489,"context_line":"            body\u003dpost_agg_req).body"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def assertFlavorMatchesAllocation(self, flavor, allocation):"},{"line_number":492,"context_line":"        self.assertEqual(flavor[\u0027vcpus\u0027], allocation[\u0027VCPU\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_a2fd9b6f","line":489,"range":{"start_line":462,"start_character":0,"end_line":489,"end_character":35},"updated":"2018-06-05 17:09:29.000000000","message":"Note to self: this chunk is new*; the rest is cut/paste from test_servers.\n\n(*New in this change set - these methods were in test_servers in PS11 of this change.)","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"be14baf61c6ba6f9af757b68c9088cbade9ce85a","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        self.computes \u003d {}"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def _start_compute(self, host):"},{"line_number":392,"context_line":"        \"\"\"Start a nova compute service on the given host"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        :param host: the name of the host that will be associated to the"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_8ed63853","line":391,"updated":"2018-06-08 08:40:32.000000000","message":"this missing the cell handling that the original _start_compute had causing functional tests to fail.","commit_id":"ccb6c78b4758681e5af9d203d71a522182ca9457"}],"nova/tests/functional/libvirt/test_shared_resource_provider.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self._set_aggregate(self.host_uuid, uuids.shr_disk_agg)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # run update_available_resource periodic task after configuring shared"},{"line_number":66,"context_line":"        # resource provider to update compute compute node resources"},{"line_number":67,"context_line":"        self._run_periodics()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        server_req_body \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_0cc11ee5","line":66,"range":{"start_line":66,"start_character":38,"end_line":66,"end_character":45},"updated":"2018-06-05 17:09:29.000000000","message":"strike","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        server_req_body \u003d {"},{"line_number":70,"context_line":"            \u0027server\u0027: {"},{"line_number":71,"context_line":"                \u0027imageRef\u0027: \u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"},{"line_number":72,"context_line":"                \u0027flavorRef\u0027: \u00271\u0027,"},{"line_number":73,"context_line":"                \u0027name\u0027: \u0027test_rebuild_with_new_image\u0027,"},{"line_number":74,"context_line":"                \u0027networks\u0027: \u0027none\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_ec92a2fc","line":71,"range":{"start_line":71,"start_character":28,"end_line":71,"end_character":66},"updated":"2018-06-05 17:09:29.000000000","message":"use a uuidsentinel","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5ba3766c45bcb110ea1b7fee289ce557ad97bdfd","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        server_req_body \u003d {"},{"line_number":70,"context_line":"            \u0027server\u0027: {"},{"line_number":71,"context_line":"                \u0027imageRef\u0027: \u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"},{"line_number":72,"context_line":"                \u0027flavorRef\u0027: \u00271\u0027,"},{"line_number":73,"context_line":"                \u0027name\u0027: \u0027test_rebuild_with_new_image\u0027,"},{"line_number":74,"context_line":"                \u0027networks\u0027: \u0027none\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_e68b871b","line":71,"range":{"start_line":71,"start_character":28,"end_line":71,"end_character":66},"in_reply_to":"5f7c97a3_3563f1b3","updated":"2018-06-06 14:53:34.000000000","message":"Gotcha.  Arguably the fakes should be using sentinels, but that\u0027s not something you should do here.","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"b821a0fad929ea9733f7752054d9301f7eb3b73c","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        server_req_body \u003d {"},{"line_number":70,"context_line":"            \u0027server\u0027: {"},{"line_number":71,"context_line":"                \u0027imageRef\u0027: \u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"},{"line_number":72,"context_line":"                \u0027flavorRef\u0027: \u00271\u0027,"},{"line_number":73,"context_line":"                \u0027name\u0027: \u0027test_rebuild_with_new_image\u0027,"},{"line_number":74,"context_line":"                \u0027networks\u0027: \u0027none\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_3563f1b3","line":71,"range":{"start_line":71,"start_character":28,"end_line":71,"end_character":66},"in_reply_to":"5f7c97a3_ec92a2fc","updated":"2018-06-06 08:32:52.000000000","message":"We can\u0027t use uuidsentinel here because we are using the stub_out_image_service()\n#link: https://review.openstack.org/#/c/560459/12/nova/tests/functional/integrated_helpers.py@381 \nwhich provides the images from here [1]: https://github.com/openstack/nova/blob/master/nova/tests/unit/image/fake.py#L44 \nso it\u0027s mandatory to use images from [1] to boot the instance.\n\nJust to inform: If we use the uuidsentinel here then we will get below error while running the this test.\n\nError:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"nova/tests/functional/libvirt/test_shared_resource_provider.py\", line 78, in test_shared_storage_rp_configuration_with_cn_rp\n        server \u003d self.api.post_server(server_req_body)\n      File \"nova/tests/functional/api/client.py\", line 282, in post_server\n        response \u003d self.api_post(\u0027/servers\u0027, server).body\n      File \"nova/tests/functional/api/client.py\", line 234, in api_post\n        return APIResponse(self.api_request(relative_uri, **kwargs))\n      File \"nova/tests/functional/api/client.py\", line 212, in api_request\n        response\u003dresponse)\n    nova.tests.functional.api.client.OpenStackApiException: Unexpected status code: {\"badRequest\": {\"code\": 400, \"message\": \"Can not find requested image\"}}","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            \u0027server\u0027: {"},{"line_number":71,"context_line":"                \u0027imageRef\u0027: \u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"},{"line_number":72,"context_line":"                \u0027flavorRef\u0027: \u00271\u0027,"},{"line_number":73,"context_line":"                \u0027name\u0027: \u0027test_rebuild_with_new_image\u0027,"},{"line_number":74,"context_line":"                \u0027networks\u0027: \u0027none\u0027"},{"line_number":75,"context_line":"            }"},{"line_number":76,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_2cfbba47","line":73,"range":{"start_line":73,"start_character":25,"end_line":73,"end_character":52},"updated":"2018-06-05 17:09:29.000000000","message":"copy/pasta","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # remaining resources are allocated from host_uuid."},{"line_number":86,"context_line":"        self.assertEqual({\u0027DISK_GB\u0027: 1}, shared_rp_usages)"},{"line_number":87,"context_line":"        self.assertEqual({\u0027MEMORY_MB\u0027: 512, \u0027VCPU\u0027: 1},"},{"line_number":88,"context_line":"                         cn_rp_usages)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_ac9caa0e","line":88,"updated":"2018-06-05 17:09:29.000000000","message":"Yes!","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c45423b868ed8a96f783fa214a67ee194e1ad209","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SharedStorageProviderUsageTestCase("},{"line_number":27,"context_line":"        integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":28,"context_line":"    compute_driver \u003d \u0027fake.FakeLibvirtDriver\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(SharedStorageProviderUsageTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_c3cad944","line":28,"range":{"start_line":28,"start_character":22,"end_line":28,"end_character":44},"updated":"2018-06-07 17:43:57.000000000","message":"@Jay, this is where it\u0027s used.","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea438ab61341354f49b230af9e65c5cc38e3b247","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                        \u0027nova.virt.libvirt.driver.libvirt\u0027,"},{"line_number":34,"context_line":"                        fakelibvirt))"},{"line_number":35,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027nova.virt.libvirt.host.libvirt\u0027,"},{"line_number":36,"context_line":"                        fakelibvirt))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self.compute \u003d self._start_compute(CONF.host)"},{"line_number":39,"context_line":"        nodename \u003d self.compute.manager._get_nodename(None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_c3abb91b","line":36,"updated":"2018-06-07 18:11:02.000000000","message":"I removed the FakeLibvirtDriver thing and the requirement in the ProviderUsageBaseTestCase that there be a compute_driver class attribute and just put the following here:\n\n         self.flags(compute_driver\u003d\u0027libvirt.LibvirtDriver\u0027)\n         self.useFixture(\n            fixtures.MockPatch(\n                \u0027nova.virt.libvirt.driver.LibvirtDriver.init_host\u0027))\n        self.useFixture(\n            fixtures.MockPatch(\n                \u0027nova.virt.libvirt.driver.LibvirtDriver.spawn\u0027))\n\n\nworks just fine.","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0eaa96de4a2c1982e25fe645f6d63763f5f65a54","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                        \u0027nova.virt.libvirt.driver.libvirt\u0027,"},{"line_number":34,"context_line":"                        fakelibvirt))"},{"line_number":35,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027nova.virt.libvirt.host.libvirt\u0027,"},{"line_number":36,"context_line":"                        fakelibvirt))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self.compute \u003d self._start_compute(CONF.host)"},{"line_number":39,"context_line":"        nodename \u003d self.compute.manager._get_nodename(None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_197282ae","line":36,"in_reply_to":"5f7c97a3_c3abb91b","updated":"2018-06-07 18:48:15.000000000","message":"Cool, seems like a good option.","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7ca04cbf4b4f2d93cbadab8fbd8fbcf0efb8ef25","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5f7c97a3_1b302c9e","line":94,"updated":"2018-06-08 08:34:06.000000000","message":"I think we should assert that the compute RP does not have DISK_GB inventory as this is the aim of the patch as far as I understand.","commit_id":"ccb6c78b4758681e5af9d203d71a522182ca9457"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78f75c9295f07b92b0c90442777d4205e0ecb406","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.useFixture("},{"line_number":41,"context_line":"            fixtures.MockPatch("},{"line_number":42,"context_line":"                \u0027nova.virt.libvirt.driver.LibvirtDriver.spawn\u0027))"},{"line_number":43,"context_line":"        self.compute \u003d self._start_compute(CONF.host)"},{"line_number":44,"context_line":"        nodename \u003d self.compute.manager._get_nodename(None)"},{"line_number":45,"context_line":"        self.host_uuid \u003d self._get_provider_uuid_by_host(nodename)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_73ddb2db","line":43,"updated":"2018-06-09 15:07:18.000000000","message":"Is _start_compute asynchronous? Test failure looks like timing.","commit_id":"d63c3c36518b832cd6fe659cc85b0a39363c91c0"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ad9d9b2a5107144654345bc97c8dab36f433102c","unresolved":false,"context_lines":[{"line_number":1636,"context_line":""},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"class SharedStorageProviderUsageTestCase(ProviderUsageBaseTestCase):"},{"line_number":1639,"context_line":"    compute_driver \u003d \u0027fake.SmallFakeDriver\u0027"},{"line_number":1640,"context_line":""},{"line_number":1641,"context_line":"    def setUp(self):"},{"line_number":1642,"context_line":"        super(SharedStorageProviderUsageTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_0e73ff17","line":1639,"range":{"start_line":1639,"start_character":27,"end_line":1639,"end_character":42},"updated":"2018-05-25 01:01:38.000000000","message":"X\n\nsee below","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ad9d9b2a5107144654345bc97c8dab36f433102c","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"        super(SharedStorageProviderUsageTestCase, self).setUp()"},{"line_number":1643,"context_line":"        self.compute \u003d self._start_compute(\u0027host1\u0027)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"    def _post_resource_provider(self, rp_name):"},{"line_number":1646,"context_line":"        return self.placement_api.post("},{"line_number":1647,"context_line":"            url\u003d\u0027/resource_providers\u0027,"},{"line_number":1648,"context_line":"            version\u003d\u00271.20\u0027, body\u003d{\u0027name\u0027: rp_name}).body"},{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"    def _set_inventory(self, rp_uuid, inv_body):"},{"line_number":1651,"context_line":"        \"\"\"This will set the inventory for a given resource provider."},{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        :param rp_uuid: UUID of the resource provider to update"},{"line_number":1654,"context_line":"        :param inv_body: inventory to set on the provider"},{"line_number":1655,"context_line":"        :returns: APIResponse object with the results"},{"line_number":1656,"context_line":"        \"\"\""},{"line_number":1657,"context_line":"        return self.placement_api.post("},{"line_number":1658,"context_line":"            url\u003d (\u0027/resource_providers/%s/inventories\u0027 % rp_uuid),"},{"line_number":1659,"context_line":"            version\u003d\u00271.15\u0027, body\u003dinv_body).body"},{"line_number":1660,"context_line":""},{"line_number":1661,"context_line":"    def _delete_inventory(self, rp_uuid, rc):"},{"line_number":1662,"context_line":"        \"\"\"Delete resource(s) from inventory for a given resource provider."},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        :param rp_uuid: UUID of the resource provider to update"},{"line_number":1665,"context_line":"        :param rc: resource class"},{"line_number":1666,"context_line":"        :returns: APIResponse object with the results"},{"line_number":1667,"context_line":"        \"\"\""},{"line_number":1668,"context_line":"        return self.placement_api.delete("},{"line_number":1669,"context_line":"            url\u003d (\u0027/resource_providers/%s/inventories/%s\u0027 % ("},{"line_number":1670,"context_line":"                rp_uuid, rc))).body"},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"    def _get_resource_provider_by_uuid(self, rp_uuid):"},{"line_number":1673,"context_line":"        return self.placement_api.get("},{"line_number":1674,"context_line":"            \u0027/resource_providers/%s\u0027 % rp_uuid, version\u003d\u00271.15\u0027).body"},{"line_number":1675,"context_line":""},{"line_number":1676,"context_line":"    def _set_aggregate(self, rp_uuid, agg_id):"},{"line_number":1677,"context_line":"        provider \u003d self.placement_api.get("},{"line_number":1678,"context_line":"            \u0027/resource_providers/%s\u0027 % rp_uuid).body"},{"line_number":1679,"context_line":"        post_agg_req \u003d {\"aggregates\": [agg_id],"},{"line_number":1680,"context_line":"                        \"resource_provider_generation\": provider[\u0027generation\u0027]}"},{"line_number":1681,"context_line":"        return self.placement_api.put("},{"line_number":1682,"context_line":"            \u0027/resource_providers/%s/aggregates\u0027 % rp_uuid, version\u003d\u00271.19\u0027,"},{"line_number":1683,"context_line":"            body\u003dpost_agg_req).body"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def _get_provider_usages(self, provider_uuid):"},{"line_number":1686,"context_line":"        return self.placement_api.get("},{"line_number":1687,"context_line":"            \u0027/resource_providers/%s/usages\u0027 % provider_uuid).body[\u0027usages\u0027]"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    def test_shared_storage_rp_configuration_with_cn_rp(self):"},{"line_number":1690,"context_line":"        \"\"\"Test to check whether compute node and shared storage resource"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_aeac4b9f","line":1687,"range":{"start_line":1645,"start_character":0,"end_line":1687,"end_character":75},"updated":"2018-05-25 01:01:38.000000000","message":"These should be moved/merged (some are duplicates or very close) into the ProviderUsageBaseTestCase base class.","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ad9d9b2a5107144654345bc97c8dab36f433102c","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"        provider inventory is configured properly or not."},{"line_number":1692,"context_line":"        \"\"\""},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"        # compute node RP"},{"line_number":1695,"context_line":"        self.host_uuid \u003d self._get_provider_uuid_by_host(self.compute.host)"},{"line_number":1696,"context_line":""},{"line_number":1697,"context_line":"        # shared storage resource provider"},{"line_number":1698,"context_line":"        shared_RP \u003d self._post_resource_provider("}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_6e7b9327","line":1695,"range":{"start_line":1694,"start_character":0,"end_line":1695,"end_character":75},"updated":"2018-05-25 01:01:38.000000000","message":"Assuming you need to do this at all (i.e. assuming it\u0027s not just self.compute.uuid, which I think it is) you should do it in setUp().","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ad9d9b2a5107144654345bc97c8dab36f433102c","unresolved":false,"context_lines":[{"line_number":1705,"context_line":"        self._set_inventory(shared_RP[\u0027uuid\u0027], inv)"},{"line_number":1706,"context_line":""},{"line_number":1707,"context_line":"        # Added traits to shared storage resource provider"},{"line_number":1708,"context_line":"        self._set_provider_traits(shared_RP[\u0027uuid\u0027],"},{"line_number":1709,"context_line":"                                              [\u0027MISC_SHARES_VIA_AGGREGATE\u0027])"},{"line_number":1710,"context_line":""},{"line_number":1711,"context_line":"        # add both cn_rp and shared_rp under one aggregate"},{"line_number":1712,"context_line":"        agg_body \u003d {\"aggregate\": {\"name\": \"shared_resource_aggregate\"}}"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ee8fa327","line":1709,"range":{"start_line":1708,"start_character":52,"end_line":1709,"end_character":46},"updated":"2018-05-25 01:01:38.000000000","message":"this is a weird indent","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ad9d9b2a5107144654345bc97c8dab36f433102c","unresolved":false,"context_lines":[{"line_number":1709,"context_line":"                                              [\u0027MISC_SHARES_VIA_AGGREGATE\u0027])"},{"line_number":1710,"context_line":""},{"line_number":1711,"context_line":"        # add both cn_rp and shared_rp under one aggregate"},{"line_number":1712,"context_line":"        agg_body \u003d {\"aggregate\": {\"name\": \"shared_resource_aggregate\"}}"},{"line_number":1713,"context_line":"        agg \u003d self.api.post_aggregate(agg_body)"},{"line_number":1714,"context_line":"        self._set_aggregate(shared_RP[\u0027uuid\u0027], agg[\u0027uuid\u0027])"},{"line_number":1715,"context_line":"        self._set_aggregate(self.host_uuid, agg[\u0027uuid\u0027])"},{"line_number":1716,"context_line":"        # As compute_driver is faked, we need to delete inventory explicitly"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ae852b09","line":1713,"range":{"start_line":1712,"start_character":8,"end_line":1713,"end_character":47},"updated":"2018-05-25 01:01:38.000000000","message":"This isn\u0027t necessary.  (You can just use a sentinel agg UUID below, e.g. uuids.shr_disk_agg)","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ad9d9b2a5107144654345bc97c8dab36f433102c","unresolved":false,"context_lines":[{"line_number":1713,"context_line":"        agg \u003d self.api.post_aggregate(agg_body)"},{"line_number":1714,"context_line":"        self._set_aggregate(shared_RP[\u0027uuid\u0027], agg[\u0027uuid\u0027])"},{"line_number":1715,"context_line":"        self._set_aggregate(self.host_uuid, agg[\u0027uuid\u0027])"},{"line_number":1716,"context_line":"        # As compute_driver is faked, we need to delete inventory explicitly"},{"line_number":1717,"context_line":"        # for a compute node resource provider."},{"line_number":1718,"context_line":"        self._delete_inventory(self.host_uuid, \u0027DISK_GB\u0027)"},{"line_number":1719,"context_line":""},{"line_number":1720,"context_line":"        server_req_body \u003d {"},{"line_number":1721,"context_line":"            \u0027server\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_6e53936c","line":1718,"range":{"start_line":1716,"start_character":0,"end_line":1718,"end_character":57},"updated":"2018-05-25 01:01:38.000000000","message":"No, this defeats the whole point of the patch, which is that the virt driver should do this for us.\n\nSo you should be able to get rid of this; and we\u0027ll probably have to add a call to self._run_periodics() to make sure we hit the changed code path before we create our instance.\n\nBut first you\u0027ll have to switch over to some form of mocked libvirt driver rather than the generic SmallFakeDriver.\n\n...in which case it will probably be more appropriate to move this test case into a libvirt functional test package (under nova.tests.functional.libvirt).","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"8ca0aee534b37c06dc69baa7d658a15e1566facb","unresolved":false,"context_lines":[{"line_number":1713,"context_line":"        agg \u003d self.api.post_aggregate(agg_body)"},{"line_number":1714,"context_line":"        self._set_aggregate(shared_RP[\u0027uuid\u0027], agg[\u0027uuid\u0027])"},{"line_number":1715,"context_line":"        self._set_aggregate(self.host_uuid, agg[\u0027uuid\u0027])"},{"line_number":1716,"context_line":"        # As compute_driver is faked, we need to delete inventory explicitly"},{"line_number":1717,"context_line":"        # for a compute node resource provider."},{"line_number":1718,"context_line":"        self._delete_inventory(self.host_uuid, \u0027DISK_GB\u0027)"},{"line_number":1719,"context_line":""},{"line_number":1720,"context_line":"        server_req_body \u003d {"},{"line_number":1721,"context_line":"            \u0027server\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_aee686af","line":1718,"range":{"start_line":1716,"start_character":0,"end_line":1718,"end_character":57},"in_reply_to":"5f7c97a3_6e53936c","updated":"2018-05-25 10:26:21.000000000","message":"Yes, i was on the same page but libvirt driver is mocked everywhere, so decided to use the same.\nAnd if we don\u0027t want to mock, then need to implement actual libvirt driver and it\u0027s methods.\nSurely that will going to take time and lots of code addition for Functional Test Case, \nI will try my best and work on it.","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ae785b627e0784c00d9b9e67caef36b2960e6d41","unresolved":false,"context_lines":[{"line_number":1713,"context_line":"        agg \u003d self.api.post_aggregate(agg_body)"},{"line_number":1714,"context_line":"        self._set_aggregate(shared_RP[\u0027uuid\u0027], agg[\u0027uuid\u0027])"},{"line_number":1715,"context_line":"        self._set_aggregate(self.host_uuid, agg[\u0027uuid\u0027])"},{"line_number":1716,"context_line":"        # As compute_driver is faked, we need to delete inventory explicitly"},{"line_number":1717,"context_line":"        # for a compute node resource provider."},{"line_number":1718,"context_line":"        self._delete_inventory(self.host_uuid, \u0027DISK_GB\u0027)"},{"line_number":1719,"context_line":""},{"line_number":1720,"context_line":"        server_req_body \u003d {"},{"line_number":1721,"context_line":"            \u0027server\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_9c289be2","line":1718,"range":{"start_line":1716,"start_character":0,"end_line":1718,"end_character":57},"in_reply_to":"5f7c97a3_aee686af","updated":"2018-05-27 05:15:06.000000000","message":"I\u0027m sure we\u0027re not the first to want functional tests over libvirt driver methods. Let\u0027s look/ask around before you spend a lot of effort writing a whole mocked driver.","commit_id":"d9d099ddb04132d7a08b1cc7de2fff96bbe29898"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"be14baf61c6ba6f9af757b68c9088cbade9ce85a","unresolved":false,"context_lines":[{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":"        self.computes \u003d {}"},{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"    def _start_compute(self, host, cell_name\u003dNone):"},{"line_number":1498,"context_line":"        \"\"\"Start a nova compute service on the given host"},{"line_number":1499,"context_line":""},{"line_number":1500,"context_line":"        :param host: the name of the host that will be associated to the"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_aef1b403","side":"PARENT","line":1497,"updated":"2018-06-08 08:40:32.000000000","message":"This patch replace this function with a different one making some functional test fails","commit_id":"54c9a944c618dc173bd1214be4de9a44479c8959"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7ca04cbf4b4f2d93cbadab8fbd8fbcf0efb8ef25","unresolved":false,"context_lines":[{"line_number":1450,"context_line":"                      \u0027volume-backed server\u0027, six.text_type(resp))"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":""},{"line_number":1453,"context_line":"class ProviderTreeTests(integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":1454,"context_line":"    compute_driver \u003d \u0027fake.SmallFakeDriver\u0027"},{"line_number":1455,"context_line":""},{"line_number":1456,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_9bc99c7a","line":1453,"updated":"2018-06-08 08:34:06.000000000","message":"This refactor could happen in a separate patch to help focusing this patch to the real change.","commit_id":"ccb6c78b4758681e5af9d203d71a522182ca9457"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"408ab425760bf708d08a4d8c12bebc4b684ae700","unresolved":false,"context_lines":[{"line_number":17397,"context_line":"                return_value\u003d1024)"},{"line_number":17398,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver._get_vcpu_total\u0027,"},{"line_number":17399,"context_line":"                return_value\u003d24)"},{"line_number":17400,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver._has_sharing_provider\u0027)"},{"line_number":17401,"context_line":"    @mock.patch("},{"line_number":17402,"context_line":"        \u0027nova.compute.provider_tree.ProviderTree\u0027)"},{"line_number":17403,"context_line":"    def _test_update_provider_tree(self,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_a93e8488","line":17400,"range":{"start_line":17400,"start_character":0,"end_line":17400,"end_character":79},"updated":"2018-04-20 11:24:31.000000000","message":"We\u0027re going to need tests that actually hit the _has_sharing_provider method.  You could do it in this one, or write up some separate unit tests.  They would ideally not mock anything: they would construct a ProviderTree instance of varying shapes and run it through _has_sharing_provider with various resource classes.","commit_id":"7e05ba0be8fc46b4b336925d81f25d15f3573e79"}],"nova/virt/fake.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5f7c97a3_0c7cbee9","updated":"2018-06-05 17:09:29.000000000","message":"Not super jazzed about a libvirt-specific thingy living outside of a libvirt module path.  Why don\u0027t you put your FakeLibvirtDriver in nova.tests.unit.virt.libvirt.fakelibvirt?  You\u0027re importing that guy from your functional test anyway.","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"b821a0fad929ea9733f7752054d9301f7eb3b73c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5f7c97a3_b545c117","in_reply_to":"5f7c97a3_0c7cbee9","updated":"2018-06-06 08:32:52.000000000","message":"Hi Eric, Thanks for review.\n\nBasically we can\u0027t put this FakeLibvirtDriver class under nova.tests.unit.virt.libvirt.fakelibvirt because while loading the compute_driver here #link: https://github.com/openstack/nova/blob/master/nova/virt/driver.py#L1709 the \u0027nova.virt\u0027 repo path is given so this class should be under nova/virt/ repo.","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5ba3766c45bcb110ea1b7fee289ce557ad97bdfd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"5f7c97a3_66c5373d","in_reply_to":"5f7c97a3_b545c117","updated":"2018-06-06 14:53:34.000000000","message":"I see.\n\nWe could introduce a new nova.virt.libvirt.fake module.\n\nNeither is pretty.  I\u0027d like other reviewers to comment.","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            del self.instances[instance.uuid]"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"class FakeLibvirtDriver(libvirt_driver.LibvirtDriver):"},{"line_number":724,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"},{"line_number":725,"context_line":"        super(FakeLibvirtDriver, self).__init__(virtapi)"},{"line_number":726,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_6c92125b","line":723,"range":{"start_line":723,"start_character":6,"end_line":723,"end_character":23},"updated":"2018-06-05 17:09:29.000000000","message":"Not to be confused with nova.tests.unit.virt.libvirt.fakelibvirt.FakeLibvirtFixture.  I can see that this is quite different.  But I suspect that, if we want to reuse this one in the future, it may need to become a fixture.  In which case the two may end up converging.","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a0f15f55366a46d0756db22c92dd710d2d9452c3","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            del self.instances[instance.uuid]"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"class FakeLibvirtDriver(libvirt_driver.LibvirtDriver):"},{"line_number":723,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"},{"line_number":724,"context_line":"        super(FakeLibvirtDriver, self).__init__(virtapi)"},{"line_number":725,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_a6deef3b","line":722,"range":{"start_line":722,"start_character":6,"end_line":722,"end_character":23},"updated":"2018-06-06 15:21:39.000000000","message":"Hmm, I have a suspicion this will be extremely confusing for readers of unit tests in the future... All of the other FakeXXXDriver classes in this file are agnostic to the particular virt driver and are designed *only* to mask or mock a particular method on the virt driver API -- for example live migration or unshelve+spawn.\n\nWould it be possible to replace this class with just a @mock.patch(\u0027nova.virt.driver.Driver.spawn|init_host\u0027) in the tests\u0027s setUp() method?","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e919180697a58b54fd2aecd06f37ad5d13b70706","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            del self.instances[instance.uuid]"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"class FakeLibvirtDriver(libvirt_driver.LibvirtDriver):"},{"line_number":723,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"},{"line_number":724,"context_line":"        super(FakeLibvirtDriver, self).__init__(virtapi)"},{"line_number":725,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_e9b918cb","line":722,"range":{"start_line":722,"start_character":6,"end_line":722,"end_character":23},"in_reply_to":"5f7c97a3_a6deef3b","updated":"2018-06-06 15:26:33.000000000","message":"I haven\u0027t followed it all the way through, but the point is that the new functional test must invoke the *libvirt* update_provider_tree method, and (now or in the future) anything else it invokes self.*-wise.  With a fixture, I suppose you could monkey patch the fixture\u0027s update_provider_tree mock (and whatever else) to point to libvirt\u0027s - is that what you have in mind here?","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c45423b868ed8a96f783fa214a67ee194e1ad209","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            del self.instances[instance.uuid]"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"class FakeLibvirtDriver(libvirt_driver.LibvirtDriver):"},{"line_number":723,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"},{"line_number":724,"context_line":"        super(FakeLibvirtDriver, self).__init__(virtapi)"},{"line_number":725,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_232aade6","line":722,"range":{"start_line":722,"start_character":6,"end_line":722,"end_character":23},"in_reply_to":"5f7c97a3_dc4e5c6d","updated":"2018-06-07 17:43:57.000000000","message":"\u003e This doesn\u0027t affect the update_provider_tree() method at all.\n\nThat\u0027s exactly the point.  The functional test needs to run through the actual libvirt driver\u0027s actual update_provider_tree method.\n\n \u003e It just mocks out init_host() and spawn()...\n\nRight, so the functional test can spin up the driver and \"spawn\" an instance.  We want that stuff to succeed (really no-op) without having to mock out a bunch of libvirt internals, because that\u0027s not what\u0027s being tested.  We\u0027re just testing the scheduler aspect - that it finds and allocates the DISK_GB resource from the sharing provider.\n\n \u003e And, actually, I just went through the entire patch, and this class\n \u003e isn\u0027t used anywhere at all.\n\nI marked where it\u0027s used.","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6a558482e9d8f14c52edc01b1a9cd336f1547675","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            del self.instances[instance.uuid]"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"class FakeLibvirtDriver(libvirt_driver.LibvirtDriver):"},{"line_number":723,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"},{"line_number":724,"context_line":"        super(FakeLibvirtDriver, self).__init__(virtapi)"},{"line_number":725,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_dc4e5c6d","line":722,"range":{"start_line":722,"start_character":6,"end_line":722,"end_character":23},"in_reply_to":"5f7c97a3_e9b918cb","updated":"2018-06-06 15:46:36.000000000","message":"This doesn\u0027t affect the update_provider_tree() method at all. It just mocks out init_host() and spawn()...\n\nAnd, actually, I just went through the entire patch, and this class isn\u0027t used anywhere at all.\n\nSo, it should be removed.","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b375527391bea626d41993560414ea29d965860e","unresolved":false,"context_lines":[{"line_number":6360,"context_line":"        # each of them having 16 available instances, the total here will be"},{"line_number":6361,"context_line":"        # 32."},{"line_number":6362,"context_line":"        # If one of the 2 pGPUs doesn\u0027t support \u0027nvidia-35\u0027, it won\u0027t be used."},{"line_number":6363,"context_line":"        # TODO(sbauza): Use ProviderTree and traits to make a better world."},{"line_number":6364,"context_line":"        vgpus \u003d self._get_vgpu_total()"},{"line_number":6365,"context_line":""},{"line_number":6366,"context_line":"        # NOTE(jaypipes): We leave some fields like allocation_ratio and"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_ac6a6aea","line":6363,"range":{"start_line":6363,"start_character":28,"end_line":6363,"end_character":44},"updated":"2018-06-05 17:09:29.000000000","message":"strike","commit_id":"ec61b11081ae6ead1c24dc994f0e716be39cec5f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a0f15f55366a46d0756db22c92dd710d2d9452c3","unresolved":false,"context_lines":[{"line_number":6318,"context_line":"    def refresh_instance_security_rules(self, instance):"},{"line_number":6319,"context_line":"        self.firewall_driver.refresh_instance_security_rules(instance)"},{"line_number":6320,"context_line":""},{"line_number":6321,"context_line":"    def _has_sharing_provider(self, provider_tree, resource_class):"},{"line_number":6322,"context_line":"        \"\"\"Returns whether the specified provider_tree contains any sharing"},{"line_number":6323,"context_line":"        providers of inventory of the specified resource_class."},{"line_number":6324,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_c903fcbd","line":6321,"updated":"2018-06-06 15:21:39.000000000","message":"This should probably be a method on ProviderTree, so the caller can just do:\n\n if provider_tree.has_sharing_provider(resource_class):","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"480db99f8257c8436841d8a4ee1fc4ed5e1a7add","unresolved":false,"context_lines":[{"line_number":6318,"context_line":"    def refresh_instance_security_rules(self, instance):"},{"line_number":6319,"context_line":"        self.firewall_driver.refresh_instance_security_rules(instance)"},{"line_number":6320,"context_line":""},{"line_number":6321,"context_line":"    def _has_sharing_provider(self, provider_tree, resource_class):"},{"line_number":6322,"context_line":"        \"\"\"Returns whether the specified provider_tree contains any sharing"},{"line_number":6323,"context_line":"        providers of inventory of the specified resource_class."},{"line_number":6324,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_8e4f18bd","line":6321,"in_reply_to":"5f7c97a3_c903fcbd","updated":"2018-06-08 08:56:08.000000000","message":"I agreed with Jay comment on this point and I will push a patch to fix it soon.","commit_id":"e84c943384e0ed0b1243c4fd02d0d96b575dabe5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"96d5a3765de07e9f680cc204964039df62206e7e","unresolved":false,"context_lines":[{"line_number":6373,"context_line":"        # storage is shared, and we should not report the DISK_GB inventory in"},{"line_number":6374,"context_line":"        # the compute node provider."},{"line_number":6375,"context_line":"        if not provider_tree.has_sharing_provider("},{"line_number":6376,"context_line":"            rc_fields.ResourceClass.DISK_GB):"},{"line_number":6377,"context_line":"            result[rc_fields.ResourceClass.DISK_GB] \u003d {"},{"line_number":6378,"context_line":"                \u0027total\u0027: disk_gb,"},{"line_number":6379,"context_line":"                \u0027min_unit\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_bdd248d0","line":6376,"range":{"start_line":6376,"start_character":12,"end_line":6376,"end_character":45},"updated":"2018-06-08 13:44:09.000000000","message":"nit: add an indent here.","commit_id":"d63c3c36518b832cd6fe659cc85b0a39363c91c0"},{"author":{"_account_id":20182,"name":"Bhagyashri Shewale","email":"bshewale@redhat.com","username":"bhagyashris"},"change_message_id":"56ddd710713282c755fe317a13dd346ff9f38ce7","unresolved":false,"context_lines":[{"line_number":6373,"context_line":"        # storage is shared, and we should not report the DISK_GB inventory in"},{"line_number":6374,"context_line":"        # the compute node provider."},{"line_number":6375,"context_line":"        if not provider_tree.has_sharing_provider("},{"line_number":6376,"context_line":"            rc_fields.ResourceClass.DISK_GB):"},{"line_number":6377,"context_line":"            result[rc_fields.ResourceClass.DISK_GB] \u003d {"},{"line_number":6378,"context_line":"                \u0027total\u0027: disk_gb,"},{"line_number":6379,"context_line":"                \u0027min_unit\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5f7c97a3_d66c82d1","line":6376,"range":{"start_line":6376,"start_character":12,"end_line":6376,"end_character":45},"in_reply_to":"5f7c97a3_bdd248d0","updated":"2018-06-12 13:46:28.000000000","message":"Done","commit_id":"d63c3c36518b832cd6fe659cc85b0a39363c91c0"}]}
