)]}'
{"doc/source/user/support-matrix.ini":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"422a13c80f679b68b753b08dea8d5304840a4b00","unresolved":false,"context_lines":[{"line_number":1320,"context_line":"driver-impl-libvirt-vz-ct\u003dunknown"},{"line_number":1321,"context_line":"driver-impl-powervm\u003dmissing"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"[operation.multiattach-volume]"},{"line_number":1324,"context_line":"title\u003dAttach block volume to multiple instances"},{"line_number":1325,"context_line":"status\u003doptional"},{"line_number":1326,"context_line":"notes\u003dThe multiattach volume operation is an extension to"}],"source_content_type":"text/x-properties","patch_set":61,"id":"df87a7cf_86f07569","line":1323,"updated":"2017-12-05 20:21:11.000000000","message":"We should probably move this to the last change in the series that enables things in the API.","commit_id":"7fe6540cd084c57fd81bffd1e97e39d68df81b66"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"0d1b68a55379c25cc1ac958e033e5c88b71ecebb","unresolved":false,"context_lines":[{"line_number":1320,"context_line":"driver-impl-libvirt-vz-ct\u003dunknown"},{"line_number":1321,"context_line":"driver-impl-powervm\u003dmissing"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"[operation.multiattach-volume]"},{"line_number":1324,"context_line":"title\u003dAttach block volume to multiple instances"},{"line_number":1325,"context_line":"status\u003doptional"},{"line_number":1326,"context_line":"notes\u003dThe multiattach volume operation is an extension to"}],"source_content_type":"text/x-properties","patch_set":61,"id":"df87a7cf_1668971a","line":1323,"in_reply_to":"df87a7cf_86f07569","updated":"2017-12-11 15:30:14.000000000","message":"So it\u0027s tricky as once the libvirt change gets merged if a volume is marked as multi-attach caching will be turned off. So if we don\u0027t add this here then I guess a release note or something should still be added to note that change. What\u0027s your preference on this one?","commit_id":"7fe6540cd084c57fd81bffd1e97e39d68df81b66"}],"nova/compute/api.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5c5313953288dd5bf938d9203344351744e5c1c2","unresolved":false,"context_lines":[{"line_number":1471,"context_line":"                requested_networks, block_device_mapping, forced_host,"},{"line_number":1472,"context_line":"                forced_node)"},{"line_number":1473,"context_line":""},{"line_number":1474,"context_line":"        if block_device_mapping:"},{"line_number":1475,"context_line":"            for bdm in block_device_mapping:"},{"line_number":1476,"context_line":"                if (bdm.get(\u0027boot_index\u0027) \u003d\u003d 0 and"},{"line_number":1477,"context_line":"                    bdm.get(\u0027source_type\u0027) \u003d\u003d \u0027volume\u0027 and"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_15042abe","line":1474,"range":{"start_line":1474,"start_character":11,"end_line":1474,"end_character":31},"updated":"2016-01-21 16:49:22.000000000","message":"Will be moved to the REST API patch in the next patch set.","commit_id":"c53ccf533dc97053c42458f741deee1d433fb152"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"79b4fcb5e2b9f516bd8c66aeb0af51906a5932e9","unresolved":false,"context_lines":[{"line_number":1418,"context_line":"            volume \u003d self.volume_api.get(context, vol_id)"},{"line_number":1419,"context_line":"            volume_status \u003d volume[\u0027status\u0027]"},{"line_number":1420,"context_line":"            if volume_status not in [\u0027creating\u0027, \u0027downloading\u0027]:"},{"line_number":1421,"context_line":"                if volume_status \u003d\u003d \u0027available\u0027 or volume_status \u003d\u003d \u0027in-use\u0027:"},{"line_number":1422,"context_line":"                    return attempt"},{"line_number":1423,"context_line":"                LOG.warning(_LW(\"Volume id: %(vol_id)s finished being \""},{"line_number":1424,"context_line":"                                \"created but its status is %(vol_status)s.\"),"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a68dd71_5945f4b0","line":1421,"range":{"start_line":1421,"start_character":48,"end_line":1421,"end_character":76},"updated":"2016-01-21 19:41:10.000000000","message":"This is probably not necessary. This method is used as the wait_func passed to the nova.virt.block_device attach method from _prep_block_device_mappings and is used in the case of source_type\u003dblank/image/snapshot, where nova calls off to cinder to create the volume.\n\nIn that case, nova is waiting for the volume to be available so it can then call os-attach to attach the newly created volume to the instance. So it shouldn\u0027t be in-use until after that happens, and it wouldn\u0027t be multiattach\u003dTrue b/c nova is creating it in the BFV case.","commit_id":"42fbe739a97cfd4758faaf8a79276e4692c95194"}],"nova/exception.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5c5313953288dd5bf938d9203344351744e5c1c2","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                \"volume %(volume_id)s\")"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"class BootFromMultiattachVolumeNotSupported(Invalid):"},{"line_number":323,"context_line":"    msg_fmt \u003d _(\"Boot failed for volume %(volume_id)s. Boot from volume \""},{"line_number":324,"context_line":"                \"is not supported for multi-attach volumes.\")"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_75ca4670","line":322,"range":{"start_line":322,"start_character":6,"end_line":322,"end_character":43},"updated":"2016-01-21 16:49:22.000000000","message":"Will be moved to the REST API patch in the next patch set.","commit_id":"c53ccf533dc97053c42458f741deee1d433fb152"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"74e0a9c2f268c0009707847cba701009e5c619d8","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"class MultiattachNotSupportedByVirtDriver(Invalid):"},{"line_number":254,"context_line":"    msg_fmt \u003d _(\"Volume %(volume_id)s has \u0027multiattach\u0027 set, \""},{"line_number":255,"context_line":"                \"which is not supported by this compute driver.\")"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"class VolumeNotCreated(NovaException):"}],"source_content_type":"text/x-python","patch_set":82,"id":"9f91af0f_97e37334","line":255,"range":{"start_line":255,"start_character":40,"end_line":255,"end_character":62},"updated":"2018-01-09 02:58:14.000000000","message":"We should probably word this a bit more generically so we can re-use it in the API changes. So change this to:\n\n\"for this instance\"\n\nI\u0027m looking at VolumeTaggedAttachNotSupported for a template.","commit_id":"dae41035adb90e21afe7a4f754c4bc7cccde74d8"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1a89c3d5ee74d0bf26cc7eda5eb4e96f8a20adf0","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    # 409 HTTPConflict error in the API since we expect all virt drivers to"},{"line_number":257,"context_line":"    # eventually support multiattach volumes."},{"line_number":258,"context_line":"    msg_fmt \u003d _(\"Volume %(volume_id)s has \u0027multiattach\u0027 set, \""},{"line_number":259,"context_line":"                \"which is not supported for this instance.\")"},{"line_number":260,"context_line":"    code \u003d 409"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":83,"id":"9f91af0f_866a5eea","line":259,"range":{"start_line":259,"start_character":40,"end_line":259,"end_character":57},"updated":"2018-01-09 11:59:05.000000000","message":"Hmm, I think saying instance here is misleading as well. I mean multiattach is either not supported by the virt driver that\u0027s chosen for the whole env OR it\u0027s not supported on the given host as it happens to be a heterogeneous environment. But in either case I don\u0027t really see how the instance comes here.\n\nIt\u0027s nit picking though, agreed on the \u0027409\u0027.","commit_id":"7632d22c53bccbbab29c75add16340ee4c5a88a0"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"96e4c98aa8e8ab601e98802a5006c19178d39594","unresolved":false,"context_lines":[{"line_number":2396,"context_line":"        def fake_volume_get(context, volume_id):"},{"line_number":2397,"context_line":"            return {\u0027volume_id\u0027: volume_id, \u0027multiattach\u0027: True}"},{"line_number":2398,"context_line":""},{"line_number":2399,"context_line":"        self.stubs.Set(self.compute_api.volume_api, \u0027get\u0027,"},{"line_number":2400,"context_line":"                       fake_volume_get)"},{"line_number":2401,"context_line":""},{"line_number":2402,"context_line":"        self.assertRaises(exception.BootFromMultiattachVolumeNotSupported,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_a2164bef","line":2399,"updated":"2016-01-21 15:24:58.000000000","message":"Could you use the new stub_out feature here instead of stubs?\n\nhttps://review.openstack.org/#/c/259096/\n\nas that seems to be the new cool","commit_id":"c53ccf533dc97053c42458f741deee1d433fb152"}],"nova/tests/unit/fake_volume.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5c5313953288dd5bf938d9203344351744e5c1c2","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.volume_list \u003d [v for v in self.volume_list"},{"line_number":183,"context_line":"                            if v[\u0027id\u0027] !\u003d volume_id]"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def check_attach(self, context, volume, instance\u003dNone):"},{"line_number":186,"context_line":"        # Cinder supports multi-attach when a volume"},{"line_number":187,"context_line":"        # has been marked as multiattach"},{"line_number":188,"context_line":"        if volume.get(\u0027multiattach\u0027, False):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_95dd7a44","line":185,"range":{"start_line":185,"start_character":8,"end_line":185,"end_character":20},"updated":"2016-01-21 16:49:22.000000000","message":"Will be moved to the REST API patch in the next patch set.","commit_id":"c53ccf533dc97053c42458f741deee1d433fb152"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ecbfa8c685c77af3971f5b802f1d94aeedfce957","unresolved":false,"context_lines":[{"line_number":1123,"context_line":"        \"\"\""},{"line_number":1124,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1125,"context_line":"        drvr.init_host(\"dummyhost\")"},{"line_number":1126,"context_line":"        self.assertFalse(drvr.capabilities[\u0027supports_multiattach\u0027])"},{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"    def _do_test_parse_migration_flags(self, lm_expected\u003dNone,"},{"line_number":1129,"context_line":"                                       bm_expected\u003dNone):"}],"source_content_type":"text/x-python","patch_set":81,"id":"9f91af0f_9a098b32","line":1126,"range":{"start_line":1126,"start_character":8,"end_line":1126,"end_character":67},"updated":"2018-01-05 18:34:03.000000000","message":"This is randomly failing...only thing I can think is something with the mocks on fakelibvirt.","commit_id":"82da72541e1b4b57fedc40f5707f8e7b21943ee1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cd85df2c644aecbc2381ec7a6c9e462069bf93a1","unresolved":false,"context_lines":[{"line_number":19517,"context_line":"                 mock.call(hv_ver\u003d(2, 10, 0))]"},{"line_number":19518,"context_line":"        min_ver.assert_has_calls(calls)"},{"line_number":19519,"context_line":""},{"line_number":19520,"context_line":"    # FIXME(mriedem): This test intermittently fails when run at the same time"},{"line_number":19521,"context_line":"    # as LibvirtConnTestCase, presumably because of shared global state on the"},{"line_number":19522,"context_line":"    # version check."},{"line_number":19523,"context_line":"    # @mock.patch(\u0027nova.virt.libvirt.host.Host.has_min_version\u0027,"}],"source_content_type":"text/x-python","patch_set":83,"id":"9f91af0f_dced8ef0","line":19520,"updated":"2018-01-09 15:41:16.000000000","message":"https://wiki.openstack.org/wiki/Testr#Reproducing_Failures","commit_id":"7632d22c53bccbbab29c75add16340ee4c5a88a0"}],"nova/tests/unit/virt/test_block_device.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"025ebcc2d396904a807d53467b50d8c2b34e5380","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                            driver_attach\u003dFalse, fail_driver_attach\u003dFalse,"},{"line_number":430,"context_line":"                            volume_attach\u003dTrue, fail_volume_attach\u003dFalse,"},{"line_number":431,"context_line":"                            access_mode\u003d\u0027rw\u0027, availability_zone\u003dNone,"},{"line_number":432,"context_line":"                            multiattach\u003dFalse, driver_multi_attach\u003dFalse,"},{"line_number":433,"context_line":"                            fail_with_virt_driver\u003dFalse):"},{"line_number":434,"context_line":"        if driver_multi_attach:"},{"line_number":435,"context_line":"            self.virt_driver.capabilities[\u0027supports_multiattach\u0027] \u003d True"},{"line_number":436,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":63,"id":"df87a7cf_7af06268","line":433,"range":{"start_line":432,"start_character":28,"end_line":433,"end_character":55},"updated":"2017-12-05 23:50:19.000000000","message":"You have no tests that set any of these to True to actually exercise the new code.","commit_id":"a3553874e01a61f7e326c9e994180363085a7085"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"9ce6fecc88e069f39558cac14b8ef3e64452d058","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                            driver_attach\u003dFalse, fail_driver_attach\u003dFalse,"},{"line_number":430,"context_line":"                            volume_attach\u003dTrue, fail_volume_attach\u003dFalse,"},{"line_number":431,"context_line":"                            access_mode\u003d\u0027rw\u0027, availability_zone\u003dNone,"},{"line_number":432,"context_line":"                            multiattach\u003dFalse, driver_multi_attach\u003dFalse,"},{"line_number":433,"context_line":"                            fail_with_virt_driver\u003dFalse):"},{"line_number":434,"context_line":"        if driver_multi_attach:"},{"line_number":435,"context_line":"            self.virt_driver.capabilities[\u0027supports_multiattach\u0027] \u003d True"},{"line_number":436,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":63,"id":"df87a7cf_42db757c","line":433,"range":{"start_line":432,"start_character":28,"end_line":433,"end_character":55},"in_reply_to":"df87a7cf_7af06268","updated":"2017-12-13 17:31:20.000000000","message":"Got lost in a rebase a while ago, added it back now. Thanks for catching this.","commit_id":"a3553874e01a61f7e326c9e994180363085a7085"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4dacfaf16edc6b8a60fcb13a2ba563dfbc3a28b1","unresolved":false,"context_lines":[{"line_number":1248,"context_line":"                test_bdm, self.volume_bdm, volume, multiattach\u003dTrue,"},{"line_number":1249,"context_line":"                driver_multi_attach\u003dTrue)"},{"line_number":1250,"context_line":""},{"line_number":1251,"context_line":"        self.mox.ReplayAll()"},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"        test_bdm.attach(self.context, instance,"},{"line_number":1254,"context_line":"                        self.volume_api, self.virt_driver)"}],"source_content_type":"text/x-python","patch_set":86,"id":"7f96bb07_8dcd71b8","line":1251,"updated":"2018-01-18 11:25:11.000000000","message":"I\u0027m not a fan of using mox for new tests, but given you use _test_volume_attach, fine by me (or it would need to modify more)","commit_id":"d0d3d65d773dbeafe2031db0f5fd68656ba62611"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4dacfaf16edc6b8a60fcb13a2ba563dfbc3a28b1","unresolved":false,"context_lines":[{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"        self.assertRaises(exception.MultiattachNotSupportedByVirtDriver,"},{"line_number":1275,"context_line":"                          test_bdm.attach, self.context, instance,"},{"line_number":1276,"context_line":"                          self.volume_api, self.virt_driver)"}],"source_content_type":"text/x-python","patch_set":86,"id":"7f96bb07_ede4353e","line":1276,"updated":"2018-01-18 11:25:11.000000000","message":"all good","commit_id":"d0d3d65d773dbeafe2031db0f5fd68656ba62611"}],"nova/virt/block_device.py":[{"author":{"_account_id":17386,"name":"Steve Noyes","email":"steve.noyes@oracle.com","username":"ssn1ssn"},"change_message_id":"547070605838301a363c7d008360bc793c3753cd","unresolved":false,"context_lines":[{"line_number":381,"context_line":"            connection_info[\u0027serial\u0027] \u003d self.volume_id"},{"line_number":382,"context_line":"        self._preserve_multipath_id(connection_info)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        if vol_multiattach and virt_multiattach:"},{"line_number":385,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        # If do_driver_attach is False, we will attach a volume to an instance"}],"source_content_type":"text/x-python","patch_set":37,"id":"ff346bd7_485243e0","line":384,"updated":"2017-07-26 14:16:52.000000000","message":"since you already checked virt_multiattach above, this can just be \u0027if vol_multiattach:\u0027","commit_id":"bdd9103ac8af4e48737c3d139cd6226efbb5d172"},{"author":{"_account_id":17386,"name":"Steve Noyes","email":"steve.noyes@oracle.com","username":"ssn1ssn"},"change_message_id":"034db091b2586d1abfcee493104460e760799078","unresolved":false,"context_lines":[{"line_number":381,"context_line":"            connection_info[\u0027serial\u0027] \u003d self.volume_id"},{"line_number":382,"context_line":"        self._preserve_multipath_id(connection_info)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        if vol_multiattach and virt_multiattach:"},{"line_number":385,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        # If do_driver_attach is False, we will attach a volume to an instance"}],"source_content_type":"text/x-python","patch_set":38,"id":"5f2577a7_476cf207","line":384,"updated":"2017-09-08 20:02:32.000000000","message":"This can be just:\n\nif vol_multiattach:\n\nsince if virt_multiattach is false, it would have raised on line 373.","commit_id":"8027123b9a71382306a046f16e10d93978b101e9"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ef9e8280d323030228ee769a4c904d6dc80f1934","unresolved":false,"context_lines":[{"line_number":381,"context_line":"            connection_info[\u0027serial\u0027] \u003d self.volume_id"},{"line_number":382,"context_line":"        self._preserve_multipath_id(connection_info)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        if vol_multiattach and virt_multiattach:"},{"line_number":385,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        # If do_driver_attach is False, we will attach a volume to an instance"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_94be3763","line":384,"in_reply_to":"5f2577a7_476cf207","updated":"2017-10-21 16:09:49.000000000","message":"Done","commit_id":"8027123b9a71382306a046f16e10d93978b101e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb4183387e6a3596cc8b7dc01d8cb85fd452773e","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                              volume_api, virt_driver,"},{"line_number":363,"context_line":"                              do_driver_attach\u003dFalse):"},{"line_number":364,"context_line":"        volume_id \u003d volume[\u0027id\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        connection_info \u003d volume_api.initialize_connection(context,"},{"line_number":367,"context_line":"                                                           volume_id,"},{"line_number":368,"context_line":"                                                           connector)"}],"source_content_type":"text/x-python","patch_set":60,"id":"df87a7cf_460eed8d","side":"PARENT","line":365,"updated":"2017-12-05 20:19:44.000000000","message":"unrelated","commit_id":"71ed107f366a0025dc3a9bc2a401c2b1f65442ba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb4183387e6a3596cc8b7dc01d8cb85fd452773e","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        mode \u003d \u0027rw\u0027"},{"line_number":397,"context_line":"        if \u0027data\u0027 in connection_info:"},{"line_number":398,"context_line":"            mode \u003d connection_info[\u0027data\u0027].get(\u0027access_mode\u0027, \u0027rw\u0027)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        if volume[\u0027attach_status\u0027] \u003d\u003d \"detached\":"},{"line_number":401,"context_line":"            # NOTE(mriedem): save our current state so connection_info is in"},{"line_number":402,"context_line":"            # the database before the volume status goes to \u0027in-use\u0027 because"}],"source_content_type":"text/x-python","patch_set":60,"id":"df87a7cf_6611b1ac","line":399,"updated":"2017-12-05 20:19:44.000000000","message":"unrelated","commit_id":"15d879723b978a689e94dd277a4b6335da89448f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb4183387e6a3596cc8b7dc01d8cb85fd452773e","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        if vol_multiattach and not virt_multiattach:"},{"line_number":444,"context_line":"            raise exception.MultiattachNotSupported(volume_id\u003dvolume_id)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        connector[\u0027mount_device\u0027] \u003d self[\u0027mount_device\u0027]"},{"line_number":447,"context_line":"        LOG.debug(\"Updating existing attachment record: %s\","}],"source_content_type":"text/x-python","patch_set":60,"id":"df87a7cf_a67c99eb","line":444,"updated":"2017-12-05 20:19:44.000000000","message":"The error message for this doesn\u0027t fit the scenario here:\n\n\"Volume %(volume_id)s is already attached, \"\n                \"multi-attach is not supported by the virt driver.\"\n\nThis volume isn\u0027t already attached, at least not from what we know when we\u0027re checking this.","commit_id":"15d879723b978a689e94dd277a4b6335da89448f"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"2210d79c139bc4340e0b4530b0744bb5f689bcd9","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        if vol_multiattach and not virt_multiattach:"},{"line_number":444,"context_line":"            raise exception.MultiattachNotSupported(volume_id\u003dvolume_id)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        connector[\u0027mount_device\u0027] \u003d self[\u0027mount_device\u0027]"},{"line_number":447,"context_line":"        LOG.debug(\"Updating existing attachment record: %s\","}],"source_content_type":"text/x-python","patch_set":60,"id":"df87a7cf_a6cc8261","line":444,"in_reply_to":"df87a7cf_a67c99eb","updated":"2017-12-06 14:51:21.000000000","message":"Do you want a new error for this case or just an update to the error message?","commit_id":"15d879723b978a689e94dd277a4b6335da89448f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f9934a0c6ba53ff730a2eaa76c77648c7fbdbac","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        if vol_multiattach and not virt_multiattach:"},{"line_number":444,"context_line":"            raise exception.MultiattachNotSupported(volume_id\u003dvolume_id)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        connector[\u0027mount_device\u0027] \u003d self[\u0027mount_device\u0027]"},{"line_number":447,"context_line":"        LOG.debug(\"Updating existing attachment record: %s\","}],"source_content_type":"text/x-python","patch_set":60,"id":"df87a7cf_7895b33f","line":444,"in_reply_to":"df87a7cf_a6cc8261","updated":"2017-12-06 17:58:27.000000000","message":"If there is no other usage of MultiattachNotSupported then you would just update the error message. I don\u0027t know where else this is used though.","commit_id":"15d879723b978a689e94dd277a4b6335da89448f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3d1bda158006b23572b47fd444f8c981c857af0e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                              instance\u003dinstance)"},{"line_number":290,"context_line":"                volume_api.roll_detaching(context, volume_id)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def detach(self, context, instance, volume_api, virt_driver,"},{"line_number":293,"context_line":"               attachment_id\u003dNone, destroy_bdm\u003dFalse):"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        connector \u003d virt_driver.get_volume_connector(instance)"}],"source_content_type":"text/x-python","patch_set":61,"id":"df87a7cf_e6a62154","line":292,"updated":"2017-12-05 20:24:28.000000000","message":"Somewhere in the detach flow we need to check for the shared_targets flag and do our locking, right?","commit_id":"7fe6540cd084c57fd81bffd1e97e39d68df81b66"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"9ce6fecc88e069f39558cac14b8ef3e64452d058","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                              instance\u003dinstance)"},{"line_number":290,"context_line":"                volume_api.roll_detaching(context, volume_id)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def detach(self, context, instance, volume_api, virt_driver,"},{"line_number":293,"context_line":"               attachment_id\u003dNone, destroy_bdm\u003dFalse):"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        connector \u003d virt_driver.get_volume_connector(instance)"}],"source_content_type":"text/x-python","patch_set":61,"id":"df87a7cf_568cdfd5","line":292,"in_reply_to":"df87a7cf_e6a62154","updated":"2017-12-13 17:31:20.000000000","message":"Yes, we should. As I raised it earlier, if we could do that in a separate patch that would be great to make reviewing easier.","commit_id":"7fe6540cd084c57fd81bffd1e97e39d68df81b66"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"c97b4659017ada09c2f2410b8fb4b7a49829d281","unresolved":false,"context_lines":[{"line_number":456,"context_line":"            connection_info[\u0027serial\u0027] \u003d self.volume_id"},{"line_number":457,"context_line":"        self._preserve_multipath_id(connection_info)"},{"line_number":458,"context_line":"        if vol_multiattach:"},{"line_number":459,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        if do_driver_attach:"},{"line_number":462,"context_line":"            encryption \u003d encryptors.get_encryption_metadata("}],"source_content_type":"text/x-python","patch_set":70,"id":"df87a7cf_adad76eb","line":459,"range":{"start_line":459,"start_character":12,"end_line":459,"end_character":49},"updated":"2017-12-14 16:43:14.000000000","message":"There was a concern at some point whether this is the best way to pass the info to the virt driver. I think it\u0027s fine, but wanted to post the question once again as this patch has been sleeping for a while to see whether it is still something that we would need to discuss?","commit_id":"3a8ee7793e548bf28f460fe16e3ca46b835a91f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8748ec80b9ad27acb91eea0708366f0c109fded7","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        volume_id \u003d self.volume_id"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        # TODO(ildikov): handle shared_targets lock for multiattach"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        # Only attempt to detach and disconnect from the volume if the instance"},{"line_number":315,"context_line":"        # is currently associated with the local compute host."}],"source_content_type":"text/x-python","patch_set":74,"id":"9f91af0f_e3caa518","line":312,"updated":"2018-01-03 22:26:51.000000000","message":"This is handled in the patch before this one in the series, so you can remove the TODO.","commit_id":"071bad91419846e278c6b4caf7044b8f3f34796a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e8698c8e0ef56f53cd76491ec59e62f82fb5828","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        virt_multiattach \u003d virt_driver.capabilities[\u0027supports_multiattach\u0027]"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        if vol_multiattach and not virt_multiattach:"},{"line_number":480,"context_line":"            raise exception.MultiattachNotSupportedByVirtDriver("},{"line_number":481,"context_line":"                      volume_id\u003dvolume_id)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        LOG.debug(\"Updating existing volume attachment record: %s\","}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_c8e44caf","line":480,"updated":"2018-01-04 15:51:31.000000000","message":"Hit this as expected in the latest round of testing:\n\nFailed as I had expected since qemu is too new and libvirt is too old so multiattach isn\u0027t supported:\n\nhttp://logs.openstack.org/33/266633/4/check/tempest-full/2bc409b/controller/logs/screen-n-cpu.txt\n\nJan 04 05:21:35.963005 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [None req-c6369287-ba09-40a3-97ff-cba03d04828c tempest-AttachVolumeMultiAttachTest-1388002618 tempest-AttachVolumeMultiAttachTest-1388002618] [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661] Failed to attach a5ee3b3f-f856-4c24-8905-bb31c92e7b9e at /dev/vdb: MultiattachNotSupportedByVirtDriver: Volume a5ee3b3f-f856-4c24-8905-bb31c92e7b9e has \u0027multi-attach\u0027 set, which is not supported by the virt driver.\nJan 04 05:21:35.963188 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661] Traceback (most recent call last):\nJan 04 05:21:35.963305 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]   File \"/opt/stack/nova/nova/compute/manager.py\", line 5222, in _attach_volume\nJan 04 05:21:35.963421 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]     do_driver_attach\u003dTrue)\nJan 04 05:21:35.963565 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]   File \"/opt/stack/nova/nova/virt/block_device.py\", line 46, in wrapped\nJan 04 05:21:35.963751 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]     ret_val \u003d method(obj, context, *args, **kwargs)\nJan 04 05:21:35.963871 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]   File \"/opt/stack/nova/nova/virt/block_device.py\", line 587, in attach\nJan 04 05:21:35.963992 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]     virt_driver, do_driver_attach)\nJan 04 05:21:35.964121 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]   File \"/opt/stack/nova/nova/virt/block_device.py\", line 565, in _do_attach\nJan 04 05:21:35.964231 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]     do_driver_attach)\nJan 04 05:21:35.964347 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]   File \"/opt/stack/nova/nova/virt/block_device.py\", line 481, in _volume_attach\nJan 04 05:21:35.964456 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661]     volume_id\u003dvolume_id)\nJan 04 05:21:35.964644 ubuntu-xenial-citycloud-sto2-0001676569 nova-compute[12151]: ERROR nova.compute.manager [instance: 73daeb1b-8c05-42a5-bf42-a36f6331a661] MultiattachNotSupportedByVirtDriver: Volume a5ee3b3f-f856-4c24-8905-bb31c92e7b9e has \u0027multi-attach\u0027 set, which is not supported by the virt driver.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"312c8661e7010c69d871ac38abcb066da24809cf","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        if vol_multiattach:"},{"line_number":492,"context_line":"            # This will be used by the volume driver to determine the proper"},{"line_number":493,"context_line":"            # disk configuration."},{"line_number":494,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        if do_driver_attach:"},{"line_number":497,"context_line":"            encryption \u003d encryptors.get_encryption_metadata("}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_3520b1b0","line":494,"updated":"2018-01-04 15:34:08.000000000","message":"Please can we not do this? connection_info is a supposedly opaque blob of data from cinder. Ideally Nova wouldn\u0027t even read from it, leaving that entirely to os-brick. We certainly shouldn\u0027t be writing to it. connection_info should be something we can arbitrarily refresh from cinder, and we can\u0027t do that if we change it.\n\nThere is only 1 other instance where we do this: we set data/device_path on mount. We don\u0027t even need to do this, and ideally it will also die.\n\nWhat do we know about this field? We are we only reading for the first time at attach time? Can it change over the life of a volume? If it\u0027s static, could we not add it to the BDM (would require a new field) when we create it?\n\nOr something else. But please lets not stash things in connection_info.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e2b6431a9cf85e660eb4d9b21b4c417b17262ed9","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        if vol_multiattach:"},{"line_number":492,"context_line":"            # This will be used by the volume driver to determine the proper"},{"line_number":493,"context_line":"            # disk configuration."},{"line_number":494,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        if do_driver_attach:"},{"line_number":497,"context_line":"            encryption \u003d encryptors.get_encryption_metadata("}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_68874011","line":494,"in_reply_to":"9f91af0f_3520b1b0","updated":"2018-01-04 15:41:37.000000000","message":"I agree this isn\u0027t ideal. I don\u0027t really want to persist it on the BDM record itself, because that\u0027s just more state duplication between the cinder and nova DBs and we should get the multiattach value from the volume whenever we need to know, rather than rely on the BDM.\n\nI think in this case, we could pass a multiattach arg down to driver.attach_volume which will pass it through to get_config, but as noted there might be other scenarios outside of attach_volume that get_config needs to know if it\u0027s multiattach, like live migration I think, so it will need some investigation.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a6b0d829bd2801dce12d3ed1cae5d478cc249ec5","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        if vol_multiattach:"},{"line_number":492,"context_line":"            # This will be used by the volume driver to determine the proper"},{"line_number":493,"context_line":"            # disk configuration."},{"line_number":494,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        if do_driver_attach:"},{"line_number":497,"context_line":"            encryption \u003d encryptors.get_encryption_metadata("}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_938d107d","line":494,"in_reply_to":"9f91af0f_68874011","updated":"2018-01-04 19:44:50.000000000","message":"(1:40:56 PM) mriedem: mdbooth: i was looking at where _get_volume_config is used and it\u0027s used in quite a few places in the libvirt driver, like live migration, swap volume, and generally anywhere we build a guest xml, so also for resize/cold migrate,\n(1:41:13 PM) mriedem: and in a lot of those places, we don\u0027t have a volume to know if it\u0027s multiattach or not to set the conf.shareable flag,\n(1:41:40 PM) mriedem: so despite it not being great, stashing the multiattach value in the connection_info which gets saved in the bdm is about the best we can do right now\n(1:41:59 PM) mriedem: because all of these places in the driver that call _get_volume_config are using the connection_info off the bdm\n\nLong-term we could look at storing the multiattach flag directly on the bdm record but that\u0027s going to require a schema migration and data migration, which is not something we\u0027ll have time for in Queens I\u0027m afraid.\n\nAs for whether or not the volume.multiattach value can change, I think the answer is \u0027not while the volume is in-use\u0027 per the cinder spec:\n\nhttps://review.openstack.org/#/c/523608/\n\nAnd if the volume is not in use, it means it should have been detached from an instance at which point we\u0027d delete the associated BDM.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"1a89c3d5ee74d0bf26cc7eda5eb4e96f8a20adf0","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        if vol_multiattach:"},{"line_number":492,"context_line":"            # This will be used by the volume driver to determine the proper"},{"line_number":493,"context_line":"            # disk configuration."},{"line_number":494,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        if do_driver_attach:"},{"line_number":497,"context_line":"            encryption \u003d encryptors.get_encryption_metadata("}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_d1057e12","line":494,"in_reply_to":"9f91af0f_938d107d","updated":"2018-01-09 11:59:05.000000000","message":"+1","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"312c8661e7010c69d871ac38abcb066da24809cf","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        # the database before the volume status goes to \u0027in-use\u0027 because"},{"line_number":517,"context_line":"        # after that we can detach and connection_info is required for"},{"line_number":518,"context_line":"        # detach."},{"line_number":519,"context_line":"        # TODO(mriedem): Technically for the new flow, we shouldn\u0027t have to"},{"line_number":520,"context_line":"        # rely on the BlockDeviceMapping.connection_info since it\u0027s stored"},{"line_number":521,"context_line":"        # with the attachment in Cinder (see refresh_connection_info)."},{"line_number":522,"context_line":"        # Therefore we should phase out code that relies on the"},{"line_number":523,"context_line":"        # BDM.connection_info and get it from Cinder if it\u0027s needed."},{"line_number":524,"context_line":"        self[\u0027connection_info\u0027] \u003d connection_info"},{"line_number":525,"context_line":"        self.save()"},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_c84a0c54","line":523,"range":{"start_line":519,"start_character":0,"end_line":523,"end_character":68},"updated":"2018-01-04 15:34:08.000000000","message":"See above. We don\u0027t want to be adding new mutations to our local copy of connection_info.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a588849779de87ce096d549c5ab10285567eb8b9","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        if vol_multiattach:"},{"line_number":492,"context_line":"            # This will be used by the volume driver to determine the proper"},{"line_number":493,"context_line":"            # disk configuration."},{"line_number":494,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        if do_driver_attach:"},{"line_number":497,"context_line":"            encryption \u003d encryptors.get_encryption_metadata("}],"source_content_type":"text/x-python","patch_set":79,"id":"9f91af0f_dce2c501","line":494,"updated":"2018-01-04 22:18:15.000000000","message":"Looking at https://review.openstack.org/#/c/531244/1/nova/compute/manager.py - we could/should set the multiattach value on the bdm record long-term, like we do for tags. That would essentially be the same as stashing it in connection_info. We\u0027d still have quite a bit of refactoring to do by passing an explicit mulitattach flag to the volume driver get_config methods, but that\u0027s not too terrible. We\u0027d likely also need to update the MigrateData object used during live migration.","commit_id":"74d86e43293f0eaee99782d7b3a948bfe1fe7877"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06ac26540019e7e58f5c3ef1e22d4523b62da9e7","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            # needs to get a block device disk config, like spawn/migrate/swap"},{"line_number":522,"context_line":"            # and the LibvirtLiveMigrateBDMInfo would also need to store the"},{"line_number":523,"context_line":"            # value."},{"line_number":524,"context_line":"            connection_info[\u0027multiattach\u0027] \u003d True"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        if do_driver_attach:"},{"line_number":527,"context_line":"            encryption \u003d encryptors.get_encryption_metadata("}],"source_content_type":"text/x-python","patch_set":84,"id":"7f96bb07_9dd566bc","line":524,"updated":"2018-01-11 15:50:59.000000000","message":"See L48 here:\n\nhttps://etherpad.openstack.org/p/multi-attach-volume-queens\n\nBecause swap volume doesn\u0027t go through this path, if we\u0027re swapping to a multiattach volume, the connection_info for that volume won\u0027t have the shareable flag set in it\u0027s volume disk config xml when we swap in the guest. So we need essentially this same check in the _swap_volume method in the ComputeManager.","commit_id":"e3ef602392ed7ecd70eec778da2b001c3fcde750"}],"nova/virt/fake.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb4183387e6a3596cc8b7dc01d8cb85fd452773e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        \"supports_tagged_attach_interface\": True,"},{"line_number":130,"context_line":"        \"supports_tagged_attach_volume\": True,"},{"line_number":131,"context_line":"        \"supports_extend_volume\": True,"},{"line_number":132,"context_line":"        \"supports_multiattach\": False"},{"line_number":133,"context_line":"        }"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    # Since we don\u0027t have a real hypervisor, pretend we have lots of"}],"source_content_type":"text/x-python","patch_set":60,"id":"df87a7cf_c6767d07","line":132,"updated":"2017-12-05 20:19:44.000000000","message":"The fake virt driver should support everything.","commit_id":"15d879723b978a689e94dd277a4b6335da89448f"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"42df7b8bd2c8eb96a33f008f06e4900d57f08637","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        \"supports_tagged_attach_interface\": True,"},{"line_number":307,"context_line":"        \"supports_tagged_attach_volume\": True,"},{"line_number":308,"context_line":"        \"supports_extend_volume\": True,"},{"line_number":309,"context_line":"        \"supports_multiattach\": True"},{"line_number":310,"context_line":"    }"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_2a737a4f","line":309,"range":{"start_line":309,"start_character":32,"end_line":309,"end_character":36},"updated":"2018-01-04 14:57:34.000000000","message":"Based on https://bugzilla.redhat.com/show_bug.cgi?id\u003d1415250 we will have to set this to False if qemu\u003e\u003d2.10 and libvirt\u003c3.10.","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"888ef3af956e7f58cf50338a4562014379e145c1","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        # qemu\u003c2.10 or qemu\u003e\u003d2.10 and libvirt\u003e\u003d3.10. So check those versions"},{"line_number":559,"context_line":"        # here and set the capability appropriately."},{"line_number":560,"context_line":"        # TODO(mriedem): Add some tests for this logic."},{"line_number":561,"context_line":"        if (self._host.has_min_version(lv_ver\u003d(3, 10, 0)) or"},{"line_number":562,"context_line":"                not self._host.has_min_version(hv_ver\u003d(2, 10, 0))):"},{"line_number":563,"context_line":"            LOG.debug(\u0027Volume multiattach is not supported based on current \u0027"},{"line_number":564,"context_line":"                      \u0027versions of QEMU and libvirt. QEMU must be less than \u0027"}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_a8d54845","line":561,"updated":"2018-01-04 15:28:02.000000000","message":"We can maybe check capabilities for \"disk-share-rw\" per https://github.com/libvirt/libvirt/commit/860a3c4bea1d24773d8a495f213d5de3ac48a462 and then we wouldn\u0027t need to check package versions? Because people could patch their older version of libvirt with the fixes from 3.10.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"661a296fae6fdcadf939c9222bc43c9063a1b54e","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        # qemu\u003c2.10 or qemu\u003e\u003d2.10 and libvirt\u003e\u003d3.10. So check those versions"},{"line_number":559,"context_line":"        # here and set the capability appropriately."},{"line_number":560,"context_line":"        # TODO(mriedem): Add some tests for this logic."},{"line_number":561,"context_line":"        if (self._host.has_min_version(lv_ver\u003d(3, 10, 0)) or"},{"line_number":562,"context_line":"                not self._host.has_min_version(hv_ver\u003d(2, 10, 0))):"},{"line_number":563,"context_line":"            LOG.debug(\u0027Volume multiattach is not supported based on current \u0027"},{"line_number":564,"context_line":"                      \u0027versions of QEMU and libvirt. QEMU must be less than \u0027"}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_57ea15ac","line":561,"in_reply_to":"9f91af0f_685f4072","updated":"2018-01-04 19:18:18.000000000","message":"Probably need to add a CONF.libvirt.images_type check for \u0027raw\u0027 here as well since that\u0027s what I\u0027m trying to use in the devstack change to test this:\n\nhttps://review.openstack.org/#/c/266633/","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"adb0ef890ca310895c94712ea9b3a772409b64b5","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        # qemu\u003c2.10 or qemu\u003e\u003d2.10 and libvirt\u003e\u003d3.10. So check those versions"},{"line_number":559,"context_line":"        # here and set the capability appropriately."},{"line_number":560,"context_line":"        # TODO(mriedem): Add some tests for this logic."},{"line_number":561,"context_line":"        if (self._host.has_min_version(lv_ver\u003d(3, 10, 0)) or"},{"line_number":562,"context_line":"                not self._host.has_min_version(hv_ver\u003d(2, 10, 0))):"},{"line_number":563,"context_line":"            LOG.debug(\u0027Volume multiattach is not supported based on current \u0027"},{"line_number":564,"context_line":"                      \u0027versions of QEMU and libvirt. QEMU must be less than \u0027"}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_685f4072","line":561,"in_reply_to":"9f91af0f_a8d54845","updated":"2018-01-04 15:59:12.000000000","message":"Currently, it\u0027s (the \u0027share-rw\u0027) not exposed via any of the domain capabilities mechanism, as it\u0027s supposed to be transparent to the user. But, libvirt upstream is amenable to add it to capabilities (after a Bugzilla is filed).","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e8698c8e0ef56f53cd76491ec59e62f82fb5828","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        # qemu\u003c2.10 or qemu\u003e\u003d2.10 and libvirt\u003e\u003d3.10. So check those versions"},{"line_number":559,"context_line":"        # here and set the capability appropriately."},{"line_number":560,"context_line":"        # TODO(mriedem): Add some tests for this logic."},{"line_number":561,"context_line":"        if (self._host.has_min_version(lv_ver\u003d(3, 10, 0)) or"},{"line_number":562,"context_line":"                not self._host.has_min_version(hv_ver\u003d(2, 10, 0))):"},{"line_number":563,"context_line":"            LOG.debug(\u0027Volume multiattach is not supported based on current \u0027"},{"line_number":564,"context_line":"                      \u0027versions of QEMU and libvirt. QEMU must be less than \u0027"}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_68d420be","line":561,"in_reply_to":"9f91af0f_a8d54845","updated":"2018-01-04 15:51:31.000000000","message":"Kashyap talked with the libvirt devs and they said there is no capability exposed today, but if we filed a bug they could add one so we could eventually get away from the version checks.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9e8698c8e0ef56f53cd76491ec59e62f82fb5828","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        # TODO(mriedem): Add some tests for this logic."},{"line_number":561,"context_line":"        if (self._host.has_min_version(lv_ver\u003d(3, 10, 0)) or"},{"line_number":562,"context_line":"                not self._host.has_min_version(hv_ver\u003d(2, 10, 0))):"},{"line_number":563,"context_line":"            LOG.debug(\u0027Volume multiattach is not supported based on current \u0027"},{"line_number":564,"context_line":"                      \u0027versions of QEMU and libvirt. QEMU must be less than \u0027"},{"line_number":565,"context_line":"                      \u00272.10 or libvirt must be greater than or equal to 3.10.\u0027)"},{"line_number":566,"context_line":"            self.capabilities[\u0027supports_multiattach\u0027] \u003d True"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def _prepare_migration_flags(self):"}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_485cbc7d","line":565,"range":{"start_line":563,"start_character":12,"end_line":565,"end_character":79},"updated":"2018-01-04 15:51:31.000000000","message":"This needs to go in an else block.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"05433221c3754305cc02d8668b6e8123d62f5b75","unresolved":false,"context_lines":[{"line_number":557,"context_line":"        # clones, the shareable flag on a disk device will only work with"},{"line_number":558,"context_line":"        # qemu\u003c2.10 or qemu\u003e\u003d2.10 and libvirt\u003e\u003d3.10 or if using raw images."},{"line_number":559,"context_line":"        # So check those versions here and set the capability appropriately."},{"line_number":560,"context_line":"        if (self.image_backend.backend() \u003d\u003d imagebackend.Flat or"},{"line_number":561,"context_line":"                self._host.has_min_version(lv_ver\u003d(3, 10, 0)) or"},{"line_number":562,"context_line":"                not self._host.has_min_version(hv_ver\u003d(2, 10, 0))):"},{"line_number":563,"context_line":"            self.capabilities[\u0027supports_multiattach\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":80,"id":"9f91af0f_2b327ba8","line":560,"range":{"start_line":560,"start_character":12,"end_line":560,"end_character":61},"updated":"2018-01-05 14:49:20.000000000","message":"We can remove this, it doesn\u0027t work for block devices.\n\nhttp://paste.openstack.org/show/639185/\n\nWhich I should have realized earlier, it\u0027s the imagebackend code which is for ephemeral disks.","commit_id":"c0cd2da79df75de0dbbc52cb77a46f13c2896b8d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"08257ad778e847823ec65bcc59c98cd75fed03e7","unresolved":false,"context_lines":[{"line_number":301,"context_line":"# libvirt\u003e\u003d3.10 is required for volume multiattach if qemu\u003c2.10."},{"line_number":302,"context_line":"# See https://bugzilla.redhat.com/show_bug.cgi?id\u003d1378242"},{"line_number":303,"context_line":"# for details."},{"line_number":304,"context_line":"MIN_LIBVIRT_MULTIATTACH \u003d (3, 10, 0)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"class LibvirtDriver(driver.ComputeDriver):"}],"source_content_type":"text/x-python","patch_set":86,"id":"7f96bb07_0ab2a749","line":304,"updated":"2018-01-18 10:41:14.000000000","message":"Okay, I did read all the details, looks like it\u0027s libvirt upstream too (I mean not only RHEL libvirt) but I need a bit more time to verify that (because sometimes some libvirt features can be backported in RHEL systems)","commit_id":"d0d3d65d773dbeafe2031db0f5fd68656ba62611"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4dacfaf16edc6b8a60fcb13a2ba563dfbc3a28b1","unresolved":false,"context_lines":[{"line_number":301,"context_line":"# libvirt\u003e\u003d3.10 is required for volume multiattach if qemu\u003c2.10."},{"line_number":302,"context_line":"# See https://bugzilla.redhat.com/show_bug.cgi?id\u003d1378242"},{"line_number":303,"context_line":"# for details."},{"line_number":304,"context_line":"MIN_LIBVIRT_MULTIATTACH \u003d (3, 10, 0)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"class LibvirtDriver(driver.ComputeDriver):"}],"source_content_type":"text/x-python","patch_set":86,"id":"7f96bb07_2de9bde4","line":304,"in_reply_to":"7f96bb07_0ab2a749","updated":"2018-01-18 11:25:11.000000000","message":"Okay, confirmed that upstream libvirt version is 3.10 : https://github.com/libvirt/libvirt/commit/860a3c4bea1d24773d8a495f213d5de3ac48a462\n\nFor example, Fedora 27 has that feature by 3.7.","commit_id":"d0d3d65d773dbeafe2031db0f5fd68656ba62611"}],"nova/virt/libvirt/guest.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"becb690ce63bcdb868f119bcbcf8ff0233194517","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_2f44ecb6","line":300,"updated":"2018-01-04 02:19:38.000000000","message":"Apparently this doesn\u0027t work:\n\nJan 04 00:26:45.019244 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [None req-456b21d0-7a53-4f2a-ae1b-2ec6602c568e tempest-AttachVolumeMultiAttachTest-1264859580 tempest-AttachVolumeMultiAttachTest-1264859580] [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb] Failed to attach volume at mountpoint: /dev/vdb: libvirtError: unsupported flags (0x4) in function qemuDomainAttachDeviceLiveAndConfig\nJan 04 00:26:45.019426 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb] Traceback (most recent call last):\nJan 04 00:26:45.019575 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]   File \"/opt/stack/nova/nova/virt/libvirt/driver.py\", line 1271, in attach_volume\nJan 04 00:26:45.019722 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]     force\u003dconf.shareable)\nJan 04 00:26:45.019871 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]   File \"/opt/stack/nova/nova/virt/libvirt/guest.py\", line 307, in attach_device\nJan 04 00:26:45.026672 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]     self._domain.attachDeviceFlags(device_xml, flags\u003dflags)\nJan 04 00:26:45.026804 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 186, in doit\nJan 04 00:26:45.026923 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]     result \u003d proxy_call(self._autowrap, f, *args, **kwargs)\nJan 04 00:26:45.027029 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 144, in proxy_call\nJan 04 00:26:45.027134 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]     rv \u003d execute(f, *args, **kwargs)\nJan 04 00:26:45.027238 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 125, in execute\nJan 04 00:26:45.027343 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]     six.reraise(c, e, tb)\nJan 04 00:26:45.027463 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 83, in tworker\nJan 04 00:26:45.027567 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]     rv \u003d meth(*args, **kwargs)\nJan 04 00:26:45.027673 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]   File \"/usr/local/lib/python2.7/dist-packages/libvirt.py\", line 587, in attachDeviceFlags\nJan 04 00:26:45.027786 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb]     if ret \u003d\u003d -1: raise libvirtError (\u0027virDomainAttachDeviceFlags() failed\u0027, dom\u003dself)\nJan 04 00:26:45.027891 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb] libvirtError: unsupported flags (0x4) in function qemuDomainAttachDeviceLiveAndConfig\nJan 04 00:26:45.027995 ubuntu-xenial-rax-dfw-0001674266 nova-compute[12037]: ERROR nova.virt.libvirt.driver [instance: f2dde023-4095-4989-b377-9c5dc80fbcbb] \n\nI don\u0027t know if that means force can\u0027t be used with live and config or what.","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"192f24a79defd43a4b768d4ccddbce74119661ea","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_63620841","line":300,"in_reply_to":"9f91af0f_185a87f2","updated":"2018-01-04 12:07:38.000000000","message":"The above libvirt commit is actually fixing a bug[*] with \u0027shareable\u0027 flag usage for all non-raw formats.\n\nThe capability for \u0027share-rw\u0027 disk option was first added in libvirt commit:\n\n    https://github.com/libvirt/libvirt/commit/860a3c4 --\n    \"qemu: caps: Add capability for \u0027share-rw\u0027 disk option\"\n\nWhich is used in the earlier commit in discussion (28907b0 -- \"qemu: command: Mark \u003cshared/\u003e disks as such in qemu\")\n\nAnd both of them come in via libvirt v3.10.0 or above.\n\n\n[*] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1511480 -- refuse to allow \u003cshareable/\u003e disks in combination with non-raw image formats","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2aa3e51e654bd4e8927a8b33a4e41fbe457be76d","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_4f2850e1","line":300,"in_reply_to":"9f91af0f_2f44ecb6","updated":"2018-01-04 02:20:01.000000000","message":"Failed here btw:\n\nhttp://logs.openstack.org/33/266633/4/check/tempest-full/5b09f62/controller/logs/screen-n-cpu.txt","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"538bbb085eb98be22614251d474b3d4972071a74","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_6f68b420","line":300,"in_reply_to":"9f91af0f_4f2850e1","updated":"2018-01-04 02:28:18.000000000","message":"Looking at this it only allows config and live:\n\nhttps://github.com/libvirt/libvirt/blob/master/src/qemu/qemu_driver.c#L8405\n\nSo these docs seem wrong:\n\nhttps://libvirt.org/html/libvirt-libvirt-domain.html#virDomainAttachDeviceFlags","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"42df7b8bd2c8eb96a33f008f06e4900d57f08637","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_7538793c","line":300,"in_reply_to":"9f91af0f_63620841","updated":"2018-01-04 14:57:34.000000000","message":"Yeah after talking for awhile about this with melwitt that\u0027s the same conclusion I came to (the commit message and bugzilla discussion wasn\u0027t obvious about this fact). So I rev\u0027ed the patch to only support multiattach if qemu\u003c2.10 or libvirt\u003e\u003d3.10.","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4005e94f4bf11b5f0e1a95a94292e3912a730819","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_aaa8eada","line":300,"in_reply_to":"9f91af0f_6f68b420","updated":"2018-01-04 02:50:07.000000000","message":"So apparently there is some new change in more recent qemu that we need:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d1378242\n\nWhich means we\u0027ll likely need conditional logic in the disk config based on the version of qemu that we\u0027re using, which sucks.","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6c90c6b1ce397d2baa9ad7c34e755a5ec24ac44","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_cad3ee37","line":300,"in_reply_to":"9f91af0f_aaa8eada","updated":"2018-01-04 03:07:14.000000000","message":"This introduced the qemu file locking stuff in 2.10:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d1378241\n\nWhich is why we needed this change when calling qemu-img info:\n\nhttps://review.openstack.org/#/c/505673/\n\nSo we now seem to have this situation:\n\n1. if qemu\u003c2.10, shareable should just work\n2. if qemu\u003e\u003d2.10 and libvirt\u003e\u003d3.10.0, use the share-rw\u003don attribute on the shareable flag?\n3. fail\n\nI say libvirt 3.10 because of this:\n\nhttps://github.com/libvirt/libvirt/commit/28907b0043fbf71085a798372ab9c816ba043b93","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"df759d0daa610e091869de5b5d9804e0bfe098ae","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        flags \u003d persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0"},{"line_number":299,"context_line":"        flags |\u003d live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0"},{"line_number":300,"context_line":"        flags |\u003d force and libvirt.VIR_DOMAIN_DEVICE_MODIFY_FORCE or 0"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        device_xml \u003d conf.to_xml()"},{"line_number":303,"context_line":"        if six.PY3 and isinstance(device_xml, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9f91af0f_185a87f2","line":300,"in_reply_to":"9f91af0f_cad3ee37","updated":"2018-01-04 10:45:41.000000000","message":"\u003e 2. if qemu\u003e\u003d2.10 and libvirt\u003e\u003d3.10.0, use the share-rw\u003don attribute\n \u003e on the shareable flag?\n[..]\n \u003e https://github.com/libvirt/libvirt/commit/28907b0043fbf71085a798372ab9c816ba043b93\n\nI\u0027m not sure where you\u0027re seeing a share-rw attribute, the above commit simply allows libvirt to add share-rw\u003don to the QEMU command line given the required version of QEMU.","commit_id":"2328bb9b54878e04af633ce284e5dbd14fba73fe"}],"nova/virt/libvirt/volume/volume.py":[{"author":{"_account_id":9820,"name":"Liping Mao","email":"limao@cisco.com","username":"LipingMao"},"change_message_id":"e338de2968afc84c8741647bf9c00e56eac35e17","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        conf.source_type \u003d \"block\""},{"line_number":133,"context_line":"        conf.source_path \u003d connection_info[\u0027data\u0027][\u0027device_path\u0027]"},{"line_number":134,"context_line":"        if connection_info.get(\u0027multiattach\u0027, False):"},{"line_number":135,"context_line":"            conf.shareable \u003d True"},{"line_number":136,"context_line":"        return conf"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"ff82abbf_be4de43b","line":135,"updated":"2017-11-30 02:29:03.000000000","message":"Should this change in get_config of LibvirtBaseVolumeDriver?\nmost of the driver inhert libvirt_volume.LibvirtBaseVolumeDriver","commit_id":"bc435f3340eb61e9ce7775838b0b2c6816afe4db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba340ae16f78302c4c742941e85070ef258ce562","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        conf.source_type \u003d \"block\""},{"line_number":133,"context_line":"        conf.source_path \u003d connection_info[\u0027data\u0027][\u0027device_path\u0027]"},{"line_number":134,"context_line":"        if connection_info.get(\u0027multiattach\u0027, False):"},{"line_number":135,"context_line":"            conf.shareable \u003d True"},{"line_number":136,"context_line":"        return conf"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"df87a7cf_26cc0960","line":135,"in_reply_to":"ff82abbf_be4de43b","updated":"2017-12-05 20:10:15.000000000","message":"Yeah probably.","commit_id":"bc435f3340eb61e9ce7775838b0b2c6816afe4db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8748ec80b9ad27acb91eea0708366f0c109fded7","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        conf.source_device \u003d disk_info[\u0027type\u0027]"},{"line_number":50,"context_line":"        conf.driver_format \u003d \"raw\""},{"line_number":51,"context_line":"        conf.driver_cache \u003d \"none\""},{"line_number":52,"context_line":"        conf.target_dev \u003d disk_info[\u0027dev\u0027]"},{"line_number":53,"context_line":"        conf.target_bus \u003d disk_info[\u0027bus\u0027]"},{"line_number":54,"context_line":"        conf.serial \u003d connection_info.get(\u0027serial\u0027)"}],"source_content_type":"text/x-python","patch_set":74,"id":"9f91af0f_432591c1","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":34},"updated":"2018-01-03 22:26:51.000000000","message":"The libvirt domain xml docs say that if shareable\u003dTrue, caching should be disabled, and it looks like we always do that, but some other volume drivers set a specific mode. smbfs and vzstorage use \"writethrough\":\n\nhttps://libvirt.org/formatdomain.html\n\n\"The optional cache attribute controls the cache mechanism, possible values are \"default\", \"none\", \"writethrough\", \"writeback\", \"directsync\" (like \"writethrough\", but it bypasses the host page cache) and \"unsafe\" (host may cache all disk io, and sync requests from guest are ignored). Since 0.6.0, \"directsync\" since 0.9.5, \"unsafe\" since 0.9.7 \"","commit_id":"071bad91419846e278c6b4caf7044b8f3f34796a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8748ec80b9ad27acb91eea0708366f0c109fded7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                conf.device_addr.unit \u003d disk_info[\u0027unit\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if connection_info.get(\u0027multiattach\u0027, False):"},{"line_number":108,"context_line":"            conf.shareable \u003d True"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        return conf"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"9f91af0f_7622d1a6","line":108,"updated":"2018-01-03 22:26:51.000000000","message":"This is failing in our tempest testing:\n\nhttp://logs.openstack.org/33/266633/4/check/tempest-full/1c4979f/controller/logs/screen-n-cpu.txt\n\nJan 03 20:42:31.474932 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [None req-3a39b6a5-517e-46a1-ad52-bff9b89080ab tempest-AttachVolumeMultiAttachTest-640168740 tempest-AttachVolumeMultiAttachTest-640168740] [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295] Driver failed to attach volume 68fc8c1d-b39d-4365-b370-a068c5d99d81 at /dev/vdb: libvirtError: internal error: unable to execute QEMU command \u0027device_add\u0027: Failed to get \"write\" lock\nJan 03 20:42:31.475118 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295] Traceback (most recent call last):\nJan 03 20:42:31.475319 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/opt/stack/nova/nova/virt/block_device.py\", line 504, in _volume_attach\nJan 03 20:42:31.475477 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     device_type\u003dself[\u0027device_type\u0027], encryption\u003dencryption)\nJan 03 20:42:31.475627 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/opt/stack/nova/nova/virt/libvirt/driver.py\", line 1281, in attach_volume\nJan 03 20:42:31.475765 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     self._disconnect_volume(connection_info, instance)\nJan 03 20:42:31.475901 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__\nJan 03 20:42:31.476049 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     self.force_reraise()\nJan 03 20:42:31.476182 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise\nJan 03 20:42:31.476337 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     six.reraise(self.type_, self.value, self.tb)\nJan 03 20:42:31.476474 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/opt/stack/nova/nova/virt/libvirt/driver.py\", line 1265, in attach_volume\nJan 03 20:42:31.476617 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     guest.attach_device(conf, persistent\u003dTrue, live\u003dlive)\nJan 03 20:42:31.476749 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/opt/stack/nova/nova/virt/libvirt/guest.py\", line 303, in attach_device\nJan 03 20:42:31.476830 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     self._domain.attachDeviceFlags(device_xml, flags\u003dflags)\nJan 03 20:42:31.476914 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 186, in doit\nJan 03 20:42:31.476986 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     result \u003d proxy_call(self._autowrap, f, *args, **kwargs)\nJan 03 20:42:31.477056 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 144, in proxy_call\nJan 03 20:42:31.477125 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     rv \u003d execute(f, *args, **kwargs)\nJan 03 20:42:31.477224 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 125, in execute\nJan 03 20:42:31.477349 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     six.reraise(c, e, tb)\nJan 03 20:42:31.477436 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py\", line 83, in tworker\nJan 03 20:42:31.477519 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     rv \u003d meth(*args, **kwargs)\nJan 03 20:42:31.477590 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]   File \"/usr/local/lib/python2.7/dist-packages/libvirt.py\", line 587, in attachDeviceFlags\nJan 03 20:42:31.477668 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295]     if ret \u003d\u003d -1: raise libvirtError (\u0027virDomainAttachDeviceFlags() failed\u0027, dom\u003dself)\nJan 03 20:42:31.477790 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295] libvirtError: internal error: unable to execute QEMU command \u0027device_add\u0027: Failed to get \"write\" lock\nJan 03 20:42:31.477867 ubuntu-xenial-citycloud-sto2-0001671881 nova-compute[11175]: ERROR nova.virt.block_device [instance: 719979d8-9fe5-4854-9bf8-d6ce96fb7295] \n\nMy guess is this is similar to bug 1718295 where qemu \u003e\u003d 2.10 requires that you force changes for shared disks, so we likely need to check for the shareable flag in File \"/opt/stack/nova/nova/virt/libvirt/guest.py\", line 303, in attach_device and add the VIR_DOMAIN_DEVICE_MODIFY_FORCE flag:\n\nhttps://libvirt.org/html/libvirt-libvirt-domain.html#virDomainDeviceModifyFlags","commit_id":"071bad91419846e278c6b4caf7044b8f3f34796a"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"749dd61ef7602b21431d281debaef9ff4c9e2ee9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                # specified."},{"line_number":105,"context_line":"                conf.device_addr.unit \u003d disk_info[\u0027unit\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if connection_info.get(\u0027multiattach\u0027, False):"},{"line_number":108,"context_line":"            # Note that driver_cache should be disabled (none) when using"},{"line_number":109,"context_line":"            # a shareable disk."},{"line_number":110,"context_line":"            conf.shareable \u003d True"}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_98c5373f","line":107,"range":{"start_line":107,"start_character":0,"end_line":107,"end_character":53},"updated":"2018-01-04 10:56:00.000000000","message":"Shouldn\u0027t this be data.get(\u0027multiattach\u0027, False) ?","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"ef3f5443f6d478d52d9bff6e6653b06198838d8a","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                # specified."},{"line_number":105,"context_line":"                conf.device_addr.unit \u003d disk_info[\u0027unit\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if connection_info.get(\u0027multiattach\u0027, False):"},{"line_number":108,"context_line":"            # Note that driver_cache should be disabled (none) when using"},{"line_number":109,"context_line":"            # a shareable disk."},{"line_number":110,"context_line":"            conf.shareable \u003d True"}],"source_content_type":"text/x-python","patch_set":78,"id":"9f91af0f_b8eefbb1","line":107,"range":{"start_line":107,"start_character":0,"end_line":107,"end_character":53},"in_reply_to":"9f91af0f_98c5373f","updated":"2018-01-04 10:58:04.000000000","message":"Nope, we add it in `nova/virt/block_device.py`.","commit_id":"5553ceedb9a50d06d6b3390cc8bbc54b61f7f16e"}],"nova/volume/cinder.py":[{"author":{"_account_id":14806,"name":"Chhavi Agarwal","email":"chhagarw@in.ibm.com","username":"chhagarw"},"change_message_id":"1f626f5f6e0cb9cecf8b4cac5f197fece743e0c8","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        # Cinder supports multi-attach when a volume"},{"line_number":307,"context_line":"        # has been marked as multiattach"},{"line_number":308,"context_line":"        if volume.get(\u0027multiattach\u0027, False):"},{"line_number":309,"context_line":"            if (volume[\u0027status\u0027] not in (\"available\", \u0027in-use\u0027)):"},{"line_number":310,"context_line":"                msg \u003d _(\"multiattach volume\u0027s status must be\""},{"line_number":311,"context_line":"                        \"\u0027available\u0027 or \u0027in-use\u0027\")"},{"line_number":312,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba63e191_5f9508e2","line":309,"updated":"2016-01-19 11:17:21.000000000","message":"we should also allow the \u0027attaching\u0027, for shared volume there are chances user sending concurrent attach request.\nIn that case the volume status will turn to \u0027attaching\u0027 and the supplement request will fail","commit_id":"7d53109cc7532c564364d751553570f9a8b60ee3"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e80025403dc9972cb8882b0067ea02e76037af99","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        # Cinder supports multi-attach when a volume"},{"line_number":307,"context_line":"        # has been marked as multiattach"},{"line_number":308,"context_line":"        if volume.get(\u0027multiattach\u0027, False):"},{"line_number":309,"context_line":"            if (volume[\u0027status\u0027] not in (\"available\", \u0027in-use\u0027)):"},{"line_number":310,"context_line":"                msg \u003d _(\"multiattach volume\u0027s status must be\""},{"line_number":311,"context_line":"                        \"\u0027available\u0027 or \u0027in-use\u0027\")"},{"line_number":312,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba63e191_95ad9f8a","line":309,"in_reply_to":"ba63e191_5f9508e2","updated":"2016-01-19 11:40:23.000000000","message":"I need to check how Cinder reacts to this. On the other hand I\u0027m more comfortable to enable multi-attach for stable states at least as a first step.","commit_id":"7d53109cc7532c564364d751553570f9a8b60ee3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bae6c1c3482d58029a929546f4d6a7c0db5a339b","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def check_attach(self, context, volume, instance\u003dNone):"},{"line_number":305,"context_line":"        # TODO(vish): abstract status checking?"},{"line_number":306,"context_line":"        # Cinder supports multi-attach when a volume"},{"line_number":307,"context_line":"        # has been marked as multiattach"},{"line_number":308,"context_line":"        if volume.get(\u0027multiattach\u0027, False):"},{"line_number":309,"context_line":"            if (volume[\u0027status\u0027] not in (\"available\", \u0027in-use\u0027)):"},{"line_number":310,"context_line":"                msg \u003d _(\"multiattach volume\u0027s status must be\""},{"line_number":311,"context_line":"                        \"\u0027available\u0027 or \u0027in-use\u0027\")"},{"line_number":312,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":313,"context_line":"            if volume.get(\u0027attachments\u0027, {}).get(instance.uuid):"},{"line_number":314,"context_line":"                msg \u003d _(\"volume is already attached\")"},{"line_number":315,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":316,"context_line":"        else:"},{"line_number":317,"context_line":"            if volume[\u0027status\u0027] !\u003d \"available\":"},{"line_number":318,"context_line":"                msg \u003d _(\"status must be \u0027available\u0027\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_6f7e20e6","line":315,"range":{"start_line":306,"start_character":8,"end_line":315,"end_character":57},"updated":"2016-01-21 00:10:20.000000000","message":"As discussed in IRC today, this actually enables multiattach for the API without a microversion change, which I don\u0027t think we want, at least in mitaka.\n\nSo I think this has to change somehow, like doing this in the actual REST API code per a microversion on the v2.1 endpoint, which would happen in Newton. Maybe we\u0027ll need a allow_multiattach kwarg on this method or something and pass that down from the REST API when using the microversion (pass True if requesting a supported version).\n\nAnyway, I don\u0027t think we can land this as-is in mitaka. Most likely we\u0027ll need to discuss this at the nova midcycle and figure out what needs to happen.","commit_id":"ddffc4e83c8ba48818eaea32186622375bf3025d"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"40fa6992cc772a8d9d69c477a7c4461218aa30e9","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def check_attach(self, context, volume, instance\u003dNone):"},{"line_number":305,"context_line":"        # TODO(vish): abstract status checking?"},{"line_number":306,"context_line":"        # Cinder supports multi-attach when a volume"},{"line_number":307,"context_line":"        # has been marked as multiattach"},{"line_number":308,"context_line":"        if volume.get(\u0027multiattach\u0027, False):"},{"line_number":309,"context_line":"            if (volume[\u0027status\u0027] not in (\"available\", \u0027in-use\u0027)):"},{"line_number":310,"context_line":"                msg \u003d _(\"multiattach volume\u0027s status must be\""},{"line_number":311,"context_line":"                        \"\u0027available\u0027 or \u0027in-use\u0027\")"},{"line_number":312,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":313,"context_line":"            if volume.get(\u0027attachments\u0027, {}).get(instance.uuid):"},{"line_number":314,"context_line":"                msg \u003d _(\"volume is already attached\")"},{"line_number":315,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":316,"context_line":"        else:"},{"line_number":317,"context_line":"            if volume[\u0027status\u0027] !\u003d \"available\":"},{"line_number":318,"context_line":"                msg \u003d _(\"status must be \u0027available\u0027\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_4d447273","line":315,"range":{"start_line":306,"start_character":8,"end_line":315,"end_character":57},"in_reply_to":"9a68dd71_6f7e20e6","updated":"2016-01-21 12:24:08.000000000","message":"I will move this code up to the REST API changes where it belongs and let this code be a preparation for enabling multiattach in Newton.","commit_id":"ddffc4e83c8ba48818eaea32186622375bf3025d"}],"releasenotes/notes/shared-volume-between-guests-6eb6cc9e3bcf80fa.yaml":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5c5313953288dd5bf938d9203344351744e5c1c2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - This release adds support to attach one volume to multiple"},{"line_number":4,"context_line":"    VM instances. The feature can only be used in Nova if the"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9a68dd71_35ffeeab","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":3},"updated":"2016-01-21 16:49:22.000000000","message":"Will be moved to the REST API patch in the next patch set.","commit_id":"c53ccf533dc97053c42458f741deee1d433fb152"}]}
