)]}'
{"nova/scheduler/client/report.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d1f72693772e220496308c546c6038bb813d881a","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            return None"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    @safe_connect"},{"line_number":432,"context_line":"    def _get_resource_provider_tree(self, uuid):"},{"line_number":433,"context_line":"        \"\"\"Queries the placement API for a list of the resource providers in"},{"line_number":434,"context_line":"        the nested tree associated with the specified UUID."},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_25370150","line":432,"range":{"start_line":432,"start_character":8,"end_line":432,"end_character":35},"updated":"2017-11-16 18:31:59.000000000","message":"prefer a simple rename to _get_providers_in_tree() since _get_resource_provider_tree() makes it seem that a ProviderTree is being returned, which is not the case.","commit_id":"b13f376aa468b8016f78c0d67058f84b77654e23"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f4709be5b6a766b2b0a0c28aa23ea583eee0e570","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            return None"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    @safe_connect"},{"line_number":432,"context_line":"    def _get_resource_provider_tree(self, uuid):"},{"line_number":433,"context_line":"        \"\"\"Queries the placement API for a list of the resource providers in"},{"line_number":434,"context_line":"        the nested tree associated with the specified UUID."},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f485f77_127b24be","line":432,"range":{"start_line":432,"start_character":8,"end_line":432,"end_character":35},"in_reply_to":"1f485f77_25370150","updated":"2017-11-16 21:12:49.000000000","message":"Done.\n\nI like it all the more because there\u0027s going to be get_provider_tree() later in the series.","commit_id":"b13f376aa468b8016f78c0d67058f84b77654e23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4307b6876b32d8ac2ff2e053fdb949d992dc1fc9","unresolved":false,"context_lines":[{"line_number":423,"context_line":"            raise exception.ResourceProviderRetrievalFailed(uuid\u003duuid)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @safe_connect"},{"line_number":426,"context_line":"    def _get_providers_in_tree(self, uuid):"},{"line_number":427,"context_line":"        \"\"\"Queries the placement API for a list of the resource providers in"},{"line_number":428,"context_line":"        the nested tree associated with the specified UUID."},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_45f531ec","line":426,"range":{"start_line":426,"start_character":8,"end_line":426,"end_character":30},"updated":"2017-12-08 13:52:28.000000000","message":"nitiest of nits: Most other functions here use the full \u0027resource_provider\u0027 term instead of \u0027provider\u0027, and I\u0027d to scan through this a few times to make sure I wasn\u0027t missing anything. Calling this \u0027_get_resource_providers_in_tree\u0027 would be lengthy but worth it, IMO","commit_id":"108991c6b1e8521ad6b2501fe167848aa4fc3a0e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4307b6876b32d8ac2ff2e053fdb949d992dc1fc9","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        if resp.status_code \u003d\u003d 200:"},{"line_number":439,"context_line":"            return resp.json()[\u0027resource_providers\u0027]"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # Some unexpected error"},{"line_number":442,"context_line":"        placement_req_id \u003d get_placement_request_id(resp)"},{"line_number":443,"context_line":"        msg \u003d (\"[%(placement_req_id)s] Failed to retrieve resource provider \""},{"line_number":444,"context_line":"               \"tree from placement API for UUID %(uuid)s. Got \""},{"line_number":445,"context_line":"               \"%(status_code)d: %(err_text)s.\")"},{"line_number":446,"context_line":"        args \u003d {"},{"line_number":447,"context_line":"            \u0027uuid\u0027: uuid,"},{"line_number":448,"context_line":"            \u0027status_code\u0027: resp.status_code,"},{"line_number":449,"context_line":"            \u0027err_text\u0027: resp.text,"},{"line_number":450,"context_line":"            \u0027placement_req_id\u0027: placement_req_id,"},{"line_number":451,"context_line":"        }"},{"line_number":452,"context_line":"        LOG.error(msg, args)"},{"line_number":453,"context_line":"        raise exception.ResourceProviderRetrievalFailed(uuid\u003duuid)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    @safe_connect"},{"line_number":456,"context_line":"    def _create_resource_provider(self, uuid, name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_e574856a","line":453,"range":{"start_line":441,"start_character":0,"end_line":453,"end_character":66},"updated":"2017-12-08 13:52:28.000000000","message":"Looks like this can be dragged out as it\u0027s almost identical to _get_resource_provider. That\u0027s a later cleanup item though","commit_id":"108991c6b1e8521ad6b2501fe167848aa4fc3a0e"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c4433e150338680da3b00466b48fc9ab4775d133","unresolved":false,"context_lines":[{"line_number":1240,"context_line":"            uuids.child2, parent_provider_uuid\u003duuids.root)"},{"line_number":1241,"context_line":"        self.assertEqual(uuids.root, child2.parent_uuid)"},{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":"        # At this point we should get all the providers by iterating on root."},{"line_number":1244,"context_line":"        self.assertEqual(set([root, child1, child2, grandchild]),"},{"line_number":1245,"context_line":"                         set(self.client._provider_tree.get_all()))"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"    def test_get_allocation_candidates(self):"},{"line_number":1248,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d200)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_9816fc48","line":1245,"range":{"start_line":1243,"start_character":0,"end_line":1245,"end_character":67},"updated":"2017-11-17 16:55:49.000000000","message":"this is wrong now...","commit_id":"2e10e754ffd9ae6eb2827cbec3149b1a1357d6cb"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"40c50605eb53deaf44422ac838921764cc047007","unresolved":false,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"        result \u003d self.client._get_providers_in_tree(root)"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"        expected_provider_list \u003d ["},{"line_number":1406,"context_line":"            {"},{"line_number":1407,"context_line":"                \u0027uuid\u0027: root,"},{"line_number":1408,"context_line":"                \u0027name\u0027: \u0027daddy\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_6cddf46e","line":1405,"updated":"2017-12-06 18:29:50.000000000","message":"Since this is a direct result of the json_data, maybe just copy (part of) it instead of duplicate the results? Especially since this isn\u0027t actually an accurate representation of the response that the placement service will provide (since root_provider_uuid is missing).","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"286007cbcb0e36c06348cdb3b6fb7ffa82c7d2de","unresolved":false,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"        result \u003d self.client._get_providers_in_tree(root)"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"        expected_provider_list \u003d ["},{"line_number":1406,"context_line":"            {"},{"line_number":1407,"context_line":"                \u0027uuid\u0027: root,"},{"line_number":1408,"context_line":"                \u0027name\u0027: \u0027daddy\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_d105b5c3","line":1405,"in_reply_to":"df87a7cf_6cddf46e","updated":"2017-12-06 23:23:54.000000000","message":"Yes, good point, will fix.\n\nI\u0027m sure I copy/pasted something to bootstrap this test case, cause that duplication doesn\u0027t seem like something I would have done on my own.  Not making excuses; just pointing out that there\u0027s probably more places nearby with the same pattern.","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"07599ec87ce5a701cce1bdfee880cd7a90da3e64","unresolved":false,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"        result \u003d self.client._get_providers_in_tree(root)"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"        expected_provider_list \u003d ["},{"line_number":1406,"context_line":"            {"},{"line_number":1407,"context_line":"                \u0027uuid\u0027: root,"},{"line_number":1408,"context_line":"                \u0027name\u0027: \u0027daddy\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_628f2675","line":1405,"in_reply_to":"df87a7cf_d105b5c3","updated":"2017-12-07 15:12:05.000000000","message":"Done","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"68b44bbf1edf2d7629262b16bb6b8f4d574650b2","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d503)"},{"line_number":1429,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"},{"line_number":1430,"context_line":"        self.ks_adap_mock.get.return_value.headers \u003d {"},{"line_number":1431,"context_line":"            \u0027openstack-request-id\u0027: uuids.request_id}"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1434,"context_line":"        self.assertRaises(exception.ResourceProviderRetrievalFailed,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_e02fbc3c","line":1431,"range":{"start_line":1431,"start_character":36,"end_line":1431,"end_character":52},"updated":"2017-12-07 06:31:08.000000000","message":"nit:\nThe request ID format is \u0027req-\u0027 + \u003cUUID4\u003e.\nFor example, req-3dccb8c4-08fe-4706-a91d-e843b8fe9ed2 .\nSo it is not correct. But it does not affect a test result...","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"68b44bbf1edf2d7629262b16bb6b8f4d574650b2","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d503)"},{"line_number":1429,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"},{"line_number":1430,"context_line":"        self.ks_adap_mock.get.return_value.headers \u003d {"},{"line_number":1431,"context_line":"            \u0027openstack-request-id\u0027: uuids.request_id}"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1434,"context_line":"        self.assertRaises(exception.ResourceProviderRetrievalFailed,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_c0ce38b3","line":1431,"range":{"start_line":1431,"start_character":13,"end_line":1431,"end_character":33},"updated":"2017-12-07 06:31:08.000000000","message":"x-openstack-request-id","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c4cde6680396f4d36c8a3d1cdd6d38c1d875b0f4","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d503)"},{"line_number":1429,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"},{"line_number":1430,"context_line":"        self.ks_adap_mock.get.return_value.headers \u003d {"},{"line_number":1431,"context_line":"            \u0027openstack-request-id\u0027: uuids.request_id}"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1434,"context_line":"        self.assertRaises(exception.ResourceProviderRetrievalFailed,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_6172b2af","line":1431,"range":{"start_line":1431,"start_character":13,"end_line":1431,"end_character":33},"in_reply_to":"df87a7cf_2207decc","updated":"2017-12-08 04:39:32.000000000","message":"\u003e Apparently either one is acceptable: https://github.com/openstack/nova/blob/master/nova/scheduler/client/report.py#L248\n\nThere is unnecessary processing.\nSo I proposed the following patch to fix it.\n\nhttps://review.openstack.org/#/c/523606/","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"07599ec87ce5a701cce1bdfee880cd7a90da3e64","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d503)"},{"line_number":1429,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"},{"line_number":1430,"context_line":"        self.ks_adap_mock.get.return_value.headers \u003d {"},{"line_number":1431,"context_line":"            \u0027openstack-request-id\u0027: uuids.request_id}"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1434,"context_line":"        self.assertRaises(exception.ResourceProviderRetrievalFailed,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_2207decc","line":1431,"range":{"start_line":1431,"start_character":13,"end_line":1431,"end_character":33},"in_reply_to":"df87a7cf_c0ce38b3","updated":"2017-12-07 15:12:05.000000000","message":"Apparently either one is acceptable: https://github.com/openstack/nova/blob/master/nova/scheduler/client/report.py#L248\n\nBut done.","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"07599ec87ce5a701cce1bdfee880cd7a90da3e64","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d503)"},{"line_number":1429,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"},{"line_number":1430,"context_line":"        self.ks_adap_mock.get.return_value.headers \u003d {"},{"line_number":1431,"context_line":"            \u0027openstack-request-id\u0027: uuids.request_id}"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":1434,"context_line":"        self.assertRaises(exception.ResourceProviderRetrievalFailed,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_420c62ec","line":1431,"range":{"start_line":1431,"start_character":36,"end_line":1431,"end_character":52},"in_reply_to":"df87a7cf_e02fbc3c","updated":"2017-12-07 15:12:05.000000000","message":"Done","commit_id":"16e4e2619f8308cabf940d5782f90063334dc708"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"12a6ec05f007edf345da82a964b9a3c588d4e90a","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"        rpjson \u003d ["},{"line_number":1385,"context_line":"            {"},{"line_number":1386,"context_line":"                \u0027uuid\u0027: root,"},{"line_number":1387,"context_line":"                \u0027name\u0027: \u0027daddy\u0027, \u0027generation\u0027: 42,"},{"line_number":1388,"context_line":"                \u0027parent_provider_uuid\u0027: None,"},{"line_number":1389,"context_line":"            },"},{"line_number":1390,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_6a4b0b5f","line":1387,"range":{"start_line":1387,"start_character":25,"end_line":1387,"end_character":30},"updated":"2017-12-12 22:21:24.000000000","message":"gross","commit_id":"108991c6b1e8521ad6b2501fe167848aa4fc3a0e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c4cde6680396f4d36c8a3d1cdd6d38c1d875b0f4","unresolved":false,"context_lines":[{"line_number":1388,"context_line":"                \u0027parent_provider_uuid\u0027: None,"},{"line_number":1389,"context_line":"            },"},{"line_number":1390,"context_line":"            {"},{"line_number":1391,"context_line":"                \u0027uuid\u0027: child,"},{"line_number":1392,"context_line":"                \u0027name\u0027: \u0027junior\u0027,"},{"line_number":1393,"context_line":"                \u0027generation\u0027: 42,"},{"line_number":1394,"context_line":"                \u0027parent_provider_uuid\u0027: root,"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_81ea560c","line":1391,"range":{"start_line":1391,"start_character":24,"end_line":1391,"end_character":29},"updated":"2017-12-08 04:39:32.000000000","message":"nit: Use \u0027uuids.child\u0027 directly and remove line 1382.","commit_id":"108991c6b1e8521ad6b2501fe167848aa4fc3a0e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca35f7082fface07a9a98d6853ba2171cf27fac1","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"        resp_mock.json.return_value \u003d {\u0027resource_providers\u0027: rpjson}"},{"line_number":1398,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"},{"line_number":1399,"context_line":""},{"line_number":1400,"context_line":"        result \u003d self.client._get_providers_in_tree(root)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"        expected_url \u003d \u0027/resource_providers?in_tree\u003d\u0027 + root"},{"line_number":1403,"context_line":"        self.ks_adap_mock.get.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_cae1f72c","line":1400,"updated":"2017-12-12 22:27:37.000000000","message":"I had to ask Jay about this in IRC, since it\u0027s not clear from the tests in this patch, nor the description on the in_tree filter in the API reference\n\n\"A UUID of a resource provider. The returned resource providers will be in the same “provider tree” as the specified provider.\"\n\nI didn\u0027t know if you could only request parent providers here or also leaf nodes and what you\u0027d get back, e.g. if I have this tree:\n\n     A\n    / \\\n   B   C\n        \\\n         D\n\nAnd I use in_tree\u003dC, do I get just C and D back? Or also A and B because A is the parent of C and B is a sibling of C.\n\nAnd if in_tree\u003dB, then do I get back just B?","commit_id":"108991c6b1e8521ad6b2501fe167848aa4fc3a0e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e5fcbb62867435e9b700e97766ec1a7169cfa982","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"        resp_mock.json.return_value \u003d {\u0027resource_providers\u0027: rpjson}"},{"line_number":1398,"context_line":"        self.ks_adap_mock.get.return_value \u003d resp_mock"},{"line_number":1399,"context_line":""},{"line_number":1400,"context_line":"        result \u003d self.client._get_providers_in_tree(root)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"        expected_url \u003d \u0027/resource_providers?in_tree\u003d\u0027 + root"},{"line_number":1403,"context_line":"        self.ks_adap_mock.get.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_b1b5f5cf","line":1400,"in_reply_to":"df87a7cf_cae1f72c","updated":"2017-12-13 16:04:15.000000000","message":"I had been operating on the assumption that you would get ABCD back no matter which one you specified to in_tree.  If that\u0027s wrong, I have some work to do.\n\n[Later] Yeah, just looked at the code again, it\u0027s ABCD no matter which one you specified to in_tree.  (Phew)","commit_id":"108991c6b1e8521ad6b2501fe167848aa4fc3a0e"}]}
