)]}'
{"nova/compute/resource_tracker.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b9a852c233c88135137d07d2d2ded58333ff8000","unresolved":false,"context_lines":[{"line_number":929,"context_line":"                traits.add(trait)"},{"line_number":930,"context_line":"            else:"},{"line_number":931,"context_line":"                # The service is not disabled so do not report the trait."},{"line_number":932,"context_line":"                traits.discard(trait)"},{"line_number":933,"context_line":"        except exception.NotFound:"},{"line_number":934,"context_line":"            # This should not happen but handle it gracefully. The scheduler"},{"line_number":935,"context_line":"            # should ignore this node if the compute service record is gone."}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_58d8df1c","line":932,"range":{"start_line":932,"start_character":23,"end_line":932,"end_character":30},"updated":"2019-07-12 23:22:34.000000000","message":"TIL","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec73ae849fc339db8f077e3edc0b3640957a5df7","unresolved":false,"context_lines":[{"line_number":930,"context_line":"            else:"},{"line_number":931,"context_line":"                # The service is not disabled so do not report the trait."},{"line_number":932,"context_line":"                traits.discard(trait)"},{"line_number":933,"context_line":"        except exception.NotFound:"},{"line_number":934,"context_line":"            # This should not happen but handle it gracefully. The scheduler"},{"line_number":935,"context_line":"            # should ignore this node if the compute service record is gone."},{"line_number":936,"context_line":"            LOG.error(\u0027Unable to find services table record for nova-compute \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_bac2b033","line":933,"updated":"2019-07-03 07:41:58.000000000","message":"+1 for not mixing in the ComputeHostNotFound craziness.","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b9a852c233c88135137d07d2d2ded58333ff8000","unresolved":false,"context_lines":[{"line_number":939,"context_line":"    def _get_traits(self, context, nodename, provider_tree):"},{"line_number":940,"context_line":"        \"\"\"Synchronizes internal and external traits for the node provider."},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"        This works in conjunction with the ComptueDriver.update_provider_tree"},{"line_number":943,"context_line":"        flow and is used to synchronize traits reported by the compute driver,"},{"line_number":944,"context_line":"        traits based on information in the ComputeNode record, and traits set"},{"line_number":945,"context_line":"        externally using the placement REST API."}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_f8e98bb6","line":942,"range":{"start_line":942,"start_character":43,"end_line":942,"end_character":50},"updated":"2019-07-12 23:22:34.000000000","message":"Compute","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b9a852c233c88135137d07d2d2ded58333ff8000","unresolved":false,"context_lines":[{"line_number":948,"context_line":"        :param nodename: ComputeNode.hypervisor_hostname for the compute node"},{"line_number":949,"context_line":"            resource provider whose traits are being synchronized; the node"},{"line_number":950,"context_line":"            must be in the ProviderTree."},{"line_number":951,"context_line":"        :param provider_tree: ProviderTree being updated"},{"line_number":952,"context_line":"        \"\"\""},{"line_number":953,"context_line":"        # Get the traits from the ProviderTree which will be the set"},{"line_number":954,"context_line":"        # of virt-owned traits plus any externally defined traits set"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_18082790","line":951,"updated":"2019-07-12 23:22:34.000000000","message":"thanks for adding this docstring.","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec73ae849fc339db8f077e3edc0b3640957a5df7","unresolved":false,"context_lines":[{"line_number":1451,"context_line":"                \u0027_sync_compute_service_disabled_trait\u0027)"},{"line_number":1452,"context_line":"    @mock.patch(\u0027nova.objects.ComputeNode.save\u0027)"},{"line_number":1453,"context_line":"    def test_existing_node_update_provider_tree_implemented(self, save_mock,"},{"line_number":1454,"context_line":"                                                            mock_sync_disable):"},{"line_number":1455,"context_line":"        \"\"\"The update_provider_tree() virt driver method is only implemented"},{"line_number":1456,"context_line":"        for some virt drivers. This method returns inventory, trait, and"},{"line_number":1457,"context_line":"        aggregate information for resource providers in a tree associated with"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_3ada404b","line":1454,"range":{"start_line":1454,"start_character":60,"end_line":1454,"end_character":77},"updated":"2019-07-03 07:41:58.000000000","message":"nit: rename it to mock_sync_disabled to make it consistent with the rest of the test cases","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b69a8ec62bf5d0ce50c85efc5e7c7054dccd4e73","unresolved":false,"context_lines":[{"line_number":1451,"context_line":"                \u0027_sync_compute_service_disabled_trait\u0027)"},{"line_number":1452,"context_line":"    @mock.patch(\u0027nova.objects.ComputeNode.save\u0027)"},{"line_number":1453,"context_line":"    def test_existing_node_update_provider_tree_implemented(self, save_mock,"},{"line_number":1454,"context_line":"                                                            mock_sync_disable):"},{"line_number":1455,"context_line":"        \"\"\"The update_provider_tree() virt driver method is only implemented"},{"line_number":1456,"context_line":"        for some virt drivers. This method returns inventory, trait, and"},{"line_number":1457,"context_line":"        aggregate information for resource providers in a tree associated with"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_4f62e518","line":1454,"range":{"start_line":1454,"start_character":60,"end_line":1454,"end_character":77},"in_reply_to":"9fb8cfa7_08aff12b","updated":"2019-07-03 19:57:57.000000000","message":"Done: https://review.opendev.org/#/c/668986/","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"83089ed5b40b5f87c2695358ba284c1ff2b3043a","unresolved":false,"context_lines":[{"line_number":1451,"context_line":"                \u0027_sync_compute_service_disabled_trait\u0027)"},{"line_number":1452,"context_line":"    @mock.patch(\u0027nova.objects.ComputeNode.save\u0027)"},{"line_number":1453,"context_line":"    def test_existing_node_update_provider_tree_implemented(self, save_mock,"},{"line_number":1454,"context_line":"                                                            mock_sync_disable):"},{"line_number":1455,"context_line":"        \"\"\"The update_provider_tree() virt driver method is only implemented"},{"line_number":1456,"context_line":"        for some virt drivers. This method returns inventory, trait, and"},{"line_number":1457,"context_line":"        aggregate information for resource providers in a tree associated with"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_08aff12b","line":1454,"range":{"start_line":1454,"start_character":60,"end_line":1454,"end_character":77},"in_reply_to":"9fb8cfa7_3ada404b","updated":"2019-07-03 14:18:57.000000000","message":"I was trying to avoid the 80 char mark. I could have just wrapped the line I guess.","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec73ae849fc339db8f077e3edc0b3640957a5df7","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"        # First test with the trait actually in the set."},{"line_number":1623,"context_line":"        traits \u003d {os_traits.COMPUTE_STATUS_DISABLED}"},{"line_number":1624,"context_line":"        self.rt._sync_compute_service_disabled_trait(ctxt, traits)"},{"line_number":1625,"context_line":"        self.assertEqual(0, len(traits))"},{"line_number":1626,"context_line":"        mock_get_by_host.assert_called_once_with(ctxt, self.rt.host)"},{"line_number":1627,"context_line":"        # Now run it again with the empty set to make sure the method handles"},{"line_number":1628,"context_line":"        # the trait not already being in the set (idempotency)."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_1a9dfc56","line":1625,"updated":"2019-07-03 07:41:58.000000000","message":"nit: If you want to be symmetric to the testcase above then you can assert:\n   \n    self.assertEqual(set(), traits)","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b69a8ec62bf5d0ce50c85efc5e7c7054dccd4e73","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"        # First test with the trait actually in the set."},{"line_number":1623,"context_line":"        traits \u003d {os_traits.COMPUTE_STATUS_DISABLED}"},{"line_number":1624,"context_line":"        self.rt._sync_compute_service_disabled_trait(ctxt, traits)"},{"line_number":1625,"context_line":"        self.assertEqual(0, len(traits))"},{"line_number":1626,"context_line":"        mock_get_by_host.assert_called_once_with(ctxt, self.rt.host)"},{"line_number":1627,"context_line":"        # Now run it again with the empty set to make sure the method handles"},{"line_number":1628,"context_line":"        # the trait not already being in the set (idempotency)."}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_6f67a127","line":1625,"in_reply_to":"7faddb67_cfad75eb","updated":"2019-07-03 19:57:57.000000000","message":"Done: https://review.opendev.org/#/c/668986/","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a13a829502f542e58f652f9ee552d45f5e28698f","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"        # First test with the trait actually in the set."},{"line_number":1623,"context_line":"        traits \u003d {os_traits.COMPUTE_STATUS_DISABLED}"},{"line_number":1624,"context_line":"        self.rt._sync_compute_service_disabled_trait(ctxt, traits)"},{"line_number":1625,"context_line":"        self.assertEqual(0, len(traits))"},{"line_number":1626,"context_line":"        mock_get_by_host.assert_called_once_with(ctxt, self.rt.host)"},{"line_number":1627,"context_line":"        # Now run it again with the empty set to make sure the method handles"},{"line_number":1628,"context_line":"        # the trait not already being in the set (idempotency)."}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_cfad75eb","line":1625,"in_reply_to":"9fb8cfa7_1a9dfc56","updated":"2019-07-03 19:13:36.000000000","message":"Will address in a follow up patch.","commit_id":"5e78122458f94376a382abc81c7bb1aa98f8110c"}]}
