)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c53240597c5c1757954e2a94c4b067d7a1e548fb","unresolved":false,"context_lines":[{"line_number":10,"context_line":"directly so that cache option can be set properly. i.e. cache\u003dnone"},{"line_number":11,"context_line":"when O_DIRECT is supported by the filesystem."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Conditionally enable compression of snapshots when converting to qcow2."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4b7be98b5832ca8c580339fcfb7b9203264b5ff8"},{"line_number":16,"context_line":"Signed-off-by: Jack Ding \u003cjack.ding@windriver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_8d577529","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":71},"updated":"2018-11-14 22:39:22.000000000","message":"this isn\u0027t really covered as part of the commit message summary line.  maybe change it to something a bit more generic like \"improve libvirt image and snapshot handling\"","commit_id":"08d3f0ca493c31ac7789afb1083456bfc93d95d9"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"b0c31bde7268d5d4f0e8d44d7460333eac21d869","unresolved":false,"context_lines":[{"line_number":10,"context_line":"directly so that cache option can be set properly. i.e. cache\u003dnone"},{"line_number":11,"context_line":"when O_DIRECT is supported by the filesystem."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Conditionally enable compression of snapshots when converting to qcow2."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4b7be98b5832ca8c580339fcfb7b9203264b5ff8"},{"line_number":16,"context_line":"Signed-off-by: Jack Ding \u003cjack.ding@windriver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_10760e94","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":71},"in_reply_to":"3f79a3b5_8d577529","updated":"2018-11-15 14:00:33.000000000","message":"Done","commit_id":"08d3f0ca493c31ac7789afb1083456bfc93d95d9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2c46576c872bceacacf4b885e0eabb4d45b6cc7b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve libvirt image and snapshot handling"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use virt.images.convert_image instead of invoking \u0027qemu-img convert\u0027"},{"line_number":10,"context_line":"directly so that cache option can be set properly. i.e. cache\u003dnone"},{"line_number":11,"context_line":"when O_DIRECT is supported by the filesystem."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Conditionally enable compression of snapshots when converting to qcow2."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4b7be98b5832ca8c580339fcfb7b9203264b5ff8"},{"line_number":16,"context_line":"Signed-off-by: Jack Ding \u003cjack.ding@windriver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f79a3b5_5bbc17b5","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":71},"updated":"2018-11-26 17:42:23.000000000","message":"These are really two separate changes, what do you think about splitting these up? I\u0027m specifically wondering if either or both of these changes should be backported as bug fixes, and if so, we likely want them separate in case one causes problems and we need to revert one of the changes but want to keep the other. That\u0027s generally why we don\u0027t want to intermix a bunch of changes into a single patch.","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82830719e95d53b8a5065b27b38e47953c474f81","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve libvirt image and snapshot handling"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use virt.images.convert_image instead of invoking \u0027qemu-img convert\u0027"},{"line_number":10,"context_line":"directly so that cache option can be set properly. i.e. cache\u003dnone"},{"line_number":11,"context_line":"when O_DIRECT is supported by the filesystem."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Conditionally enable compression of snapshots when converting to qcow2."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4b7be98b5832ca8c580339fcfb7b9203264b5ff8"},{"line_number":16,"context_line":"Signed-off-by: Jack Ding \u003cjack.ding@windriver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f79a3b5_3b77db09","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":71},"in_reply_to":"3f79a3b5_5bbc17b5","updated":"2018-11-26 17:43:54.000000000","message":"Well I guess they aren\u0027t really unrelated, since extract_snapshot is using convert_image now, so you\u0027ve moved the logic, but I worry about unintended side effects of using the snapshot compression in the resize flow.","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"}],"nova/privsep/qemu.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"c133afe16bfc79c60e895d2747d68a62445c6b8e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    if in_format is not None:"},{"line_number":58,"context_line":"        cmd \u003d cmd + (\u0027-f\u0027, in_format)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    # Conditionally enable compression of snapshots."},{"line_number":61,"context_line":"    if CONF.libvirt.snapshot_compression and out_format \u003d\u003d \"qcow2\":"},{"line_number":62,"context_line":"        cmd +\u003d (\u0027-c\u0027,)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_570f7c37","line":60,"updated":"2018-11-19 09:48:37.000000000","message":"This part is still well test in test_utils.py","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"172477ba9844b156b79222bda63f59e195f9d268","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    if in_format is not None:"},{"line_number":58,"context_line":"        cmd \u003d cmd + (\u0027-f\u0027, in_format)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    # Conditionally enable compression of snapshots."},{"line_number":61,"context_line":"    if CONF.libvirt.snapshot_compression and out_format \u003d\u003d \"qcow2\":"},{"line_number":62,"context_line":"        cmd +\u003d (\u0027-c\u0027,)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    cmd \u003d cmd + (source, dest)"},{"line_number":65,"context_line":"    processutils.execute(*cmd)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_18c0d34a","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":22},"updated":"2018-11-27 11:09:25.000000000","message":"Please could you add compression as an argument to images.convert_image() rather than encoding it here, making this behaviour explicitly controlled by the caller.","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"a4117a6e16e0c683b8342d3d6f9e331c7addc854","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    if in_format is not None:"},{"line_number":58,"context_line":"        cmd \u003d cmd + (\u0027-f\u0027, in_format)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    # Conditionally enable compression of snapshots."},{"line_number":61,"context_line":"    if CONF.libvirt.snapshot_compression and out_format \u003d\u003d \"qcow2\":"},{"line_number":62,"context_line":"        cmd +\u003d (\u0027-c\u0027,)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    cmd \u003d cmd + (source, dest)"},{"line_number":65,"context_line":"    processutils.execute(*cmd)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_6ffed839","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":22},"in_reply_to":"3f79a3b5_18c0d34a","updated":"2018-11-27 17:07:16.000000000","message":"Done","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0cd8073a57baa3ac0112a0fe937667b8efc3ad02","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import nova.privsep.utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dfd5e7cf_e7cb8fa2","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":21},"updated":"2019-01-09 00:48:52.000000000","message":"It is not necessary.","commit_id":"5b2021575a618d603685b97b694934c857e6f9c6"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"8ceefd699b331b336e6e406e1746b49b1f7325b0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import nova.privsep.utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dfd5e7cf_458eee2e","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":21},"in_reply_to":"dfd5e7cf_e7cb8fa2","updated":"2019-01-10 16:57:07.000000000","message":"Done","commit_id":"5b2021575a618d603685b97b694934c857e6f9c6"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"fd0988cd1323fd04d10eb6a90894104f29696583","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        cmd \u003d cmd + (\u0027-f\u0027, in_format)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    if compress:"},{"line_number":61,"context_line":"        cmd +\u003d (\u0027-c\u0027,)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    cmd \u003d cmd + (source, dest)"},{"line_number":64,"context_line":"    processutils.execute(*cmd)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_44f7e7d5","line":61,"updated":"2019-02-21 14:56:05.000000000","message":"Was looking for unit test coverage of the new option, but the function doesn\u0027t appear to have any at all.","commit_id":"99a3823f98c593fd7f0a9e3fe3aab4126f9bb383"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0cd8073a57baa3ac0112a0fe937667b8efc3ad02","unresolved":false,"context_lines":[{"line_number":18736,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":18737,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":18738,"context_line":"    @mock.patch(\u0027os.rename\u0027)"},{"line_number":18739,"context_line":"    def test_disk_raw_to_qcow2(self, mock_rename, mock_execute, mock_direct_io,"},{"line_number":18740,"context_line":"                               mock_disk_op_sema):"},{"line_number":18741,"context_line":"        path \u003d \u0027/test/disk\u0027"},{"line_number":18742,"context_line":"        _path_qcow \u003d path + \u0027_qcow\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"dfd5e7cf_87bc0306","line":18739,"range":{"start_line":18739,"start_character":64,"end_line":18739,"end_character":78},"updated":"2019-01-09 00:48:52.000000000","message":"There is not an assertion for mock_direct_io.\nIt should be added.","commit_id":"5b2021575a618d603685b97b694934c857e6f9c6"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"8ceefd699b331b336e6e406e1746b49b1f7325b0","unresolved":false,"context_lines":[{"line_number":18736,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":18737,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":18738,"context_line":"    @mock.patch(\u0027os.rename\u0027)"},{"line_number":18739,"context_line":"    def test_disk_raw_to_qcow2(self, mock_rename, mock_execute, mock_direct_io,"},{"line_number":18740,"context_line":"                               mock_disk_op_sema):"},{"line_number":18741,"context_line":"        path \u003d \u0027/test/disk\u0027"},{"line_number":18742,"context_line":"        _path_qcow \u003d path + \u0027_qcow\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"dfd5e7cf_8544d6b8","line":18739,"range":{"start_line":18739,"start_character":64,"end_line":18739,"end_character":78},"in_reply_to":"dfd5e7cf_87bc0306","updated":"2019-01-10 16:57:07.000000000","message":"Done","commit_id":"5b2021575a618d603685b97b694934c857e6f9c6"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"fd0988cd1323fd04d10eb6a90894104f29696583","unresolved":false,"context_lines":[{"line_number":18801,"context_line":"                                                  \u0027uuid\u0027: \u0027other_uuid\u0027})"},{"line_number":18802,"context_line":""},{"line_number":18803,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":18804,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":18805,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":18806,"context_line":"    @mock.patch(\u0027os.rename\u0027)"},{"line_number":18807,"context_line":"    def test_disk_raw_to_qcow2(self, mock_rename, mock_execute, mock_direct_io,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_041a3f16","line":18804,"updated":"2019-02-21 14:56:05.000000000","message":"Should probably test non-support too.","commit_id":"99a3823f98c593fd7f0a9e3fe3aab4126f9bb383"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"bdc28e2770c85dee5533a8ea6c5154a0fccad35a","unresolved":false,"context_lines":[{"line_number":18801,"context_line":"                                                  \u0027uuid\u0027: \u0027other_uuid\u0027})"},{"line_number":18802,"context_line":""},{"line_number":18803,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":18804,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":18805,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":18806,"context_line":"    @mock.patch(\u0027os.rename\u0027)"},{"line_number":18807,"context_line":"    def test_disk_raw_to_qcow2(self, mock_rename, mock_execute, mock_direct_io,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_9a15df3f","line":18804,"in_reply_to":"9fdfeff1_041a3f16","updated":"2019-02-25 23:55:46.000000000","message":"Done","commit_id":"99a3823f98c593fd7f0a9e3fe3aab4126f9bb383"}],"nova/tests/unit/virt/libvirt/test_utils.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0cd8073a57baa3ac0112a0fe937667b8efc3ad02","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":523,"context_line":"    def _do_test_extract_snapshot(self, mock_execute, mock_direct_io,"},{"line_number":524,"context_line":"                                  mock_disk_op_sema,"},{"line_number":525,"context_line":"                                  src_format\u003d\u0027qcow2\u0027,"},{"line_number":526,"context_line":"                                  dest_format\u003d\u0027raw\u0027, out_format\u003d\u0027raw\u0027):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dfd5e7cf_a74a6724","line":523,"range":{"start_line":523,"start_character":54,"end_line":523,"end_character":68},"updated":"2019-01-09 00:48:52.000000000","message":"ditto","commit_id":"5b2021575a618d603685b97b694934c857e6f9c6"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"8ceefd699b331b336e6e406e1746b49b1f7325b0","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":523,"context_line":"    def _do_test_extract_snapshot(self, mock_execute, mock_direct_io,"},{"line_number":524,"context_line":"                                  mock_disk_op_sema,"},{"line_number":525,"context_line":"                                  src_format\u003d\u0027qcow2\u0027,"},{"line_number":526,"context_line":"                                  dest_format\u003d\u0027raw\u0027, out_format\u003d\u0027raw\u0027):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dfd5e7cf_45182ed2","line":523,"range":{"start_line":523,"start_character":54,"end_line":523,"end_character":68},"in_reply_to":"dfd5e7cf_a74a6724","updated":"2019-01-10 16:57:07.000000000","message":"assert added","commit_id":"5b2021575a618d603685b97b694934c857e6f9c6"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"fd0988cd1323fd04d10eb6a90894104f29696583","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            os.unlink(dst_path)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":523,"context_line":"    def _do_test_extract_snapshot(self, mock_execute, mock_direct_io,"},{"line_number":524,"context_line":"                                  mock_disk_op_sema,"},{"line_number":525,"context_line":"                                  src_format\u003d\u0027qcow2\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_c4baf7df","line":522,"updated":"2019-02-21 14:56:05.000000000","message":"Should probably also test non-support.\n\n...or have unit test coverage for convert_image and abstract this.","commit_id":"99a3823f98c593fd7f0a9e3fe3aab4126f9bb383"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"bdc28e2770c85dee5533a8ea6c5154a0fccad35a","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            os.unlink(dst_path)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dTrue)"},{"line_number":523,"context_line":"    def _do_test_extract_snapshot(self, mock_execute, mock_direct_io,"},{"line_number":524,"context_line":"                                  mock_disk_op_sema,"},{"line_number":525,"context_line":"                                  src_format\u003d\u0027qcow2\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_3a287384","line":522,"in_reply_to":"9fdfeff1_c4baf7df","updated":"2019-02-25 23:55:46.000000000","message":"Done","commit_id":"99a3823f98c593fd7f0a9e3fe3aab4126f9bb383"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"947f39d215716a2d67e2e137ab063c78c5dbc37d","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dFalse)"},{"line_number":523,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":524,"context_line":"    def _do_test_extract_snapshot_no_directio(self, mock_execute,"},{"line_number":525,"context_line":"                                  mock_direct_io,"},{"line_number":526,"context_line":"                                  mock_disk_op_sema,"},{"line_number":527,"context_line":"                                  src_format\u003d\u0027qcow2\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_7dcb1571","line":524,"updated":"2019-02-28 09:39:39.000000000","message":"Did you forget to plumb this in somewhere?","commit_id":"f32019b8d010895e39cb03aff2912432a6e0ca6e"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"eb9052e38cd3eb896d6e42e0df3455335b416e86","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dFalse)"},{"line_number":523,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":524,"context_line":"    def _do_test_extract_snapshot_no_directio(self, mock_execute,"},{"line_number":525,"context_line":"                                  mock_direct_io,"},{"line_number":526,"context_line":"                                  mock_disk_op_sema,"},{"line_number":527,"context_line":"                                  src_format\u003d\u0027qcow2\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_cd284187","line":524,"in_reply_to":"9fdfeff1_7dcb1571","updated":"2019-02-28 19:53:19.000000000","message":"whoops...this was intended as a standalone test.  reworked in new version.","commit_id":"f32019b8d010895e39cb03aff2912432a6e0ca6e"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"fccbeeb3b07e3a06756466488442aecdcafcdb07","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    @mock.patch.object(compute_utils, \u0027disk_ops_semaphore\u0027)"},{"line_number":522,"context_line":"    @mock.patch(\u0027nova.privsep.utils.supports_direct_io\u0027, return_value\u003dFalse)"},{"line_number":523,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":524,"context_line":"    def do_test_extract_snapshot_no_directio(self, mock_execute,"},{"line_number":525,"context_line":"                                  mock_direct_io,"},{"line_number":526,"context_line":"                                  mock_disk_op_sema):"},{"line_number":527,"context_line":"        # Test a single variant with no support for direct IO."}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_ae34c9fb","line":524,"updated":"2019-03-01 11:00:45.000000000","message":"This needs to be called test_\u003cfoo\u003e or it won\u0027t run.","commit_id":"2abf36a6989a597dcdbbe1282e81e51da86f1356"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"fccbeeb3b07e3a06756466488442aecdcafcdb07","unresolved":false,"context_lines":[{"line_number":526,"context_line":"                                  mock_disk_op_sema):"},{"line_number":527,"context_line":"        # Test a single variant with no support for direct IO."},{"line_number":528,"context_line":"        # This could be removed if we add unit tests for convert_image()."},{"line_number":529,"context_line":"        src_format\u003d\u0027qcow2\u0027"},{"line_number":530,"context_line":"        dest_format\u003d\u0027raw\u0027"},{"line_number":531,"context_line":"        out_format\u003d\u0027raw\u0027"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        libvirt_utils.extract_snapshot(\u0027/path/to/disk/image\u0027, src_format,"},{"line_number":534,"context_line":"                                       \u0027/extracted/snap\u0027, dest_format)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9fdfeff1_6e3a61e6","line":531,"range":{"start_line":529,"start_character":0,"end_line":531,"end_character":24},"updated":"2019-03-01 11:00:45.000000000","message":"Whoops, pep8.","commit_id":"2abf36a6989a597dcdbbe1282e81e51da86f1356"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"d15b8b6c679ebe3222bd47bbef63fe76ec4cbb4b","unresolved":false,"context_lines":[{"line_number":8361,"context_line":"    def _disk_raw_to_qcow2(path):"},{"line_number":8362,"context_line":"        \"\"\"Converts a raw disk to qcow2.\"\"\""},{"line_number":8363,"context_line":"        path_qcow \u003d path + \u0027_qcow\u0027"},{"line_number":8364,"context_line":"        # Use no-caching option when O_DIRECT is supported to reduce"},{"line_number":8365,"context_line":"        # interference with other applications and ensure that the data is on"},{"line_number":8366,"context_line":"        # persistent storage when the command exits."},{"line_number":8367,"context_line":"        if nova.privsep.utils.supports_direct_io(CONF.instances_path):"},{"line_number":8368,"context_line":"            cache_mode \u003d \u0027none\u0027"},{"line_number":8369,"context_line":"        else:"},{"line_number":8370,"context_line":"            cache_mode \u003d \u0027writethrough\u0027"},{"line_number":8371,"context_line":"        utils.execute(\u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, \u0027raw\u0027, \u0027-t\u0027, cache_mode,"},{"line_number":8372,"context_line":"                      \u0027-O\u0027, \u0027qcow2\u0027, path, path_qcow)"},{"line_number":8373,"context_line":"        os.rename(path_qcow, path)"},{"line_number":8374,"context_line":""},{"line_number":8375,"context_line":"    def finish_migration(self, context, migration, instance, disk_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f3188ece","line":8372,"range":{"start_line":8364,"start_character":0,"end_line":8372,"end_character":53},"updated":"2018-11-09 18:19:57.000000000","message":"could we just switch this to use nova.privsep.qemu.convert_image() so we\u0027d reduce duplicated code and pick up the cache behaviour for free?","commit_id":"51d433812010c886b49762296d47cbba9a1be5fd"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"9440b6833c44c0730a936b14274579734a7a99ff","unresolved":false,"context_lines":[{"line_number":8361,"context_line":"    def _disk_raw_to_qcow2(path):"},{"line_number":8362,"context_line":"        \"\"\"Converts a raw disk to qcow2.\"\"\""},{"line_number":8363,"context_line":"        path_qcow \u003d path + \u0027_qcow\u0027"},{"line_number":8364,"context_line":"        # Use no-caching option when O_DIRECT is supported to reduce"},{"line_number":8365,"context_line":"        # interference with other applications and ensure that the data is on"},{"line_number":8366,"context_line":"        # persistent storage when the command exits."},{"line_number":8367,"context_line":"        if nova.privsep.utils.supports_direct_io(CONF.instances_path):"},{"line_number":8368,"context_line":"            cache_mode \u003d \u0027none\u0027"},{"line_number":8369,"context_line":"        else:"},{"line_number":8370,"context_line":"            cache_mode \u003d \u0027writethrough\u0027"},{"line_number":8371,"context_line":"        utils.execute(\u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, \u0027raw\u0027, \u0027-t\u0027, cache_mode,"},{"line_number":8372,"context_line":"                      \u0027-O\u0027, \u0027qcow2\u0027, path, path_qcow)"},{"line_number":8373,"context_line":"        os.rename(path_qcow, path)"},{"line_number":8374,"context_line":""},{"line_number":8375,"context_line":"    def finish_migration(self, context, migration, instance, disk_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_24cd5e5a","line":8372,"range":{"start_line":8364,"start_character":0,"end_line":8372,"end_character":53},"in_reply_to":"3f79a3b5_f3188ece","updated":"2018-11-09 21:45:24.000000000","message":"will call images.convert_image()","commit_id":"51d433812010c886b49762296d47cbba9a1be5fd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2c46576c872bceacacf4b885e0eabb4d45b6cc7b","unresolved":false,"context_lines":[{"line_number":8433,"context_line":"            # need to be converted."},{"line_number":8434,"context_line":"            if (disk_name !\u003d \u0027disk.config\u0027 and"},{"line_number":8435,"context_line":"                        info[\u0027type\u0027] \u003d\u003d \u0027raw\u0027 and CONF.use_cow_images):"},{"line_number":8436,"context_line":"                self._disk_raw_to_qcow2(info[\u0027path\u0027])"},{"line_number":8437,"context_line":""},{"line_number":8438,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info,"},{"line_number":8439,"context_line":"                                  block_disk_info, image_meta,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_db2b47e6","line":8436,"updated":"2018-11-26 17:42:23.000000000","message":"This isn\u0027t working on a snapshot right? This is just a non-config drive disk during a resize (cold migration), as such if snapshot_compression\u003dTrue we\u0027ll apply the -c option on qemu-img convert - is that OK? Is it harmless?","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"172477ba9844b156b79222bda63f59e195f9d268","unresolved":false,"context_lines":[{"line_number":8433,"context_line":"            # need to be converted."},{"line_number":8434,"context_line":"            if (disk_name !\u003d \u0027disk.config\u0027 and"},{"line_number":8435,"context_line":"                        info[\u0027type\u0027] \u003d\u003d \u0027raw\u0027 and CONF.use_cow_images):"},{"line_number":8436,"context_line":"                self._disk_raw_to_qcow2(info[\u0027path\u0027])"},{"line_number":8437,"context_line":""},{"line_number":8438,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info,"},{"line_number":8439,"context_line":"                                  block_disk_info, image_meta,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_b87d1f1e","line":8436,"in_reply_to":"3f79a3b5_210fac8b","updated":"2018-11-27 11:09:25.000000000","message":"This will work, but it\u0027s not going to be what the user expected, and if somebody does have a workload which is messed up by this it\u0027s going to be a PITA to recover.","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"c412f2aa9c501a8b52e83825f9c959d01a955c87","unresolved":false,"context_lines":[{"line_number":8433,"context_line":"            # need to be converted."},{"line_number":8434,"context_line":"            if (disk_name !\u003d \u0027disk.config\u0027 and"},{"line_number":8435,"context_line":"                        info[\u0027type\u0027] \u003d\u003d \u0027raw\u0027 and CONF.use_cow_images):"},{"line_number":8436,"context_line":"                self._disk_raw_to_qcow2(info[\u0027path\u0027])"},{"line_number":8437,"context_line":""},{"line_number":8438,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info,"},{"line_number":8439,"context_line":"                                  block_disk_info, image_meta,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_210fac8b","line":8436,"in_reply_to":"3f79a3b5_db2b47e6","updated":"2018-11-26 19:25:21.000000000","message":"FYI unanswered question from p-draigbrady in\nhttps://review.openstack.org/#/c/20779/:\nPerhaps we could have a more general variable like libvirt_compress_images to enable the use of compression, in more places like driver.finish_migration(), driver.migrate_disk_and_power_off() ?","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"721fa7b3402ecd81e6ad76a684eec373a379328d","unresolved":false,"context_lines":[{"line_number":8446,"context_line":"        \"\"\"Converts a raw disk to qcow2.\"\"\""},{"line_number":8447,"context_line":"        path_qcow \u003d path + \u0027_qcow\u0027"},{"line_number":8448,"context_line":"        # execute operation with disk concurrency semaphore"},{"line_number":8449,"context_line":"        with compute_utils.disk_ops_semaphore:"},{"line_number":8450,"context_line":"            processutils.execute(\u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, \u0027raw\u0027,"},{"line_number":8451,"context_line":"                                 \u0027-O\u0027, \u0027qcow2\u0027, path, path_qcow)"},{"line_number":8452,"context_line":"        os.rename(path_qcow, path)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5fc1f717_132174a0","side":"PARENT","line":8449,"updated":"2019-03-05 18:38:58.000000000","message":"This is done as part of images.convert_image(), so we\u0027re not losing anything here.","commit_id":"ad842aa4e74a450e7ace5e394b1554486f814e42"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"721fa7b3402ecd81e6ad76a684eec373a379328d","unresolved":false,"context_lines":[{"line_number":8448,"context_line":"        # execute operation with disk concurrency semaphore"},{"line_number":8449,"context_line":"        with compute_utils.disk_ops_semaphore:"},{"line_number":8450,"context_line":"            processutils.execute(\u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, \u0027raw\u0027,"},{"line_number":8451,"context_line":"                                 \u0027-O\u0027, \u0027qcow2\u0027, path, path_qcow)"},{"line_number":8452,"context_line":"        os.rename(path_qcow, path)"},{"line_number":8453,"context_line":""},{"line_number":8454,"context_line":"    def finish_migration(self, context, migration, instance, disk_info,"}],"source_content_type":"text/x-python","patch_set":23,"id":"5fc1f717_7388f870","side":"PARENT","line":8451,"updated":"2019-03-05 18:38:58.000000000","message":"As best I can tell, this was running with an implied cache mode of \"unsafe\" and will now be running with \"writethrough\" if directio is not supported on the filesystem. I think that\u0027s probably a win for correctness (as well as the obvious win for consistency), but just noting here that it does mean that this is not just a no-op for the non-directio case.","commit_id":"ad842aa4e74a450e7ace5e394b1554486f814e42"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"d15b8b6c679ebe3222bd47bbef63fe76ec4cbb4b","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    if dest_fmt \u003d\u003d \u0027ploop\u0027:"},{"line_number":309,"context_line":"        dest_fmt \u003d \u0027parallels\u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    # Use no-caching option when O_DIRECT is supported to reduce"},{"line_number":312,"context_line":"    # interference with other applications and ensure that the data is on"},{"line_number":313,"context_line":"    # persistent storage when the command exits."},{"line_number":314,"context_line":"    if nova.privsep.utils.supports_direct_io(CONF.instances_path):"},{"line_number":315,"context_line":"        cache_mode \u003d \u0027none\u0027"},{"line_number":316,"context_line":"    else:"},{"line_number":317,"context_line":"        cache_mode \u003d \u0027writethrough\u0027"},{"line_number":318,"context_line":"    qemu_img_cmd \u003d (\u0027qemu-img\u0027, \u0027convert\u0027, \u0027-t\u0027, cache_mode,"},{"line_number":319,"context_line":"                    \u0027-f\u0027, source_fmt, \u0027-O\u0027, dest_fmt)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    # Conditionally enable compression of snapshots."},{"line_number":322,"context_line":"    if CONF.libvirt.snapshot_compression and dest_fmt \u003d\u003d \"qcow2\":"},{"line_number":323,"context_line":"        qemu_img_cmd +\u003d (\u0027-c\u0027,)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    qemu_img_cmd +\u003d (disk_path, out_path)"},{"line_number":326,"context_line":"    utils.execute(*qemu_img_cmd)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"def load_file(path):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_33236608","line":326,"range":{"start_line":311,"start_character":0,"end_line":326,"end_character":32},"updated":"2018-11-09 18:19:57.000000000","message":"could we just switch this to use nova.privsep.qemu.convert_image() so we\u0027d reduce duplicated code and pick up the cache behaviour for free?","commit_id":"51d433812010c886b49762296d47cbba9a1be5fd"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"9440b6833c44c0730a936b14274579734a7a99ff","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    if dest_fmt \u003d\u003d \u0027ploop\u0027:"},{"line_number":309,"context_line":"        dest_fmt \u003d \u0027parallels\u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    # Use no-caching option when O_DIRECT is supported to reduce"},{"line_number":312,"context_line":"    # interference with other applications and ensure that the data is on"},{"line_number":313,"context_line":"    # persistent storage when the command exits."},{"line_number":314,"context_line":"    if nova.privsep.utils.supports_direct_io(CONF.instances_path):"},{"line_number":315,"context_line":"        cache_mode \u003d \u0027none\u0027"},{"line_number":316,"context_line":"    else:"},{"line_number":317,"context_line":"        cache_mode \u003d \u0027writethrough\u0027"},{"line_number":318,"context_line":"    qemu_img_cmd \u003d (\u0027qemu-img\u0027, \u0027convert\u0027, \u0027-t\u0027, cache_mode,"},{"line_number":319,"context_line":"                    \u0027-f\u0027, source_fmt, \u0027-O\u0027, dest_fmt)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    # Conditionally enable compression of snapshots."},{"line_number":322,"context_line":"    if CONF.libvirt.snapshot_compression and dest_fmt \u003d\u003d \"qcow2\":"},{"line_number":323,"context_line":"        qemu_img_cmd +\u003d (\u0027-c\u0027,)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    qemu_img_cmd +\u003d (disk_path, out_path)"},{"line_number":326,"context_line":"    utils.execute(*qemu_img_cmd)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"def load_file(path):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c4010a6f","line":326,"range":{"start_line":311,"start_character":0,"end_line":326,"end_character":32},"in_reply_to":"3f79a3b5_33236608","updated":"2018-11-09 21:45:24.000000000","message":"will add -c option to convert_image()","commit_id":"51d433812010c886b49762296d47cbba9a1be5fd"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"172477ba9844b156b79222bda63f59e195f9d268","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    if dest_fmt \u003d\u003d \u0027ploop\u0027:"},{"line_number":309,"context_line":"        dest_fmt \u003d \u0027parallels\u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    images.convert_image(disk_path, out_path, source_fmt, dest_fmt)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"def load_file(path):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_589deb55","line":311,"updated":"2018-11-27 11:09:25.000000000","message":"compress \u003d CONF.libvirt.snapshot_compression and dest_fmt \u003d\u003d \"qcow2\"\nimages.convert_image(disk_path, out_path, source_fmt, dest_fmt, compress\u003dcompress)","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"a4117a6e16e0c683b8342d3d6f9e331c7addc854","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    if dest_fmt \u003d\u003d \u0027ploop\u0027:"},{"line_number":309,"context_line":"        dest_fmt \u003d \u0027parallels\u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    images.convert_image(disk_path, out_path, source_fmt, dest_fmt)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"def load_file(path):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_4fef5c7f","line":311,"in_reply_to":"3f79a3b5_589deb55","updated":"2018-11-27 17:07:16.000000000","message":"Done","commit_id":"4a5da5a3b471bb5592d0a97e93bb69152e6447c0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"809000774e92bf9b96a77be7a357fa5331e487d0","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    qemu_img_cmd +\u003d (disk_path, out_path)"},{"line_number":319,"context_line":"    # execute operation with disk concurrency semaphore"},{"line_number":320,"context_line":"    with compute_utils.disk_ops_semaphore:"},{"line_number":321,"context_line":"        processutils.execute(*qemu_img_cmd)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_ea2d5946","side":"PARENT","line":320,"updated":"2019-02-11 15:37:35.000000000","message":"Note to self: what\u0027s this for, is it required, and if so are we still using it?","commit_id":"ad842aa4e74a450e7ace5e394b1554486f814e42"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"fd0988cd1323fd04d10eb6a90894104f29696583","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    qemu_img_cmd +\u003d (disk_path, out_path)"},{"line_number":319,"context_line":"    # execute operation with disk concurrency semaphore"},{"line_number":320,"context_line":"    with compute_utils.disk_ops_semaphore:"},{"line_number":321,"context_line":"        processutils.execute(*qemu_img_cmd)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_c4d0b756","side":"PARENT","line":320,"in_reply_to":"9fdfeff1_b7dfb538","updated":"2019-02-21 14:56:05.000000000","message":"Ack.","commit_id":"ad842aa4e74a450e7ace5e394b1554486f814e42"},{"author":{"_account_id":28433,"name":"Jack Ding","email":"jackding@gmail.com","username":"jackding"},"change_message_id":"e3990c55afa5e9358b8b5380ca376213e4bdf33e","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    qemu_img_cmd +\u003d (disk_path, out_path)"},{"line_number":319,"context_line":"    # execute operation with disk concurrency semaphore"},{"line_number":320,"context_line":"    with compute_utils.disk_ops_semaphore:"},{"line_number":321,"context_line":"        processutils.execute(*qemu_img_cmd)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_b7dfb538","side":"PARENT","line":320,"in_reply_to":"9fdfeff1_ea2d5946","updated":"2019-02-11 18:56:08.000000000","message":"I added this in images.convert_image() with https://review.openstack.org/#/c/609180/ so we are still using it.","commit_id":"ad842aa4e74a450e7ace5e394b1554486f814e42"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"721fa7b3402ecd81e6ad76a684eec373a379328d","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    if dest_fmt \u003d\u003d \u0027ploop\u0027:"},{"line_number":310,"context_line":"        dest_fmt \u003d \u0027parallels\u0027"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    qemu_img_cmd \u003d (\u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, source_fmt, \u0027-O\u0027, dest_fmt)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    # Conditionally enable compression of snapshots."},{"line_number":315,"context_line":"    if CONF.libvirt.snapshot_compression and dest_fmt \u003d\u003d \"qcow2\":"}],"source_content_type":"text/x-python","patch_set":23,"id":"5fc1f717_33827051","side":"PARENT","line":312,"updated":"2019-03-05 18:38:58.000000000","message":"Same comment here about cache mode for non-directio.","commit_id":"ad842aa4e74a450e7ace5e394b1554486f814e42"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"721fa7b3402ecd81e6ad76a684eec373a379328d","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    qemu_img_cmd +\u003d (disk_path, out_path)"},{"line_number":319,"context_line":"    # execute operation with disk concurrency semaphore"},{"line_number":320,"context_line":"    with compute_utils.disk_ops_semaphore:"},{"line_number":321,"context_line":"        processutils.execute(*qemu_img_cmd)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5fc1f717_f33708e3","side":"PARENT","line":320,"updated":"2019-03-05 18:38:58.000000000","message":"This is done as part of images.convert_image(), so we\u0027re not losing anything here.","commit_id":"ad842aa4e74a450e7ace5e394b1554486f814e42"}]}
