)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"59b8133a6c1c46105d5f1e7b46c1e4abfaf49280","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b913902f_b4d2a3fb","updated":"2023-01-10 09:31:36.000000000","message":"I have a question about test coverage","commit_id":"8d3107a9476c1ff6f560a051f2dd431d67d8b559"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c18084d9d07875ea3e49b25237266b1f8b6d2969","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"48b15362_cb03ed23","updated":"2023-01-11 22:13:42.000000000","message":"I moved this in front of the \"persist...\" patch because it made it easier for test things due to the fake driver. But I think that\u0027s causing grenade to fail because we don\u0027t find the old compute node and try to create a new one, since it was not persisted until the next patch.","commit_id":"9d9ab70ad129a8ab2e059e0594afeafc03831732"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"48d40ab819c330053fba4bbbd5f36a85a71252f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bcb77a97_f27f924b","updated":"2023-01-13 14:56:41.000000000","message":"recheck tons of infra fails, post_failure, and grenade failed to start on the old side","commit_id":"16240ec4a33d6cf774d73e3d2304a4eb2f41068b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"28e8c0e412be1b2c9bbdace98f5a990fb67100e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7dba1bce_9acd57b8","updated":"2023-01-26 17:10:49.000000000","message":"Looks good to me","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e1e238a2e2620d5e051c6e8b1deb53a2cf3b57d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"731b7865_abd760f0","updated":"2023-01-26 21:46:23.000000000","message":"i dont understand one of the tests.\n\noverall it looks ok but can  you let me know what you think inline.","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6a9cac6224333b98ddd49e0e323865851bb40e80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"e3330c82_a5117f9d","updated":"2023-01-20 18:45:18.000000000","message":"recheck glance test failure","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8d68607d6023f7dc7458365221220a1010525de0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"cc875147_92d0e4e1","updated":"2023-01-30 18:55:59.000000000","message":"ok less move this patch forward and we will work on the  extra checks at the end of the series","commit_id":"23c5f3d585ff44b106a27fd54db5e012002611d3"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"59b8133a6c1c46105d5f1e7b46c1e4abfaf49280","unresolved":false,"context_lines":[{"line_number":684,"context_line":"            False otherwise"},{"line_number":685,"context_line":"        \"\"\""},{"line_number":686,"context_line":"        nodename \u003d resources[\u0027hypervisor_hostname\u0027]"},{"line_number":687,"context_line":"        node_uuid \u003d resources[\u0027uuid\u0027]"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        # if there is already a compute node just use resources"},{"line_number":690,"context_line":"        # to initialize"}],"source_content_type":"text/x-python","patch_set":2,"id":"d881ccc6_d9e91f4e","line":687,"updated":"2023-01-10 09:31:36.000000000","message":"this will always exists as `update_available_resource` runs before `_init_compute_node` and populates the resources.","commit_id":"8d3107a9476c1ff6f560a051f2dd431d67d8b559"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5b86d64ef7fda958396e7852dbec63091e58ddce","unresolved":true,"context_lines":[{"line_number":710,"context_line":"                cn.save()"},{"line_number":711,"context_line":"        if cn:"},{"line_number":712,"context_line":"            if cn.host !\u003d self.host:"},{"line_number":713,"context_line":"                LOG.info(\"ComputeNode %(name)s moving from %(old)s to %(new)s\","},{"line_number":714,"context_line":"                         {\"name\": nodename, \"old\": cn.host, \"new\": self.host})"},{"line_number":715,"context_line":"                cn.host \u003d self.host"},{"line_number":716,"context_line":"                self._update(context, cn)"}],"source_content_type":"text/x-python","patch_set":10,"id":"576df4b2_cc739a7a","line":713,"updated":"2023-01-18 06:47:20.000000000","message":"should we be raising an excption here and failign to start,\n\ndo we want to support moving form an old name to new name.\nthis implies that either the hostname changed of CONF.host changed right.\n\nso i feel like this should be an excpetion?","commit_id":"0fa3a41777cd1875f7bb46db08e3e41e60f616bd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"32259613e0593fe6df007564f660b3accde3160a","unresolved":false,"context_lines":[{"line_number":710,"context_line":"                cn.save()"},{"line_number":711,"context_line":"        if cn:"},{"line_number":712,"context_line":"            if cn.host !\u003d self.host:"},{"line_number":713,"context_line":"                LOG.info(\"ComputeNode %(name)s moving from %(old)s to %(new)s\","},{"line_number":714,"context_line":"                         {\"name\": nodename, \"old\": cn.host, \"new\": self.host})"},{"line_number":715,"context_line":"                cn.host \u003d self.host"},{"line_number":716,"context_line":"                self._update(context, cn)"}],"source_content_type":"text/x-python","patch_set":10,"id":"35e52dc1_b7837916","line":713,"in_reply_to":"2c163943_e6c02b6d","updated":"2023-01-26 15:45:59.000000000","message":"Ack","commit_id":"0fa3a41777cd1875f7bb46db08e3e41e60f616bd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"71604c3428ac386e0affc89b37bcb2503e70599b","unresolved":true,"context_lines":[{"line_number":710,"context_line":"                cn.save()"},{"line_number":711,"context_line":"        if cn:"},{"line_number":712,"context_line":"            if cn.host !\u003d self.host:"},{"line_number":713,"context_line":"                LOG.info(\"ComputeNode %(name)s moving from %(old)s to %(new)s\","},{"line_number":714,"context_line":"                         {\"name\": nodename, \"old\": cn.host, \"new\": self.host})"},{"line_number":715,"context_line":"                cn.host \u003d self.host"},{"line_number":716,"context_line":"                self._update(context, cn)"}],"source_content_type":"text/x-python","patch_set":10,"id":"2c163943_e6c02b6d","line":713,"in_reply_to":"576df4b2_cc739a7a","updated":"2023-01-19 16:49:03.000000000","message":"This is specifically required for ironic. See old line 697. However, if you look at the next patch, I\u0027m working on a startup failure for renamed hosts.","commit_id":"0fa3a41777cd1875f7bb46db08e3e41e60f616bd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e1e238a2e2620d5e051c6e8b1deb53a2cf3b57d6","unresolved":true,"context_lines":[{"line_number":702,"context_line":"        # We use read_deleted\u003dTrue so that we will find and recover a deleted"},{"line_number":703,"context_line":"        # node object, if necessary."},{"line_number":704,"context_line":"        with utils.temporary_mutation(context, read_deleted\u003d\u0027yes\u0027):"},{"line_number":705,"context_line":"            cn \u003d self._get_compute_node(context, node_uuid)"},{"line_number":706,"context_line":"            if cn and cn.deleted:"},{"line_number":707,"context_line":"                # Undelete and save this right now so that everything below"},{"line_number":708,"context_line":"                # can continue without read_deleted\u003dyes"}],"source_content_type":"text/x-python","patch_set":12,"id":"ab63ea6d_52adf561","line":705,"updated":"2023-01-26 21:46:23.000000000","message":"i dont think we can have two delete compute node records for the same comptue node right so we dont have to undelete the most recnet deleted node record correct.","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"567f1ce7f18e08c78b22a2064c3cd7ecfd50f5e2","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        # We use read_deleted\u003dTrue so that we will find and recover a deleted"},{"line_number":703,"context_line":"        # node object, if necessary."},{"line_number":704,"context_line":"        with utils.temporary_mutation(context, read_deleted\u003d\u0027yes\u0027):"},{"line_number":705,"context_line":"            cn \u003d self._get_compute_node(context, node_uuid)"},{"line_number":706,"context_line":"            if cn and cn.deleted:"},{"line_number":707,"context_line":"                # Undelete and save this right now so that everything below"},{"line_number":708,"context_line":"                # can continue without read_deleted\u003dyes"}],"source_content_type":"text/x-python","patch_set":12,"id":"e43dfdca_cad0eee6","line":705,"in_reply_to":"ab63ea6d_52adf561","updated":"2023-01-27 18:27:50.000000000","message":"Right, but even still, this is undeleting specifically the compute node we want by uuid, and it wouldn\u0027t need to consider the deletion order or timestamps anyway.","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"}],"nova/objects/compute_node.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e1e238a2e2620d5e051c6e8b1deb53a2cf3b57d6","unresolved":true,"context_lines":[{"line_number":392,"context_line":"                        resources[key] !\u003d self.uuid):"},{"line_number":393,"context_line":"                    raise exception.InvalidNodeConfiguration("},{"line_number":394,"context_line":"                        reason\u003d\u0027Attempt to overwrite node %s with %s!\u0027 % ("},{"line_number":395,"context_line":"                            self.uuid, resources[key]))"},{"line_number":396,"context_line":"                setattr(self, key, resources[key])"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        # supported_instances has a different name in compute_node"}],"source_content_type":"text/x-python","patch_set":12,"id":"e5aadced_8e281467","line":395,"updated":"2023-01-26 21:46:23.000000000","message":"ok so insted of ignoring the uuid update we make it an explict error if we are altering it and this would detect fi the uuid in the file on disk changed say after a sig_hup.","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"567f1ce7f18e08c78b22a2064c3cd7ecfd50f5e2","unresolved":true,"context_lines":[{"line_number":392,"context_line":"                        resources[key] !\u003d self.uuid):"},{"line_number":393,"context_line":"                    raise exception.InvalidNodeConfiguration("},{"line_number":394,"context_line":"                        reason\u003d\u0027Attempt to overwrite node %s with %s!\u0027 % ("},{"line_number":395,"context_line":"                            self.uuid, resources[key]))"},{"line_number":396,"context_line":"                setattr(self, key, resources[key])"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        # supported_instances has a different name in compute_node"}],"source_content_type":"text/x-python","patch_set":12,"id":"b18a42e4_8eaf316b","line":395,"in_reply_to":"e5aadced_8e281467","updated":"2023-01-27 18:27:50.000000000","message":"Yeah, I mean, this was already silently ignored and could happen in tests that play fast and loose with this. Making it an explicit error, for whatever reason it happened (most likely a virt driver that returned something different at runtime) is far safer.","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"}],"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":"59b8133a6c1c46105d5f1e7b46c1e4abfaf49280","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7f5ba079_4b9665fd","updated":"2023-01-10 09:31:36.000000000","message":"Do we have test coverage for the ComputeNode undelete code path?","commit_id":"8d3107a9476c1ff6f560a051f2dd431d67d8b559"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2ceb675094d13b9f6c01616c8d008559a2d4129d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e8ce66c5_6bc6437c","in_reply_to":"739a80c8_37060eb5","updated":"2023-01-26 15:46:24.000000000","message":"Done","commit_id":"8d3107a9476c1ff6f560a051f2dd431d67d8b559"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4987185e24f39e4f44d21a9ae097ac9edf1f14ef","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"739a80c8_37060eb5","in_reply_to":"7f5ba079_4b9665fd","updated":"2023-01-10 14:52:31.000000000","message":"We do implicitly, but yeah I need an explicit one for sure.\n\nI flipped most of these to non-WIP recently because (a) I realized a lot of the cases are tested in the tests after fixing them all and (b) because I wasn\u0027t getting early review of the actual stuff (aside from you!).\n\nI left WIP on the persist specifically because of lack of tests. But yeah, please help me identify the test gaps. A month between starting on this and then a long grind to get all the tests working has me a little glassy-eyed :)","commit_id":"8d3107a9476c1ff6f560a051f2dd431d67d8b559"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e1e238a2e2620d5e051c6e8b1deb53a2cf3b57d6","unresolved":false,"context_lines":[{"line_number":1519,"context_line":""},{"line_number":1520,"context_line":"            # Host is the same, no _update()"},{"line_number":1521,"context_line":"            self.assertEqual(\u0027fake-host\u0027, node.host)"},{"line_number":1522,"context_line":"            mock_update.assert_not_called()"},{"line_number":1523,"context_line":""},{"line_number":1524,"context_line":"    @mock.patch.object(resource_tracker.ResourceTracker,"},{"line_number":1525,"context_line":"                       \u0027_update\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"2c541f92_ce13f620","line":1522,"updated":"2023-01-26 21:46:23.000000000","message":"+1","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e1e238a2e2620d5e051c6e8b1deb53a2cf3b57d6","unresolved":true,"context_lines":[{"line_number":1550,"context_line":"        # Our host changed, so we should have the updated value and have"},{"line_number":1551,"context_line":"        # called _update()"},{"line_number":1552,"context_line":"        self.assertEqual(\u0027fake-host\u0027, node.host)"},{"line_number":1553,"context_line":"        mock_update.assert_called()"},{"line_number":1554,"context_line":""},{"line_number":1555,"context_line":""},{"line_number":1556,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":12,"id":"536a790b_996f16cf","line":1553,"updated":"2023-01-26 21:46:23.000000000","message":"should we? doent this mean yuo change CONF.host\n\nthat means the instance.host will be out of synce and the port binding:host and cinder attachment host would be wrogn.\n\nso should this not be an error?\n\ncan this happen another way?\n\nthis could happne for ironic if there was no instnace on bare metal node but for anything else i think this should be an error.\n\ndid i miss something here?","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"567f1ce7f18e08c78b22a2064c3cd7ecfd50f5e2","unresolved":true,"context_lines":[{"line_number":1550,"context_line":"        # Our host changed, so we should have the updated value and have"},{"line_number":1551,"context_line":"        # called _update()"},{"line_number":1552,"context_line":"        self.assertEqual(\u0027fake-host\u0027, node.host)"},{"line_number":1553,"context_line":"        mock_update.assert_called()"},{"line_number":1554,"context_line":""},{"line_number":1555,"context_line":""},{"line_number":1556,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":12,"id":"87725cb7_d5a73cb2","line":1553,"in_reply_to":"536a790b_996f16cf","updated":"2023-01-27 18:27:50.000000000","message":"This is asserting that we *didn\u0027t* hit the ironic _check_node_rebalanced() (or whatever it was) case, which does call _update. We\u0027ll update the compute node object, it\u0027s whether or not we call the resource tracker update routine or not, and that\u0027s what I\u0027m asserting we don\u0027t, because we didn\u0027t before.","commit_id":"48a678e19a49cf6ecf4e188e0a6b1c3c88579d22"}]}
