)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"to map to specific volume types in libvirtvolumetype."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Ie5b5e7dc6e3a1265dd139fbde240349fc10f86bf"},{"line_number":27,"context_line":"Depends-On: I934c092a3975987c77e9959cc47648cad186c540"},{"line_number":28,"context_line":"Implements: blueprint add-os-brick-volume-driver-hgst-solutions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3a50d1a3_44b7ad20","line":27,"updated":"2015-07-29 20:06:57.000000000","message":"You don\u0027t actually depend on this AOE change right?  You should probably actually depend on the change which moves out the iscsi driver into it\u0027s own module so you can import the retry config option from it:\n\nhttps://review.openstack.org/#/c/202301/","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":24,"context_line":"to map to specific volume types in libvirtvolumetype."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Ie5b5e7dc6e3a1265dd139fbde240349fc10f86bf"},{"line_number":27,"context_line":"Depends-On: I934c092a3975987c77e9959cc47648cad186c540"},{"line_number":28,"context_line":"Implements: blueprint add-os-brick-volume-driver-hgst-solutions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3a50d1a3_7af5a080","line":27,"in_reply_to":"3a50d1a3_44b7ad20","updated":"2015-07-29 21:01:44.000000000","message":"Done.\n\nThe HGST driver is very similar to the AOE in terms of it being a \"local block device\" w/o any scsi stuff, so the AOE one was the default one to go to.\n\nUpdated to the iscsi to get the config import running.","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"}],"etc/nova/rootwrap.d/compute.filters":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":243,"context_line":"# nova/virt/libvirt/utils.py: \u0027xend\u0027, \u0027status\u0027"},{"line_number":244,"context_line":"xend: CommandFilter, xend, root"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"# nova/virt/libvirt/volume.py"},{"line_number":247,"context_line":"vgc-cluster: CommandFilter, vgc-cluster, root"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"3a50d1a3_04ee8521","line":246,"updated":"2015-07-29 20:06:57.000000000","message":"This isn\u0027t actually in this module, it\u0027s in os-brick, so group it with the others around line 203.","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":243,"context_line":"# nova/virt/libvirt/utils.py: \u0027xend\u0027, \u0027status\u0027"},{"line_number":244,"context_line":"xend: CommandFilter, xend, root"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"# nova/virt/libvirt/volume.py"},{"line_number":247,"context_line":"vgc-cluster: CommandFilter, vgc-cluster, root"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"3a50d1a3_57cc3d69","line":246,"in_reply_to":"3a50d1a3_04ee8521","updated":"2015-07-29 21:01:44.000000000","message":"Done","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c015fb49164c4b457c7b6d941bbf5729b4039f91","unresolved":false,"context_lines":[{"line_number":207,"context_line":"multipathd: CommandFilter, multipathd, root"},{"line_number":208,"context_line":"systool: CommandFilter, systool, root"},{"line_number":209,"context_line":"sginfo: CommandFilter, sginfo, root"},{"line_number":210,"context_line":"vgc-cluster: CommandFilter, vgc-cluster, root"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"# nova/storage/linuxscsi.py: sg_scan device"},{"line_number":213,"context_line":"sg_scan: CommandFilter, sg_scan, root"}],"source_content_type":"application/octet-stream","patch_set":21,"id":"3a50d1a3_891045ad","line":210,"updated":"2015-07-30 14:44:07.000000000","message":"As also noted here https://review.openstack.org/#/c/194454/16/etc/nova/rootwrap.d/compute.filters I think adding stuff to nova\u0027s compute filters that is used by os-brick is a mistake because it couples them together. We need to get an include mechanism for this instead","commit_id":"f58e5e023db19edf8dd3647d0fc9128c1099a93a"}],"nova/tests/unit/virt/libvirt/volume/test_hgst.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_c482ddfe","line":1,"updated":"2015-07-29 20:06:57.000000000","message":"Do you need \"Copyright 2015 HGST \" like in the hgst module?","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_f72f89f3","line":1,"in_reply_to":"3a50d1a3_c482ddfe","updated":"2015-07-29 21:01:44.000000000","message":"Done","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            self.assertIsNotNone(ci)"},{"line_number":53,"context_line":"            self.disconnect_calls \u003d self.disconnect_calls + 1"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.disconnect_calls \u003d 0"},{"line_number":56,"context_line":"        drvr \u003d hgst.LibvirtHGSTVolumeDriver(self.fake_conn)"},{"line_number":57,"context_line":"        drvr.connector.disconnect_volume \u003d brick_disconn_vol"},{"line_number":58,"context_line":"        di \u003d {\u0027path\u0027: \u0027/dev/space01\u0027, \u0027name\u0027: \u0027space01\u0027, \u0027type\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_84e4d50c","line":55,"updated":"2015-07-29 20:06:57.000000000","message":"It would be cleaner to just use mock with the assert_called_once_with method, so you\u0027d mock out drvr.connector.disconnect_volume and then make the assertion on that.","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            self.assertIsNotNone(ci)"},{"line_number":53,"context_line":"            self.disconnect_calls \u003d self.disconnect_calls + 1"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.disconnect_calls \u003d 0"},{"line_number":56,"context_line":"        drvr \u003d hgst.LibvirtHGSTVolumeDriver(self.fake_conn)"},{"line_number":57,"context_line":"        drvr.connector.disconnect_volume \u003d brick_disconn_vol"},{"line_number":58,"context_line":"        di \u003d {\u0027path\u0027: \u0027/dev/space01\u0027, \u0027name\u0027: \u0027space01\u0027, \u0027type\u0027: \u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_95a2bdfa","line":55,"in_reply_to":"3a50d1a3_84e4d50c","updated":"2015-07-29 21:01:44.000000000","message":"Done","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":59,"context_line":"              \u0027dev\u0027: \u0027vda1\u0027, \u0027bus\u0027: \u0027pci0\u0027, \u0027device_path\u0027: \u0027/dev/space01\u0027}"},{"line_number":60,"context_line":"        ci \u003d {\u0027data\u0027: di}"},{"line_number":61,"context_line":"        drvr.disconnect_volume(ci, di)"},{"line_number":62,"context_line":"        self.assertEqual(1, self.disconnect_calls)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_44ea4dd9","line":62,"updated":"2015-07-29 20:06:57.000000000","message":"Use mock.assert_called_once_with instead.","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":59,"context_line":"              \u0027dev\u0027: \u0027vda1\u0027, \u0027bus\u0027: \u0027pci0\u0027, \u0027device_path\u0027: \u0027/dev/space01\u0027}"},{"line_number":60,"context_line":"        ci \u003d {\u0027data\u0027: di}"},{"line_number":61,"context_line":"        drvr.disconnect_volume(ci, di)"},{"line_number":62,"context_line":"        self.assertEqual(1, self.disconnect_calls)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_55b19545","line":62,"in_reply_to":"3a50d1a3_44ea4dd9","updated":"2015-07-29 21:01:44.000000000","message":"Done","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0827eded6eae1c076f93df1688904dcf16136756","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from os_brick.initiator import connector"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_30f5f74f","line":16,"updated":"2015-07-29 21:33:00.000000000","message":"nit: mock is typically considered third party since it\u0027s not in python \u003c 3, so we generally group it with other third party packages, like os_brick in this case.  Not a huge deal to change, but you could if you rev again.","commit_id":"f58e5e023db19edf8dd3647d0fc9128c1099a93a"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    \u0027scality\u003dnova.virt.libvirt.volume.scality.LibvirtScalityVolumeDriver\u0027,"},{"line_number":290,"context_line":"    \u0027gpfs\u003dnova.virt.libvirt.volume.gpfs.LibvirtGPFSVolumeDriver\u0027,"},{"line_number":291,"context_line":"    \u0027quobyte\u003dnova.virt.libvirt.volume.quobyte.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":292,"context_line":"    \u0027hgst\u003dnova.virt.libvirt.volume.hgst.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":293,"context_line":"]"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_84929555","line":292,"updated":"2015-07-29 20:06:57.000000000","message":"You have the wrong volume driver listed...","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    \u0027scality\u003dnova.virt.libvirt.volume.scality.LibvirtScalityVolumeDriver\u0027,"},{"line_number":290,"context_line":"    \u0027gpfs\u003dnova.virt.libvirt.volume.gpfs.LibvirtGPFSVolumeDriver\u0027,"},{"line_number":291,"context_line":"    \u0027quobyte\u003dnova.virt.libvirt.volume.quobyte.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":292,"context_line":"    \u0027hgst\u003dnova.virt.libvirt.volume.hgst.LibvirtQuobyteVolumeDriver\u0027,"},{"line_number":293,"context_line":"]"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_b78341ca","line":292,"in_reply_to":"3a50d1a3_84929555","updated":"2015-07-29 21:01:44.000000000","message":"D\u0027oh.  Done.","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"}],"nova/virt/libvirt/volume/hgst.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from nova import utils"},{"line_number":17,"context_line":"from nova.virt.libvirt.volume import volume as libvirt_volume"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from os_brick.initiator import connector"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_e4def90f","line":19,"updated":"2015-07-29 20:06:57.000000000","message":"Third party imports should come before local imports from nova, so move those up before the nova imports (and group with oslo_config).\n\nSee:\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from nova import utils"},{"line_number":17,"context_line":"from nova.virt.libvirt.volume import volume as libvirt_volume"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from os_brick.initiator import connector"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_d7612d3a","line":19,"in_reply_to":"3a50d1a3_e4def90f","updated":"2015-07-29 21:01:44.000000000","message":"Done","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"              self).__init__(connection, is_block_dev\u003dTrue)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Call the factory here so we can support"},{"line_number":33,"context_line":"        # more than x86 architectures."},{"line_number":34,"context_line":"        self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":35,"context_line":"            \u0027HGST\u0027, utils._get_root_helper(),"},{"line_number":36,"context_line":"            device_scan_attempts\u003dCONF.libvirt.num_iscsi_scan_tries)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_24d94122","line":33,"updated":"2015-07-29 20:06:57.000000000","message":"You don\u0027t need this comment about x86 arch since it doesn\u0027t apply.","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":30,"context_line":"              self).__init__(connection, is_block_dev\u003dTrue)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Call the factory here so we can support"},{"line_number":33,"context_line":"        # more than x86 architectures."},{"line_number":34,"context_line":"        self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":35,"context_line":"            \u0027HGST\u0027, utils._get_root_helper(),"},{"line_number":36,"context_line":"            device_scan_attempts\u003dCONF.libvirt.num_iscsi_scan_tries)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_b75a6180","line":33,"in_reply_to":"3a50d1a3_24d94122","updated":"2015-07-29 21:01:44.000000000","message":"Cut \u0027n pasted from Walt\u0027s original ones.  Deleted.","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71d930f759ae781ce316c8c06250050bfbcbc7c4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        # more than x86 architectures."},{"line_number":34,"context_line":"        self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":35,"context_line":"            \u0027HGST\u0027, utils._get_root_helper(),"},{"line_number":36,"context_line":"            device_scan_attempts\u003dCONF.libvirt.num_iscsi_scan_tries)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":39,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_64fae976","line":36,"updated":"2015-07-29 20:06:57.000000000","message":"You should use an import_opt call to import this from the nova.virt.libvirt.volume.iscsi module, like done in the scaleio change:\n\nhttps://review.openstack.org/#/c/194454/11/nova/virt/libvirt/volume/scaleio.py","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"25308d6b0a32dbb5b5ce4dc8fd1d1b817bfc1560","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        # more than x86 architectures."},{"line_number":34,"context_line":"        self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":35,"context_line":"            \u0027HGST\u0027, utils._get_root_helper(),"},{"line_number":36,"context_line":"            device_scan_attempts\u003dCONF.libvirt.num_iscsi_scan_tries)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":39,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_f7cb091c","line":36,"in_reply_to":"3a50d1a3_64fae976","updated":"2015-07-29 21:01:44.000000000","message":"Done","commit_id":"7e19e3c6d0f2df6d7f95313d1b93857145b3d0a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f488b8c7d122f327141fc2baf0444e0903f0a4e","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"},{"line_number":51,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"},{"line_number":52,"context_line":"        super(LibvirtHGSTVolumeDriver,"},{"line_number":53,"context_line":"              self).disconnect_volume(connection_info, disk_dev)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a50d1a3_5060c300","line":52,"updated":"2015-07-29 21:34:51.000000000","message":"nit: this is a pass in the parent but it doesn\u0027t hurt.  The reason I note it is that in connect_volume you aren\u0027t calling up to the parent, so it\u0027s not consistent - but that\u0027s also a pass in LibvirtBaseVolumeDriver so not a huge deal either way.  Again, maybe something to cleanup if you respin.","commit_id":"f58e5e023db19edf8dd3647d0fc9128c1099a93a"}]}
