)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595fbe2ca9eb02f756808d6d61d8e951cf0e635b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Krisztian Gacsal \u003ckrisztian.gacsal@ericsson.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-07 12:09:48 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"virt: Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add multiattach support to libvirt driver."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba3cc151_c07b417a","line":7,"updated":"2015-07-07 11:43:41.000000000","message":"please add libvirt as the prefix here. This patch is specifically for libvirt","commit_id":"b89cf9671a8529108a37ba62c0f65855e200d6e4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e4b8e4b392bb5d0a8e0f37aad927d57e09d99f7d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Krisztian Gacsal \u003ckrisztian.gacsal@ericsson.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-07 16:11:20 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"virt: Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add multiattach support to libvirt driver."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a50d1a3_96e1ae2c","line":7,"updated":"2015-07-28 16:42:45.000000000","message":"s/virt/libvirt/ if you\u0027re only adding volume multiattach support to the libvirt driver.  We should probably also update the hypervisor support matrix to add a column for volume multi-attach support so that people don\u0027t think xen/hyperv/vmware/ironic also support it.\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/doc/source/support-matrix.ini","commit_id":"0e2ee84d9126b9099c1c623e39456bc73a4e2b8c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e4b8e4b392bb5d0a8e0f37aad927d57e09d99f7d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Related patches:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"REST API changes:"},{"line_number":16,"context_line":"https://review.openstack.org/153038"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"python-cinderclient:"},{"line_number":19,"context_line":"https://review.openstack.org/#/c/85856/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a50d1a3_f6c6f29a","line":16,"updated":"2015-07-28 16:42:45.000000000","message":"Please use change IDs rather than URLs.","commit_id":"0e2ee84d9126b9099c1c623e39456bc73a4e2b8c"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"6124890f7a785b5760945a40e93c3e6c3cf1624d","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Partially-implements: blueprint multi-attach-volume"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related patches:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"REST API changes:"},{"line_number":16,"context_line":"https://review.openstack.org/153038"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"5a710552_394a81ad","line":13,"updated":"2015-12-15 22:46:28.000000000","message":"Same as other patches. It would be good to have an overall summary of this and related patches, how they interact, and what they basically do.","commit_id":"7826e2cc44b670ebf46e552efdf1261f5c87a717"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"823fda01939c193d2e5c64f0e6c155c8dce15aca","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ildiko Vancsa \u003cildiko.vancsa@ericsson.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-04 09:07:03 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"virt: Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add multiattach support to libvirt driver, by updating the"},{"line_number":10,"context_line":"xml configuration info if the multiattach support is turned"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":53,"id":"fa69d971_b4ef5486","line":7,"updated":"2016-01-04 13:20:54.000000000","message":"changes to the libvirt driver are usually prefixed with \"libvirt:\" in the commit message","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"bb7ebc4aefad6982b2abfec64f697928a4f81d6f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ildiko Vancsa \u003cildiko.vancsa@ericsson.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-04 09:07:03 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"virt: Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add multiattach support to libvirt driver, by updating the"},{"line_number":10,"context_line":"xml configuration info if the multiattach support is turned"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":53,"id":"fa69d971_b808a292","line":7,"in_reply_to":"fa69d971_b4ef5486","updated":"2016-01-04 17:22:01.000000000","message":"Done","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":14806,"name":"Chhavi Agarwal","email":"chhagarw@in.ibm.com","username":"chhagarw"},"change_message_id":"79faed402b8b73abc174b2f807a6946cd36b8e7c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ildiko Vancsa \u003cildiko.vancsa@ericsson.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-19 06:48:31 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: libvirt: Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add multiattach support to libvirt driver, by updating the"},{"line_number":10,"context_line":"xml configuration info if the multiattach support is turned"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":86,"id":"ba63e191_0b3a0437","line":7,"updated":"2016-01-19 09:38:07.000000000","message":"is it still WIP","commit_id":"a3e2c1e9b10b6c6b3a86437d7454cb6779a359b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"cc6e7cac2b8b940f31a8fc407b65bdf7b057b57c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ildiko Vancsa \u003cildiko.vancsa@ericsson.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-19 06:48:31 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: libvirt: Allow multiple volume attachments"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add multiattach support to libvirt driver, by updating the"},{"line_number":10,"context_line":"xml configuration info if the multiattach support is turned"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":86,"id":"ba63e191_353ab337","line":7,"in_reply_to":"ba63e191_0b3a0437","updated":"2016-01-19 11:44:53.000000000","message":"It will be merged during N the earliest to provide upgrade path for the feature. Otherwise the code itself is ready.","commit_id":"a3e2c1e9b10b6c6b3a86437d7454cb6779a359b1"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"823fda01939c193d2e5c64f0e6c155c8dce15aca","unresolved":false,"context_lines":[{"line_number":12116,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":12117,"context_line":"    def test_swap_volume_driver_bdm_save(self, get_guest,"},{"line_number":12118,"context_line":"                                         connect_volume, get_volume_config,"},{"line_number":12119,"context_line":"                                         get_by_volume_id,"},{"line_number":12120,"context_line":"                                         volume_save,"},{"line_number":12121,"context_line":"                                         swap_volume, disconnect_volume):"},{"line_number":12122,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI())"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_d41688a6","line":12119,"updated":"2016-01-04 13:20:54.000000000","message":"nit: unnecessary format change","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"bb7ebc4aefad6982b2abfec64f697928a4f81d6f","unresolved":false,"context_lines":[{"line_number":12116,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_guest\u0027)"},{"line_number":12117,"context_line":"    def test_swap_volume_driver_bdm_save(self, get_guest,"},{"line_number":12118,"context_line":"                                         connect_volume, get_volume_config,"},{"line_number":12119,"context_line":"                                         get_by_volume_id,"},{"line_number":12120,"context_line":"                                         volume_save,"},{"line_number":12121,"context_line":"                                         swap_volume, disconnect_volume):"},{"line_number":12122,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI())"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_7839ca40","line":12119,"in_reply_to":"fa69d971_d41688a6","updated":"2016-01-04 17:22:01.000000000","message":"Done","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"823fda01939c193d2e5c64f0e6c155c8dce15aca","unresolved":false,"context_lines":[{"line_number":14509,"context_line":"                \u0027refresh_connection_info\u0027)"},{"line_number":14510,"context_line":"    @mock.patch(\u0027nova.objects.block_device.BlockDeviceMapping.\u0027"},{"line_number":14511,"context_line":"                \u0027get_by_volume_id\u0027)"},{"line_number":14512,"context_line":"    def test_volume_refresh_connection_info(self,"},{"line_number":14513,"context_line":"                                            mock_get_by_volume_id,"},{"line_number":14514,"context_line":"                                            mock_refresh_connection_info):"},{"line_number":14515,"context_line":"        instance \u003d objects.Instance(**self.inst)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_f4786cf4","line":14512,"updated":"2016-01-04 13:20:54.000000000","message":"nit: unnecessary format change","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"bb7ebc4aefad6982b2abfec64f697928a4f81d6f","unresolved":false,"context_lines":[{"line_number":14509,"context_line":"                \u0027refresh_connection_info\u0027)"},{"line_number":14510,"context_line":"    @mock.patch(\u0027nova.objects.block_device.BlockDeviceMapping.\u0027"},{"line_number":14511,"context_line":"                \u0027get_by_volume_id\u0027)"},{"line_number":14512,"context_line":"    def test_volume_refresh_connection_info(self,"},{"line_number":14513,"context_line":"                                            mock_get_by_volume_id,"},{"line_number":14514,"context_line":"                                            mock_refresh_connection_info):"},{"line_number":14515,"context_line":"        instance \u003d objects.Instance(**self.inst)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_1841aea9","line":14512,"in_reply_to":"fa69d971_f4786cf4","updated":"2016-01-04 17:22:01.000000000","message":"Done","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"823fda01939c193d2e5c64f0e6c155c8dce15aca","unresolved":false,"context_lines":[{"line_number":14530,"context_line":"            self.c, self.volume_uuid, instance.uuid)"},{"line_number":14531,"context_line":"        mock_refresh_connection_info.assert_called_once_with(self.c, instance,"},{"line_number":14532,"context_line":"            self.drvr._volume_api, self.drvr)"},{"line_number":14533,"context_line":""},{"line_number":14534,"context_line":"    def test_volume_snapshot_create(self, quiesce\u003dTrue):"},{"line_number":14535,"context_line":"        \"\"\"Test snapshot creation with file-based disk.\"\"\""},{"line_number":14536,"context_line":"        self.flags(instance_name_template\u003d\u0027instance-%s\u0027)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_144bc0b1","line":14533,"updated":"2016-01-04 13:20:54.000000000","message":"I would expect here new testcases for:\n* An instance xml config should have the \"shareable\" flag\n* A block device mapped to two instances","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"bb7ebc4aefad6982b2abfec64f697928a4f81d6f","unresolved":false,"context_lines":[{"line_number":14530,"context_line":"            self.c, self.volume_uuid, instance.uuid)"},{"line_number":14531,"context_line":"        mock_refresh_connection_info.assert_called_once_with(self.c, instance,"},{"line_number":14532,"context_line":"            self.drvr._volume_api, self.drvr)"},{"line_number":14533,"context_line":""},{"line_number":14534,"context_line":"    def test_volume_snapshot_create(self, quiesce\u003dTrue):"},{"line_number":14535,"context_line":"        \"\"\"Test snapshot creation with file-based disk.\"\"\""},{"line_number":14536,"context_line":"        self.flags(instance_name_template\u003d\u0027instance-%s\u0027)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_30e91e81","line":14533,"in_reply_to":"fa69d971_144bc0b1","updated":"2016-01-04 17:22:01.000000000","message":"I will check where the xml config is tested and add a new test there.\n\nBy the BDM one, do you mean having two BDMs for one volume and call the refresh for both?","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"eb361e770e08e48de3289b2894b69fdd98dd6a5c","unresolved":false,"context_lines":[{"line_number":14530,"context_line":"            self.c, self.volume_uuid, instance.uuid)"},{"line_number":14531,"context_line":"        mock_refresh_connection_info.assert_called_once_with(self.c, instance,"},{"line_number":14532,"context_line":"            self.drvr._volume_api, self.drvr)"},{"line_number":14533,"context_line":""},{"line_number":14534,"context_line":"    def test_volume_snapshot_create(self, quiesce\u003dTrue):"},{"line_number":14535,"context_line":"        \"\"\"Test snapshot creation with file-based disk.\"\"\""},{"line_number":14536,"context_line":"        self.flags(instance_name_template\u003d\u0027instance-%s\u0027)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_856bc3f0","line":14533,"in_reply_to":"fa69d971_30e91e81","updated":"2016-01-05 12:13:02.000000000","message":"\u003e By the BDM one, do you mean having two BDMs for \n\u003e one volume and call the refresh for both?\n\nI mean a unit test which shows that one volume is allowed to be attached to two instances. I often use the unit tests as a documentation of allowed behavior. And from the existing unit tests I couldn\u0027t see that this use case is already covered. Or did I overlook it?","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"07058a4bafc327554e5e33b4f97ab82c26909aa5","unresolved":false,"context_lines":[{"line_number":14530,"context_line":"            self.c, self.volume_uuid, instance.uuid)"},{"line_number":14531,"context_line":"        mock_refresh_connection_info.assert_called_once_with(self.c, instance,"},{"line_number":14532,"context_line":"            self.drvr._volume_api, self.drvr)"},{"line_number":14533,"context_line":""},{"line_number":14534,"context_line":"    def test_volume_snapshot_create(self, quiesce\u003dTrue):"},{"line_number":14535,"context_line":"        \"\"\"Test snapshot creation with file-based disk.\"\"\""},{"line_number":14536,"context_line":"        self.flags(instance_name_template\u003d\u0027instance-%s\u0027)"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_4c3e28c2","line":14533,"in_reply_to":"fa69d971_856bc3f0","updated":"2016-01-06 09:32:37.000000000","message":"Thanks for clarification.\n\nI added an extra test case which shows that the configuration happens for the multi-attach case and also one to check the connection_info is updated properly updated.\n\nI will also try to add further tests on the go after fixing the issues in the patches this one depends on.","commit_id":"92ecf4c647f2661ec0b9c450cdc37bebdb0e92fd"}],"nova/tests/unit/virt/libvirt/volume/test_volume.py":[{"author":{"_account_id":14806,"name":"Chhavi Agarwal","email":"chhagarw@in.ibm.com","username":"chhagarw"},"change_message_id":"79faed402b8b73abc174b2f807a6946cd36b8e7c","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                 \"device_path\": \"/foo\","},{"line_number":271,"context_line":"                 \u0027access_mode\u0027: \u0027rw\u0027,"},{"line_number":272,"context_line":"                 },"},{"line_number":273,"context_line":"             \u0027multiattach\u0027: True,"},{"line_number":274,"context_line":"            }"},{"line_number":275,"context_line":"        disk_info \u003d {"},{"line_number":276,"context_line":"            \"bus\": \"virtio\","}],"source_content_type":"text/x-python","patch_set":86,"id":"ba63e191_ab265814","line":273,"updated":"2016-01-19 09:38:07.000000000","message":"are we passing the multiattach flag in the connection-info.\nWill this be needed by all the nova drivers if they want to support shared volumes","commit_id":"a3e2c1e9b10b6c6b3a86437d7454cb6779a359b1"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"cc6e7cac2b8b940f31a8fc407b65bdf7b057b57c","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                 \"device_path\": \"/foo\","},{"line_number":271,"context_line":"                 \u0027access_mode\u0027: \u0027rw\u0027,"},{"line_number":272,"context_line":"                 },"},{"line_number":273,"context_line":"             \u0027multiattach\u0027: True,"},{"line_number":274,"context_line":"            }"},{"line_number":275,"context_line":"        disk_info \u003d {"},{"line_number":276,"context_line":"            \"bus\": \"virtio\","}],"source_content_type":"text/x-python","patch_set":86,"id":"ba63e191_55ee478c","line":273,"in_reply_to":"ba63e191_ab265814","updated":"2016-01-19 11:44:53.000000000","message":"The information is needed for the drivers to prepare the attachment properly. It usually means to turn off caching for the volume, like setting the \u0027shareable\u0027 flag for the disk in case of Libvirt. The best carrier I found for sending the required info to the virt driver is the connection info. I think it belongs there logically too in some sense. So if a driver can natively support multi-attach, it will need this info.","commit_id":"a3e2c1e9b10b6c6b3a86437d7454cb6779a359b1"}],"nova/virt/block_device.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"595fbe2ca9eb02f756808d6d61d8e951cf0e635b","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        mode \u003d \u0027rw\u0027"},{"line_number":272,"context_line":"        if \u0027data\u0027 in connection_info:"},{"line_number":273,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":274,"context_line":"        # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":275,"context_line":"        # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":276,"context_line":"        # after that we can detach and connection_info is required for"},{"line_number":277,"context_line":"        # detach."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_40e73140","line":274,"updated":"2015-07-07 11:43:41.000000000","message":"it is not clear why you dropped these lines. can you please let me know why","commit_id":"b89cf9671a8529108a37ba62c0f65855e200d6e4"},{"author":{"_account_id":14806,"name":"Chhavi Agarwal","email":"chhagarw@in.ibm.com","username":"chhagarw"},"change_message_id":"8335827a27b8471600f003a3e5b2e107f3e41620","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        mode \u003d \u0027rw\u0027"},{"line_number":274,"context_line":"        if \u0027data\u0027 in connection_info:"},{"line_number":275,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":276,"context_line":"        # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":277,"context_line":"        # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":278,"context_line":"        # after that we can detach and connection_info is required for"},{"line_number":279,"context_line":"        # detach."}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_8990e9ee","line":276,"updated":"2015-09-03 18:34:50.000000000","message":"i think its better to add one more in-use attach-status  along with \"detached\" instead of removing the check completely.\n\nalso update the comment statement.","commit_id":"89a6a0dc5e38f8099a308ebfa81490586d6c979c"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"6124890f7a785b5760945a40e93c3e6c3cf1624d","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        mode \u003d \u0027rw\u0027"},{"line_number":306,"context_line":"        if \u0027data\u0027 in connection_info:"},{"line_number":307,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":310,"context_line":"        # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":311,"context_line":"        # after that we can detach and connection_info is required for"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a710552_1c3533d9","line":308,"updated":"2015-12-15 22:46:28.000000000","message":"The check could remain:\nif not connection_info[\u0027multiattach\u0027] and not volume[\u0027attach_status\u0027] \u003d\u003d \"detached\":","commit_id":"7826e2cc44b670ebf46e552efdf1261f5c87a717"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"fd5d9cf21cae7982bd030fd17fd9a52f9aba3f4e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        mode \u003d \u0027rw\u0027"},{"line_number":306,"context_line":"        if \u0027data\u0027 in connection_info:"},{"line_number":307,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":310,"context_line":"        # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":311,"context_line":"        # after that we can detach and connection_info is required for"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a710552_d9b0f445","line":308,"in_reply_to":"5a710552_1c3533d9","updated":"2015-12-16 15:35:59.000000000","message":"It does not match the original case, which we want to extend here. The other option here if I\u0027m not mistaken is \u0027multiattach\u0027 is true and the volume status is \u0027in-use\u0027.","commit_id":"7826e2cc44b670ebf46e552efdf1261f5c87a717"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d4e53fecb7c84f9560960a6dd0c9376920c220e3","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        self._preserve_multipath_id(connection_info)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        if volume.get(\u0027multiattach\u0027, False):"},{"line_number":279,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        # If do_driver_attach is False, we will attach a volume to an instance"},{"line_number":282,"context_line":"        # at boot time. So actual attach is done by instance creation code."}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_895d80eb","line":279,"updated":"2015-12-17 12:25:50.000000000","message":"This feels like a hack.\n\nShould this not be part of: volume_api.initialize_connection()?","commit_id":"d2c61c185f71541e750ac847f07877637f6567a5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a77530d0024cf1dd744dc5285c31f5c1ed174a20","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        self._preserve_multipath_id(connection_info)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        if volume.get(\u0027multiattach\u0027, False):"},{"line_number":279,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        # If do_driver_attach is False, we will attach a volume to an instance"},{"line_number":282,"context_line":"        # at boot time. So actual attach is done by instance creation code."}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_b17c3d73","line":279,"in_reply_to":"3a7e1126_895d80eb","updated":"2015-12-17 20:13:48.000000000","message":"I have to agree here.   I\u0027m not following why we are setting this flag in the connection_info for a volume.   The volume itself should always have that value.","commit_id":"d2c61c185f71541e750ac847f07877637f6567a5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d4e53fecb7c84f9560960a6dd0c9376920c220e3","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if (volume[\u0027attach_status\u0027] \u003d\u003d \"detached\" or"},{"line_number":310,"context_line":"            connection_info[\u0027multiattach\u0027] and"},{"line_number":311,"context_line":"            volume[\u0027attach_status\u0027] \u003d\u003d \"in-use\"):"},{"line_number":312,"context_line":"            # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":313,"context_line":"            # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":314,"context_line":"            # after that we can detach and connection_info is required for"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_e99f645d","line":311,"updated":"2015-12-17 12:25:50.000000000","message":"Should this not be updated to instead check if there is a recorded attachment id for this specific instance_uuid?\n\nI think the issue here is that this code will get use to re-attach a volume after a migrate, so in those cases you don\u0027t want to call the volume API.","commit_id":"d2c61c185f71541e750ac847f07877637f6567a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7c7942391f4c5c042eb1eaf66e6d376e9d22211","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        volume_id \u003d volume[\u0027id\u0027]"},{"line_number":259,"context_line":"        vol_multiattach \u003d volume.get(\u0027multiattach\u0027, False)"},{"line_number":260,"context_line":"        has_attachments \u003d volume.get(\u0027attachments\u0027)"},{"line_number":261,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        if vol_multiattach and has_attachments and not virt_multiattach:"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_610e1f36","line":260,"range":{"start_line":260,"start_character":26,"end_line":260,"end_character":51},"updated":"2016-01-12 21:22:31.000000000","message":"cast this to a bool?","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8c1066de9ba8901d35c94eb623789fc93cc4d8a","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        volume_id \u003d volume[\u0027id\u0027]"},{"line_number":259,"context_line":"        vol_multiattach \u003d volume.get(\u0027multiattach\u0027, False)"},{"line_number":260,"context_line":"        has_attachments \u003d volume.get(\u0027attachments\u0027)"},{"line_number":261,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        if vol_multiattach and has_attachments and not virt_multiattach:"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_d75a2c83","line":260,"range":{"start_line":260,"start_character":26,"end_line":260,"end_character":51},"in_reply_to":"da6ed579_610e1f36","updated":"2016-01-12 23:16:23.000000000","message":"Done","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"09231aee713753fdba2fd38be523e654452ef744","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        volume_id \u003d volume[\u0027id\u0027]"},{"line_number":259,"context_line":"        vol_multiattach \u003d volume.get(\u0027multiattach\u0027, False)"},{"line_number":260,"context_line":"        has_attachments \u003d volume.get(\u0027attachments\u0027)"},{"line_number":261,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        if vol_multiattach and has_attachments and not virt_multiattach:"},{"line_number":264,"context_line":"            raise exception.MultiattachNotSupported(volume_id\u003dvolume_id)"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_86bc896d","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":75},"updated":"2016-01-12 21:17:15.000000000","message":"I think this part belongs in the dependent change that adds the flag in the compute driver. Then *this* change is just about adding the support to the libvirt driver.","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8c1066de9ba8901d35c94eb623789fc93cc4d8a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        volume_id \u003d volume[\u0027id\u0027]"},{"line_number":259,"context_line":"        vol_multiattach \u003d volume.get(\u0027multiattach\u0027, False)"},{"line_number":260,"context_line":"        has_attachments \u003d volume.get(\u0027attachments\u0027)"},{"line_number":261,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        if vol_multiattach and has_attachments and not virt_multiattach:"},{"line_number":264,"context_line":"            raise exception.MultiattachNotSupported(volume_id\u003dvolume_id)"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_d7dd4c43","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":75},"in_reply_to":"da6ed579_86bc896d","updated":"2016-01-12 23:16:23.000000000","message":"The definition of the flag will be moved here.","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7c7942391f4c5c042eb1eaf66e6d376e9d22211","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        volume_status \u003d volume[\u0027attach_status\u0027]"},{"line_number":307,"context_line":"        if (volume_status \u003d\u003d \"detached\" or vol_multiattach and"},{"line_number":308,"context_line":"            volume_status \u003d\u003d \u0027attached\u0027):"},{"line_number":309,"context_line":"            # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":310,"context_line":"            # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":311,"context_line":"            # after that we can detach and connection_info is required for"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_c11d8b67","line":308,"range":{"start_line":307,"start_character":43,"end_line":308,"end_character":39},"updated":"2016-01-12 21:22:31.000000000","message":"nit: I\u0027d put these on the same line so they are a logical combo.","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8c1066de9ba8901d35c94eb623789fc93cc4d8a","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        volume_status \u003d volume[\u0027attach_status\u0027]"},{"line_number":307,"context_line":"        if (volume_status \u003d\u003d \"detached\" or vol_multiattach and"},{"line_number":308,"context_line":"            volume_status \u003d\u003d \u0027attached\u0027):"},{"line_number":309,"context_line":"            # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":310,"context_line":"            # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":311,"context_line":"            # after that we can detach and connection_info is required for"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_f7e090fc","line":308,"range":{"start_line":307,"start_character":43,"end_line":308,"end_character":39},"in_reply_to":"da6ed579_c11d8b67","updated":"2016-01-12 23:16:23.000000000","message":"Good point, thanks.\n\nDone","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"}],"nova/virt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2ff8ebcc9cc31f4495d8d9eb7d9e85be2f7e82f8","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"has_imagecache\": False,"},{"line_number":168,"context_line":"        \"supports_recreate\": False,"},{"line_number":169,"context_line":"        \"supports_migrate_to_same_host\": False,"},{"line_number":170,"context_line":"        \"supports_multiattach\": False"},{"line_number":171,"context_line":"    }"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def __init__(self, virtapi):"}],"source_content_type":"text/x-python","patch_set":75,"id":"da6ed579_1aaf8495","line":170,"updated":"2016-01-13 02:05:30.000000000","message":"We should also add a section to the hypervisor support matrix for this change since it\u0027s a new virt driver capability:\n\nhttp://docs.openstack.org/developer/nova/support-matrix.html\n\nAnd we\u0027d mark it as supported by libvirt (for the same libvirt entries that support attaching block devices), and then mark as not supported for all other virt drivers.","commit_id":"dbd9712db95825c68c78fc7184ae2b127bee7922"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"56d97c0c31719bc8f8b4c839420b23b8da995e75","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"has_imagecache\": False,"},{"line_number":168,"context_line":"        \"supports_recreate\": False,"},{"line_number":169,"context_line":"        \"supports_migrate_to_same_host\": False,"},{"line_number":170,"context_line":"        \"supports_multiattach\": False"},{"line_number":171,"context_line":"    }"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def __init__(self, virtapi):"}],"source_content_type":"text/x-python","patch_set":75,"id":"da6ed579_76580233","line":170,"in_reply_to":"da6ed579_1aaf8495","updated":"2016-01-13 12:57:36.000000000","message":"Done","commit_id":"dbd9712db95825c68c78fc7184ae2b127bee7922"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"18cff48f903f0a2e929c6c3b8f3eaa75b734c8aa","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        \"has_imagecache\": True,"},{"line_number":459,"context_line":"        \"supports_recreate\": True,"},{"line_number":460,"context_line":"        \"supports_migrate_to_same_host\": False,"},{"line_number":461,"context_line":"        \"supports_multiattach\": True"},{"line_number":462,"context_line":"    }"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_e61a256e","line":461,"range":{"start_line":461,"start_character":32,"end_line":461,"end_character":36},"updated":"2016-01-12 20:54:55.000000000","message":"This is conditional based on the version of libvirt. According to the libvirt domain docs, this depends on the shareable flag in the domain xml and that was added in libvirt 1.0.6, but the docs also say it wasn\u0027t working as expected until libvirt 1.2.2, so I\u0027m not sure why we don\u0027t have a libvirt min version check in here?","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8c1066de9ba8901d35c94eb623789fc93cc4d8a","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        \"has_imagecache\": True,"},{"line_number":459,"context_line":"        \"supports_recreate\": True,"},{"line_number":460,"context_line":"        \"supports_migrate_to_same_host\": False,"},{"line_number":461,"context_line":"        \"supports_multiattach\": True"},{"line_number":462,"context_line":"    }"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_3a304d9e","line":461,"range":{"start_line":461,"start_character":32,"end_line":461,"end_character":36},"in_reply_to":"da6ed579_0603b943","updated":"2016-01-12 23:16:23.000000000","message":"It\u0027s not included in the latest version of the spec amendment either.","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c25213ac0e8412d416bcb9f904aa83fc1975b2d2","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        \"has_imagecache\": True,"},{"line_number":459,"context_line":"        \"supports_recreate\": True,"},{"line_number":460,"context_line":"        \"supports_migrate_to_same_host\": False,"},{"line_number":461,"context_line":"        \"supports_multiattach\": True"},{"line_number":462,"context_line":"    }"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":74,"id":"da6ed579_0603b943","line":461,"range":{"start_line":461,"start_character":32,"end_line":461,"end_character":36},"in_reply_to":"da6ed579_e61a256e","updated":"2016-01-12 21:16:30.000000000","message":"danpb pointed out there isn\u0027t a min version required for this:\n\n\"You\u0027re are reading the wrong docs here. That \u0027shareable\u0027 flag doc you quote is the doc for the \u003chostdev\u003e device type, *not* the \u003cdisk\u003e device type. There is no min version requirement for the \u003cshareable\u003e flag wrt \u003cdisk\u003e devices\"","commit_id":"e4f9f93842a51cdbe03e5ae2ba9016329cf8f892"}],"nova/virt/libvirt/volume/volume.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d4e53fecb7c84f9560960a6dd0c9376920c220e3","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                     self).get_config(connection_info, disk_info)"},{"line_number":120,"context_line":"        conf.source_type \u003d \"block\""},{"line_number":121,"context_line":"        conf.source_path \u003d connection_info[\u0027data\u0027][\u0027device_path\u0027]"},{"line_number":122,"context_line":"        if connection_info.get(\u0027multiattach\u0027, False):"},{"line_number":123,"context_line":"            conf.shareable \u003d True"},{"line_number":124,"context_line":"        return conf"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_891100af","line":122,"updated":"2015-12-17 12:25:50.000000000","message":"What about over drivers that might need something similar.\n\nIt feels like we need to have a way for a Nova deployment to turn off multiattach, if its not \"allowed\". But I guess that should be an extra API policy, really.","commit_id":"d2c61c185f71541e750ac847f07877637f6567a5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a77530d0024cf1dd744dc5285c31f5c1ed174a20","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                     self).get_config(connection_info, disk_info)"},{"line_number":120,"context_line":"        conf.source_type \u003d \"block\""},{"line_number":121,"context_line":"        conf.source_path \u003d connection_info[\u0027data\u0027][\u0027device_path\u0027]"},{"line_number":122,"context_line":"        if connection_info.get(\u0027multiattach\u0027, False):"},{"line_number":123,"context_line":"            conf.shareable \u003d True"},{"line_number":124,"context_line":"        return conf"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3a7e1126_b10f5de0","line":122,"in_reply_to":"3a7e1126_891100af","updated":"2015-12-17 20:13:48.000000000","message":"I\u0027m not sure why we are doing this here.  The volume itself should be the source of truth.  Cinder doesn\u0027t populate the connection_info with that flag.   nova should look in the volume itself to see if it\u0027s multiattach flag is set to True.","commit_id":"d2c61c185f71541e750ac847f07877637f6567a5"}]}
