)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Daniel Genin \u003cDaniel.Genin@jhuapl.edu\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-12-22 18:01:59 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Disconnect dm-crypt on instance suspend/stop"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Strengthens protection provided by ephemeral storage encryption"},{"line_number":10,"context_line":"    features by disconnecting the dm-crypt device, providing clear-"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3a961159_01dc2345","line":7,"updated":"2014-12-23 14:31:40.000000000","message":"Can you please prefix with libvirt","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"aef09313f613a4325ad5d733141ee8360fdb6795","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Disconnect dm-crypt on instance suspend/stop"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Strengthens protection provided by ephemeral storage encryption"},{"line_number":10,"context_line":"    features by disconnecting the dm-crypt device, providing clear-"},{"line_number":11,"context_line":"    text access to encrypted disk, when an encrypted instance is"},{"line_number":12,"context_line":"    suspended or stopped."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a961159_8c05a37b","line":9,"updated":"2015-01-08 15:29:13.000000000","message":"Nit: unnecessary indentation","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"a77c70ce889bb0f9d64fc40783725fcf82343942","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Disconnect dm-crypt on instance suspend/stop"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Strengthens protection provided by ephemeral storage encryption"},{"line_number":10,"context_line":"    features by disconnecting the dm-crypt device, providing clear-"},{"line_number":11,"context_line":"    text access to encrypted disk, when an encrypted instance is"},{"line_number":12,"context_line":"    suspended or stopped."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a961159_fc865515","line":9,"in_reply_to":"3a961159_8c05a37b","updated":"2015-01-13 21:19:27.000000000","message":"Done","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"aef09313f613a4325ad5d733141ee8360fdb6795","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Strengthens protection provided by ephemeral storage encryption"},{"line_number":10,"context_line":"    features by disconnecting the dm-crypt device, providing clear-"},{"line_number":11,"context_line":"    text access to encrypted disk, when an encrypted instance is"},{"line_number":12,"context_line":"    suspended or stopped."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint stop-dmcrypt-on-suspend"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a961159_6cea37a1","line":11,"updated":"2015-01-08 15:29:13.000000000","message":"What is meant by \"clear-text access to encrypted disk\"?","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"a77c70ce889bb0f9d64fc40783725fcf82343942","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Strengthens protection provided by ephemeral storage encryption"},{"line_number":10,"context_line":"    features by disconnecting the dm-crypt device, providing clear-"},{"line_number":11,"context_line":"    text access to encrypted disk, when an encrypted instance is"},{"line_number":12,"context_line":"    suspended or stopped."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint stop-dmcrypt-on-suspend"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a961159_fcb495d5","line":11,"in_reply_to":"3a961159_6cea37a1","updated":"2015-01-13 21:19:27.000000000","message":"Done","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"aef09313f613a4325ad5d733141ee8360fdb6795","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    features by disconnecting the dm-crypt device, providing clear-"},{"line_number":11,"context_line":"    text access to encrypted disk, when an encrypted instance is"},{"line_number":12,"context_line":"    suspended or stopped."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint stop-dmcrypt-on-suspend"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Idbe37922c5f944e3d567ce16913ce5d87af41fef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a961159_8c2cc303","line":13,"updated":"2015-01-08 15:29:13.000000000","message":"Add SecurityImpact tag.","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"a77c70ce889bb0f9d64fc40783725fcf82343942","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    features by disconnecting the dm-crypt device, providing clear-"},{"line_number":11,"context_line":"    text access to encrypted disk, when an encrypted instance is"},{"line_number":12,"context_line":"    suspended or stopped."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint stop-dmcrypt-on-suspend"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Idbe37922c5f944e3d567ce16913ce5d87af41fef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a961159_5cb209e6","line":13,"in_reply_to":"3a961159_8c2cc303","updated":"2015-01-13 21:19:27.000000000","message":"Done","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5c24020cee94ff9e73f3bc99e27b63babecfa40d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Daniel Genin \u003cDaniel.Genin@jhuapl.edu\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-05 09:28:16 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"lilibvirt: Disconnect dm-crypt on instance suspend/stop"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Strengthens protection provided by ephemeral storage encryption"},{"line_number":10,"context_line":"feature by disconnecting the dm-crypt device, which provides"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da86d52c_b2e018ce","line":7,"updated":"2015-02-05 16:08:21.000000000","message":"s/lilibvirt/libvirt/","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"120c4a10086a6c9f6a06dbe151c1340696c6667a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Daniel Genin \u003cDaniel.Genin@jhuapl.edu\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-05 09:28:16 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"lilibvirt: Disconnect dm-crypt on instance suspend/stop"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Strengthens protection provided by ephemeral storage encryption"},{"line_number":10,"context_line":"feature by disconnecting the dm-crypt device, which provides"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"bab921fb_63d170cd","line":7,"in_reply_to":"da86d52c_b2e018ce","updated":"2015-04-24 20:20:09.000000000","message":"Done","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"}],"nova/tests/unit/compute/monitors/test_cpu_monitor.py":[{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"168afaf51fb63454443c1a491aa319c636fa47b4","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.compute import manager"},{"line_number":21,"context_line":"from nova.compute.monitors import virt"},{"line_number":22,"context_line":"from nova import keymgr"},{"line_number":23,"context_line":"from nova import test"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_2045d642","line":22,"updated":"2014-12-19 18:14:56.000000000","message":"failing to import keymgr generates an error on self.flags(fixed_key\u003d\u0027....\u0027, group\u003d\u0027keymgr\u0027). but importing keymgr causes a pep8 error because it is not used anywhere. what is the correct solution to this?","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"6dc7e04d1206b09994acd3dc85db7d722821aa14","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.compute import manager"},{"line_number":21,"context_line":"from nova.compute.monitors import virt"},{"line_number":22,"context_line":"from nova import keymgr"},{"line_number":23,"context_line":"from nova import test"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_fa42670d","line":22,"updated":"2014-12-23 11:25:48.000000000","message":"I think you don\u0027t need import `keymgr`","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.compute import manager"},{"line_number":21,"context_line":"from nova.compute.monitors import virt"},{"line_number":22,"context_line":"from nova import keymgr"},{"line_number":23,"context_line":"from nova import test"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_f7a99590","line":22,"in_reply_to":"3a961159_41d0eb1e","updated":"2014-12-23 22:08:05.000000000","message":"Done","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.compute import manager"},{"line_number":21,"context_line":"from nova.compute.monitors import virt"},{"line_number":22,"context_line":"from nova import keymgr"},{"line_number":23,"context_line":"from nova import test"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_41d0eb1e","line":22,"in_reply_to":"3a961159_46fac175","updated":"2014-12-23 14:31:40.000000000","message":"you can try something like:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L264","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"3ee028e598d409e28374c8f0707a1482dfb5fe21","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.compute import manager"},{"line_number":21,"context_line":"from nova.compute.monitors import virt"},{"line_number":22,"context_line":"from nova import keymgr"},{"line_number":23,"context_line":"from nova import test"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_46fac175","line":22,"in_reply_to":"3a961159_fa42670d","updated":"2014-12-23 13:47:25.000000000","message":"If I don\u0027t import keymgr the self.flags(fixed_key\u003d....) below generates an error. Do you by any chance know how to fix this?","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":8139,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":8140,"context_line":""},{"line_number":8141,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":8142,"context_line":"        instance[\u0027ephemeral_key_uuid\u0027] \u003d \u0027ephemeral key uuid\u0027"},{"line_number":8143,"context_line":""},{"line_number":8144,"context_line":"        network_info \u003d mock.MagicMock()"},{"line_number":8145,"context_line":"        block_device_info \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_01aa6384","line":8142,"updated":"2014-12-23 14:31:40.000000000","message":"instance should be an object. can you please use instance.ephemeral_key_uuid","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":8139,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":8140,"context_line":""},{"line_number":8141,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":8142,"context_line":"        instance[\u0027ephemeral_key_uuid\u0027] \u003d \u0027ephemeral key uuid\u0027"},{"line_number":8143,"context_line":""},{"line_number":8144,"context_line":"        network_info \u003d mock.MagicMock()"},{"line_number":8145,"context_line":"        block_device_info \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_976f715f","line":8142,"in_reply_to":"3a961159_01aa6384","updated":"2014-12-23 22:08:05.000000000","message":"should this also be changed in driver itself?","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":8201,"context_line":"              \u003c/domain\u003e"},{"line_number":8202,"context_line":"              \"\"\""},{"line_number":8203,"context_line":"        dom \u003d FakeVirtDomain(fake_xml\u003dxml)"},{"line_number":8204,"context_line":"        (mock_get_key, mock_get_encoded, mock_create_volume) \u003d\\"},{"line_number":8205,"context_line":"            self._test_attach_encrypted_volumes(instance, dom)"},{"line_number":8206,"context_line":"        mock_get_key.assert_called_once_with(\u0027context\u0027, \u0027ephemeral key uuid\u0027)"},{"line_number":8207,"context_line":"        mock_get_encoded.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_6179672e","line":8204,"updated":"2014-12-23 14:31:40.000000000","message":"I would try and refrain from using the \\ and use:\n\n(mock_get_key, mock_get_encoded,\n mock_create_volume) \u003d self._test_attach_encrypted_volumes(instance, dom)","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":8201,"context_line":"              \u003c/domain\u003e"},{"line_number":8202,"context_line":"              \"\"\""},{"line_number":8203,"context_line":"        dom \u003d FakeVirtDomain(fake_xml\u003dxml)"},{"line_number":8204,"context_line":"        (mock_get_key, mock_get_encoded, mock_create_volume) \u003d\\"},{"line_number":8205,"context_line":"            self._test_attach_encrypted_volumes(instance, dom)"},{"line_number":8206,"context_line":"        mock_get_key.assert_called_once_with(\u0027context\u0027, \u0027ephemeral key uuid\u0027)"},{"line_number":8207,"context_line":"        mock_get_encoded.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_d7f3b970","line":8204,"in_reply_to":"3a961159_6179672e","updated":"2014-12-23 22:08:05.000000000","message":"Done","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":8238,"context_line":"              \u003c/domain\u003e"},{"line_number":8239,"context_line":"              \"\"\""},{"line_number":8240,"context_line":"        dom \u003d FakeVirtDomain(fake_xml\u003dxml)"},{"line_number":8241,"context_line":"        (mock_get_key, mock_get_encoded, mock_create_volume) \u003d\\"},{"line_number":8242,"context_line":"            self._test_attach_encrypted_volumes(instance, dom)"},{"line_number":8243,"context_line":"        self.assertFalse(mock_get_key.called)"},{"line_number":8244,"context_line":"        self.assertFalse(mock_get_encoded.called)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_81749336","line":8241,"updated":"2014-12-23 14:31:40.000000000","message":"ditto","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":8238,"context_line":"              \u003c/domain\u003e"},{"line_number":8239,"context_line":"              \"\"\""},{"line_number":8240,"context_line":"        dom \u003d FakeVirtDomain(fake_xml\u003dxml)"},{"line_number":8241,"context_line":"        (mock_get_key, mock_get_encoded, mock_create_volume) \u003d\\"},{"line_number":8242,"context_line":"            self._test_attach_encrypted_volumes(instance, dom)"},{"line_number":8243,"context_line":"        self.assertFalse(mock_get_key.called)"},{"line_number":8244,"context_line":"        self.assertFalse(mock_get_encoded.called)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_f7e6f5ae","line":8241,"in_reply_to":"3a961159_81749336","updated":"2014-12-23 22:08:05.000000000","message":"Done","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"aef09313f613a4325ad5d733141ee8360fdb6795","unresolved":false,"context_lines":[{"line_number":8115,"context_line":""},{"line_number":8116,"context_line":"        self.assertFalse(conn._image_api.get.called)"},{"line_number":8117,"context_line":"        mock_ensure_tree.assert_called_once_with(\u0027/foo\u0027)"},{"line_number":8118,"context_line":""},{"line_number":8119,"context_line":"    @mock.patch(\u0027nova.openstack.common.fileutils.ensure_tree\u0027)"},{"line_number":8120,"context_line":"    @mock.patch(\u0027nova.openstack.common.loopingcall.FixedIntervalLoopingCall\u0027)"},{"line_number":8121,"context_line":"    @mock.patch(\u0027nova.pci.manager.get_instance_pci_devs\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_2c690f25","line":8118,"updated":"2015-01-08 15:29:13.000000000","message":"Some docstrings explaining the rationale for the various test cases would be helpful.","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"a77c70ce889bb0f9d64fc40783725fcf82343942","unresolved":false,"context_lines":[{"line_number":8115,"context_line":""},{"line_number":8116,"context_line":"        self.assertFalse(conn._image_api.get.called)"},{"line_number":8117,"context_line":"        mock_ensure_tree.assert_called_once_with(\u0027/foo\u0027)"},{"line_number":8118,"context_line":""},{"line_number":8119,"context_line":"    @mock.patch(\u0027nova.openstack.common.fileutils.ensure_tree\u0027)"},{"line_number":8120,"context_line":"    @mock.patch(\u0027nova.openstack.common.loopingcall.FixedIntervalLoopingCall\u0027)"},{"line_number":8121,"context_line":"    @mock.patch(\u0027nova.pci.manager.get_instance_pci_devs\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_dc443949","line":8118,"in_reply_to":"3a961159_2c690f25","updated":"2015-01-13 21:19:27.000000000","message":"Done","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"85c07191f753052eaf2d38e3186f2f796527fc20","unresolved":false,"context_lines":[{"line_number":66,"context_line":"from nova.tests.unit import fake_network"},{"line_number":67,"context_line":"import nova.tests.unit.image.fake"},{"line_number":68,"context_line":"from nova.tests.unit import matchers"},{"line_number":69,"context_line":"from nova.tests.unit.keymgr import fake as fake_keymgr"},{"line_number":70,"context_line":"from nova.tests.unit.objects import test_pci_device"},{"line_number":71,"context_line":"from nova.tests.unit.virt.libvirt import fake_imagebackend"},{"line_number":72,"context_line":"from nova.tests.unit.virt.libvirt import fake_libvirt_utils"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_816fe15f","line":69,"updated":"2015-01-20 14:01:43.000000000","message":"H306  imports not in alphabetical order (nova.tests.unit.matchers, nova.tests.unit.keymgr.fake)","commit_id":"376083b8812fca9108ab704f63c6f5596a2db7c0"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"fbe89719faef024650e1dd67e64d6f32d314a2ed","unresolved":false,"context_lines":[{"line_number":66,"context_line":"from nova.tests.unit import fake_network"},{"line_number":67,"context_line":"import nova.tests.unit.image.fake"},{"line_number":68,"context_line":"from nova.tests.unit import matchers"},{"line_number":69,"context_line":"from nova.tests.unit.keymgr import fake as fake_keymgr"},{"line_number":70,"context_line":"from nova.tests.unit.objects import test_pci_device"},{"line_number":71,"context_line":"from nova.tests.unit.virt.libvirt import fake_imagebackend"},{"line_number":72,"context_line":"from nova.tests.unit.virt.libvirt import fake_libvirt_utils"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_1f325e5e","line":69,"in_reply_to":"3a961159_816fe15f","updated":"2015-01-26 14:23:43.000000000","message":"Thank you.","commit_id":"376083b8812fca9108ab704f63c6f5596a2db7c0"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"8f053bf3a5bc9a1f10821a56d3f739a94871fce3","unresolved":false,"context_lines":[{"line_number":11798,"context_line":"        def fake_execute(*args, **kwargs):"},{"line_number":11799,"context_line":"            pass"},{"line_number":11800,"context_line":""},{"line_number":11801,"context_line":"        self.stubs.Set(self.libvirtconnection, \u0027get_domain\u0027,"},{"line_number":11802,"context_line":"                       fake_get_domain)"},{"line_number":11803,"context_line":"        self.stubs.Set(self.libvirtconnection, \u0027get_instance_disk_info\u0027,"},{"line_number":11804,"context_line":"                       fake_get_instance_disk_info)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_f6e53709","line":11801,"updated":"2015-02-05 07:45:34.000000000","message":"s/self.libvirtconnection/self.drvr\n\nThe tests are failing because of this.","commit_id":"3c3e8679003a7bb2d4f1dd68a0dee6238adae418"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"c18f39b3472fa70f5022c323a399323a91452e9b","unresolved":false,"context_lines":[{"line_number":11798,"context_line":"        def fake_execute(*args, **kwargs):"},{"line_number":11799,"context_line":"            pass"},{"line_number":11800,"context_line":""},{"line_number":11801,"context_line":"        self.stubs.Set(self.libvirtconnection, \u0027get_domain\u0027,"},{"line_number":11802,"context_line":"                       fake_get_domain)"},{"line_number":11803,"context_line":"        self.stubs.Set(self.libvirtconnection, \u0027get_instance_disk_info\u0027,"},{"line_number":11804,"context_line":"                       fake_get_instance_disk_info)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_9e75e465","line":11801,"in_reply_to":"da86d52c_f6e53709","updated":"2015-02-05 14:29:13.000000000","message":"yep, missed it. thank you.","commit_id":"3c3e8679003a7bb2d4f1dd68a0dee6238adae418"}],"nova/tests/unit/virt/test_virt_drivers.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"6dc7e04d1206b09994acd3dc85db7d722821aa14","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.compute import manager"},{"line_number":28,"context_line":"from nova.console import type as ctype"},{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import keymgr"},{"line_number":31,"context_line":"from nova import objects"},{"line_number":32,"context_line":"from nova.openstack.common import log as logging"},{"line_number":33,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_ed3c7095","line":30,"updated":"2014-12-23 11:25:48.000000000","message":"ditto","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"}],"nova/virt/libvirt/dmcrypt.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        utils.execute(*cmd, process_input\u003dkey, run_as_root\u003dTrue)"},{"line_number":66,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":68,"context_line":"            LOG.error(_LE(\"Could not start encryption for disk %()s: %()s\"),"},{"line_number":69,"context_line":"                          device, e)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_41cc6b6a","line":68,"updated":"2014-12-23 14:31:40.000000000","message":"This should be:\n\nLOG.error(_LE(\"Could not start encryption for disk %(device)s: %(exception)s\"),\n          {\u0027device\u0027: device, \u0027exception\u0027: e})","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        utils.execute(*cmd, process_input\u003dkey, run_as_root\u003dTrue)"},{"line_number":66,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":68,"context_line":"            LOG.error(_LE(\"Could not start encryption for disk %()s: %()s\"),"},{"line_number":69,"context_line":"                          device, e)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_1746217b","line":68,"in_reply_to":"3a961159_41cc6b6a","updated":"2014-12-23 22:08:05.000000000","message":"Done","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":68,"context_line":"            LOG.error(_LE(\"Could not start encryption for disk %()s: %()s\"),"},{"line_number":69,"context_line":"                          device, e)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def delete_volume(target):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_0198a368","line":69,"updated":"2014-12-23 14:31:40.000000000","message":"device should be under _. indentation is a little dodgy (anyways this needs to be a dictionary - please see above)","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":68,"context_line":"            LOG.error(_LE(\"Could not start encryption for disk %()s: %()s\"),"},{"line_number":69,"context_line":"                          device, e)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def delete_volume(target):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_d7365902","line":69,"in_reply_to":"3a961159_0198a368","updated":"2014-12-23 22:08:05.000000000","message":"Done","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":86,"context_line":"                LOG.error(_LE(\"Could not disconnect the encrypted volume. If \""},{"line_number":87,"context_line":"                              \"dmcrypt device is still active it will have to \""},{"line_number":88,"context_line":"                              \"be destroyed manually for cleanup to succeed.\"))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def list_volumes():"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_c1b85bca","line":88,"updated":"2014-12-23 14:31:40.000000000","message":"would it be worthwhile considering logging the target - so the admin can know what to delete manually","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":86,"context_line":"                LOG.error(_LE(\"Could not disconnect the encrypted volume. If \""},{"line_number":87,"context_line":"                              \"dmcrypt device is still active it will have to \""},{"line_number":88,"context_line":"                              \"be destroyed manually for cleanup to succeed.\"))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def list_volumes():"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_3c4dc43e","line":88,"in_reply_to":"3a961159_c1b85bca","updated":"2014-12-23 22:08:05.000000000","message":"Good point.","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"aef09313f613a4325ad5d733141ee8360fdb6795","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":68,"context_line":"            LOG.error(_LE(\"Could not start encryption for disk %(device)s: \""},{"line_number":69,"context_line":"                          \"%(exception)s\"), {\u0027device\u0027: device, \u0027exception\u0027: e})"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def delete_volume(target):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_c706a41b","line":69,"updated":"2015-01-08 15:29:13.000000000","message":"Why is this method modified?","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"a77c70ce889bb0f9d64fc40783725fcf82343942","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    except processutils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":68,"context_line":"            LOG.error(_LE(\"Could not start encryption for disk %(device)s: \""},{"line_number":69,"context_line":"                          \"%(exception)s\"), {\u0027device\u0027: device, \u0027exception\u0027: e})"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def delete_volume(target):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_f102fe70","line":69,"in_reply_to":"3a961159_c706a41b","updated":"2015-01-13 21:19:27.000000000","message":"Really, this should have been part of the original implementation but it seemed reasonable to throw it in with this blueprint since it is not unrelated.","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"aef09313f613a4325ad5d733141ee8360fdb6795","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # a non-existent dmcrypt device, which may happen when deleting a"},{"line_number":82,"context_line":"        # suspended encrypted instance. In any case, error code 4 indicates"},{"line_number":83,"context_line":"        # that the device is already destroyed."},{"line_number":84,"context_line":"        if e.exit_code !\u003d 4:"},{"line_number":85,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":86,"context_line":"                LOG.error(_LE(\"Could not disconnect encrypted volume \""},{"line_number":87,"context_line":"                              \"%(volume)s. If dmcrypt device is still active \""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_c754e4ff","line":84,"updated":"2015-01-08 15:29:13.000000000","message":"Would prefer to avoid exception entirely rather than trying to handle it. (Could be problematic if exit status 4 is changed some day by cryptsetup to refer to something different.)\n\nIs it possible to detect if an encrypted instance is suspended so that this code is not called?","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"a77c70ce889bb0f9d64fc40783725fcf82343942","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # a non-existent dmcrypt device, which may happen when deleting a"},{"line_number":82,"context_line":"        # suspended encrypted instance. In any case, error code 4 indicates"},{"line_number":83,"context_line":"        # that the device is already destroyed."},{"line_number":84,"context_line":"        if e.exit_code !\u003d 4:"},{"line_number":85,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":86,"context_line":"                LOG.error(_LE(\"Could not disconnect encrypted volume \""},{"line_number":87,"context_line":"                              \"%(volume)s. If dmcrypt device is still active \""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_b14796bb","line":84,"in_reply_to":"3a961159_c754e4ff","updated":"2015-01-13 21:19:27.000000000","message":"Yeah, I agree, the problem is that by the time this gets called in _cleanup() the instance will be in the SHUTDOWN state and it is not possible to tell which state it was in originally.","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"67490cdc612dea17ec04fbf701d37d3d0dbf64ad","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_concurrency import processutils"},{"line_number":19,"context_line":"from oslo.utils import excutils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.i18n import _LE"},{"line_number":22,"context_line":"from nova.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_dd899370","line":19,"updated":"2015-01-13 22:31:30.000000000","message":"The most recent version of oslo.utils that\u0027s been released renamed the package to oslo_utils.","commit_id":"0ead5d16c6902a0d80da5d5c0de41b3e42c6226d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5c24020cee94ff9e73f3bc99e27b63babecfa40d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # a non-existent dmcrypt device, which may happen when deleting a"},{"line_number":82,"context_line":"        # suspended encrypted instance. In any case, error code 4 indicates"},{"line_number":83,"context_line":"        # that the device is already destroyed."},{"line_number":84,"context_line":"        if e.exit_code !\u003d 4:"},{"line_number":85,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":86,"context_line":"                LOG.error(_LE(\"Could not disconnect encrypted volume \""},{"line_number":87,"context_line":"                              \"%(volume)s. If dmcrypt device is still active \""}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_f20b707a","line":84,"updated":"2015-02-05 16:08:21.000000000","message":"For sake of helping someone debugging this later, I\u0027d suggest we structure it differently, so we still record a log message in the code\u003d\u003d4 case\n\n   if e.exit_code \u003d\u003d 4:\n       LOG.debug(\"Ignoring exit code 4, volume is already destroyed\")\n   else:\n       save_and_resize.....","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"120c4a10086a6c9f6a06dbe151c1340696c6667a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # a non-existent dmcrypt device, which may happen when deleting a"},{"line_number":82,"context_line":"        # suspended encrypted instance. In any case, error code 4 indicates"},{"line_number":83,"context_line":"        # that the device is already destroyed."},{"line_number":84,"context_line":"        if e.exit_code !\u003d 4:"},{"line_number":85,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":86,"context_line":"                LOG.error(_LE(\"Could not disconnect encrypted volume \""},{"line_number":87,"context_line":"                              \"%(volume)s. If dmcrypt device is still active \""}],"source_content_type":"text/x-python","patch_set":17,"id":"bab921fb_238a58c0","line":84,"in_reply_to":"da86d52c_f20b707a","updated":"2015-04-24 20:20:09.000000000","message":"Done","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"db8d834d675a5a30214bdd11b163897a37ce340c","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                                  block_device_info\u003dNone):"},{"line_number":911,"context_line":"        \"\"\"Reattaches encrypted volumes to instance\"\"\""},{"line_number":912,"context_line":"        try:"},{"line_number":913,"context_line":"            dom \u003d self._lookup_by_name(instance[\u0027name\u0027])"},{"line_number":914,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_87285934","line":913,"range":{"start_line":913,"start_character":39,"end_line":913,"end_character":55},"updated":"2014-12-20 01:12:26.000000000","message":"Please use `instance.name` instead `instance[\u0027name\u0027]`","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"b3e0d674b313ac9d848a62494e382a3a2c65c388","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                                  block_device_info\u003dNone):"},{"line_number":911,"context_line":"        \"\"\"Reattaches encrypted volumes to instance\"\"\""},{"line_number":912,"context_line":"        try:"},{"line_number":913,"context_line":"            dom \u003d self._lookup_by_name(instance[\u0027name\u0027])"},{"line_number":914,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_4a0e54e6","line":913,"in_reply_to":"3a961159_87285934","updated":"2014-12-23 14:50:58.000000000","message":"Done","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"db8d834d675a5a30214bdd11b163897a37ce340c","unresolved":false,"context_lines":[{"line_number":914,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":917,"context_line":"            msg \u003d (_(\u0027Error from libvirt while getting description of \u0027"},{"line_number":918,"context_line":"                     \u0027%(instance_name)s: [Error Code %(error_code)s] \u0027"},{"line_number":919,"context_line":"                     \u0027%(ex)s\u0027) %"},{"line_number":920,"context_line":"                   {\u0027instance_name\u0027: instance[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_c7f6e1d6","line":917,"range":{"start_line":917,"start_character":19,"end_line":917,"end_character":20},"updated":"2014-12-20 01:12:26.000000000","message":"Please use _LW","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"b3e0d674b313ac9d848a62494e382a3a2c65c388","unresolved":false,"context_lines":[{"line_number":914,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":917,"context_line":"            msg \u003d (_(\u0027Error from libvirt while getting description of \u0027"},{"line_number":918,"context_line":"                     \u0027%(instance_name)s: [Error Code %(error_code)s] \u0027"},{"line_number":919,"context_line":"                     \u0027%(ex)s\u0027) %"},{"line_number":920,"context_line":"                   {\u0027instance_name\u0027: instance[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_6a115003","line":917,"in_reply_to":"3a961159_c7f6e1d6","updated":"2014-12-23 14:50:58.000000000","message":"Done","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"db8d834d675a5a30214bdd11b163897a37ce340c","unresolved":false,"context_lines":[{"line_number":920,"context_line":"                   {\u0027instance_name\u0027: instance[\u0027name\u0027],"},{"line_number":921,"context_line":"                    \u0027error_code\u0027: error_code,"},{"line_number":922,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":923,"context_line":"            LOG.warn(msg)"},{"line_number":924,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance[\u0027name\u0027])"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"        disks \u003d jsonutils.loads(self._get_instance_disk_info(instance[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_07fd49b1","line":923,"range":{"start_line":923,"start_character":12,"end_line":923,"end_character":20},"updated":"2014-12-20 01:12:26.000000000","message":"Please use LOG.warning instead LOG.warn","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"b3e0d674b313ac9d848a62494e382a3a2c65c388","unresolved":false,"context_lines":[{"line_number":920,"context_line":"                   {\u0027instance_name\u0027: instance[\u0027name\u0027],"},{"line_number":921,"context_line":"                    \u0027error_code\u0027: error_code,"},{"line_number":922,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":923,"context_line":"            LOG.warn(msg)"},{"line_number":924,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance[\u0027name\u0027])"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"        disks \u003d jsonutils.loads(self._get_instance_disk_info(instance[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_8afbdcbf","line":923,"in_reply_to":"3a961159_07fd49b1","updated":"2014-12-23 14:50:58.000000000","message":"Done","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"db8d834d675a5a30214bdd11b163897a37ce340c","unresolved":false,"context_lines":[{"line_number":5744,"context_line":""},{"line_number":5745,"context_line":"        return jsonutils.dumps(disk_info)"},{"line_number":5746,"context_line":""},{"line_number":5747,"context_line":"    def get_instance_disk_info(self, instance_name, block_device_info\u003dNone):"},{"line_number":5748,"context_line":"        try:"},{"line_number":5749,"context_line":"            dom \u003d self._lookup_by_name(instance.name)"},{"line_number":5750,"context_line":"            xml \u003d dom.XMLDesc(0)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_b5373e4c","line":5747,"range":{"start_line":5747,"start_character":37,"end_line":5747,"end_character":50},"updated":"2014-12-20 01:12:26.000000000","message":"You need to change `instance.name` on `instance_name` below.","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"b3e0d674b313ac9d848a62494e382a3a2c65c388","unresolved":false,"context_lines":[{"line_number":5744,"context_line":""},{"line_number":5745,"context_line":"        return jsonutils.dumps(disk_info)"},{"line_number":5746,"context_line":""},{"line_number":5747,"context_line":"    def get_instance_disk_info(self, instance_name, block_device_info\u003dNone):"},{"line_number":5748,"context_line":"        try:"},{"line_number":5749,"context_line":"            dom \u003d self._lookup_by_name(instance.name)"},{"line_number":5750,"context_line":"            xml \u003d dom.XMLDesc(0)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ca0164b0","line":5747,"in_reply_to":"3a961159_b5373e4c","updated":"2014-12-23 14:50:58.000000000","message":"Done","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"db8d834d675a5a30214bdd11b163897a37ce340c","unresolved":false,"context_lines":[{"line_number":5746,"context_line":""},{"line_number":5747,"context_line":"    def get_instance_disk_info(self, instance_name, block_device_info\u003dNone):"},{"line_number":5748,"context_line":"        try:"},{"line_number":5749,"context_line":"            dom \u003d self._lookup_by_name(instance.name)"},{"line_number":5750,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":5751,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":5752,"context_line":"            error_code \u003d ex.get_error_code()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_f53c6631","line":5749,"range":{"start_line":5749,"start_character":39,"end_line":5749,"end_character":47},"updated":"2014-12-20 01:12:26.000000000","message":"F821 undefined name \u0027instance\u0027","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"b3e0d674b313ac9d848a62494e382a3a2c65c388","unresolved":false,"context_lines":[{"line_number":5746,"context_line":""},{"line_number":5747,"context_line":"    def get_instance_disk_info(self, instance_name, block_device_info\u003dNone):"},{"line_number":5748,"context_line":"        try:"},{"line_number":5749,"context_line":"            dom \u003d self._lookup_by_name(instance.name)"},{"line_number":5750,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":5751,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":5752,"context_line":"            error_code \u003d ex.get_error_code()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_eafc60b7","line":5749,"in_reply_to":"3a961159_f53c6631","updated":"2014-12-23 14:50:58.000000000","message":"Done","commit_id":"62447c7e305c23003fd93b9d2c2863339913f230"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                                  block_device_info\u003dNone):"},{"line_number":911,"context_line":"        \"\"\"Reattaches encrypted volumes to instance.\"\"\""},{"line_number":912,"context_line":"        try:"},{"line_number":913,"context_line":"            dom \u003d self._lookup_by_name(instance.name)"},{"line_number":914,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_01fd036e","line":913,"range":{"start_line":913,"start_character":23,"end_line":913,"end_character":38},"updated":"2014-12-23 14:31:40.000000000","message":"Please see https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4096. I think that you are not catching the correct exception. Unless this is for the dom.XMLDesc?","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                                  block_device_info\u003dNone):"},{"line_number":911,"context_line":"        \"\"\"Reattaches encrypted volumes to instance.\"\"\""},{"line_number":912,"context_line":"        try:"},{"line_number":913,"context_line":"            dom \u003d self._lookup_by_name(instance.name)"},{"line_number":914,"context_line":"            xml \u003d dom.XMLDesc(0)"},{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_5ce4500c","line":913,"in_reply_to":"3a961159_01fd036e","updated":"2014-12-23 22:08:05.000000000","message":"I lifted this code without much scrutiny from get_instance_disk_info(). It looks like the exception is already handled in _lookup_by_name() and dom.XMLDesc(0) is not generally wrapped in a try block so I am going to delete this code.","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":917,"context_line":"            msg \u003d (_LW(\u0027Error from libvirt while getting description of \u0027"},{"line_number":918,"context_line":"                     \u0027%(instance_name)s: [Error Code %(error_code)s] \u0027"},{"line_number":919,"context_line":"                     \u0027%(ex)s\u0027) %"},{"line_number":920,"context_line":"                   {\u0027instance_name\u0027: instance.name,"},{"line_number":921,"context_line":"                    \u0027error_code\u0027: error_code,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_21375f4e","line":918,"updated":"2014-12-23 14:31:40.000000000","message":"indentation","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"1a2928602d6ddf2bf9256602461ff47ae87e92b3","unresolved":false,"context_lines":[{"line_number":915,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":916,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":917,"context_line":"            msg \u003d (_LW(\u0027Error from libvirt while getting description of \u0027"},{"line_number":918,"context_line":"                     \u0027%(instance_name)s: [Error Code %(error_code)s] \u0027"},{"line_number":919,"context_line":"                     \u0027%(ex)s\u0027) %"},{"line_number":920,"context_line":"                   {\u0027instance_name\u0027: instance.name,"},{"line_number":921,"context_line":"                    \u0027error_code\u0027: error_code,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_52ac37ed","line":918,"in_reply_to":"3a961159_21375f4e","updated":"2014-12-23 22:08:05.000000000","message":"Done","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595f1c3860a4ae3425ca4538b32260f3b1938b5b","unresolved":false,"context_lines":[{"line_number":2176,"context_line":"                                  write_to_disk\u003dTrue)"},{"line_number":2177,"context_line":""},{"line_number":2178,"context_line":"        # NOTE (rmk): Re-populate any missing backing files."},{"line_number":2179,"context_line":"        if instance.get(\u0027ephemeral_key_uuid\u0027):"},{"line_number":2180,"context_line":"            try:"},{"line_number":2181,"context_line":"                self._attach_encrypted_volumes(context, instance,"},{"line_number":2182,"context_line":"                                               block_device_info)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_814733bb","line":2179,"range":{"start_line":2179,"start_character":11,"end_line":2179,"end_character":45},"updated":"2014-12-23 14:31:40.000000000","message":"instance should be an object here. why do we need get?","commit_id":"49b5539b3390ec9807cc71fa8297f3a619647c8b"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"aef09313f613a4325ad5d733141ee8360fdb6795","unresolved":false,"context_lines":[{"line_number":917,"context_line":"                                block_device_info\u003dblock_device_info,"},{"line_number":918,"context_line":"                                probe_size\u003dFalse))"},{"line_number":919,"context_line":"        key \u003d None"},{"line_number":920,"context_line":"        for dsk in disks:"},{"line_number":921,"context_line":"            if dmcrypt.is_encrypted(dsk[\u0027path\u0027]):"},{"line_number":922,"context_line":"                if not key:"},{"line_number":923,"context_line":"                    key \u003d self._key_manager.get_key(context,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_07e8ace0","line":920,"updated":"2015-01-08 15:29:13.000000000","message":"Why not \u0027disk\u0027 rather than \u0027dsk\u0027?","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":7746,"name":"Dan Genin","email":"daniel.genin@jhuapl.edu","username":"DiG"},"change_message_id":"a77c70ce889bb0f9d64fc40783725fcf82343942","unresolved":false,"context_lines":[{"line_number":917,"context_line":"                                block_device_info\u003dblock_device_info,"},{"line_number":918,"context_line":"                                probe_size\u003dFalse))"},{"line_number":919,"context_line":"        key \u003d None"},{"line_number":920,"context_line":"        for dsk in disks:"},{"line_number":921,"context_line":"            if dmcrypt.is_encrypted(dsk[\u0027path\u0027]):"},{"line_number":922,"context_line":"                if not key:"},{"line_number":923,"context_line":"                    key \u003d self._key_manager.get_key(context,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_abc4b741","line":920,"in_reply_to":"3a961159_07e8ace0","updated":"2015-01-13 21:19:27.000000000","message":"disk conflicts with an identically named module. i am not very happy with \u0027dsk\u0027 either but couldn\u0027t think of anything better.","commit_id":"8fc53732f8d3da19e09ad2453bb5f9ece3540b0b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5c24020cee94ff9e73f3bc99e27b63babecfa40d","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        disks \u003d jsonutils.loads(self._get_instance_disk_info(instance.name,"},{"line_number":846,"context_line":"                                xml,"},{"line_number":847,"context_line":"                                block_device_info\u003dblock_device_info,"},{"line_number":848,"context_line":"                                probe_size\u003dFalse))"},{"line_number":849,"context_line":"        key \u003d None"},{"line_number":850,"context_line":"        for dsk in disks:"},{"line_number":851,"context_line":"            if dmcrypt.is_encrypted(dsk[\u0027path\u0027]):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_359972c4","line":848,"updated":"2015-02-05 16:08:21.000000000","message":"It is rather madness to have  _get_instance_disk_info do all its work in a dict/list and then turn it into JSON, only for use to turn it right back into a dict/list.\n\nIMHO, you should make  _get_instance_disk_info just return the list directory, and push the JSON conversion into get_instance_disk_info instead. That\u0027d simplify much existing code too. But plesae do this cleanup as a separate, prior patch to this to keep refactoring separate from the bugfix","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"120c4a10086a6c9f6a06dbe151c1340696c6667a","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        disks \u003d jsonutils.loads(self._get_instance_disk_info(instance.name,"},{"line_number":846,"context_line":"                                xml,"},{"line_number":847,"context_line":"                                block_device_info\u003dblock_device_info,"},{"line_number":848,"context_line":"                                probe_size\u003dFalse))"},{"line_number":849,"context_line":"        key \u003d None"},{"line_number":850,"context_line":"        for dsk in disks:"},{"line_number":851,"context_line":"            if dmcrypt.is_encrypted(dsk[\u0027path\u0027]):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bab921fb_1f5ceeeb","line":848,"in_reply_to":"da86d52c_359972c4","updated":"2015-04-24 20:20:09.000000000","message":"https://review.openstack.org/#/c/177437/","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5c24020cee94ff9e73f3bc99e27b63babecfa40d","unresolved":false,"context_lines":[{"line_number":901,"context_line":"    def _cleanup_lvm(self, instance, block_device_info\u003dNone):"},{"line_number":902,"context_line":"        \"\"\"Delete all LVM disks for given instance object.\"\"\""},{"line_number":903,"context_line":"        if instance.ephemeral_key_uuid is not None:"},{"line_number":904,"context_line":"            self._detach_encrypted_volumes(instance, block_device_info)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"        disks \u003d self._lvm_disks(instance)"},{"line_number":907,"context_line":"        if disks:"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_f211b05d","line":904,"updated":"2015-02-05 16:08:21.000000000","message":"Instead of making every caller do  \u0027if instance.ephemeral_key_uuid is not None\u0027, I think that check should be pushed inside the (_detach|_attach)_encrypted_volumes methods, so they can be invoked unconditionally.","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"8bca00a8c728f4becfadc0f3f1e8c2994ce77e78","unresolved":false,"context_lines":[{"line_number":901,"context_line":"    def _cleanup_lvm(self, instance, block_device_info\u003dNone):"},{"line_number":902,"context_line":"        \"\"\"Delete all LVM disks for given instance object.\"\"\""},{"line_number":903,"context_line":"        if instance.ephemeral_key_uuid is not None:"},{"line_number":904,"context_line":"            self._detach_encrypted_volumes(instance, block_device_info)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"        disks \u003d self._lvm_disks(instance)"},{"line_number":907,"context_line":"        if disks:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5ad0253b_c4b5087f","line":904,"in_reply_to":"bab921fb_9f68fe88","updated":"2015-04-28 17:52:37.000000000","message":"Done","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"120c4a10086a6c9f6a06dbe151c1340696c6667a","unresolved":false,"context_lines":[{"line_number":901,"context_line":"    def _cleanup_lvm(self, instance, block_device_info\u003dNone):"},{"line_number":902,"context_line":"        \"\"\"Delete all LVM disks for given instance object.\"\"\""},{"line_number":903,"context_line":"        if instance.ephemeral_key_uuid is not None:"},{"line_number":904,"context_line":"            self._detach_encrypted_volumes(instance, block_device_info)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"        disks \u003d self._lvm_disks(instance)"},{"line_number":907,"context_line":"        if disks:"}],"source_content_type":"text/x-python","patch_set":17,"id":"bab921fb_9f68fe88","line":904,"in_reply_to":"da86d52c_f211b05d","updated":"2015-04-24 20:20:09.000000000","message":"Will clean up in later patch.","commit_id":"e0ff7d7c4fa1d77510eff73da3ae9cf5053fc44f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6bf2d4a6963e6f47a7aa8ba6d82fb5ea32b79d77","unresolved":false,"context_lines":[{"line_number":919,"context_line":"                                  lv_path,"},{"line_number":920,"context_line":"                                  CONF.ephemeral_storage_encryption.cipher,"},{"line_number":921,"context_line":"                                  CONF.ephemeral_storage_encryption.key_size,"},{"line_number":922,"context_line":"                                  key)"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"    def _detach_encrypted_volumes(self, instance, block_device_info\u003dNone):"},{"line_number":925,"context_line":"        \"\"\"Detaches encrypted volumes attached to instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"3a50d1a3_20101b59","line":922,"updated":"2015-07-30 17:34:16.000000000","message":"I feel like this is a bit of a layering violation. We already do this in the other modules that handle starting up things. Replicating it here feels like we\u0027re bringing in knowledge of things that are already encapsulated elsewhere, no?","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6bf2d4a6963e6f47a7aa8ba6d82fb5ea32b79d77","unresolved":false,"context_lines":[{"line_number":2108,"context_line":"        # NOTE (rmk): Re-populate any missing backing files."},{"line_number":2109,"context_line":"        try:"},{"line_number":2110,"context_line":"            self._attach_encrypted_volumes(context, instance,"},{"line_number":2111,"context_line":"                                           block_device_info)"},{"line_number":2112,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":2113,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2114,"context_line":"                LOG.error(_LE(\"Failed to boot instance due to encryption \""}],"source_content_type":"text/x-python","patch_set":27,"id":"3a50d1a3_40476777","line":2111,"updated":"2015-07-30 17:34:16.000000000","message":"I\u0027m not sure why this is needed...","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"65ae2b89b2be7ecfb31fbf9c1b71e1de05bca78e","unresolved":false,"context_lines":[{"line_number":2108,"context_line":"        # NOTE (rmk): Re-populate any missing backing files."},{"line_number":2109,"context_line":"        try:"},{"line_number":2110,"context_line":"            self._attach_encrypted_volumes(context, instance,"},{"line_number":2111,"context_line":"                                           block_device_info)"},{"line_number":2112,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":2113,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2114,"context_line":"                LOG.error(_LE(\"Failed to boot instance due to encryption \""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_c7c72444","line":2111,"in_reply_to":"3a50d1a3_40476777","updated":"2015-08-03 21:18:27.000000000","message":"See comment below. The prior call to _destroy indirectly invokes _detach_encrypted_volumes so this call re-attaches the encrypted LVM storage.","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6bf2d4a6963e6f47a7aa8ba6d82fb5ea32b79d77","unresolved":false,"context_lines":[{"line_number":2123,"context_line":""},{"line_number":2124,"context_line":"        # Initialize all the necessary networking, block devices and"},{"line_number":2125,"context_line":"        # start the instance."},{"line_number":2126,"context_line":"        self._create_domain_and_network(context, xml, instance, network_info,"},{"line_number":2127,"context_line":"                                        disk_info,"},{"line_number":2128,"context_line":"                                        block_device_info\u003dblock_device_info,"},{"line_number":2129,"context_line":"                                        reboot\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a50d1a3_e05c734e","line":2126,"updated":"2015-07-30 17:34:16.000000000","message":"Won\u0027t this do the normal encrypted volume setup for us?","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"65ae2b89b2be7ecfb31fbf9c1b71e1de05bca78e","unresolved":false,"context_lines":[{"line_number":2123,"context_line":""},{"line_number":2124,"context_line":"        # Initialize all the necessary networking, block devices and"},{"line_number":2125,"context_line":"        # start the instance."},{"line_number":2126,"context_line":"        self._create_domain_and_network(context, xml, instance, network_info,"},{"line_number":2127,"context_line":"                                        disk_info,"},{"line_number":2128,"context_line":"                                        block_device_info\u003dblock_device_info,"},{"line_number":2129,"context_line":"                                        reboot\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_470a34d4","line":2126,"in_reply_to":"3a50d1a3_e05c734e","updated":"2015-08-03 21:18:27.000000000","message":"So perhaps not the greatest choice of names for the various methods. Yes, you\u0027re correct that _create_domain_and_network handles encrypted *Cinder* volumes. The _attach_encrypted_volumes function actually pertains to ephemeral storage, which is not handled by _create_domain_and_network.\n\nThe use of \"volume\" to refer to storage generically comes from dm-crypt and the dmcrypt module.","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6bf2d4a6963e6f47a7aa8ba6d82fb5ea32b79d77","unresolved":false,"context_lines":[{"line_number":2285,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2286,"context_line":"                LOG.error(_LE(\"Failed to resume instance due to encryption\""},{"line_number":2287,"context_line":"                              \" failure.\"))"},{"line_number":2288,"context_line":"        guest \u003d self._create_domain_and_network(context, xml, instance,"},{"line_number":2289,"context_line":"                           network_info, disk_info,"},{"line_number":2290,"context_line":"                           block_device_info\u003dblock_device_info,"},{"line_number":2291,"context_line":"                           vifs_already_plugged\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a50d1a3_c0537738","line":2288,"updated":"2015-07-30 17:34:16.000000000","message":"Same here.","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"65ae2b89b2be7ecfb31fbf9c1b71e1de05bca78e","unresolved":false,"context_lines":[{"line_number":2285,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2286,"context_line":"                LOG.error(_LE(\"Failed to resume instance due to encryption\""},{"line_number":2287,"context_line":"                              \" failure.\"))"},{"line_number":2288,"context_line":"        guest \u003d self._create_domain_and_network(context, xml, instance,"},{"line_number":2289,"context_line":"                           network_info, disk_info,"},{"line_number":2290,"context_line":"                           block_device_info\u003dblock_device_info,"},{"line_number":2291,"context_line":"                           vifs_already_plugged\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a4dcd0f_07874c10","line":2288,"in_reply_to":"3a50d1a3_c0537738","updated":"2015-08-03 21:18:27.000000000","message":"See comment above. The call to _attach_encrypted_volumes corresponds to the call to _detach_encrypted_volumes in suspend.","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6bf2d4a6963e6f47a7aa8ba6d82fb5ea32b79d77","unresolved":false,"context_lines":[{"line_number":6069,"context_line":"        self._host.write_instance_config(xml)"},{"line_number":6070,"context_line":""},{"line_number":6071,"context_line":"    def _get_instance_disk_info(self, instance_name, xml,"},{"line_number":6072,"context_line":"                                block_device_info\u003dNone, probe_size\u003dTrue):"},{"line_number":6073,"context_line":"        block_device_mapping \u003d driver.block_device_info_get_mapping("},{"line_number":6074,"context_line":"            block_device_info)"},{"line_number":6075,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3a50d1a3_e02313bd","line":6072,"updated":"2015-07-30 17:34:16.000000000","message":"Am I missing something about why this change is related to the rest of the patch? I assume there is some detail about the encrypted size being different from the unencrypted size, but I\u0027m not sure why this needs to change for this patch...","commit_id":"2a9c79f9ca2e94834b28afb06b82ad2f26c29276"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"aa26262ffbb50b5791101ab2478848ec65aa8d77","unresolved":false,"context_lines":[{"line_number":2039,"context_line":""},{"line_number":2040,"context_line":"    def reboot(self, context, instance, network_info, reboot_type,"},{"line_number":2041,"context_line":"               block_device_info\u003dNone, bad_volumes_callback\u003dNone):"},{"line_number":2042,"context_line":"        \"\"\"Reboot a virtual machine, given an instance reference.\"\"\""},{"line_number":2043,"context_line":"        if reboot_type \u003d\u003d \u0027SOFT\u0027:"},{"line_number":2044,"context_line":"            # NOTE(vish): This will attempt to do a graceful shutdown/restart."},{"line_number":2045,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_9602823d","line":2042,"updated":"2015-08-10 13:44:32.000000000","message":"do we need detach here?","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"44c24b40c1d909d94c5c5dfed6e0edf365b7814a","unresolved":false,"context_lines":[{"line_number":2039,"context_line":""},{"line_number":2040,"context_line":"    def reboot(self, context, instance, network_info, reboot_type,"},{"line_number":2041,"context_line":"               block_device_info\u003dNone, bad_volumes_callback\u003dNone):"},{"line_number":2042,"context_line":"        \"\"\"Reboot a virtual machine, given an instance reference.\"\"\""},{"line_number":2043,"context_line":"        if reboot_type \u003d\u003d \u0027SOFT\u0027:"},{"line_number":2044,"context_line":"            # NOTE(vish): This will attempt to do a graceful shutdown/restart."},{"line_number":2045,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_09a695c1","line":2042,"in_reply_to":"1a4dcd0f_9602823d","updated":"2015-08-17 12:16:18.000000000","message":"No. If we detached, we would immediately have to re-attach so it\u0027s more efficient just to skip it entirely.","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"37e71a2cba4e2270ada962e56e3eec94daf2fb55","unresolved":false,"context_lines":[{"line_number":2039,"context_line":""},{"line_number":2040,"context_line":"    def reboot(self, context, instance, network_info, reboot_type,"},{"line_number":2041,"context_line":"               block_device_info\u003dNone, bad_volumes_callback\u003dNone):"},{"line_number":2042,"context_line":"        \"\"\"Reboot a virtual machine, given an instance reference.\"\"\""},{"line_number":2043,"context_line":"        if reboot_type \u003d\u003d \u0027SOFT\u0027:"},{"line_number":2044,"context_line":"            # NOTE(vish): This will attempt to do a graceful shutdown/restart."},{"line_number":2045,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_94dabc77","line":2042,"in_reply_to":"fa1b9901_09a695c1","updated":"2015-08-17 12:29:59.000000000","message":"ok, see the point","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"aa26262ffbb50b5791101ab2478848ec65aa8d77","unresolved":false,"context_lines":[{"line_number":2159,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":2160,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2161,"context_line":"                LOG.error(_LE(\"Failed to boot instance due to encryption \""},{"line_number":2162,"context_line":"                              \" failure\"))"},{"line_number":2163,"context_line":""},{"line_number":2164,"context_line":"        disk_info \u003d self._get_instance_disk_info(instance.name, xml,"},{"line_number":2165,"context_line":"                                                 block_device_info)"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_d60ecae4","line":2162,"updated":"2015-08-10 13:44:32.000000000","message":"nit: 2 blanks","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"44c24b40c1d909d94c5c5dfed6e0edf365b7814a","unresolved":false,"context_lines":[{"line_number":2159,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":2160,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2161,"context_line":"                LOG.error(_LE(\"Failed to boot instance due to encryption \""},{"line_number":2162,"context_line":"                              \" failure\"))"},{"line_number":2163,"context_line":""},{"line_number":2164,"context_line":"        disk_info \u003d self._get_instance_disk_info(instance.name, xml,"},{"line_number":2165,"context_line":"                                                 block_device_info)"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_49aa4d72","line":2162,"in_reply_to":"1a4dcd0f_d60ecae4","updated":"2015-08-17 12:16:18.000000000","message":"There\u0027s only one blank line here between \" failure\")) and disk_info \u003d ...","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"37e71a2cba4e2270ada962e56e3eec94daf2fb55","unresolved":false,"context_lines":[{"line_number":2159,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":2160,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2161,"context_line":"                LOG.error(_LE(\"Failed to boot instance due to encryption \""},{"line_number":2162,"context_line":"                              \" failure\"))"},{"line_number":2163,"context_line":""},{"line_number":2164,"context_line":"        disk_info \u003d self._get_instance_disk_info(instance.name, xml,"},{"line_number":2165,"context_line":"                                                 block_device_info)"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_d4803449","line":2162,"in_reply_to":"fa1b9901_49aa4d72","updated":"2015-08-17 12:29:59.000000000","message":"ailed to boot instance due to encryption  failure \n\nseems 2 blanks between encryption and failure","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"73925f1dd17a88132bb16a1ddfc251fd4e813002","unresolved":false,"context_lines":[{"line_number":2159,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":2160,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2161,"context_line":"                LOG.error(_LE(\"Failed to boot instance due to encryption \""},{"line_number":2162,"context_line":"                              \" failure\"))"},{"line_number":2163,"context_line":""},{"line_number":2164,"context_line":"        disk_info \u003d self._get_instance_disk_info(instance.name, xml,"},{"line_number":2165,"context_line":"                                                 block_device_info)"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_fce193ff","line":2162,"in_reply_to":"fa1b9901_d4803449","updated":"2015-08-17 17:13:00.000000000","message":"Must be in Gerrit cause it looks okay to me and the patch doesn\u0027t have any superfluous blank lines. (Feel free to download it and verify yourself.)","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"b5352615ca4dcc0df6be0c5e0c1cbd1f941a9468","unresolved":false,"context_lines":[{"line_number":2159,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":2160,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2161,"context_line":"                LOG.error(_LE(\"Failed to boot instance due to encryption \""},{"line_number":2162,"context_line":"                              \" failure\"))"},{"line_number":2163,"context_line":""},{"line_number":2164,"context_line":"        disk_info \u003d self._get_instance_disk_info(instance.name, xml,"},{"line_number":2165,"context_line":"                                                 block_device_info)"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa1b9901_5c58bf56","line":2162,"in_reply_to":"fa1b9901_fce193ff","updated":"2015-08-17 17:27:22.000000000","message":"I don\u0027t see any extra blank lines either, fwiw.","commit_id":"ea548525a696b984891ecd9de741581c39e67835"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c24e845af7b07aa6bacd15e413dbe136be6a4c7b","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        self._image_api \u003d image.API()"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        if CONF.ephemeral_storage_encryption.enabled:"},{"line_number":491,"context_line":"            self._key_manager \u003d keymgr.API()"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        sysinfo_serial_funcs \u003d {"},{"line_number":494,"context_line":"            \u0027none\u0027: lambda: None,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_c9b416d3","line":491,"updated":"2015-12-17 02:25:59.000000000","message":"self._key_manager will be undefined unless this config option is enabled and I don\u0027t see that use of the variable is guarded by the check at L956. I don\u0027t think \"dmcrypt.is_encrypted\" guarantees that the option is enabled, unless I\u0027m missing something (example, changing the option to False and restarting after something has previously been encrypted when the option was True).","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"77c3268a28e9f1086daa699afc027daed5ae0899","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        self._image_api \u003d image.API()"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        if CONF.ephemeral_storage_encryption.enabled:"},{"line_number":491,"context_line":"            self._key_manager \u003d keymgr.API()"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        sysinfo_serial_funcs \u003d {"},{"line_number":494,"context_line":"            \u0027none\u0027: lambda: None,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_a11dfd67","line":491,"in_reply_to":"3a7e1126_c9b416d3","updated":"2015-12-17 10:40:09.000000000","message":"+1\n\nhonestly, feels like the keymgr.API instance shouldn\u0027t be in the driver.","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"77c3268a28e9f1086daa699afc027daed5ae0899","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                destroy_disks\u003dTrue, migrate_data\u003dNone):"},{"line_number":817,"context_line":"        self._destroy(instance)"},{"line_number":818,"context_line":"        self.cleanup(context, instance, network_info, block_device_info,"},{"line_number":819,"context_line":"                     destroy_disks, migrate_data)"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"    def _undefine_domain(self, instance):"},{"line_number":822,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a710552_cfc03de3","line":819,"updated":"2015-12-17 10:40:09.000000000","message":"Are we missing the detach here? I guess thats already done as part of the exiting volume destroy? If so, can\u0027t we share code with that? I am probably missing something about dmcrypt.","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c24e845af7b07aa6bacd15e413dbe136be6a4c7b","unresolved":false,"context_lines":[{"line_number":954,"context_line":"            if dmcrypt.is_encrypted(dsk[\u0027path\u0027]):"},{"line_number":955,"context_line":"                if not key:"},{"line_number":956,"context_line":"                    key \u003d self._key_manager.get_key(context,"},{"line_number":957,"context_line":"                        instance.ephemeral_key_uuid).get_encoded()"},{"line_number":958,"context_line":"                lv_name \u003d dsk[\u0027path\u0027].rpartition(\u0027/\u0027)[2].rpartition(\u0027-\u0027)[0]"},{"line_number":959,"context_line":"                vg_name \u003d CONF.libvirt.images_volume_group"},{"line_number":960,"context_line":"                lv_path \u003d os.path.join(\u0027/dev\u0027, vg_name, lv_name)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_a9e66ae6","line":957,"updated":"2015-12-17 02:25:59.000000000","message":"It seems like this would blow up with an AttributeError if CONF.ephemeral_storage_encryption.enabled is False. I think we should have a proper error raised if this happens","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c24e845af7b07aa6bacd15e413dbe136be6a4c7b","unresolved":false,"context_lines":[{"line_number":955,"context_line":"                if not key:"},{"line_number":956,"context_line":"                    key \u003d self._key_manager.get_key(context,"},{"line_number":957,"context_line":"                        instance.ephemeral_key_uuid).get_encoded()"},{"line_number":958,"context_line":"                lv_name \u003d dsk[\u0027path\u0027].rpartition(\u0027/\u0027)[2].rpartition(\u0027-\u0027)[0]"},{"line_number":959,"context_line":"                vg_name \u003d CONF.libvirt.images_volume_group"},{"line_number":960,"context_line":"                lv_path \u003d os.path.join(\u0027/dev\u0027, vg_name, lv_name)"},{"line_number":961,"context_line":"                dmcrypt.create_volume(dsk[\u0027path\u0027].rpartition(\u0027/\u0027)[2],"},{"line_number":962,"context_line":"                                  lv_path,"},{"line_number":963,"context_line":"                                  CONF.ephemeral_storage_encryption.cipher,"},{"line_number":964,"context_line":"                                  CONF.ephemeral_storage_encryption.key_size,"},{"line_number":965,"context_line":"                                  key)"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"    def _detach_encrypted_volumes(self, instance, block_device_info\u003dNone):"},{"line_number":968,"context_line":"        \"\"\"Detaches encrypted volumes attached to instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_6c265018","line":965,"range":{"start_line":958,"start_character":16,"end_line":965,"end_character":38},"updated":"2015-12-17 02:25:59.000000000","message":"On this part, on PS27 Dan pointed out similar functionality has been encapsulated in nova/virt/libvirt/imagebackend.py. Could we provide a function there in Lvm to reuse the logic at all?\n\nAnd I noticed in imagebackend.py the instantiation of the key manager API depends on whether instance has an ephemeral_key_uuid rather than checking the config option.","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"77c3268a28e9f1086daa699afc027daed5ae0899","unresolved":false,"context_lines":[{"line_number":955,"context_line":"                if not key:"},{"line_number":956,"context_line":"                    key \u003d self._key_manager.get_key(context,"},{"line_number":957,"context_line":"                        instance.ephemeral_key_uuid).get_encoded()"},{"line_number":958,"context_line":"                lv_name \u003d dsk[\u0027path\u0027].rpartition(\u0027/\u0027)[2].rpartition(\u0027-\u0027)[0]"},{"line_number":959,"context_line":"                vg_name \u003d CONF.libvirt.images_volume_group"},{"line_number":960,"context_line":"                lv_path \u003d os.path.join(\u0027/dev\u0027, vg_name, lv_name)"},{"line_number":961,"context_line":"                dmcrypt.create_volume(dsk[\u0027path\u0027].rpartition(\u0027/\u0027)[2],"},{"line_number":962,"context_line":"                                  lv_path,"},{"line_number":963,"context_line":"                                  CONF.ephemeral_storage_encryption.cipher,"},{"line_number":964,"context_line":"                                  CONF.ephemeral_storage_encryption.key_size,"},{"line_number":965,"context_line":"                                  key)"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"    def _detach_encrypted_volumes(self, instance, block_device_info\u003dNone):"},{"line_number":968,"context_line":"        \"\"\"Detaches encrypted volumes attached to instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_e102253e","line":965,"range":{"start_line":958,"start_character":16,"end_line":965,"end_character":38},"in_reply_to":"3a7e1126_6c265018","updated":"2015-12-17 10:40:09.000000000","message":"Ah, good catch. It does feel like this should be inside imagebackend. I worry about if this gets correctly skipped for ceph, etc.","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"77c3268a28e9f1086daa699afc027daed5ae0899","unresolved":false,"context_lines":[{"line_number":1137,"context_line":"            if encryption:"},{"line_number":1138,"context_line":"                encryptor \u003d self._get_volume_encryptor(connection_info,"},{"line_number":1139,"context_line":"                                                       encryption)"},{"line_number":1140,"context_line":"                encryptor.attach_volume(context, **encryption)"},{"line_number":1141,"context_line":""},{"line_number":1142,"context_line":"            guest.attach_device(conf, persistent\u003dTrue, live\u003dlive)"},{"line_number":1143,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a710552_8f3f95d5","line":1140,"updated":"2015-12-17 10:40:09.000000000","message":"see comment below.","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"77c3268a28e9f1086daa699afc027daed5ae0899","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"                # encryptor may report that the volume is still in use."},{"line_number":1260,"context_line":"                encryptor \u003d self._get_volume_encryptor(connection_info,"},{"line_number":1261,"context_line":"                                                       encryption)"},{"line_number":1262,"context_line":"                encryptor.detach_volume(**encryption)"},{"line_number":1263,"context_line":"        except exception.InstanceNotFound:"},{"line_number":1264,"context_line":"            # NOTE(zhaoqin): If the instance does not exist, _lookup_by_name()"},{"line_number":1265,"context_line":"            #                will throw InstanceNotFound exception. Need to"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a710552_0f2c05aa","line":1262,"updated":"2015-12-17 10:40:09.000000000","message":"I am trying to get my head around why does the new logic not follow this pattern of calling the encryptor driver, and how that relates to image backend.","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"77c3268a28e9f1086daa699afc027daed5ae0899","unresolved":false,"context_lines":[{"line_number":2321,"context_line":"        if timeout:"},{"line_number":2322,"context_line":"            self._clean_shutdown(instance, timeout, retry_interval)"},{"line_number":2323,"context_line":"        self._destroy(instance)"},{"line_number":2324,"context_line":"        self._detach_encrypted_volumes(instance)"},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    def power_on(self, context, instance, network_info,"},{"line_number":2327,"context_line":"                 block_device_info\u003dNone):"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a710552_9dba6f6d","line":2324,"updated":"2015-12-17 10:40:09.000000000","message":"This gets called when sync power state detects issues, so that\u0027s cool","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c24e845af7b07aa6bacd15e413dbe136be6a4c7b","unresolved":false,"context_lines":[{"line_number":6482,"context_line":"        self._host.write_instance_config(xml)"},{"line_number":6483,"context_line":""},{"line_number":6484,"context_line":"    def _get_instance_disk_info(self, instance_name, xml,"},{"line_number":6485,"context_line":"                                block_device_info\u003dNone, probe_size\u003dTrue):"},{"line_number":6486,"context_line":"        \"\"\"Get the non-volume disk information from the domain xml"},{"line_number":6487,"context_line":""},{"line_number":6488,"context_line":"        :param str instance_name: the name of the instance (domain)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a7e1126_4cbb540f","line":6485,"range":{"start_line":6485,"start_character":56,"end_line":6485,"end_character":71},"updated":"2015-12-17 02:25:59.000000000","message":"As mentioned by Dan in PS27, how is this probe_size related to this patch? I didn\u0027t see an answer about it in the comments","commit_id":"dcc7471ba941809dbb0f201f5283ab7984f99418"}]}
