)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1a8495cb5da27857d576249cb743eaa6ad35cddf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"shows another bug in the code path that destroys and deallocates"},{"line_number":31,"context_line":"evacuated instance from the source host. Therefore this patch"},{"line_number":32,"context_line":"implements the compute service restart in a way that simulates only a"},{"line_number":33,"context_line":"service restart and not a full compute restart. A subsequnt patch will"},{"line_number":34,"context_line":"add a test that uses the clean hypervisor case to reproduces the"},{"line_number":35,"context_line":"revealed bug."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f4b6375_d8f3a472","line":33,"range":{"start_line":33,"start_character":50,"end_line":33,"end_character":59},"updated":"2017-10-23 17:05:00.000000000","message":"subsequent","commit_id":"3890f1a60c9bea1b7732ef8135cbe9af918e7493"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b75bee196102ea5adfa820d49f0a33632c666491","unresolved":false,"context_lines":[{"line_number":30,"context_line":"shows another bug in the code path that destroys and deallocates"},{"line_number":31,"context_line":"evacuated instance from the source host. Therefore this patch"},{"line_number":32,"context_line":"implements the compute service restart in a way that simulates only a"},{"line_number":33,"context_line":"service restart and not a full compute restart. A subsequnt patch will"},{"line_number":34,"context_line":"add a test that uses the clean hypervisor case to reproduces the"},{"line_number":35,"context_line":"revealed bug."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5f93b717_763ce4c7","line":33,"range":{"start_line":33,"start_character":50,"end_line":33,"end_character":59},"in_reply_to":"3f4b6375_d8f3a472","updated":"2018-01-29 16:28:59.000000000","message":"Done","commit_id":"3890f1a60c9bea1b7732ef8135cbe9af918e7493"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"528e72cf5cb7c2dc8f157ab0c2c52096672b5720","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enhance service restart in functional env"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Recent bug showed that restarting a compute service in the functional"},{"line_number":10,"context_line":"env is unrealistic causing faults to slip through. During that bug fix"},{"line_number":11,"context_line":"only the minimal change was done in the functional env regarding"},{"line_number":12,"context_line":"compute service restart to reproduce the reported fault. However the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3f79a3b5_2835c146","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":10},"updated":"2018-08-08 18:05:07.000000000","message":"Link? Or the same one that\u0027s referenced below? Or are you referring to Icaf1bae8cb040b939f916a19ce026031ddb84af7 and bug 1721652 and bug 1709902?","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"894b2b7dfb55a4d3e2ff011ef48bb7c1c71ccbdc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enhance service restart in functional env"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Recent bug showed that restarting a compute service in the functional"},{"line_number":10,"context_line":"env is unrealistic causing faults to slip through. During that bug fix"},{"line_number":11,"context_line":"only the minimal change was done in the functional env regarding"},{"line_number":12,"context_line":"compute service restart to reproduce the reported fault. However the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ffb9cba7_bac20458","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":10},"in_reply_to":"3f79a3b5_2835c146","updated":"2019-05-01 21:52:43.000000000","message":"Done","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"528e72cf5cb7c2dc8f157ab0c2c52096672b5720","unresolved":false,"context_lines":[{"line_number":13,"context_line":"restart of the compute service could be made even more realistic."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch simulates a compute service restart in the functional env"},{"line_number":16,"context_line":"by stoping the original compute service and starting a totally new"},{"line_number":17,"context_line":"compute service for the same host and node. This way we can make sure"},{"line_number":18,"context_line":"that we get a brand new ComputeManager in the new service and no"},{"line_number":19,"context_line":"state can leak between the old and the new service."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3f79a3b5_881735a4","line":16,"range":{"start_line":16,"start_character":3,"end_line":16,"end_character":10},"updated":"2018-08-08 18:05:07.000000000","message":"stopping","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"894b2b7dfb55a4d3e2ff011ef48bb7c1c71ccbdc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"restart of the compute service could be made even more realistic."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch simulates a compute service restart in the functional env"},{"line_number":16,"context_line":"by stoping the original compute service and starting a totally new"},{"line_number":17,"context_line":"compute service for the same host and node. This way we can make sure"},{"line_number":18,"context_line":"that we get a brand new ComputeManager in the new service and no"},{"line_number":19,"context_line":"state can leak between the old and the new service."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ffb9cba7_7ab80ce4","line":16,"range":{"start_line":16,"start_character":3,"end_line":16,"end_character":10},"in_reply_to":"3f79a3b5_881735a4","updated":"2019-05-01 21:52:43.000000000","message":"Done","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"}],"nova/test.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"587af7f47696c20d1c2e17da1c033b314eed251b","unresolved":false,"context_lines":[{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        return svc.service"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def restart_compute_service(self, compute, keep_hypervisor_state\u003dTrue):"},{"line_number":435,"context_line":"        \"\"\"Stops the service and starts a new one to have realistic restart"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        :param:compute: the nova-compute service to be restarted"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_b2281be2","line":434,"range":{"start_line":434,"start_character":4,"end_line":434,"end_character":75},"updated":"2018-05-28 09:54:22.000000000","message":"nit: IMO keep_hypervisor_state could be replaced with cleanup\u003dFalse, because restart by its meaning still should preserve state.","commit_id":"bedab0f47be09efe26b7e6e891da1900c8065ee1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1d24740bd6483907a708c1a073cc09c9da235cac","unresolved":false,"context_lines":[{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        return svc.service"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def restart_compute_service(self, compute, keep_hypervisor_state\u003dTrue):"},{"line_number":435,"context_line":"        \"\"\"Stops the service and starts a new one to have realistic restart"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        :param:compute: the nova-compute service to be restarted"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_be31eb5b","line":434,"range":{"start_line":434,"start_character":4,"end_line":434,"end_character":75},"in_reply_to":"5f7c97a3_b2281be2","updated":"2018-07-03 12:20:51.000000000","message":"Sure cleanup\u003dFalse could be also OK, but I like the explicitness of keep_hypervisor_state as that also tells you what is kept.","commit_id":"bedab0f47be09efe26b7e6e891da1900c8065ee1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"528e72cf5cb7c2dc8f157ab0c2c52096672b5720","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        # the service from the DB which is unrealistic and causes that some"},{"line_number":464,"context_line":"        # operation that refers to the killed host (e.g. evacuate) fails."},{"line_number":465,"context_line":"        # So this helper method will stop the original service and then starts"},{"line_number":466,"context_line":"        # a brand new compute service for the same host and node. This way the"},{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_08d6c5c4","line":466,"range":{"start_line":466,"start_character":75,"end_line":466,"end_character":78},"updated":"2018-08-08 18:05:07.000000000","message":"nix","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"894b2b7dfb55a4d3e2ff011ef48bb7c1c71ccbdc","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        # the service from the DB which is unrealistic and causes that some"},{"line_number":464,"context_line":"        # operation that refers to the killed host (e.g. evacuate) fails."},{"line_number":465,"context_line":"        # So this helper method will stop the original service and then starts"},{"line_number":466,"context_line":"        # a brand new compute service for the same host and node. This way the"},{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffb9cba7_1ac79098","line":466,"range":{"start_line":466,"start_character":75,"end_line":466,"end_character":78},"in_reply_to":"3f79a3b5_08d6c5c4","updated":"2019-05-01 21:52:43.000000000","message":"Done","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"528e72cf5cb7c2dc8f157ab0c2c52096672b5720","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        # operation that refers to the killed host (e.g. evacuate) fails."},{"line_number":465,"context_line":"        # So this helper method will stop the original service and then starts"},{"line_number":466,"context_line":"        # a brand new compute service for the same host and node. This way the"},{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"},{"line_number":470,"context_line":"        fake.set_nodes([compute.host])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_a8e471ad","line":467,"range":{"start_line":467,"start_character":16,"end_line":467,"end_character":23},"updated":"2018-08-08 18:05:07.000000000","message":"ComputeManager","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"528e72cf5cb7c2dc8f157ab0c2c52096672b5720","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        # operation that refers to the killed host (e.g. evacuate) fails."},{"line_number":465,"context_line":"        # So this helper method will stop the original service and then starts"},{"line_number":466,"context_line":"        # a brand new compute service for the same host and node. This way the"},{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"},{"line_number":470,"context_line":"        fake.set_nodes([compute.host])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_c8df6dd4","line":467,"range":{"start_line":467,"start_character":49,"end_line":467,"end_character":51},"updated":"2018-08-08 18:05:07.000000000","message":"and","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"894b2b7dfb55a4d3e2ff011ef48bb7c1c71ccbdc","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        # operation that refers to the killed host (e.g. evacuate) fails."},{"line_number":465,"context_line":"        # So this helper method will stop the original service and then starts"},{"line_number":466,"context_line":"        # a brand new compute service for the same host and node. This way the"},{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"},{"line_number":470,"context_line":"        fake.set_nodes([compute.host])"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffb9cba7_3ac4d490","line":467,"range":{"start_line":467,"start_character":16,"end_line":467,"end_character":23},"in_reply_to":"3f79a3b5_a8e471ad","updated":"2019-05-01 21:52:43.000000000","message":"Done","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"894b2b7dfb55a4d3e2ff011ef48bb7c1c71ccbdc","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        # operation that refers to the killed host (e.g. evacuate) fails."},{"line_number":465,"context_line":"        # So this helper method will stop the original service and then starts"},{"line_number":466,"context_line":"        # a brand new compute service for the same host and node. This way the"},{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"},{"line_number":470,"context_line":"        fake.set_nodes([compute.host])"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffb9cba7_fab95c14","line":467,"range":{"start_line":467,"start_character":49,"end_line":467,"end_character":51},"in_reply_to":"3f79a3b5_c8df6dd4","updated":"2019-05-01 21:52:43.000000000","message":"Done","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"528e72cf5cb7c2dc8f157ab0c2c52096672b5720","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"},{"line_number":470,"context_line":"        fake.set_nodes([compute.host])"},{"line_number":471,"context_line":"        self.flags(host\u003dcompute.host)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        if keep_hypervisor_state:"},{"line_number":474,"context_line":"            # NOTE(gibi): FakeDriver does not provide a meaningful way to"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_289f0104","line":471,"range":{"start_line":470,"start_character":8,"end_line":471,"end_character":37},"updated":"2018-08-08 18:05:07.000000000","message":"This messes with globals, so shouldn\u0027t we reset these once we\u0027ve started the new compute service?","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d1ee851df15c412985bd1dc24256e8ce5100bffb","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"},{"line_number":470,"context_line":"        fake.set_nodes([compute.host])"},{"line_number":471,"context_line":"        self.flags(host\u003dcompute.host)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        if keep_hypervisor_state:"},{"line_number":474,"context_line":"            # NOTE(gibi): FakeDriver does not provide a meaningful way to"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_cb4a0454","line":471,"range":{"start_line":470,"start_character":8,"end_line":471,"end_character":37},"in_reply_to":"3f79a3b5_289f0104","updated":"2018-08-08 20:50:04.000000000","message":"I agree with the idea of putting the set_nodes and addCleanup calls into start_service. That way we also don\u0027t have to call set_nodes/addCleanup separately in every test that needs it. That\u0027s how I set things up back when I was working on the CellDatabases + functional test environment, see example:\n\nhttps://review.openstack.org/#/c/508432/12/nova/test.py@486","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"894b2b7dfb55a4d3e2ff011ef48bb7c1c71ccbdc","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        # a new Manager instance will be created an initialized during the"},{"line_number":468,"context_line":"        # service startup."},{"line_number":469,"context_line":"        compute.stop()"},{"line_number":470,"context_line":"        fake.set_nodes([compute.host])"},{"line_number":471,"context_line":"        self.flags(host\u003dcompute.host)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        if keep_hypervisor_state:"},{"line_number":474,"context_line":"            # NOTE(gibi): FakeDriver does not provide a meaningful way to"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffb9cba7_bad8c47a","line":471,"range":{"start_line":470,"start_character":8,"end_line":471,"end_character":37},"in_reply_to":"3f79a3b5_cb4a0454","updated":"2019-05-01 21:52:43.000000000","message":"What about dropping the whole fake.set_node horribleness? :)","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"528e72cf5cb7c2dc8f157ab0c2c52096672b5720","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                load_driver.return_value \u003d old_driver"},{"line_number":486,"context_line":"                new_compute \u003d self.start_service(\u0027compute\u0027, host\u003dcompute.host)"},{"line_number":487,"context_line":"        else:"},{"line_number":488,"context_line":"            new_compute \u003d self.start_service(\u0027compute\u0027, host\u003dcompute.host)"},{"line_number":489,"context_line":"        return new_compute"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def assertJsonEqual(self, expected, observed, message\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_a8ab111b","line":488,"updated":"2018-08-08 18:05:07.000000000","message":"What if the service you\u0027re restarting was created in a different cell? By default the service will be created in cell1 but if this compute service was created in cell2, you\u0027ll now have the same compute service reporting in multiple cells, which would be wrong. I suggest looking up the host mapping using self.host_mappings and passed in the cell for this host:\n\nnew_compute \u003d self.start_service(\n    \u0027compute\u0027, host\u003dcompute.host,\n    cell\u003dself.host_mappings[compute.host].cell_mapping.name)","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"894b2b7dfb55a4d3e2ff011ef48bb7c1c71ccbdc","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                load_driver.return_value \u003d old_driver"},{"line_number":486,"context_line":"                new_compute \u003d self.start_service(\u0027compute\u0027, host\u003dcompute.host)"},{"line_number":487,"context_line":"        else:"},{"line_number":488,"context_line":"            new_compute \u003d self.start_service(\u0027compute\u0027, host\u003dcompute.host)"},{"line_number":489,"context_line":"        return new_compute"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def assertJsonEqual(self, expected, observed, message\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffb9cba7_1a4c7040","line":488,"in_reply_to":"3f79a3b5_4ba59403","updated":"2019-05-01 21:52:43.000000000","message":"good point. Done.","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d1ee851df15c412985bd1dc24256e8ce5100bffb","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                load_driver.return_value \u003d old_driver"},{"line_number":486,"context_line":"                new_compute \u003d self.start_service(\u0027compute\u0027, host\u003dcompute.host)"},{"line_number":487,"context_line":"        else:"},{"line_number":488,"context_line":"            new_compute \u003d self.start_service(\u0027compute\u0027, host\u003dcompute.host)"},{"line_number":489,"context_line":"        return new_compute"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def assertJsonEqual(self, expected, observed, message\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_4ba59403","line":488,"in_reply_to":"3f79a3b5_a8ab111b","updated":"2018-08-08 20:50:04.000000000","message":"Agreed, need to be mindful of compute service cells here and not lose the cell that could have previously been set before the restart.","commit_id":"566b8b6404ea4325075bc2298b8c6998d39cc54d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"cb379142cc6946cdb25fbf149a2b3de1bd42c0fe","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            cell_name \u003d kwargs.pop(\u0027cell\u0027, CELL1_NAME) or CELL1_NAME"},{"line_number":433,"context_line":"            cell \u003d self.cell_mappings[cell_name]"},{"line_number":434,"context_line":"            if (host or name) not in self.host_mappings:"},{"line_number":435,"context_line":"                # NOTE(gibi): If the HostMapping does not exists then this is"},{"line_number":436,"context_line":"                # the first start of the service so we create the mapping."},{"line_number":437,"context_line":"                hm \u003d objects.HostMapping(context\u003dctxt,"},{"line_number":438,"context_line":"                                         host\u003dhost or name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9fb8cfa7_3f85fb5a","line":435,"range":{"start_line":435,"start_character":58,"end_line":435,"end_character":64},"updated":"2019-06-19 18:58:34.000000000","message":"nit: s/exists/exist/","commit_id":"5798467774020bf3016a9daf81632eb109ab89b2"}]}
