)]}'
{"nova/compute/provider_tree.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bb022984729636634c4a8d13f72ee0932cd7b11f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        \"\"\""},{"line_number":155,"context_line":"        return not bool(set(traits) - self.traits)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def have_aggregates_changed(self, new):"},{"line_number":158,"context_line":"        \"\"\"Returns whether the provider\u0027s aggregates have changed.\"\"\""},{"line_number":159,"context_line":"        return set(new) !\u003d self.aggregates"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_050c093f","line":157,"range":{"start_line":157,"start_character":38,"end_line":157,"end_character":41},"updated":"2017-12-08 14:18:24.000000000","message":"*new","commit_id":"6cb3a7f9e7019685dcb5a1be8c21b7edbf2c370e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bb022984729636634c4a8d13f72ee0932cd7b11f","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \"\"\"Returns whether the provider\u0027s aggregates have changed.\"\"\""},{"line_number":159,"context_line":"        return set(new) !\u003d self.aggregates"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def update_aggregates(self, new, generation\u003dNone):"},{"line_number":162,"context_line":"        \"\"\"Update the stored aggregates for the provider along with a resource"},{"line_number":163,"context_line":"        provider generation to set the provider to. The method returns whether"},{"line_number":164,"context_line":"        the aggregates have changed."}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_c5014108","line":161,"range":{"start_line":161,"start_character":8,"end_line":161,"end_character":25},"updated":"2017-12-08 14:18:24.000000000","message":"same comment here","commit_id":"6cb3a7f9e7019685dcb5a1be8c21b7edbf2c370e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"00a8635f4313d16362ea182364b640fa1e8decc2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":"        self._update_generation(generation)"},{"line_number":167,"context_line":"        if self.have_aggregates_changed(new):"},{"line_number":168,"context_line":"            self.aggregates \u003d copy.copy(set(new))"},{"line_number":169,"context_line":"            return True"},{"line_number":170,"context_line":"        return False"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_8068071d","line":168,"range":{"start_line":168,"start_character":30,"end_line":168,"end_character":43},"updated":"2017-12-08 14:59:05.000000000","message":"The set constructor already copied the iterable so you don\u0027t have to copy it again.","commit_id":"6cb3a7f9e7019685dcb5a1be8c21b7edbf2c370e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9a4e96d6e96ccacf1ef176a1b60ef72053effc31","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":"        self._update_generation(generation)"},{"line_number":167,"context_line":"        if self.have_aggregates_changed(new):"},{"line_number":168,"context_line":"            self.aggregates \u003d copy.copy(set(new))"},{"line_number":169,"context_line":"            return True"},{"line_number":170,"context_line":"        return False"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_0c5364e4","line":168,"range":{"start_line":168,"start_character":30,"end_line":168,"end_character":43},"in_reply_to":"df87a7cf_8068071d","updated":"2017-12-13 16:18:56.000000000","message":"Done","commit_id":"6cb3a7f9e7019685dcb5a1be8c21b7edbf2c370e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bb022984729636634c4a8d13f72ee0932cd7b11f","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            return True"},{"line_number":170,"context_line":"        return False"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def in_aggregates(self, aggregates):"},{"line_number":173,"context_line":"        \"\"\"Query whether the provider is a member of certain aggregates."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param aggregates: Iterable of string aggregate UUIDs to look for."}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_45169157","line":172,"range":{"start_line":172,"start_character":28,"end_line":172,"end_character":38},"updated":"2017-12-08 14:18:24.000000000","message":"*aggregates","commit_id":"6cb3a7f9e7019685dcb5a1be8c21b7edbf2c370e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"00a8635f4313d16362ea182364b640fa1e8decc2","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            provider \u003d self._find_with_lock(name_or_uuid)"},{"line_number":414,"context_line":"            return provider.have_aggregates_changed(aggregates)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def update_aggregates(self, name_or_uuid, aggregates, generation\u003dNone):"},{"line_number":417,"context_line":"        \"\"\"Given a name or UUID of a provider and an iterable of string"},{"line_number":418,"context_line":"        aggregate UUIDs, update the provider\u0027s aggregates and set the"},{"line_number":419,"context_line":"        provider\u0027s generation."}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_e07793d3","line":416,"range":{"start_line":416,"start_character":58,"end_line":416,"end_character":73},"updated":"2017-12-08 14:59:05.000000000","message":"As per IRC placement does not return the RP generation when in the get response so there is no way the generation is updated when the aggregates are updated.","commit_id":"6cb3a7f9e7019685dcb5a1be8c21b7edbf2c370e"}],"nova/tests/unit/compute/test_provider_tree.py":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"727329dee2e0a619f009ea9d8465686e34bbf8bc","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        aggregates.append(uuids.agg3)"},{"line_number":295,"context_line":"        self.assertTrue(pt.have_aggregates_changed(cn.uuid, aggregates))"},{"line_number":296,"context_line":"        self.assertFalse(pt.in_aggregates(cn.uuid, aggregates[-1:]))"},{"line_number":297,"context_line":"        # Don\u0027t update the generation (this would normally be a bug, but we\u0027re"},{"line_number":298,"context_line":"        # testing generation\u003dNone and its (non) effect on"},{"line_number":299,"context_line":"        # have_aggregates_changed.)"},{"line_number":300,"context_line":"        self.assertTrue(pt.update_aggregates(cn.uuid, aggregates))"},{"line_number":301,"context_line":"        self.assertEqual(rp_gen, pt._find_with_lock(cn.uuid).generation)"},{"line_number":302,"context_line":"        self.assertTrue(pt.in_aggregates(cn.uuid, aggregates[-1:]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_f63901a3","line":299,"range":{"start_line":297,"start_character":37,"end_line":299,"end_character":35},"updated":"2017-12-15 08:05:01.000000000","message":"If this is a bug, we shouldn\u0027t test that. But according to the gibi\u0027s comment on https://review.openstack.org/#/c/521605/, this is not a bug, right?","commit_id":"cecf3d332f15fa6e055a396c2e339a41890e077f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ee27f2f2225ee8d27cd4c17400958ee66979a7e9","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        aggregates.append(uuids.agg3)"},{"line_number":295,"context_line":"        self.assertTrue(pt.have_aggregates_changed(cn.uuid, aggregates))"},{"line_number":296,"context_line":"        self.assertFalse(pt.in_aggregates(cn.uuid, aggregates[-1:]))"},{"line_number":297,"context_line":"        # Don\u0027t update the generation (this would normally be a bug, but we\u0027re"},{"line_number":298,"context_line":"        # testing generation\u003dNone and its (non) effect on"},{"line_number":299,"context_line":"        # have_aggregates_changed.)"},{"line_number":300,"context_line":"        self.assertTrue(pt.update_aggregates(cn.uuid, aggregates))"},{"line_number":301,"context_line":"        self.assertEqual(rp_gen, pt._find_with_lock(cn.uuid).generation)"},{"line_number":302,"context_line":"        self.assertTrue(pt.in_aggregates(cn.uuid, aggregates[-1:]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_8a64014b","line":299,"range":{"start_line":297,"start_character":37,"end_line":299,"end_character":35},"in_reply_to":"df87a7cf_aad9c522","updated":"2017-12-15 12:18:34.000000000","message":"Done","commit_id":"cecf3d332f15fa6e055a396c2e339a41890e077f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"90421b30b94c259bfd3bb600bebab69e40e296f7","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        aggregates.append(uuids.agg3)"},{"line_number":295,"context_line":"        self.assertTrue(pt.have_aggregates_changed(cn.uuid, aggregates))"},{"line_number":296,"context_line":"        self.assertFalse(pt.in_aggregates(cn.uuid, aggregates[-1:]))"},{"line_number":297,"context_line":"        # Don\u0027t update the generation (this would normally be a bug, but we\u0027re"},{"line_number":298,"context_line":"        # testing generation\u003dNone and its (non) effect on"},{"line_number":299,"context_line":"        # have_aggregates_changed.)"},{"line_number":300,"context_line":"        self.assertTrue(pt.update_aggregates(cn.uuid, aggregates))"},{"line_number":301,"context_line":"        self.assertEqual(rp_gen, pt._find_with_lock(cn.uuid).generation)"},{"line_number":302,"context_line":"        self.assertTrue(pt.in_aggregates(cn.uuid, aggregates[-1:]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_aad9c522","line":299,"range":{"start_line":297,"start_character":37,"end_line":299,"end_character":35},"in_reply_to":"df87a7cf_f63901a3","updated":"2017-12-15 12:11:15.000000000","message":"This comment was dropped from the patch [1] after discussion so I think it needs to be dropped here too.\n\n[1]https://review.openstack.org/#/c/521605/","commit_id":"cecf3d332f15fa6e055a396c2e339a41890e077f"}]}
