)]}'
{"etc/nova/rootwrap.d/compute.filters":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ccc9f065370f6dfa43b2874557be6efbd9db74c7","unresolved":false,"context_lines":[{"line_number":257,"context_line":"pstorage-mount: CommandFilter, pstorage-mount, root"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# nova/virt/libvirt/volume/vrtshyperscale.py:"},{"line_number":260,"context_line":"hscli: CommandFilter, hscli, root"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"3f044301_1d56082b","line":260,"updated":"2017-05-04 21:00:03.000000000","message":"This should be enclosed within os-brick and you should be using oslo.privsep. The whole point of adding oslo.privsep support to os-brick was so that we didn\u0027t need to use rootwrap filters for volume drivers anymore, but I see you did it in Cinder too:\n\nhttps://review.openstack.org/#/c/382097/47/etc/cinder/rootwrap.d/volume.filters\n\nI\u0027ll need to talk with hemna (Walter Boring) about this.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"33107edbe4ee41b8fbea9fd5d5d53481b21f3445","unresolved":false,"context_lines":[{"line_number":257,"context_line":"pstorage-mount: CommandFilter, pstorage-mount, root"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# nova/virt/libvirt/volume/vrtshyperscale.py:"},{"line_number":260,"context_line":"hscli: CommandFilter, hscli, root"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"3f044301_0a8e9ccf","line":260,"in_reply_to":"3f044301_004d7f71","updated":"2017-05-06 06:05:44.000000000","message":"Done - removed in patch set 13","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":257,"context_line":"pstorage-mount: CommandFilter, pstorage-mount, root"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# nova/virt/libvirt/volume/vrtshyperscale.py:"},{"line_number":260,"context_line":"hscli: CommandFilter, hscli, root"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"3f044301_804aaf24","line":260,"in_reply_to":"3f044301_004d7f71","updated":"2017-05-04 21:24:33.000000000","message":"Looks like the rootwrap filter was added to cinder because of this code:\n\nhttps://review.openstack.org/#/c/382097/47/cinder/volume/drivers/veritas/utils.py@227\n\nBut we definitely shouldn\u0027t need this in nova since we\u0027re using brick which is using privsep.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"46bf861867677fbc3d97a65e51a3ed14b516a41e","unresolved":false,"context_lines":[{"line_number":257,"context_line":"pstorage-mount: CommandFilter, pstorage-mount, root"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# nova/virt/libvirt/volume/vrtshyperscale.py:"},{"line_number":260,"context_line":"hscli: CommandFilter, hscli, root"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"3f044301_004d7f71","line":260,"in_reply_to":"3f044301_1d56082b","updated":"2017-05-04 21:01:53.000000000","message":"This isn\u0027t even used in the volume driver code so just remove it.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"e749b9d802506f4068f011c76a16eb265036d5a3","unresolved":false,"context_lines":[{"line_number":257,"context_line":"pstorage-mount: CommandFilter, pstorage-mount, root"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# nova/virt/libvirt/volume/vrtshyperscale.py:"},{"line_number":260,"context_line":"hscli: CommandFilter, hscli, root"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"3f044301_e9170545","line":260,"in_reply_to":"3f044301_804aaf24","updated":"2017-05-05 18:44:14.000000000","message":"We had referred to other drivers and can see all other drivers are also using the same way in os-brick connector.\ne.g. scaleio, rbd, aoe just to name few.\n\nWe are working on this to use privsep and it will also need to change os-brick connector code to handle it.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e487dfc5b22ce530012069a3dde3dba1c49d7b20","unresolved":false,"context_lines":[{"line_number":257,"context_line":"pstorage-mount: CommandFilter, pstorage-mount, root"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"# nova/virt/libvirt/volume/vrtshyperscale.py:"},{"line_number":260,"context_line":"hscli: CommandFilter, hscli, root"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"3f044301_890f61e0","line":260,"in_reply_to":"3f044301_e9170545","updated":"2017-05-05 18:53:54.000000000","message":"Please work with hemna (Walter Boring) because I\u0027m pretty sure os-brick isn\u0027t using rootwrap anymore and it should be using oslo.privsep for all of this already:\n\nhttps://github.com/openstack/os-brick/blob/1.12.0/os_brick/initiator/connectors/vrtshyperscale.py#L83\n\nhttps://github.com/openstack/os-brick/blob/1.12.0/os_brick/executor.py#L31\n\nhttps://github.com/openstack/os-brick/blob/1.12.0/os_brick/privileged/rootwrap.py#L50","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"}],"nova/tests/unit/virt/libvirt/volume/test_vrtshyperscale.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_connect_volume(self):"},{"line_number":81,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":82,"context_line":"        hs.connector \u003d MockHyperScaleConnector()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # dummy arguments are just passed through to mock connector"},{"line_number":85,"context_line":"        disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_c00e77e4","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":48},"updated":"2017-05-04 21:24:33.000000000","message":"Please don\u0027t overwrite the entire object, since if that changes in brick then this is invalid. Use the mock library to temporarily replace this and use the autospec kwarg with mock which will validate the parameters from your mocks.\n\nSo you could do something like:\n\n    def fake_connect_volume(self, connection_properties):\n        return {\u0027vsa_ip\u0027: \u0027192.0.2.2\u0027,\n                \u0027refl_factor\u0027: 2,\n                \u0027refl_targets\u0027: \u0027192.0.2.3,192.0.2.4\u0027,\n                \u0027device_path\u0027: \u0027oflame://192.0.2.2:9999/\u0027\n                    \u0027%7B8ee71c33-dcd0-4267-8f2b-e0742ecabe9f%7D\u0027\n               }\n\nAnd then:\n\nwith mock.patch.object(hs.connector, \u0027connect_volume\u0027,\n                       side_effect\u003dfake_connect_volume):\n  .. do your test","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"33107edbe4ee41b8fbea9fd5d5d53481b21f3445","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_connect_volume(self):"},{"line_number":81,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":82,"context_line":"        hs.connector \u003d MockHyperScaleConnector()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # dummy arguments are just passed through to mock connector"},{"line_number":85,"context_line":"        disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_eabed063","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":48},"in_reply_to":"3f044301_c00e77e4","updated":"2017-05-06 06:05:44.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_disconnect_volume(self):"},{"line_number":100,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":101,"context_line":"        hs.connector \u003d MockHyperScaleConnector()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # dummy arguments are just passed through to mock connector"},{"line_number":104,"context_line":"        disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_00d33f3a","line":101,"updated":"2017-05-04 21:24:33.000000000","message":"same as above","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"33107edbe4ee41b8fbea9fd5d5d53481b21f3445","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_disconnect_volume(self):"},{"line_number":100,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":101,"context_line":"        hs.connector \u003d MockHyperScaleConnector()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # dummy arguments are just passed through to mock connector"},{"line_number":104,"context_line":"        disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_cac1d4e6","line":101,"in_reply_to":"3f044301_00d33f3a","updated":"2017-05-06 06:05:44.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"95b35a663165518ff7e1406a5e663610fa8c7756","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def fake_connect_volume(connection_properties):"},{"line_number":26,"context_line":"    return {\u0027device_path\u0027: \u0027/dev/8ee71c33-dcd0-4267-8f2b-e0742ec\u0027}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def fake_disconnect_volume(connection_properties, device_info):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_f367e450","line":26,"updated":"2017-05-19 13:23:11.000000000","message":"nit: It would be more readable to define this as a top-level constant.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d67d6865741c080dabe22e5e82a179769e50b0ba","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def fake_connect_volume(connection_properties):"},{"line_number":26,"context_line":"    return {\u0027device_path\u0027: \u0027/dev/8ee71c33-dcd0-4267-8f2b-e0742ec\u0027}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def fake_disconnect_volume(connection_properties, device_info):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_079d6058","line":26,"in_reply_to":"ff0f0b1f_f367e450","updated":"2017-05-19 23:18:33.000000000","message":"Done","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"95b35a663165518ff7e1406a5e663610fa8c7756","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def test_connect_volume(self):"},{"line_number":78,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":79,"context_line":"        with mock.patch.object(hs.connector, \u0027connect_volume\u0027,"},{"line_number":80,"context_line":"                               side_effect\u003dfake_connect_volume):"},{"line_number":81,"context_line":"            # dummy arguments are just passed through to mock connector"},{"line_number":82,"context_line":"            disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"},{"line_number":83,"context_line":"            connection_info \u003d {\u0027data\u0027: disk_info}"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_13601801","line":80,"range":{"start_line":80,"start_character":31,"end_line":80,"end_character":42},"updated":"2017-05-19 13:23:11.000000000","message":"nit: you could use return_value here instead of having a fake function.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d67d6865741c080dabe22e5e82a179769e50b0ba","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def test_connect_volume(self):"},{"line_number":78,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":79,"context_line":"        with mock.patch.object(hs.connector, \u0027connect_volume\u0027,"},{"line_number":80,"context_line":"                               side_effect\u003dfake_connect_volume):"},{"line_number":81,"context_line":"            # dummy arguments are just passed through to mock connector"},{"line_number":82,"context_line":"            disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"},{"line_number":83,"context_line":"            connection_info \u003d {\u0027data\u0027: disk_info}"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_e7a38c9d","line":80,"range":{"start_line":80,"start_character":31,"end_line":80,"end_character":42},"in_reply_to":"ff0f0b1f_13601801","updated":"2017-05-19 23:18:33.000000000","message":"Done","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"95b35a663165518ff7e1406a5e663610fa8c7756","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def test_disconnect_volume(self):"},{"line_number":93,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":94,"context_line":"        with mock.patch.object(hs.connector, \u0027disconnect_volume\u0027,"},{"line_number":95,"context_line":"                               side_effect\u003dfake_disconnect_volume):"},{"line_number":96,"context_line":"            # dummy arguments are just passed through to mock connector"},{"line_number":97,"context_line":"            disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"},{"line_number":98,"context_line":"            connection_info \u003d {\u0027data\u0027: disk_info}"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_f308042e","line":95,"updated":"2017-05-19 13:23:11.000000000","message":"nit: return_value\u003dNone","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d67d6865741c080dabe22e5e82a179769e50b0ba","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def test_disconnect_volume(self):"},{"line_number":93,"context_line":"        hs \u003d vrtshyperscale.LibvirtHyperScaleVolumeDriver(self.fake_host)"},{"line_number":94,"context_line":"        with mock.patch.object(hs.connector, \u0027disconnect_volume\u0027,"},{"line_number":95,"context_line":"                               side_effect\u003dfake_disconnect_volume):"},{"line_number":96,"context_line":"            # dummy arguments are just passed through to mock connector"},{"line_number":97,"context_line":"            disk_info \u003d {\u0027name\u0027: \u0027{8ee71c33-dcd0-4267-8f2b-e0742ecabe9f}\u0027}"},{"line_number":98,"context_line":"            connection_info \u003d {\u0027data\u0027: disk_info}"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_c79e4853","line":95,"in_reply_to":"ff0f0b1f_f308042e","updated":"2017-05-19 23:18:33.000000000","message":"Done","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"95b35a663165518ff7e1406a5e663610fa8c7756","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            connection_info \u003d {\u0027data\u0027: disk_info}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"            hs.disconnect_volume("},{"line_number":101,"context_line":"                connection_info, disk_info, mock.sentinel.instance)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_d635eedb","line":101,"updated":"2017-05-19 13:23:11.000000000","message":"Did you miss an assertion here? Was expecting:\n\n  hs.connector.disconnect_volume.assert_called_once_with(...)","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d67d6865741c080dabe22e5e82a179769e50b0ba","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            connection_info \u003d {\u0027data\u0027: disk_info}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"            hs.disconnect_volume("},{"line_number":101,"context_line":"                connection_info, disk_info, mock.sentinel.instance)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_a7ad9489","line":101,"in_reply_to":"ff0f0b1f_d635eedb","updated":"2017-05-19 23:18:33.000000000","message":"Thanks for catching that. Done.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"}],"nova/virt/libvirt/volume/vrtshyperscale.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6813159c05d286b820b15bd1bac9cd6cb4cc3863","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                            is_block_dev\u003dFalse)"},{"line_number":40,"context_line":"        # handle hyperscale connector not installed w/o breaking tox tests"},{"line_number":41,"context_line":"        self.connector \u003d None"},{"line_number":42,"context_line":"        if (\u0027os_brick.initiator.connectors.vrtshyperscale.HyperScaleConnector\u0027"},{"line_number":43,"context_line":"            in connector.connector_list):"},{"line_number":44,"context_line":"            self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":45,"context_line":"                \u0027VERITAS_HYPERSCALE\u0027, utils.get_root_helper())"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":48,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_173cdf2c","line":45,"range":{"start_line":42,"start_character":8,"end_line":45,"end_character":62},"updated":"2017-03-29 20:08:55.000000000","message":"This is just checking to see if the os-brick connector is in the version of os-brick we\u0027re using right? Rather than do this, what we will want is a release of os-brick with the connector, and then raise the minimum required version of os-brick in global-requirements:\n\nhttps://github.com/openstack/requirements/blob/master/global-requirements.txt#L146\n\nAnd then this change will need to depend on that g-r version bump.","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"2d434ddcc296e3ce08155d5eb329fd9d9adad216","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                            is_block_dev\u003dFalse)"},{"line_number":40,"context_line":"        # handle hyperscale connector not installed w/o breaking tox tests"},{"line_number":41,"context_line":"        self.connector \u003d None"},{"line_number":42,"context_line":"        if (\u0027os_brick.initiator.connectors.vrtshyperscale.HyperScaleConnector\u0027"},{"line_number":43,"context_line":"            in connector.connector_list):"},{"line_number":44,"context_line":"            self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":45,"context_line":"                \u0027VERITAS_HYPERSCALE\u0027, utils.get_root_helper())"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":48,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_97eb7076","line":45,"range":{"start_line":42,"start_character":8,"end_line":45,"end_character":62},"in_reply_to":"7ffa3b31_e78b3b65","updated":"2017-04-21 18:10:48.000000000","message":"The correct link for the global-requirements review is:\nhttps://review.openstack.org/#/c/458688/","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"df56765a2c6e98d05dd32f976c34695825df6bd5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                            is_block_dev\u003dFalse)"},{"line_number":40,"context_line":"        # handle hyperscale connector not installed w/o breaking tox tests"},{"line_number":41,"context_line":"        self.connector \u003d None"},{"line_number":42,"context_line":"        if (\u0027os_brick.initiator.connectors.vrtshyperscale.HyperScaleConnector\u0027"},{"line_number":43,"context_line":"            in connector.connector_list):"},{"line_number":44,"context_line":"            self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":45,"context_line":"                \u0027VERITAS_HYPERSCALE\u0027, utils.get_root_helper())"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":48,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_e78b3b65","line":45,"range":{"start_line":42,"start_character":8,"end_line":45,"end_character":62},"in_reply_to":"ffe62b97_0e9a81b7","updated":"2017-04-20 23:56:35.000000000","message":"I changed global-requirements.txt and submitted the change for review here:\nhttps://review.openstack.org/#/c/442754/","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d4049c0442d7c571794585dfafb95f91cf14d42a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                            is_block_dev\u003dFalse)"},{"line_number":40,"context_line":"        # handle hyperscale connector not installed w/o breaking tox tests"},{"line_number":41,"context_line":"        self.connector \u003d None"},{"line_number":42,"context_line":"        if (\u0027os_brick.initiator.connectors.vrtshyperscale.HyperScaleConnector\u0027"},{"line_number":43,"context_line":"            in connector.connector_list):"},{"line_number":44,"context_line":"            self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":45,"context_line":"                \u0027VERITAS_HYPERSCALE\u0027, utils.get_root_helper())"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":48,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_1821d49f","line":45,"range":{"start_line":42,"start_character":8,"end_line":45,"end_character":62},"in_reply_to":"ffe62b97_173cdf2c","updated":"2017-04-28 19:10:02.000000000","message":"I removed the \u0027if\u0027 check in the volume driver. Response to this comment is now \u0027done\u0027","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"cf43ba5c60985f5703a5ebce5811d66f357f6fb3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                            is_block_dev\u003dFalse)"},{"line_number":40,"context_line":"        # handle hyperscale connector not installed w/o breaking tox tests"},{"line_number":41,"context_line":"        self.connector \u003d None"},{"line_number":42,"context_line":"        if (\u0027os_brick.initiator.connectors.vrtshyperscale.HyperScaleConnector\u0027"},{"line_number":43,"context_line":"            in connector.connector_list):"},{"line_number":44,"context_line":"            self.connector \u003d connector.InitiatorConnector.factory("},{"line_number":45,"context_line":"                \u0027VERITAS_HYPERSCALE\u0027, utils.get_root_helper())"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":48,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_0e9a81b7","line":45,"range":{"start_line":42,"start_character":8,"end_line":45,"end_character":62},"in_reply_to":"ffe62b97_173cdf2c","updated":"2017-03-30 01:25:16.000000000","message":"Okay, will update global-requirements.txt.\nI can\u0027t do that until the vrtshyperscale os-brick connector is merged though, right?\nAlso, this \u0027if\u0027 check is to allow test_vrtshyperscale unit tests to pass before the os-brick connector is merged to master. Is there a better way to do that?","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6813159c05d286b820b15bd1bac9cd6cb4cc3863","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def connect_volume(self, connection_info, disk_info):"},{"line_number":74,"context_line":"        \"\"\"Connect the volume. Returns xml for libvirt.\"\"\""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if connection_info is None:"},{"line_number":77,"context_line":"            raise exception.Invalid("},{"line_number":78,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        LOG.debug(\"connect_volume %(connection_info)s\","},{"line_number":81,"context_line":"                {\u0027connection_info\u0027: connection_info})"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_770c4b93","line":78,"range":{"start_line":76,"start_character":8,"end_line":78,"end_character":54},"updated":"2017-03-29 20:08:55.000000000","message":"You shouldn\u0027t have to check for stuff like this.","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"cf43ba5c60985f5703a5ebce5811d66f357f6fb3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def connect_volume(self, connection_info, disk_info):"},{"line_number":74,"context_line":"        \"\"\"Connect the volume. Returns xml for libvirt.\"\"\""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if connection_info is None:"},{"line_number":77,"context_line":"            raise exception.Invalid("},{"line_number":78,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        LOG.debug(\"connect_volume %(connection_info)s\","},{"line_number":81,"context_line":"                {\u0027connection_info\u0027: connection_info})"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_ce3379f5","line":78,"range":{"start_line":76,"start_character":8,"end_line":78,"end_character":54},"in_reply_to":"ffe62b97_770c4b93","updated":"2017-03-30 01:25:16.000000000","message":"Done","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6813159c05d286b820b15bd1bac9cd6cb4cc3863","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        LOG.debug(\"connect_volume %(connection_info)s\","},{"line_number":81,"context_line":"                {\u0027connection_info\u0027: connection_info})"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if self.connector is None:"},{"line_number":84,"context_line":"            raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_b764134b","line":81,"range":{"start_line":81,"start_character":16,"end_line":81,"end_character":53},"updated":"2017-03-29 20:08:55.000000000","message":"I don\u0027t think we want to log this as it can contain credentials. Just log the volume id.","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"cf43ba5c60985f5703a5ebce5811d66f357f6fb3","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        LOG.debug(\"connect_volume %(connection_info)s\","},{"line_number":81,"context_line":"                {\u0027connection_info\u0027: connection_info})"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        if self.connector is None:"},{"line_number":84,"context_line":"            raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_ae2ef588","line":81,"range":{"start_line":81,"start_character":16,"end_line":81,"end_character":53},"in_reply_to":"ffe62b97_b764134b","updated":"2017-03-30 01:25:16.000000000","message":"Done","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6813159c05d286b820b15bd1bac9cd6cb4cc3863","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if connection_info is None:"},{"line_number":108,"context_line":"            raise exception.Invalid("},{"line_number":109,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        LOG.debug(\"disconnect_volume %(connection_info)s\","},{"line_number":112,"context_line":"            {\u0027connection_info\u0027: connection_info})"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_f74dfbc3","line":109,"range":{"start_line":107,"start_character":8,"end_line":109,"end_character":54},"updated":"2017-03-29 20:08:55.000000000","message":"same","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"cf43ba5c60985f5703a5ebce5811d66f357f6fb3","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if connection_info is None:"},{"line_number":108,"context_line":"            raise exception.Invalid("},{"line_number":109,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        LOG.debug(\"disconnect_volume %(connection_info)s\","},{"line_number":112,"context_line":"            {\u0027connection_info\u0027: connection_info})"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_8e4fb169","line":109,"range":{"start_line":107,"start_character":8,"end_line":109,"end_character":54},"in_reply_to":"ffe62b97_f74dfbc3","updated":"2017-03-30 01:25:16.000000000","message":"Done","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6813159c05d286b820b15bd1bac9cd6cb4cc3863","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        LOG.debug(\"disconnect_volume %(connection_info)s\","},{"line_number":112,"context_line":"            {\u0027connection_info\u0027: connection_info})"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        if self.connector is None:"},{"line_number":115,"context_line":"            raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_d748b7b3","line":112,"updated":"2017-03-29 20:08:55.000000000","message":"same","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"cf43ba5c60985f5703a5ebce5811d66f357f6fb3","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                _(\"connection_info argument is None\"))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        LOG.debug(\"disconnect_volume %(connection_info)s\","},{"line_number":112,"context_line":"            {\u0027connection_info\u0027: connection_info})"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        if self.connector is None:"},{"line_number":115,"context_line":"            raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_6e522d15","line":112,"in_reply_to":"ffe62b97_d748b7b3","updated":"2017-03-30 01:25:16.000000000","message":"Done","commit_id":"868139d557dfa2a6d3261ad6bd3ba73373f22d0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova import exception"},{"line_number":22,"context_line":"from nova.i18n import _"},{"line_number":23,"context_line":"from nova.i18n import _LE"},{"line_number":24,"context_line":"from nova.i18n import _LI"},{"line_number":25,"context_line":"from nova import utils"},{"line_number":26,"context_line":"from nova.virt.libvirt import config as vconfig"},{"line_number":27,"context_line":"from nova.virt.libvirt.volume import volume as libvirt_volume"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_00bc5fda","line":24,"range":{"start_line":23,"start_character":22,"end_line":24,"end_character":25},"updated":"2017-05-04 21:24:33.000000000","message":"We don\u0027t use these anymore for logging. In fact we don\u0027t translate log messages anymore so you can drop that altogether.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova import exception"},{"line_number":22,"context_line":"from nova.i18n import _"},{"line_number":23,"context_line":"from nova.i18n import _LE"},{"line_number":24,"context_line":"from nova.i18n import _LI"},{"line_number":25,"context_line":"from nova import utils"},{"line_number":26,"context_line":"from nova.virt.libvirt import config as vconfig"},{"line_number":27,"context_line":"from nova.virt.libvirt.volume import volume as libvirt_volume"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_7d005368","line":24,"range":{"start_line":23,"start_character":22,"end_line":24,"end_character":25},"in_reply_to":"3f044301_00bc5fda","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027VERITAS_HYPERSCALE\u0027, utils.get_root_helper())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":45,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if (\u0027data\u0027 not in connection_info.keys() or"},{"line_number":48,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027].keys()):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_c0b557f0","line":45,"range":{"start_line":45,"start_character":11,"end_line":45,"end_character":34},"updated":"2017-05-04 21:24:33.000000000","message":"This isn\u0027t really accurate, this isn\u0027t returning xml.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027VERITAS_HYPERSCALE\u0027, utils.get_root_helper())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":45,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if (\u0027data\u0027 not in connection_info.keys() or"},{"line_number":48,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027].keys()):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_5d035774","line":45,"range":{"start_line":45,"start_character":11,"end_line":45,"end_character":34},"in_reply_to":"3f044301_c0b557f0","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":45,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if (\u0027data\u0027 not in connection_info.keys() or"},{"line_number":48,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027].keys()):"},{"line_number":49,"context_line":"            raise exception.Invalid("},{"line_number":50,"context_line":"                _(\"connection_info contains no disk name\"))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_40c94776","line":47,"range":{"start_line":47,"start_character":41,"end_line":47,"end_character":48},"updated":"2017-05-04 21:24:33.000000000","message":"This is redundant, you can just do:\n\nif \u0027data\u0027 not in connection_info","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":45,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if (\u0027data\u0027 not in connection_info.keys() or"},{"line_number":48,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027].keys()):"},{"line_number":49,"context_line":"            raise exception.Invalid("},{"line_number":50,"context_line":"                _(\"connection_info contains no disk name\"))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_ddee47b3","line":47,"range":{"start_line":47,"start_character":41,"end_line":47,"end_character":48},"in_reply_to":"3f044301_40c94776","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if (\u0027data\u0027 not in connection_info.keys() or"},{"line_number":48,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027].keys()):"},{"line_number":49,"context_line":"            raise exception.Invalid("},{"line_number":50,"context_line":"                _(\"connection_info contains no disk name\"))"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_20c63b69","line":48,"range":{"start_line":48,"start_character":49,"end_line":48,"end_character":56},"updated":"2017-05-04 21:24:33.000000000","message":"same","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \"\"\"Returns xml for libvirt.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if (\u0027data\u0027 not in connection_info.keys() or"},{"line_number":48,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027].keys()):"},{"line_number":49,"context_line":"            raise exception.Invalid("},{"line_number":50,"context_line":"                _(\"connection_info contains no disk name\"))"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_bd2b7be9","line":48,"range":{"start_line":48,"start_character":49,"end_line":48,"end_character":56},"in_reply_to":"3f044301_20c63b69","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        conf \u003d vconfig.LibvirtConfigGuestDisk()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self.connector is not None:"},{"line_number":55,"context_line":"            conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("},{"line_number":56,"context_line":"                connection_info, disk_info)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_e0a5f3b6","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":38},"updated":"2017-05-04 21:24:33.000000000","message":"Why would this be None since it\u0027s initialized in __init__?","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        conf \u003d vconfig.LibvirtConfigGuestDisk()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if self.connector is not None:"},{"line_number":55,"context_line":"            conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("},{"line_number":56,"context_line":"                connection_info, disk_info)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_7d35f345","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":38},"in_reply_to":"3f044301_e0a5f3b6","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("},{"line_number":56,"context_line":"                connection_info, disk_info)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if conf is not None:"},{"line_number":59,"context_line":"            # Truncate volume guid to 31 char to match vxblk gendisk name"},{"line_number":60,"context_line":"            # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":61,"context_line":"            conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_a0afeb92","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":28},"updated":"2017-05-04 21:24:33.000000000","message":"This is dead code basically, don\u0027t need this check.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("},{"line_number":56,"context_line":"                connection_info, disk_info)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if conf is not None:"},{"line_number":59,"context_line":"            # Truncate volume guid to 31 char to match vxblk gendisk name"},{"line_number":60,"context_line":"            # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":61,"context_line":"            conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_3d3f6b26","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":28},"in_reply_to":"3f044301_a0afeb92","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        return conf"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def connect_volume(self, connection_info, disk_info):"},{"line_number":68,"context_line":"        \"\"\"Connect the volume. Returns xml for libvirt.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if self.connector is None:"},{"line_number":71,"context_line":"            raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_c0831704","line":68,"range":{"start_line":68,"start_character":31,"end_line":68,"end_character":55},"updated":"2017-05-04 21:24:33.000000000","message":"this method doesn\u0027t return anything","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        return conf"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def connect_volume(self, connection_info, disk_info):"},{"line_number":68,"context_line":"        \"\"\"Connect the volume. Returns xml for libvirt.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if self.connector is None:"},{"line_number":71,"context_line":"            raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_dd43e7ae","line":68,"range":{"start_line":68,"start_character":31,"end_line":68,"end_character":55},"in_reply_to":"3f044301_c0831704","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def connect_volume(self, connection_info, disk_info):"},{"line_number":68,"context_line":"        \"\"\"Connect the volume. Returns xml for libvirt.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if self.connector is None:"},{"line_number":71,"context_line":"            raise exception.InternalError("},{"line_number":72,"context_line":"                _(\"HyperScale os-brick connector is not installed\"))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_a09dab5a","line":72,"range":{"start_line":70,"start_character":8,"end_line":72,"end_character":68},"updated":"2017-05-04 21:24:33.000000000","message":"This shouldn\u0027t happen.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def connect_volume(self, connection_info, disk_info):"},{"line_number":68,"context_line":"        \"\"\"Connect the volume. Returns xml for libvirt.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if self.connector is None:"},{"line_number":71,"context_line":"            raise exception.InternalError("},{"line_number":72,"context_line":"                _(\"HyperScale os-brick connector is not installed\"))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_7d0e138e","line":72,"range":{"start_line":70,"start_character":8,"end_line":72,"end_character":68},"in_reply_to":"3f044301_a09dab5a","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":87,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"            LOG.info(_LI(\"connect_volume: device path %(device_path)s\"),"},{"line_number":90,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            LOG.error(_LE(\"Failed to connect volume %(vol_id)s\"),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_a0b6cbd8","line":89,"range":{"start_line":89,"start_character":21,"end_line":89,"end_character":24},"updated":"2017-05-04 21:24:33.000000000","message":"We don\u0027t use _LI for logging.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":87,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"            LOG.info(_LI(\"connect_volume: device path %(device_path)s\"),"},{"line_number":90,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            LOG.error(_LE(\"Failed to connect volume %(vol_id)s\"),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_1d238f07","line":89,"range":{"start_line":89,"start_character":21,"end_line":89,"end_character":24},"in_reply_to":"3f044301_a0b6cbd8","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            LOG.info(_LI(\"connect_volume: device path %(device_path)s\"),"},{"line_number":90,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            LOG.error(_LE(\"Failed to connect volume %(vol_id)s\"),"},{"line_number":93,"context_line":"                      {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_80cbcf51","line":92,"range":{"start_line":92,"start_character":22,"end_line":92,"end_character":25},"updated":"2017-05-04 21:24:33.000000000","message":"nor this","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            LOG.info(_LI(\"connect_volume: device path %(device_path)s\"),"},{"line_number":90,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":91,"context_line":"        else:"},{"line_number":92,"context_line":"            LOG.error(_LE(\"Failed to connect volume %(vol_id)s\"),"},{"line_number":93,"context_line":"                      {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_fd2103fd","line":92,"range":{"start_line":92,"start_character":22,"end_line":92,"end_character":25},"in_reply_to":"3f044301_80cbcf51","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if self.connector is None:"},{"line_number":98,"context_line":"            raise exception.InternalError("},{"line_number":99,"context_line":"                _(\"HyperScale os-brick connector is not installed\"))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_60c8c354","line":99,"range":{"start_line":97,"start_character":8,"end_line":99,"end_character":68},"updated":"2017-05-04 21:24:33.000000000","message":"We don\u0027t need to check for this.","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if self.connector is None:"},{"line_number":98,"context_line":"            raise exception.InternalError("},{"line_number":99,"context_line":"                _(\"HyperScale os-brick connector is not installed\"))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_bd793bfd","line":99,"range":{"start_line":97,"start_character":8,"end_line":99,"end_character":68},"in_reply_to":"3f044301_60c8c354","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3fc582245fc8a70b56b4003694d7739c6010bda6","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        LOG.info(_LI(\"Disconnected volume %(vol_id)s\"),"},{"line_number":104,"context_line":"                 {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_e0e173d2","line":103,"range":{"start_line":103,"start_character":17,"end_line":103,"end_character":20},"updated":"2017-05-04 21:24:33.000000000","message":"remove this","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"f99c9b7316b54c1fc34d83934fdd620197feeb4e","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        LOG.info(_LI(\"Disconnected volume %(vol_id)s\"),"},{"line_number":104,"context_line":"                 {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f044301_9d7c3fec","line":103,"range":{"start_line":103,"start_character":17,"end_line":103,"end_character":20},"in_reply_to":"3f044301_e0e173d2","updated":"2017-05-05 16:32:22.000000000","message":"Done","commit_id":"2edf657126e132fed0e99e37ee06d635e78014c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02fc2d972281833c1120bf34338537a19b1078d5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"connection_info contains no disk name\"))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        conf \u003d vconfig.LibvirtConfigGuestDisk()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("},{"line_number":51,"context_line":"            connection_info, disk_info)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_50a49a08","line":48,"updated":"2017-05-12 21:02:12.000000000","message":"This is dead code since you\u0027re overwriting it next.","commit_id":"3cd6c3e8f6ba7a0829fa08467782a37b38d64fc4"},{"author":{"_account_id":19774,"name":"Vivek Agrawal","email":"vivek.agrawal@veritas.com","username":"viveksagrawal"},"change_message_id":"373b5f9dab4886d5f3f2861a16e1041f4e4f7325","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"connection_info contains no disk name\"))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        conf \u003d vconfig.LibvirtConfigGuestDisk()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("},{"line_number":51,"context_line":"            connection_info, disk_info)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_7d1e4a71","line":48,"in_reply_to":"1f013ff3_50a49a08","updated":"2017-05-14 02:28:25.000000000","message":"Done","commit_id":"3cd6c3e8f6ba7a0829fa08467782a37b38d64fc4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02fc2d972281833c1120bf34338537a19b1078d5","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":78,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.error(_(\"Failed to connect volume %(vol_id)s\"),"},{"line_number":81,"context_line":"                      {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_30a90edf","line":80,"range":{"start_line":80,"start_character":22,"end_line":80,"end_character":23},"updated":"2017-05-12 21:02:12.000000000","message":"We don\u0027t need to translate log messages so remove the _() usage.","commit_id":"3cd6c3e8f6ba7a0829fa08467782a37b38d64fc4"},{"author":{"_account_id":19774,"name":"Vivek Agrawal","email":"vivek.agrawal@veritas.com","username":"viveksagrawal"},"change_message_id":"373b5f9dab4886d5f3f2861a16e1041f4e4f7325","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":78,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.error(_(\"Failed to connect volume %(vol_id)s\"),"},{"line_number":81,"context_line":"                      {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_5d138e67","line":80,"range":{"start_line":80,"start_character":22,"end_line":80,"end_character":23},"in_reply_to":"1f013ff3_30a90edf","updated":"2017-05-14 02:28:25.000000000","message":"Done","commit_id":"3cd6c3e8f6ba7a0829fa08467782a37b38d64fc4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d8967681b27a792d48763216b7b4c13d0767176a","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return conf"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def connect_volume(self, connection_info, disk_info):"},{"line_number":59,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if device_info is not None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_7c706c73","line":58,"updated":"2017-05-15 21:20:18.000000000","message":"As of change I01c908add1312063f0db724110f7e5927ff281ff this method should now take an instance parameter too.","commit_id":"dcf570c74ac9a6cd20a43ca727c87b3084391b5e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d8967681b27a792d48763216b7b4c13d0767176a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            LOG.error(\"Failed to connect volume %(vol_id)s\","},{"line_number":78,"context_line":"                      {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def disconnect_volume(self, connection_info, disk_dev):"},{"line_number":81,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        LOG.info(\"Disconnected volume %(vol_id)s\","}],"source_content_type":"text/x-python","patch_set":14,"id":"1f013ff3_5c6db096","line":80,"updated":"2017-05-15 21:20:18.000000000","message":"As of change I01c908add1312063f0db724110f7e5927ff281ff this method should now take an instance parameter too.","commit_id":"dcf570c74ac9a6cd20a43ca727c87b3084391b5e"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"594c985d439c9eabf0568feb053c6641dce23564","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if device_info is not None:"},{"line_number":62,"context_line":"            if \u0027vsa_ip\u0027 in device_info:"},{"line_number":63,"context_line":"                connection_info[\u0027data\u0027][\u0027vsa_ip\u0027] \u003d device_info.get(\u0027vsa_ip\u0027)"},{"line_number":64,"context_line":"            if \u0027refl_factor\u0027 in device_info:"},{"line_number":65,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_factor\u0027] \u003d ("},{"line_number":66,"context_line":"                    device_info.get(\u0027refl_factor\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1f013ff3_c79556e6","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":77},"updated":"2017-05-16 14:46:00.000000000","message":"I don\u0027t see where this is used. Is there any reason to stash this other than to pass it to disconnect_volume? disconnect_volume doesn\u0027t appear to use it. If it is used, could you please add a comment explaining where.","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"af788ad382b132e2fc8a3cae36b66f5309627cd5","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if device_info is not None:"},{"line_number":62,"context_line":"            if \u0027vsa_ip\u0027 in device_info:"},{"line_number":63,"context_line":"                connection_info[\u0027data\u0027][\u0027vsa_ip\u0027] \u003d device_info.get(\u0027vsa_ip\u0027)"},{"line_number":64,"context_line":"            if \u0027refl_factor\u0027 in device_info:"},{"line_number":65,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_factor\u0027] \u003d ("},{"line_number":66,"context_line":"                    device_info.get(\u0027refl_factor\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff0f0b1f_7a4c1976","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":77},"in_reply_to":"1f013ff3_c79556e6","updated":"2017-05-17 10:58:41.000000000","message":"Done","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"953a9c50602a7f209acbf06321781f3e44339a67","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if device_info is not None:"},{"line_number":62,"context_line":"            if \u0027vsa_ip\u0027 in device_info:"},{"line_number":63,"context_line":"                connection_info[\u0027data\u0027][\u0027vsa_ip\u0027] \u003d device_info.get(\u0027vsa_ip\u0027)"},{"line_number":64,"context_line":"            if \u0027refl_factor\u0027 in device_info:"},{"line_number":65,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_factor\u0027] \u003d ("},{"line_number":66,"context_line":"                    device_info.get(\u0027refl_factor\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1f013ff3_e2b3a04c","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":77},"in_reply_to":"1f013ff3_c79556e6","updated":"2017-05-16 14:51:12.000000000","message":"Incidentally, I\u0027m specifically referring to HyperScaleConnector.disconnect_volume in os_brick.","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"594c985d439c9eabf0568feb053c6641dce23564","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if device_info is not None:"},{"line_number":62,"context_line":"            if \u0027vsa_ip\u0027 in device_info:"},{"line_number":63,"context_line":"                connection_info[\u0027data\u0027][\u0027vsa_ip\u0027] \u003d device_info.get(\u0027vsa_ip\u0027)"},{"line_number":64,"context_line":"            if \u0027refl_factor\u0027 in device_info:"},{"line_number":65,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_factor\u0027] \u003d ("},{"line_number":66,"context_line":"                    device_info.get(\u0027refl_factor\u0027))"},{"line_number":67,"context_line":"            if \u0027refl_targets\u0027 in device_info:"},{"line_number":68,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_targets\u0027] \u003d ("},{"line_number":69,"context_line":"                    device_info.get(\u0027refl_targets\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1f013ff3_a7980a1b","line":66,"range":{"start_line":64,"start_character":1,"end_line":66,"end_character":51},"updated":"2017-05-16 14:46:00.000000000","message":"Ditto","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"af788ad382b132e2fc8a3cae36b66f5309627cd5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if device_info is not None:"},{"line_number":62,"context_line":"            if \u0027vsa_ip\u0027 in device_info:"},{"line_number":63,"context_line":"                connection_info[\u0027data\u0027][\u0027vsa_ip\u0027] \u003d device_info.get(\u0027vsa_ip\u0027)"},{"line_number":64,"context_line":"            if \u0027refl_factor\u0027 in device_info:"},{"line_number":65,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_factor\u0027] \u003d ("},{"line_number":66,"context_line":"                    device_info.get(\u0027refl_factor\u0027))"},{"line_number":67,"context_line":"            if \u0027refl_targets\u0027 in device_info:"},{"line_number":68,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_targets\u0027] \u003d ("},{"line_number":69,"context_line":"                    device_info.get(\u0027refl_targets\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff0f0b1f_3a56a108","line":66,"range":{"start_line":64,"start_character":1,"end_line":66,"end_character":51},"in_reply_to":"1f013ff3_a7980a1b","updated":"2017-05-17 10:58:41.000000000","message":"Done","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"594c985d439c9eabf0568feb053c6641dce23564","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            if \u0027refl_factor\u0027 in device_info:"},{"line_number":65,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_factor\u0027] \u003d ("},{"line_number":66,"context_line":"                    device_info.get(\u0027refl_factor\u0027))"},{"line_number":67,"context_line":"            if \u0027refl_targets\u0027 in device_info:"},{"line_number":68,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_targets\u0027] \u003d ("},{"line_number":69,"context_line":"                    device_info.get(\u0027refl_targets\u0027))"},{"line_number":70,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":71,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":72,"context_line":"                    device_info.get(\u0027device_path\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1f013ff3_07933efc","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":52},"updated":"2017-05-16 14:46:00.000000000","message":"Ditto","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"af788ad382b132e2fc8a3cae36b66f5309627cd5","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            if \u0027refl_factor\u0027 in device_info:"},{"line_number":65,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_factor\u0027] \u003d ("},{"line_number":66,"context_line":"                    device_info.get(\u0027refl_factor\u0027))"},{"line_number":67,"context_line":"            if \u0027refl_targets\u0027 in device_info:"},{"line_number":68,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_targets\u0027] \u003d ("},{"line_number":69,"context_line":"                    device_info.get(\u0027refl_targets\u0027))"},{"line_number":70,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":71,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":72,"context_line":"                    device_info.get(\u0027device_path\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff0f0b1f_1a5bdd2e","line":69,"range":{"start_line":67,"start_character":0,"end_line":69,"end_character":52},"in_reply_to":"1f013ff3_07933efc","updated":"2017-05-17 10:58:41.000000000","message":"Done","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"594c985d439c9eabf0568feb053c6641dce23564","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            if \u0027refl_targets\u0027 in device_info:"},{"line_number":68,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_targets\u0027] \u003d ("},{"line_number":69,"context_line":"                    device_info.get(\u0027refl_targets\u0027))"},{"line_number":70,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":71,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":72,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":75,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"}],"source_content_type":"text/x-python","patch_set":15,"id":"1f013ff3_87b86e76","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":51},"updated":"2017-05-16 14:46:00.000000000","message":"This one\u0027s ok.","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":24282,"name":"Sandeep Pawar","email":"sandeep.pawar1@veritas.com","username":"pawarsandeepu"},"change_message_id":"af788ad382b132e2fc8a3cae36b66f5309627cd5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            if \u0027refl_targets\u0027 in device_info:"},{"line_number":68,"context_line":"                connection_info[\u0027data\u0027][\u0027refl_targets\u0027] \u003d ("},{"line_number":69,"context_line":"                    device_info.get(\u0027refl_targets\u0027))"},{"line_number":70,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":71,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":72,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":75,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff0f0b1f_da3c45c1","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":51},"in_reply_to":"1f013ff3_87b86e76","updated":"2017-05-17 10:58:41.000000000","message":"Done","commit_id":"703d1871363e5ced4ef2272f74bf773d324717b0"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"16bf08d36cb6256d136603db41b0bc900fdd0226","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name"},{"line_number":51,"context_line":"        # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":52,"context_line":"        conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"},{"line_number":53,"context_line":"        conf.source_type \u003d \u0027block\u0027"},{"line_number":54,"context_line":"        conf.driver_name \u003d \u0027qemu\u0027"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_1a719de1","line":52,"updated":"2017-05-17 12:04:57.000000000","message":"See comment below. This is in the wrong place.","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"c4036abb98590b4bc90b8ee01fa5837bc5596c77","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name"},{"line_number":51,"context_line":"        # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":52,"context_line":"        conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"},{"line_number":53,"context_line":"        conf.source_type \u003d \u0027block\u0027"},{"line_number":54,"context_line":"        conf.driver_name \u003d \u0027qemu\u0027"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_742c0f47","line":52,"in_reply_to":"ff0f0b1f_1a719de1","updated":"2017-05-18 06:21:43.000000000","message":"Done","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"16bf08d36cb6256d136603db41b0bc900fdd0226","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name"},{"line_number":51,"context_line":"        # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":52,"context_line":"        conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"},{"line_number":53,"context_line":"        conf.source_type \u003d \u0027block\u0027"},{"line_number":54,"context_line":"        conf.driver_name \u003d \u0027qemu\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return conf"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_dd5b1f52","line":53,"updated":"2017-05-17 12:04:57.000000000","message":"nit: This is the default, and already set by the super class. It would be cleaner to omit it.","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"c4036abb98590b4bc90b8ee01fa5837bc5596c77","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name"},{"line_number":51,"context_line":"        # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":52,"context_line":"        conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"},{"line_number":53,"context_line":"        conf.source_type \u003d \u0027block\u0027"},{"line_number":54,"context_line":"        conf.driver_name \u003d \u0027qemu\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return conf"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_341e970c","line":53,"in_reply_to":"ff0f0b1f_dd5b1f52","updated":"2017-05-18 06:21:43.000000000","message":"Done","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"16bf08d36cb6256d136603db41b0bc900fdd0226","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":52,"context_line":"        conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"},{"line_number":53,"context_line":"        conf.source_type \u003d \u0027block\u0027"},{"line_number":54,"context_line":"        conf.driver_name \u003d \u0027qemu\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return conf"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_dd72ffe3","line":54,"updated":"2017-05-17 12:04:57.000000000","message":"Hardcoding this breaks non-qemu libvirt hypervisors. Given that this is just exposing a local block device it should be equally applicable to all hypervisors. If there\u0027s any reason that this isn\u0027t the case, could you please add a comment to explain why. Otherwise, it\u0027s already been correctly set by the super call above and should be removed.","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"c4036abb98590b4bc90b8ee01fa5837bc5596c77","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # name is a guid string with {}. Don\u0027t include {} in source path"},{"line_number":52,"context_line":"        conf.source_path \u003d \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32]"},{"line_number":53,"context_line":"        conf.source_type \u003d \u0027block\u0027"},{"line_number":54,"context_line":"        conf.driver_name \u003d \u0027qemu\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return conf"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_d4d2bb34","line":54,"in_reply_to":"ff0f0b1f_dd72ffe3","updated":"2017-05-18 06:21:43.000000000","message":"Removed it.","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"16bf08d36cb6256d136603db41b0bc900fdd0226","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if device_info is not None:"},{"line_number":62,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":63,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":64,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":67,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_c06212d9","line":64,"updated":"2017-05-17 12:04:57.000000000","message":"This is weird. As has been said before, connection_info is a bit of a wild west, and modifying it is highly undesirable. However, \u0027device_path\u0027 is now assumed and must be set. If it wasn\u0027t, the super call on lines 47/48 would fail, for eg.\n\nHowever, connection_info[\u0027data\u0027][\u0027device_path\u0027] is assumed to be the path of the local device. That\u0027s not what we\u0027re setting here, though, which is why we need to fix it up on line 52. In fact, because of line 52 we\u0027re not actually using the information we\u0027re stashing here at all.\n\nTurning connection_info into a local block device is the domain of os-brick, so it\u0027s disappointing that this os-brick driver doesn\u0027t directly expose the path of the block device it created as other drivers do. We should update it to do that, as inferring it here is an inappropriate separation of the logic. Until that lands, though, we have to infer it here.\n\nTo avoid confusion, could you please move the logic currently on line 52 to here, and add a comment explaining why it\u0027s required, and that it can be replaced when the os-brick driver is updated to set device_info[\u0027path\u0027] along the lines of similar drivers?","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"c4036abb98590b4bc90b8ee01fa5837bc5596c77","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if device_info is not None:"},{"line_number":62,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":63,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":64,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":67,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"}],"source_content_type":"text/x-python","patch_set":16,"id":"ff0f0b1f_d4a07ba8","line":64,"in_reply_to":"ff0f0b1f_c06212d9","updated":"2017-05-18 06:21:43.000000000","message":"I get it. There is definitely a bug in the os-brick connector. The connector IS setting the device path, but doing it wrong. We will correct the device path here temporarily, and remove the temporary fix when the os-brick bug fix gets in.","commit_id":"ff7dddbf4ddb126909b635d0227e74e4a913b92f"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"6c55d262d14eeaef943b82e42545ba2824ebcb28","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def connect_volume(self, connection_info, disk_info, instance):"},{"line_number":54,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if device_info is not None:"},{"line_number":57,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":58,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_7f0f472e","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":35},"updated":"2017-05-18 08:27:23.000000000","message":"So this might be my lack of caffeine talking but, vrtshyperscale.connect_volume sets device_info to {} so this is never true [1]. The only way device_info would return as {} would be with some form of exception being raised from os-brick, as that isn\u0027t handled here we wouldn\u0027t log anything so I don\u0027t see the need for this or the else logging an error below.\n\nhttps://review.openstack.org/#/c/442754/15/os_brick/initiator/connectors/vrtshyperscale.py@66","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"575928fb7a4351651f51b6ff3beb40869edcd787","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def connect_volume(self, connection_info, disk_info, instance):"},{"line_number":54,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if device_info is not None:"},{"line_number":57,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":58,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_99fd853c","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":35},"in_reply_to":"ff0f0b1f_7f0f472e","updated":"2017-05-18 18:43:53.000000000","message":"Done","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"9a52731f507ad2f4becf82d0fb374ce045bb0cb0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def connect_volume(self, connection_info, disk_info, instance):"},{"line_number":54,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if device_info is not None:"},{"line_number":57,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":58,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_7f2187b4","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":35},"in_reply_to":"ff0f0b1f_7f0f472e","updated":"2017-05-18 08:55:35.000000000","message":"Good catch! The os-brick driver will only ever actually indicate error by raising BrickException. Plenty of other drivers also raise this, and we don\u0027t seem to catch it anywhere in Nova, so it seems that the convention here is just to allow it to be raised.","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"56acc677656467076176a85448b30abb70786c43","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if device_info is not None:"},{"line_number":57,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":58,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_ff18f7d3","line":57,"range":{"start_line":57,"start_character":12,"end_line":57,"end_character":44},"updated":"2017-05-18 08:40:13.000000000","message":"This should always be true right?","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"575928fb7a4351651f51b6ff3beb40869edcd787","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if device_info is not None:"},{"line_number":57,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":58,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_199f3504","line":57,"range":{"start_line":57,"start_character":12,"end_line":57,"end_character":44},"in_reply_to":"ff0f0b1f_ff18f7d3","updated":"2017-05-18 18:43:53.000000000","message":"Done","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"9a52731f507ad2f4becf82d0fb374ce045bb0cb0","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if device_info is not None:"},{"line_number":57,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":58,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"            # Due to a bug in the os-brick connector, device_info contains"},{"line_number":62,"context_line":"            # the wrong device path. Correct it here until os-brick is fixed."}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_8a3897d3","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":51},"updated":"2017-05-18 08:55:35.000000000","message":"There\u0027s no point setting this twice. We should just remove it. The comment below is enough of a hint for later.","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"575928fb7a4351651f51b6ff3beb40869edcd787","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if device_info is not None:"},{"line_number":57,"context_line":"            if \u0027device_path\u0027 in device_info:"},{"line_number":58,"context_line":"                connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"            # Due to a bug in the os-brick connector, device_info contains"},{"line_number":62,"context_line":"            # the wrong device path. Correct it here until os-brick is fixed."}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_f9a3614e","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":51},"in_reply_to":"ff0f0b1f_8a3897d3","updated":"2017-05-18 18:43:53.000000000","message":"Done","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"9a52731f507ad2f4becf82d0fb374ce045bb0cb0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    device_info.get(\u0027device_path\u0027))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"            # Due to a bug in the os-brick connector, device_info contains"},{"line_number":62,"context_line":"            # the wrong device path. Correct it here until os-brick is fixed."},{"line_number":63,"context_line":"            # Truncate volume guid to 31 char to match vxblk gendisk name."},{"line_number":64,"context_line":"            # Name is a guid string with {}. Don\u0027t include {} in device path."},{"line_number":65,"context_line":"            connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_ca5b2f2c","line":62,"updated":"2017-05-18 08:55:35.000000000","message":"+1, thanks!","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"9a52731f507ad2f4becf82d0fb374ce045bb0cb0","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":69,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":70,"context_line":"        else:"},{"line_number":71,"context_line":"            LOG.error(\"Failed to connect volume %(vol_id)s\","},{"line_number":72,"context_line":"                      {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def disconnect_volume(self, connection_info, disk_dev, instance):"},{"line_number":75,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_bf183f81","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":66},"updated":"2017-05-18 08:55:35.000000000","message":"This should go (see above)","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"575928fb7a4351651f51b6ff3beb40869edcd787","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"            LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":69,"context_line":"                {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":70,"context_line":"        else:"},{"line_number":71,"context_line":"            LOG.error(\"Failed to connect volume %(vol_id)s\","},{"line_number":72,"context_line":"                      {\u0027vol_id\u0027: connection_info[\u0027data\u0027][\u0027name\u0027]})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def disconnect_volume(self, connection_info, disk_dev, instance):"},{"line_number":75,"context_line":"        self.connector.disconnect_volume(connection_info[\u0027data\u0027], None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff0f0b1f_798f51cc","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":66},"in_reply_to":"ff0f0b1f_bf183f81","updated":"2017-05-18 18:43:53.000000000","message":"Done","commit_id":"343b892a1f6435b5d26649074edbfdfca1d8c8c2"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"95b35a663165518ff7e1406a5e663610fa8c7756","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_b3c04c2c","line":43,"range":{"start_line":43,"start_character":1,"end_line":43,"end_character":52},"updated":"2017-05-19 13:23:11.000000000","message":"This isn\u0027t correct: name was given to us by cinder; we don\u0027t set it in connect_volume. It\u0027s only device_path that we\u0027re setting in connect_volume. We also generally assume data is in connect_info, so that could reasonably be omitted.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d67d6865741c080dabe22e5e82a179769e50b0ba","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_27362454","line":43,"range":{"start_line":43,"start_character":1,"end_line":43,"end_character":52},"in_reply_to":"ff0f0b1f_b3c04c2c","updated":"2017-05-19 23:18:33.000000000","message":"Your comments and Matt Riedemann\u0027s made me rethink how to implement this method. All we really need from get_config is now in the parent class method, so I\u0027m no longer implementing get_config in this derived class. Would welcome your feedback on that strategy. Note that we modified but kept the unit test case for get_config.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ce441069c4aa831b7a6e53d41a3d0798695f8d8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_75806d8c","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":58},"updated":"2017-05-19 00:02:05.000000000","message":"Are you sure about this one? Looking in the libvirt driver, get_config is for the most part always called after connect_volume, except in the case of live migration, where it\u0027s called with the bdm.connection_info. I don\u0027t think we update the bdm to save the mutated connection_info returned from connect_volume, so this could fail in the case of live migration, here:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/migration.py#L151","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"95b35a663165518ff7e1406a5e663610fa8c7756","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_b3a72ca8","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":58},"in_reply_to":"ff0f0b1f_6beac9ac","updated":"2017-05-19 13:23:11.000000000","message":"If you have a look at the super class (LibvirtVolumeDriver), get_config() will explode anyway if device_path isn\u0027t set. The fact that it doesn\u0027t, and device_path only set by connect_volume, means that this is good.\n\nIn fact I much prefer this to what other drivers do, as it makes this relationship more obvious.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"387ad24a2a67d4bcfb297702919c411994a18e6b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_85098c2d","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":58},"in_reply_to":"ff0f0b1f_75806d8c","updated":"2017-05-19 01:46:28.000000000","message":"So I guess during boot from volume it looks like we would save the connection_info after connect_volume into the BDM, it\u0027s just very very roundabout.\n\nWhen the driver spawn() method is called, it eventually gets here:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4929\n\nWhich goes here:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L4759\n\nAnd we eventually get here which connects the volume and updates the BDM.connection_info in the database:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L3689-L3693\n\nVery confusing that a method called _get_guest_storage_config is also actually attaching volumes.\n\nNot to be confused with attaching a volume to an existing instance, which goes through a different path:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/manager.py#L4864\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/block_device.py#L389\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L1222\n\nIn that attach_volume flow, the connection_info dict is all passed by reference and updated and then finally saved here:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/block_device.py#L402\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/block_device.py#L50\n\nSo in summary this is probably safe.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"7ac20cd7886a8d645604fa5ea648bedb201262d8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_6beac9ac","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":58},"in_reply_to":"ff0f0b1f_85098c2d","updated":"2017-05-19 03:42:22.000000000","message":"Whew! Thanks for the code walk. I am testing live migration to be sure.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d67d6865741c080dabe22e5e82a179769e50b0ba","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def get_config(self, connection_info, disk_info):"},{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_4718f8d1","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":58},"in_reply_to":"ff0f0b1f_b3a72ca8","updated":"2017-05-19 23:18:33.000000000","message":"Done","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"95b35a663165518ff7e1406a5e663610fa8c7756","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_1377f8d6","line":45,"updated":"2017-05-19 13:23:11.000000000","message":"That said, Invalid is the wrong exception here. Invalid is for a Bad Request, indicating that the user gave incorrect input. In fact would indicate a programming error, so it should probably just assert().\n\n  # This may only be called after connect_volume\n  assert(\u0027device_path\u0027 in connection_info[\u0027data\u0027])\n\nWe don\u0027t seem to use assert() that much, though, so Matt R may know of another pattern for this in Nova.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"d67d6865741c080dabe22e5e82a179769e50b0ba","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        if (\u0027data\u0027 not in connection_info or"},{"line_number":43,"context_line":"            \u0027name\u0027 not in connection_info[\u0027data\u0027] or"},{"line_number":44,"context_line":"            \u0027device_path\u0027 not in connection_info[\u0027data\u0027]):"},{"line_number":45,"context_line":"            raise exception.Invalid("},{"line_number":46,"context_line":"                _(\"voume is not connected\"))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        conf \u003d super(LibvirtHyperScaleVolumeDriver, self).get_config("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_677adcf1","line":45,"in_reply_to":"ff0f0b1f_1377f8d6","updated":"2017-05-19 23:18:33.000000000","message":"Changed to leave it to the parent class to assert if it tries to access invalid \u0027device_path\u0027 key.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0e68cef21b04564a14d59041c47a717258dcc3c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # The convention in nova is to just propagate it up."},{"line_number":56,"context_line":"        self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Due to a bug in the os-brick connector, device_info contains"},{"line_number":59,"context_line":"        # the wrong device path. Correct it here until os-brick is fixed,"},{"line_number":60,"context_line":"        # at which point set the device path as follows:"},{"line_number":61,"context_line":"        #   device_info \u003d self.connector.connect_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_b55f2540","line":58,"updated":"2017-05-19 00:03:00.000000000","message":"Have you reported a bug for os-brick yet, or have a patch up for this fix? That\u0027s going to require an os-brick release and minimum version update in global-requirements for nova to use it.","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"dbe76f83cec9ec4d0237e546da34a827690c2fdc","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # The convention in nova is to just propagate it up."},{"line_number":56,"context_line":"        self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Due to a bug in the os-brick connector, device_info contains"},{"line_number":59,"context_line":"        # the wrong device path. Correct it here until os-brick is fixed,"},{"line_number":60,"context_line":"        # at which point set the device path as follows:"},{"line_number":61,"context_line":"        #   device_info \u003d self.connector.connect_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_72005c02","line":58,"in_reply_to":"ff0f0b1f_3672f8e4","updated":"2017-05-19 23:38:45.000000000","message":"Review for bug fix is here:\nhttps://review.openstack.org/#/c/466437","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"414c74ffc7dc7977844fc2e89c406a80dd759536","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # The convention in nova is to just propagate it up."},{"line_number":56,"context_line":"        self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Due to a bug in the os-brick connector, device_info contains"},{"line_number":59,"context_line":"        # the wrong device path. Correct it here until os-brick is fixed,"},{"line_number":60,"context_line":"        # at which point set the device path as follows:"},{"line_number":61,"context_line":"        #   device_info \u003d self.connector.connect_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_3672f8e4","line":58,"in_reply_to":"ff0f0b1f_abf34173","updated":"2017-05-19 04:46:32.000000000","message":"Here\u0027s a link to the bug report: https://bugs.launchpad.net/os-brick/+bug/1691925","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"7ac20cd7886a8d645604fa5ea648bedb201262d8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # The convention in nova is to just propagate it up."},{"line_number":56,"context_line":"        self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Due to a bug in the os-brick connector, device_info contains"},{"line_number":59,"context_line":"        # the wrong device path. Correct it here until os-brick is fixed,"},{"line_number":60,"context_line":"        # at which point set the device path as follows:"},{"line_number":61,"context_line":"        #   device_info \u003d self.connector.connect_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_abf34173","line":58,"in_reply_to":"ff0f0b1f_b55f2540","updated":"2017-05-19 03:42:22.000000000","message":"I will submit the os-brick bug report tonight.\nOS-brick already has a version bump for Pike. Does a bug fix that makes it into Pike require another version bump?","commit_id":"71e28765a0a0ad89c7cf039c6981f0bc951fbb97"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e6b71fa203747da66be406862ed7f19f9c9f901","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        #   device_info \u003d self.connector.connect_volume("},{"line_number":49,"context_line":"        #       connection_info[\u0027data\u0027])"},{"line_number":50,"context_line":"        #   connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":51,"context_line":"        #       device_info.get(\u0027device_path\u0027))"},{"line_number":52,"context_line":"        #"},{"line_number":53,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name."},{"line_number":54,"context_line":"        # Name is a guid string with {}. Don\u0027t include {} in device path."}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_1b756acb","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":46},"updated":"2017-05-23 18:20:32.000000000","message":"I\u0027m pretty sure it would be \u0027path\u0027, not \u0027device_path\u0027, since that\u0027s what all of the other volume drivers are using.\n\nBut looking at the os-brick connector, I guess you did use device_path:\n\nhttps://review.openstack.org/#/c/466437/1/os_brick/initiator/connectors/vrtshyperscale.py\n\nAnd because os-brick doesn\u0027t have any standard format checking on the returned dict keys, I guess no one noticed.\n\nBy the way, ^ is released in os-brick 1.13.0 so we should just bump the minimum required version in global-requirements and depend on that change now.","commit_id":"818b032f0bc589c090d1be1fc0cd3cc836a9bc72"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"81fadd00ac7ac5918aa5638ea28d62c2705d7db6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        #   device_info \u003d self.connector.connect_volume("},{"line_number":49,"context_line":"        #       connection_info[\u0027data\u0027])"},{"line_number":50,"context_line":"        #   connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":51,"context_line":"        #       device_info.get(\u0027device_path\u0027))"},{"line_number":52,"context_line":"        #"},{"line_number":53,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name."},{"line_number":54,"context_line":"        # Name is a guid string with {}. Don\u0027t include {} in device path."}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_bed42c21","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":46},"in_reply_to":"ff0f0b1f_1b756acb","updated":"2017-05-23 18:27:52.000000000","message":"After talking with Walter Boring (hemna) it sounds like he wants to change device_path to path in the device_info dict returned from the brick connector class to be consistent with the other connectors, which means waiting for yet another release for os-brick and then update global-requirements.","commit_id":"818b032f0bc589c090d1be1fc0cd3cc836a9bc72"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"672c9a5dc9518969f067463d6083cb7be34a688c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        #   device_info \u003d self.connector.connect_volume("},{"line_number":49,"context_line":"        #       connection_info[\u0027data\u0027])"},{"line_number":50,"context_line":"        #   connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":51,"context_line":"        #       device_info.get(\u0027device_path\u0027))"},{"line_number":52,"context_line":"        #"},{"line_number":53,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name."},{"line_number":54,"context_line":"        # Name is a guid string with {}. Don\u0027t include {} in device path."}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_74e7d3ad","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":46},"in_reply_to":"ff0f0b1f_bed42c21","updated":"2017-05-23 19:46:21.000000000","message":"Done - changed keyword from \u0027device_path\u0027 to \u0027path\u0027 here. Corresponding change to os-brick connector is under review here (thanks to hemna): https://review.openstack.org/#/c/467356/","commit_id":"818b032f0bc589c090d1be1fc0cd3cc836a9bc72"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"7a660b40cf7745a7ff8bb7a99a7a21418dc60a58","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # The convention in nova is to just propagate it up."},{"line_number":43,"context_line":"        self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Due to a bug in the os-brick connector, device_info contains"},{"line_number":46,"context_line":"        # the wrong device path. Correct it here until os-brick is fixed,"},{"line_number":47,"context_line":"        # at which point set the device path as follows:"},{"line_number":48,"context_line":"        #   device_info \u003d self.connector.connect_volume("},{"line_number":49,"context_line":"        #       connection_info[\u0027data\u0027])"},{"line_number":50,"context_line":"        #   connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":51,"context_line":"        #       device_info.get(\u0027device_path\u0027))"},{"line_number":52,"context_line":"        #"},{"line_number":53,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name."},{"line_number":54,"context_line":"        # Name is a guid string with {}. Don\u0027t include {} in device path."},{"line_number":55,"context_line":"        connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":56,"context_line":"            \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32])"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_3d785e28","line":54,"range":{"start_line":45,"start_character":0,"end_line":54,"end_character":73},"updated":"2017-05-22 10:05:55.000000000","message":"super nit - this could use a link to the bug you\u0027ve created, only if you respin.","commit_id":"818b032f0bc589c090d1be1fc0cd3cc836a9bc72"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e6b71fa203747da66be406862ed7f19f9c9f901","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # The convention in nova is to just propagate it up."},{"line_number":43,"context_line":"        self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Due to a bug in the os-brick connector, device_info contains"},{"line_number":46,"context_line":"        # the wrong device path. Correct it here until os-brick is fixed,"},{"line_number":47,"context_line":"        # at which point set the device path as follows:"},{"line_number":48,"context_line":"        #   device_info \u003d self.connector.connect_volume("},{"line_number":49,"context_line":"        #       connection_info[\u0027data\u0027])"},{"line_number":50,"context_line":"        #   connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":51,"context_line":"        #       device_info.get(\u0027device_path\u0027))"},{"line_number":52,"context_line":"        #"},{"line_number":53,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name."},{"line_number":54,"context_line":"        # Name is a guid string with {}. Don\u0027t include {} in device path."},{"line_number":55,"context_line":"        connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":56,"context_line":"            \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32])"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_9e05e813","line":54,"range":{"start_line":45,"start_character":0,"end_line":54,"end_character":73},"in_reply_to":"ff0f0b1f_3d785e28","updated":"2017-05-23 18:20:32.000000000","message":"Let\u0027s just do the right thing now, see above.","commit_id":"818b032f0bc589c090d1be1fc0cd3cc836a9bc72"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"672c9a5dc9518969f067463d6083cb7be34a688c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # The convention in nova is to just propagate it up."},{"line_number":43,"context_line":"        self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Due to a bug in the os-brick connector, device_info contains"},{"line_number":46,"context_line":"        # the wrong device path. Correct it here until os-brick is fixed,"},{"line_number":47,"context_line":"        # at which point set the device path as follows:"},{"line_number":48,"context_line":"        #   device_info \u003d self.connector.connect_volume("},{"line_number":49,"context_line":"        #       connection_info[\u0027data\u0027])"},{"line_number":50,"context_line":"        #   connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":51,"context_line":"        #       device_info.get(\u0027device_path\u0027))"},{"line_number":52,"context_line":"        #"},{"line_number":53,"context_line":"        # Truncate volume guid to 31 char to match vxblk gendisk name."},{"line_number":54,"context_line":"        # Name is a guid string with {}. Don\u0027t include {} in device path."},{"line_number":55,"context_line":"        connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d ("},{"line_number":56,"context_line":"            \u0027/dev/\u0027 + connection_info[\u0027data\u0027][\u0027name\u0027][1:32])"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_34783bc2","line":54,"range":{"start_line":45,"start_character":0,"end_line":54,"end_character":73},"in_reply_to":"ff0f0b1f_9e05e813","updated":"2017-05-23 19:46:21.000000000","message":"Done - did the right thing, i.e. consumed os-brick bug fix https://review.openstack.org/#/c/466437/ and removed the workaround from here.","commit_id":"818b032f0bc589c090d1be1fc0cd3cc836a9bc72"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e07c406d49a2c6a705b4573746966aa281e3f08","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # device path from the \"device_path\" key in connection_info."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":49,"context_line":"        connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d device_info.get(\u0027path\u0027)"},{"line_number":50,"context_line":"        LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":51,"context_line":"            {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ff0f0b1f_1402d73d","line":49,"range":{"start_line":49,"start_character":49,"end_line":49,"end_character":72},"updated":"2017-05-23 19:40:27.000000000","message":"This isn\u0027t going to work until https://review.openstack.org/#/c/467356/ is released and updated as the minimum version in global-requirements, so we need to hold off until that happens.","commit_id":"64c56d1c485e5d6baa03984dc95b4a399bed50fe"},{"author":{"_account_id":24006,"name":"christopher.uhler","email":"christopher.uhler@veritas.com","username":"cuhler"},"change_message_id":"1102953f683a6b0e8acaa0bf9de2b87f7ad6229d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # device path from the \"device_path\" key in connection_info."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":49,"context_line":"        connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d device_info.get(\u0027path\u0027)"},{"line_number":50,"context_line":"        LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":51,"context_line":"            {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ff0f0b1f_f404031a","line":49,"range":{"start_line":49,"start_character":49,"end_line":49,"end_character":72},"in_reply_to":"ff0f0b1f_1402d73d","updated":"2017-05-23 19:48:59.000000000","message":"Agree. Progress here is paused awaiting merge of os-brick change you referenced.","commit_id":"64c56d1c485e5d6baa03984dc95b4a399bed50fe"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"ec6b84825deee8caa88665a7e9d0b2d8fdb20cc6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # device path from the \"device_path\" key in connection_info."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":49,"context_line":"        connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d device_info.get(\u0027path\u0027)"},{"line_number":50,"context_line":"        LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":51,"context_line":"            {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ff0f0b1f_a3acfa9e","line":49,"range":{"start_line":49,"start_character":49,"end_line":49,"end_character":72},"in_reply_to":"ff0f0b1f_dedfca66","updated":"2017-05-24 10:55:40.000000000","message":"Nope, as Matt has already said we need to wait until the fix lands in os-brick, 1.14.0 (?) is actually released, updated in global-requirements.txt and then lands in requirements.txt for Nova. Depends-On would just allow CI to pass if we had any testing this but we don\u0027t.","commit_id":"64c56d1c485e5d6baa03984dc95b4a399bed50fe"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"fb97891c50c60e87b77d97e211cafb7c795b56ee","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # device path from the \"device_path\" key in connection_info."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        device_info \u003d self.connector.connect_volume(connection_info[\u0027data\u0027])"},{"line_number":49,"context_line":"        connection_info[\u0027data\u0027][\u0027device_path\u0027] \u003d device_info.get(\u0027path\u0027)"},{"line_number":50,"context_line":"        LOG.info(\"connect_volume: device path %(device_path)s\","},{"line_number":51,"context_line":"            {\u0027device_path\u0027: connection_info[\u0027data\u0027][\u0027device_path\u0027]})"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ff0f0b1f_dedfca66","line":49,"range":{"start_line":49,"start_character":49,"end_line":49,"end_character":72},"in_reply_to":"ff0f0b1f_f404031a","updated":"2017-05-24 09:33:11.000000000","message":"You could add:\n\nDepends-On: I2c1d561521fdd37626e3301148c16feff48a1fde\n\nand Matt could remove his W-1. Would also be nice to backporters if that\u0027s important to you.","commit_id":"64c56d1c485e5d6baa03984dc95b4a399bed50fe"}],"releasenotes/notes/veritas_hyperscale_libvirt_driver-ba02bea54a9a99db.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02fc2d972281833c1120bf34338537a19b1078d5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Libvirt driver in Nova to support Veritas HyperScale volume driver."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1f013ff3_d0b78a3a","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":71},"updated":"2017-05-12 21:02:12.000000000","message":"Suggested re-wording on this:\n\n\"The libvirt compute driver now supports connecting to Veritas HyperScale volume backends.\"","commit_id":"3cd6c3e8f6ba7a0829fa08467782a37b38d64fc4"},{"author":{"_account_id":19774,"name":"Vivek Agrawal","email":"vivek.agrawal@veritas.com","username":"viveksagrawal"},"change_message_id":"373b5f9dab4886d5f3f2861a16e1041f4e4f7325","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Libvirt driver in Nova to support Veritas HyperScale volume driver."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1f013ff3_3d18c27f","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":71},"in_reply_to":"1f013ff3_d0b78a3a","updated":"2017-05-14 02:28:25.000000000","message":"Done","commit_id":"3cd6c3e8f6ba7a0829fa08467782a37b38d64fc4"}]}
