)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f57967613a6a0498b2a20ada040a514562b4a85f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"libvirt: Ignore volume exceptions during post_live_migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previously errors while disconnecting volumes from the source host"},{"line_number":10,"context_line":"during post_live_migration within LibvirtDriver would result in the"},{"line_number":11,"context_line":"overall failure of the migration. This would also mean that while the"},{"line_number":12,"context_line":"instance would be running on the destination it would still be listed as"},{"line_number":13,"context_line":"running on the source within the db."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3fa7e38b_5b29f234","line":10,"updated":"2019-10-23 18:47:27.000000000","message":"Ack, that\u0027s called on the source here:\n\nhttps://github.com/openstack/nova/blob/6cb419490262cf4553554e12a1df562148bb152f/nova/compute/manager.py#L7588\n\nAfter the hypervisor has completed transfer of the guest to the dest host.","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f57967613a6a0498b2a20ada040a514562b4a85f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Previously errors while disconnecting volumes from the source host"},{"line_number":10,"context_line":"during post_live_migration within LibvirtDriver would result in the"},{"line_number":11,"context_line":"overall failure of the migration. This would also mean that while the"},{"line_number":12,"context_line":"instance would be running on the destination it would still be listed as"},{"line_number":13,"context_line":"running on the source within the db."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change simply ignores any exceptions raised while attempting to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3fa7e38b_bb190623","line":12,"updated":"2019-10-23 18:47:27.000000000","message":"And that\u0027s because if driver.post_live_migration fails, compute manager doesn\u0027t call post_live_migration_at_destination to update the host:\n\nhttps://github.com/openstack/nova/blob/6cb419490262cf4553554e12a1df562148bb152f/nova/compute/manager.py#L7695\n\nhttps://github.com/openstack/nova/blob/6cb419490262cf4553554e12a1df562148bb152f/nova/compute/manager.py#L7847","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f57967613a6a0498b2a20ada040a514562b4a85f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"disconnect volumes on the source. These errors can be safely ignored as"},{"line_number":17,"context_line":"they will have no impact on the running instance on the destination."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"In the future Nova could wire up the force and ignore_errors kwargs when"},{"line_number":20,"context_line":"calling down into the associated os-brick connectors to help avoid this."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: #1843639"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3fa7e38b_fbcd3e86","line":19,"range":{"start_line":19,"start_character":37,"end_line":19,"end_character":67},"updated":"2019-10-23 18:47:27.000000000","message":"ack: https://github.com/openstack/os-brick/blob/2.10.0/os_brick/initiator/initiator_connector.py#L117\n\nGood idea to not do that here since this change is likely backportable but might not be with those changes to the os-brick library if they aren\u0027t on older versions of the library.","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d60e6754ec365a2a6ed5ad2866e40701be6c8f41","unresolved":false,"context_lines":[{"line_number":16,"context_line":"disconnect volumes on the source. These errors can be safely ignored as"},{"line_number":17,"context_line":"they will have no impact on the running instance on the destination."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"In the future Nova could wire up the force and ignore_errors kwargs when"},{"line_number":20,"context_line":"calling down into the associated os-brick connectors to help avoid this."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: #1843639"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3fa7e38b_2aa13747","line":19,"range":{"start_line":19,"start_character":37,"end_line":19,"end_character":67},"in_reply_to":"3fa7e38b_fbcd3e86","updated":"2019-10-24 10:59:49.000000000","message":"Yup, I\u0027ll follow up with this shortly.","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4cbb32feb1c0c776410064df071f360489751f39","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change simply ignores any exceptions raised while attempting to"},{"line_number":16,"context_line":"disconnect volumes on the source. These errors can be safely ignored as"},{"line_number":17,"context_line":"they will have no impact on the running instance on the destination."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"In the future Nova could wire up the force and ignore_errors kwargs when"},{"line_number":20,"context_line":"calling down into the associated os-brick connectors to help avoid this."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3fa7e38b_9cf3c79f","line":17,"updated":"2019-10-24 22:36:22.000000000","message":"++ thank you for explaining why this is an OK thing to do","commit_id":"ac68cffd43a2f5103c28a2d4b31e087c3f5c24b9"}],"nova/tests/functional/regressions/test_bug_1843639.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ecc369b346d2785e279343b6d27cd4c36bf54b07","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                cpu_nodes\u003d1, cpu_sockets\u003d2, cpu_cores\u003d2, cpu_threads\u003d2,"},{"line_number":63,"context_line":"                kB_mem\u003d10740000)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.LibvirtDriver\u0027"},{"line_number":66,"context_line":"                \u0027.post_live_migration_at_destination\u0027)"},{"line_number":67,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.guest.Guest.migrate\u0027)"},{"line_number":68,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager.pre_live_migration\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_730658d0","line":65,"updated":"2019-10-23 16:30:54.000000000","message":"As I said in https://review.opendev.org/#/c/682621/ I\u0027d drop the functional test for this fix. It\u0027s way too mock heavy to be generally useful. It does show the thing you want to show which is cool and builds confidence in the fix in the driver code itself, but I think we could move forward without the functional test which would also be a nightmare to backport.","commit_id":"f9bc5644789274b38469fde65207984029c1226d"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f57967613a6a0498b2a20ada040a514562b4a85f","unresolved":false,"context_lines":[{"line_number":13643,"context_line":"        mock_disconnect_volume.assert_called_once_with(mock.sentinel.ctxt,"},{"line_number":13644,"context_line":"                                                       None,"},{"line_number":13645,"context_line":"                                                       mock.sentinel.instance)"},{"line_number":13646,"context_line":""},{"line_number":13647,"context_line":"    @mock.patch(\u0027os.stat\u0027)"},{"line_number":13648,"context_line":"    @mock.patch(\u0027os.path.getsize\u0027)"},{"line_number":13649,"context_line":"    @mock.patch(\u0027nova.virt.disk.api.get_disk_info\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_1b8e1a32","line":13646,"updated":"2019-10-23 18:47:27.000000000","message":"Assert we logged the error:\n\n  self.assertIn(\u0027Ignoring exception while attempting to disconnect\u0027,\n                self.stdlog.logger.output)","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d60e6754ec365a2a6ed5ad2866e40701be6c8f41","unresolved":false,"context_lines":[{"line_number":13643,"context_line":"        mock_disconnect_volume.assert_called_once_with(mock.sentinel.ctxt,"},{"line_number":13644,"context_line":"                                                       None,"},{"line_number":13645,"context_line":"                                                       mock.sentinel.instance)"},{"line_number":13646,"context_line":""},{"line_number":13647,"context_line":"    @mock.patch(\u0027os.stat\u0027)"},{"line_number":13648,"context_line":"    @mock.patch(\u0027os.path.getsize\u0027)"},{"line_number":13649,"context_line":"    @mock.patch(\u0027nova.virt.disk.api.get_disk_info\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_aaf76759","line":13646,"in_reply_to":"3fa7e38b_1b8e1a32","updated":"2019-10-24 10:59:49.000000000","message":"Done","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4cbb32feb1c0c776410064df071f360489751f39","unresolved":false,"context_lines":[{"line_number":13656,"context_line":""},{"line_number":13657,"context_line":"        # Assert that we log the failure to disconnect the first volume"},{"line_number":13658,"context_line":"        self.assertIn(\"Ignoring exception while attempting to disconnect \""},{"line_number":13659,"context_line":"                      \"volume %s\" % uuids.vol_1_id, self.stdlog.logger.output)"},{"line_number":13660,"context_line":""},{"line_number":13661,"context_line":"    @mock.patch(\u0027os.stat\u0027)"},{"line_number":13662,"context_line":"    @mock.patch(\u0027os.path.getsize\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_7cf84b7b","line":13659,"range":{"start_line":13659,"start_character":52,"end_line":13659,"end_character":77},"updated":"2019-10-24 22:36:22.000000000","message":"Wish I knew about this before.","commit_id":"ac68cffd43a2f5103c28a2d4b31e087c3f5c24b9"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3de9b6044a10e36edb96c9afc8a6f5240f36a046","unresolved":false,"context_lines":[{"line_number":9336,"context_line":"        # left in an ERROR state and still marked on the source host."},{"line_number":9337,"context_line":"        try:"},{"line_number":9338,"context_line":"            # Disconnect from volume server"},{"line_number":9339,"context_line":"            block_device_mapping \u003d driver.block_device_info_get_mapping("},{"line_number":9340,"context_line":"                    block_device_info)"},{"line_number":9341,"context_line":"            for vol in block_device_mapping:"},{"line_number":9342,"context_line":"                # NOTE(mdbooth): The block_device_info we were passed was"},{"line_number":9343,"context_line":"                # initialized with BDMs from the source host before they were"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_50de6f11","line":9340,"range":{"start_line":9339,"start_character":0,"end_line":9340,"end_character":38},"updated":"2019-10-10 14:29:32.000000000","message":"This looks like a bog-standard dictionary lookup, so I\u0027m not sure how it could fail. Could you move this outside of the try-except?","commit_id":"11449786292483325566cad2d254c218b69d4aab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f57967613a6a0498b2a20ada040a514562b4a85f","unresolved":false,"context_lines":[{"line_number":9348,"context_line":"            for vol in block_device_mapping:"},{"line_number":9349,"context_line":"                self._disconnect_volume(context, vol[\u0027connection_info\u0027],"},{"line_number":9350,"context_line":"                                        instance)"},{"line_number":9351,"context_line":"        except Exception as ex:"},{"line_number":9352,"context_line":"            LOG.exception(\"Ignoring exception while attempting to disconnect \""},{"line_number":9353,"context_line":"                          \"volumes from the source during post_live_migration\","},{"line_number":9354,"context_line":"                          instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_7b9f0e65","line":9351,"updated":"2019-10-23 18:47:27.000000000","message":"Shouldn\u0027t this go within the for loop so we at least try to disconnect each attached volume rather than fail on the first one and skip the rest?","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d60e6754ec365a2a6ed5ad2866e40701be6c8f41","unresolved":false,"context_lines":[{"line_number":9348,"context_line":"            for vol in block_device_mapping:"},{"line_number":9349,"context_line":"                self._disconnect_volume(context, vol[\u0027connection_info\u0027],"},{"line_number":9350,"context_line":"                                        instance)"},{"line_number":9351,"context_line":"        except Exception as ex:"},{"line_number":9352,"context_line":"            LOG.exception(\"Ignoring exception while attempting to disconnect \""},{"line_number":9353,"context_line":"                          \"volumes from the source during post_live_migration\","},{"line_number":9354,"context_line":"                          instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_2aecd78d","line":9351,"in_reply_to":"3fa7e38b_7b9f0e65","updated":"2019-10-24 10:59:49.000000000","message":"ACK yup thanks, the downstream bug that spawned this change would actually make all attempts fail but there\u0027s a still a chance that other issues would only impact one attempt so this is definitely valid.","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f57967613a6a0498b2a20ada040a514562b4a85f","unresolved":false,"context_lines":[{"line_number":9350,"context_line":"                                        instance)"},{"line_number":9351,"context_line":"        except Exception as ex:"},{"line_number":9352,"context_line":"            LOG.exception(\"Ignoring exception while attempting to disconnect \""},{"line_number":9353,"context_line":"                          \"volumes from the source during post_live_migration\","},{"line_number":9354,"context_line":"                          instance\u003dinstance)"},{"line_number":9355,"context_line":""},{"line_number":9356,"context_line":"    def post_live_migration_at_source(self, context, instance, network_info):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_5bac929e","line":9353,"range":{"start_line":9353,"start_character":27,"end_line":9353,"end_character":34},"updated":"2019-10-23 18:47:27.000000000","message":"Could be useful to include the volume id in this message if you move the try/except within the loop. You\u0027d get the volume id from the connection_info using block_device.get_volume_id(vol[\u0027connection_info\u0027]).","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d60e6754ec365a2a6ed5ad2866e40701be6c8f41","unresolved":false,"context_lines":[{"line_number":9350,"context_line":"                                        instance)"},{"line_number":9351,"context_line":"        except Exception as ex:"},{"line_number":9352,"context_line":"            LOG.exception(\"Ignoring exception while attempting to disconnect \""},{"line_number":9353,"context_line":"                          \"volumes from the source during post_live_migration\","},{"line_number":9354,"context_line":"                          instance\u003dinstance)"},{"line_number":9355,"context_line":""},{"line_number":9356,"context_line":"    def post_live_migration_at_source(self, context, instance, network_info):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_eafd5f3b","line":9353,"range":{"start_line":9353,"start_character":27,"end_line":9353,"end_character":34},"in_reply_to":"3fa7e38b_5bac929e","updated":"2019-10-24 10:59:49.000000000","message":"driver_block_device but ACK yea thanks, added.","commit_id":"34d3d736b2e3a16d6cb131f165bc7d5b4f172fbe"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4cbb32feb1c0c776410064df071f360489751f39","unresolved":false,"context_lines":[{"line_number":9338,"context_line":"        # NOTE(mdbooth): The block_device_info we were passed was initialized"},{"line_number":9339,"context_line":"        # with BDMs from the source host before they were updated to point to"},{"line_number":9340,"context_line":"        # the destination. We can safely use this to disconnect the source"},{"line_number":9341,"context_line":"        # without re-fetching."},{"line_number":9342,"context_line":"        block_device_mapping \u003d driver.block_device_info_get_mapping("},{"line_number":9343,"context_line":"                block_device_info)"},{"line_number":9344,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_5c71cf43","line":9341,"updated":"2019-10-24 22:36:22.000000000","message":"++ thank you for writing this","commit_id":"ac68cffd43a2f5103c28a2d4b31e087c3f5c24b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca00f71fa42e46a6bee84d80aee152995e0cb877","unresolved":false,"context_lines":[{"line_number":9348,"context_line":"            # being left in an ERROR state and still marked on the source."},{"line_number":9349,"context_line":"            try:"},{"line_number":9350,"context_line":"                self._disconnect_volume(context, connection_info, instance)"},{"line_number":9351,"context_line":"            except Exception as ex:"},{"line_number":9352,"context_line":"                volume_id \u003d driver_block_device.get_volume_id(connection_info)"},{"line_number":9353,"context_line":"                LOG.exception(\"Ignoring exception while attempting to \""},{"line_number":9354,"context_line":"                              \"disconnect volume %s from the source host \""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_ae6e82fd","line":9351,"range":{"start_line":9351,"start_character":29,"end_line":9351,"end_character":34},"updated":"2019-10-25 13:32:07.000000000","message":"This is unused. pep8 fails on it starting in Stein but didn\u0027t here, I\u0027m not sure why.","commit_id":"ac68cffd43a2f5103c28a2d4b31e087c3f5c24b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"51e4e11e28b3cd8880bcbd03ae2e640d2f04860b","unresolved":false,"context_lines":[{"line_number":9355,"context_line":"                              \"during post_live_migration\", volume_id,"},{"line_number":9356,"context_line":"                              instance\u003dinstance)"},{"line_number":9357,"context_line":""},{"line_number":9358,"context_line":"    def post_live_migration_at_source(self, context, instance, network_info):"},{"line_number":9359,"context_line":"        \"\"\"Unplug VIFs from networks at source."},{"line_number":9360,"context_line":""},{"line_number":9361,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_a6cebb80","line":9358,"range":{"start_line":9358,"start_character":8,"end_line":9358,"end_character":37},"updated":"2019-10-24 14:56:15.000000000","message":"Ugh this is dumb that we have essentially two methods for the same phase of the live migration (cleanup the source host in post live migration) but the one above only deals with volumes and this one only deals with vifs. Derp. I have no idea why the people that added this separately didn\u0027t just add the network_info to the post_live_migration method and do it all in one place.","commit_id":"ac68cffd43a2f5103c28a2d4b31e087c3f5c24b9"}]}
