)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fd66a34ba8bad8bc84f2101d0118b1b610b77539","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patch allows the use of live instance snapshots when a RBD"},{"line_number":15,"context_line":"snapshot/clone is performed directly, and reverts back to cold"},{"line_number":16,"context_line":"instance snapshot when the old method is used."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ic3a3c73898aa868d6c510639ab12d2401dcb5001"},{"line_number":19,"context_line":"Closes-Bug: #1539179"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5aef4532_3e5333e3","line":17,"updated":"2016-03-08 00:36:54.000000000","message":"nit: should probably add:\n\nCo-Authored-By: Nicolas Simonds \u003cnic@metacloud.com\u003e","commit_id":"3218be32b7fe7b805e77d0676130ddf807aae789"}],"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":"fac9fe428e193d40ff7216c153b317686595382f","unresolved":false,"context_lines":[{"line_number":13578,"context_line":"        self._test_get_guest_config_parallels_volume(vm_mode.EXE, 4)"},{"line_number":13579,"context_line":"        self._test_get_guest_config_parallels_volume(vm_mode.HVM, 6)"},{"line_number":13580,"context_line":""},{"line_number":13581,"context_line":"    def _test_prepare_domain_for_snapshot(self, live_snapshot, state):"},{"line_number":13582,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":13583,"context_line":"        instance_ref \u003d objects.Instance(**self.test_instance)"},{"line_number":13584,"context_line":"        with mock.patch.object(drvr, \"suspend\") as mock_suspend:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_afa1d3ab","line":13581,"updated":"2016-03-07 22:10:31.000000000","message":"Can we please split this refactor part out into a separate dependent change and then build the rbd live snapshot change on top of it?","commit_id":"c2bc61ba53557525263d3aaf27a67342643b4e3b"},{"author":{"_account_id":5280,"name":"Nicolas Simonds","email":"nic@metacloud.com","username":"nicolas.simonds"},"change_message_id":"e19efd76c7a09f50637d23db9767ba4ccd640fb4","unresolved":false,"context_lines":[{"line_number":13578,"context_line":"        self._test_get_guest_config_parallels_volume(vm_mode.EXE, 4)"},{"line_number":13579,"context_line":"        self._test_get_guest_config_parallels_volume(vm_mode.HVM, 6)"},{"line_number":13580,"context_line":""},{"line_number":13581,"context_line":"    def _test_prepare_domain_for_snapshot(self, live_snapshot, state):"},{"line_number":13582,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":13583,"context_line":"        instance_ref \u003d objects.Instance(**self.test_instance)"},{"line_number":13584,"context_line":"        with mock.patch.object(drvr, \"suspend\") as mock_suspend:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_5518a21d","line":13581,"in_reply_to":"5aef4532_afa1d3ab","updated":"2016-03-07 23:01:38.000000000","message":"Done","commit_id":"c2bc61ba53557525263d3aaf27a67342643b4e3b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39dde18cbffd5ed1173a5130a75928e9e5a3c402","unresolved":false,"context_lines":[{"line_number":16814,"context_line":"        mock_get_guest.return_value \u003d mock_guest"},{"line_number":16815,"context_line":"        driver \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":16816,"context_line":"        recv_meta \u003d self._create_image()"},{"line_number":16817,"context_line":"        with mock.patch.object(driver, \"_live_snapshot\"):"},{"line_number":16818,"context_line":"            with mock.patch.object(driver, \"suspend\") as mock_suspend:"},{"line_number":16819,"context_line":"                driver.snapshot(self.context, self.instance_ref,"},{"line_number":16820,"context_line":"                                recv_meta[\u0027id\u0027], self.mock_update_task_state)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_fb7886c6","line":16817,"range":{"start_line":16817,"start_character":8,"end_line":16817,"end_character":57},"updated":"2016-03-08 22:36:16.000000000","message":"Shouldn\u0027t you assert that this is called?","commit_id":"702fbaa91ec15b6587e19fce1b3fedbafcc16378"},{"author":{"_account_id":5280,"name":"Nicolas Simonds","email":"nic@metacloud.com","username":"nicolas.simonds"},"change_message_id":"0aa49018ec0cab97ba7f6d3646ef799b82484b47","unresolved":false,"context_lines":[{"line_number":16814,"context_line":"        mock_get_guest.return_value \u003d mock_guest"},{"line_number":16815,"context_line":"        driver \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":16816,"context_line":"        recv_meta \u003d self._create_image()"},{"line_number":16817,"context_line":"        with mock.patch.object(driver, \"_live_snapshot\"):"},{"line_number":16818,"context_line":"            with mock.patch.object(driver, \"suspend\") as mock_suspend:"},{"line_number":16819,"context_line":"                driver.snapshot(self.context, self.instance_ref,"},{"line_number":16820,"context_line":"                                recv_meta[\u0027id\u0027], self.mock_update_task_state)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_514b5bc9","line":16817,"range":{"start_line":16817,"start_character":8,"end_line":16817,"end_character":57},"in_reply_to":"5aef4532_fb7886c6","updated":"2016-03-08 23:26:52.000000000","message":"No, it turns out I don\u0027t need these mocked out at all.  Will fix.","commit_id":"702fbaa91ec15b6587e19fce1b3fedbafcc16378"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"75c08e4a021326839bca8e4859a4d57861c41958","unresolved":false,"context_lines":[{"line_number":16850,"context_line":"        recv_meta \u003d self._create_image()"},{"line_number":16851,"context_line":""},{"line_number":16852,"context_line":"        with mock.patch.object(fake_libvirt_utils, \u0027disk_type\u0027, new\u003d\u0027rbd\u0027):"},{"line_number":16853,"context_line":"            with mock.patch.object(driver, \"_live_snapshot\"):"},{"line_number":16854,"context_line":"                with mock.patch.object(driver, \"suspend\") as mock_suspend:"},{"line_number":16855,"context_line":"                    driver.snapshot(self.context,"},{"line_number":16856,"context_line":"                                    self.instance_ref,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_7b32b611","line":16853,"range":{"start_line":16853,"start_character":12,"end_line":16853,"end_character":61},"updated":"2016-03-08 22:36:50.000000000","message":"Shouldn\u0027t you assert that this is not called?","commit_id":"702fbaa91ec15b6587e19fce1b3fedbafcc16378"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ce70c102fbe14d0b1d41cc67ee75936db5f56447","unresolved":false,"context_lines":[{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"            # Standard snapshot uses qemu img-convert from RBD which is not"},{"line_number":1581,"context_line":"            # safe to run with live_snapshot."},{"line_number":1582,"context_line":"            live_snapshot \u003d False"},{"line_number":1583,"context_line":""},{"line_number":1584,"context_line":"            snapshot_directory \u003d CONF.libvirt.snapshots_directory"},{"line_number":1585,"context_line":"            fileutils.ensure_tree(snapshot_directory)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_f327f7c7","line":1582,"updated":"2016-01-29 14:40:12.000000000","message":"So surely you only need to do this if its RDB, rather than force everyone to not do a live_snapshot?","commit_id":"b3ecf245b5c45344258bee91f248c4e33bd32e37"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"2a1e0c6c891dffdcb01c858d2c7dfc92aa63e099","unresolved":false,"context_lines":[{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"            # Standard snapshot uses qemu img-convert from RBD which is not"},{"line_number":1581,"context_line":"            # safe to run with live_snapshot."},{"line_number":1582,"context_line":"            live_snapshot \u003d False"},{"line_number":1583,"context_line":""},{"line_number":1584,"context_line":"            snapshot_directory \u003d CONF.libvirt.snapshots_directory"},{"line_number":1585,"context_line":"            fileutils.ensure_tree(snapshot_directory)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_0557d726","line":1582,"in_reply_to":"7a5de9d1_f327f7c7","updated":"2016-02-05 14:22:36.000000000","message":"I was lead to believe that this part of the code was only executed when running rbd, sorry about. Corrected in new patchset.","commit_id":"b3ecf245b5c45344258bee91f248c4e33bd32e37"},{"author":{"_account_id":5280,"name":"Nicolas Simonds","email":"nic@metacloud.com","username":"nicolas.simonds"},"change_message_id":"1a971df47bc8b626e0bbb4e6b8bb280b229e8d6e","unresolved":false,"context_lines":[{"line_number":1629,"context_line":"                self._detach_pci_devices(guest,"},{"line_number":1630,"context_line":"                    pci_manager.get_instance_pci_devs(instance))"},{"line_number":1631,"context_line":"                self._detach_sriov_ports(context, instance, guest)"},{"line_number":1632,"context_line":"                guest.save_memory_state()"},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":"        snapshot_backend \u003d self.image_backend.snapshot(instance,"},{"line_number":1635,"context_line":"                disk_path,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_4382b153","line":1632,"range":{"start_line":1632,"start_character":16,"end_line":1632,"end_character":41},"updated":"2016-02-19 20:29:28.000000000","message":"This is pretty much the \"money shot\" for the live_snapshot flag, so any attempts to set it after this conditional has been run are going to result in undefined behavior.","commit_id":"d522535597f121132725f383cd6314abcd5f068e"},{"author":{"_account_id":5280,"name":"Nicolas Simonds","email":"nic@metacloud.com","username":"nicolas.simonds"},"change_message_id":"eb84d6bfc489c6a77a4cd0817e27717f66000c5a","unresolved":false,"context_lines":[{"line_number":1662,"context_line":"                if source_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":1663,"context_line":"                    # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1664,"context_line":"                    # not safe to run with live_snapshot."},{"line_number":1665,"context_line":"                    live_snapshot \u003d False"},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"            failed_snap \u003d metadata.pop(\u0027location\u0027, None)"},{"line_number":1668,"context_line":"            if failed_snap:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_97693d28","line":1665,"range":{"start_line":1665,"start_character":20,"end_line":1665,"end_character":41},"updated":"2016-02-22 18:46:22.000000000","message":"To reiterate, if live_snapshot was previously True, this exception handler will need to detach PCI devices, SRIOV ports, and save the memory state before proceeding here, since none of that will have been done at this point.","commit_id":"d522535597f121132725f383cd6314abcd5f068e"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"94d44f13e0b5e7ff75471c190c3cfa0b22789515","unresolved":false,"context_lines":[{"line_number":1662,"context_line":"                if source_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":1663,"context_line":"                    # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1664,"context_line":"                    # not safe to run with live_snapshot."},{"line_number":1665,"context_line":"                    live_snapshot \u003d False"},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"            failed_snap \u003d metadata.pop(\u0027location\u0027, None)"},{"line_number":1668,"context_line":"            if failed_snap:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_b70d6140","line":1665,"range":{"start_line":1665,"start_character":20,"end_line":1665,"end_character":41},"in_reply_to":"bae84128_97693d28","updated":"2016-02-22 18:52:36.000000000","message":"Thank you for pointing this out! I\u0027ll look into finding a way of doing this at both places without too much code duplication.","commit_id":"d522535597f121132725f383cd6314abcd5f068e"},{"author":{"_account_id":13562,"name":"Samuel Matzek","email":"smatzek@us.ibm.com","username":"smatzek"},"change_message_id":"21dc71eb70aa66dc8bf46981b8dd71c5afef5e06","unresolved":false,"context_lines":[{"line_number":1700,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1701,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1702,"context_line":"                live_snapshot \u003d False"},{"line_number":1703,"context_line":"                self._prepare_domain_for_snapshot(context, live_snapshot,"},{"line_number":1704,"context_line":"                                                  state, instance)"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"            failed_snap \u003d metadata.pop(\u0027location\u0027, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_5b12bc59","line":1703,"updated":"2016-03-04 20:17:16.000000000","message":"It may be better if this were moved below the cleanup_direct_snapshot call.  If this throws an exception the cleanup would not happen and that would leave orphaned storage.","commit_id":"a91a57f9d97be1aa357d1f0f909959b72756806d"},{"author":{"_account_id":5280,"name":"Nicolas Simonds","email":"nic@metacloud.com","username":"nicolas.simonds"},"change_message_id":"fdd9578ea8d70a7c86aed26cf2b15ab15afc0a0f","unresolved":false,"context_lines":[{"line_number":1700,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1701,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1702,"context_line":"                live_snapshot \u003d False"},{"line_number":1703,"context_line":"                self._prepare_domain_for_snapshot(context, live_snapshot,"},{"line_number":1704,"context_line":"                                                  state, instance)"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"            failed_snap \u003d metadata.pop(\u0027location\u0027, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_5b1f5c09","line":1703,"in_reply_to":"7af24918_5b12bc59","updated":"2016-03-04 20:25:03.000000000","message":"Done","commit_id":"a91a57f9d97be1aa357d1f0f909959b72756806d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fac9fe428e193d40ff7216c153b317686595382f","unresolved":false,"context_lines":[{"line_number":1703,"context_line":"            update_task_state(task_state\u003dtask_states.IMAGE_PENDING_UPLOAD,"},{"line_number":1704,"context_line":"                              expected_state\u003dtask_states.IMAGE_UPLOADING)"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"            if source_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":1707,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1708,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1709,"context_line":"                live_snapshot \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_0ff288d2","line":1706,"updated":"2016-03-07 22:10:31.000000000","message":"It would be nice if we could abstract this away in the snapshot_backend object, like with a \u0027prepare_for_snapshot\u0027 method or something. But that would be using calls from _prepare_domain_for_snapshot most likely, which might not be very clean, unless you pass in the driver (self) so you can call self.suspend.","commit_id":"c2bc61ba53557525263d3aaf27a67342643b4e3b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fac9fe428e193d40ff7216c153b317686595382f","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        # NOTE(dkang): managedSave does not work for LXC"},{"line_number":1756,"context_line":"        if CONF.libvirt.virt_type !\u003d \u0027lxc\u0027 and not live_snapshot:"},{"line_number":1757,"context_line":"            if state \u003d\u003d power_state.RUNNING or state \u003d\u003d power_state.PAUSED:"},{"line_number":1758,"context_line":"                self.suspend(context, instance)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"    def _snapshot_domain(self, context, live_snapshot, virt_dom, state,"},{"line_number":1761,"context_line":"                         instance):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_8fbfb7cf","line":1758,"updated":"2016-03-07 22:10:31.000000000","message":"Nice call re-using the suspend method which is doing the same thing as what this used to do above:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L2631-L2638\n\nI\u0027d actually recommend splitting this into a separate dependent patch though, then that would isolate this refactor/cleanup along with it\u0027s unit tests from the actual rbd change here.","commit_id":"c2bc61ba53557525263d3aaf27a67342643b4e3b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fd66a34ba8bad8bc84f2101d0118b1b610b77539","unresolved":false,"context_lines":[{"line_number":1703,"context_line":"            update_task_state(task_state\u003dtask_states.IMAGE_PENDING_UPLOAD,"},{"line_number":1704,"context_line":"                              expected_state\u003dtask_states.IMAGE_UPLOADING)"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"            if source_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":1707,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1708,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1709,"context_line":"                live_snapshot \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_fe6f0b90","line":1706,"range":{"start_line":1706,"start_character":12,"end_line":1706,"end_character":35},"updated":"2016-03-08 00:36:54.000000000","message":"I\u0027d still like to abstract this into snapshot_backend at some point, could we add a TODO for that?","commit_id":"3218be32b7fe7b805e77d0676130ddf807aae789"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"14c3e87c37469d7ffaeb0beafcbf56a4337fa67a","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"        #            file is present, so we will use the cold/legacy method"},{"line_number":1662,"context_line":"        #            for instances which are shutdown."},{"line_number":1663,"context_line":"        if state \u003d\u003d power_state.SHUTDOWN:"},{"line_number":1664,"context_line":"            live_snapshot \u003d False"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"        self._prepare_domain_for_snapshot(context, live_snapshot, state,"},{"line_number":1667,"context_line":"                                          instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_1a92a39f","line":1664,"updated":"2016-03-14 12:28:07.000000000","message":"I think we need to worry about this line here.","commit_id":"18a5655ce00c4bce341894069212940fc39db1b4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"996ae57caaa7d7d84cee0de6b1713d9cced868b7","unresolved":false,"context_lines":[{"line_number":1704,"context_line":"                              expected_state\u003dtask_states.IMAGE_UPLOADING)"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"            # TODO(nic): possibly abstract this out to the snapshot_backend"},{"line_number":1707,"context_line":"            if source_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":1708,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1709,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1710,"context_line":"                live_snapshot \u003d False"}],"source_content_type":"text/x-python","patch_set":9,"id":"5aef4532_7b8a911c","line":1707,"updated":"2016-03-09 13:24:04.000000000","message":"Don\u0027t we have a bug at this point - We probably want more than for this format to have guest suspended, right?","commit_id":"18a5655ce00c4bce341894069212940fc39db1b4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"14c3e87c37469d7ffaeb0beafcbf56a4337fa67a","unresolved":false,"context_lines":[{"line_number":1704,"context_line":"                              expected_state\u003dtask_states.IMAGE_UPLOADING)"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"            # TODO(nic): possibly abstract this out to the snapshot_backend"},{"line_number":1707,"context_line":"            if source_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":1708,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1709,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1710,"context_line":"                live_snapshot \u003d False"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_5aeeebb4","line":1707,"in_reply_to":"5aef4532_7b8a911c","updated":"2016-03-14 12:28:07.000000000","message":"I think we need, \"and live_snapshot\" in this if statement.","commit_id":"18a5655ce00c4bce341894069212940fc39db1b4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"996ae57caaa7d7d84cee0de6b1713d9cced868b7","unresolved":false,"context_lines":[{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"            # TODO(nic): possibly abstract this out to the snapshot_backend"},{"line_number":1707,"context_line":"            if source_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":1708,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1709,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1710,"context_line":"                live_snapshot \u003d False"},{"line_number":1711,"context_line":"                self._prepare_domain_for_snapshot(context, live_snapshot,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5aef4532_5b899574","line":1708,"updated":"2016-03-09 13:24:04.000000000","message":"nit: s/qemu img-convert/qemu-img convert","commit_id":"18a5655ce00c4bce341894069212940fc39db1b4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"14c3e87c37469d7ffaeb0beafcbf56a4337fa67a","unresolved":false,"context_lines":[{"line_number":1708,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1709,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1710,"context_line":"                live_snapshot \u003d False"},{"line_number":1711,"context_line":"                self._prepare_domain_for_snapshot(context, live_snapshot,"},{"line_number":1712,"context_line":"                                                  state, instance)"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"            snapshot_directory \u003d CONF.libvirt.snapshots_directory"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_daa83bde","line":1711,"updated":"2016-03-14 12:28:07.000000000","message":"So I think we have a bug here, when we call suspend twice because live_snapshot was already False and we don\u0027t update state after calling this the previous time (I think?)","commit_id":"18a5655ce00c4bce341894069212940fc39db1b4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ad46f5d1db7a615901b171b1ce3cbdb48b19162d","unresolved":false,"context_lines":[{"line_number":1708,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1709,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1710,"context_line":"                live_snapshot \u003d False"},{"line_number":1711,"context_line":"                self._prepare_domain_for_snapshot(context, live_snapshot,"},{"line_number":1712,"context_line":"                                                  state, instance)"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"            snapshot_directory \u003d CONF.libvirt.snapshots_directory"}],"source_content_type":"text/x-python","patch_set":9,"id":"1af94dfe_641720ee","line":1711,"in_reply_to":"3afc51ec_a194f442","updated":"2016-03-15 12:16:12.000000000","message":"What we want here is to suspend domain if is is not already so we can rewrite the same condition as there is inside the method \u0027_prepare_domain_for_snapshot\u0027 or simply re-use it.","commit_id":"18a5655ce00c4bce341894069212940fc39db1b4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"46e8287c46e1357ce48d6d371006b2f7d793766d","unresolved":false,"context_lines":[{"line_number":1708,"context_line":"                # Standard snapshot uses qemu img-convert from RBD which is"},{"line_number":1709,"context_line":"                # not safe to run with live_snapshot."},{"line_number":1710,"context_line":"                live_snapshot \u003d False"},{"line_number":1711,"context_line":"                self._prepare_domain_for_snapshot(context, live_snapshot,"},{"line_number":1712,"context_line":"                                                  state, instance)"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"            snapshot_directory \u003d CONF.libvirt.snapshots_directory"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_a194f442","line":1711,"in_reply_to":"3afc51ec_daa83bde","updated":"2016-03-15 09:12:50.000000000","message":"Actually, I think I probably wrong here... We only live live_snapshot\u003dfalse already when the domain is shutdown, and in that case, the _prepare_domain doesn\u0027t actually do anything.\n\nBut its would make me feel better if we didn\u0027t call that function twice, unless we know we need to.","commit_id":"18a5655ce00c4bce341894069212940fc39db1b4"}]}
