)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"150e4c3fe94247d0a6b3c81983b6c1f5cdda4d87","unresolved":false,"context_lines":[{"line_number":10,"context_line":"provide detach properly. This patch adds the host information to the"},{"line_number":11,"context_line":"aach call under virt/block_device and in volumer/cinder."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially Closes-Bug: #1471278"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I2c19f7a09299ceb266921f97f40354fb2ed76716"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1a7b0d38_8326e914","line":13,"updated":"2015-12-22 19:33:07.000000000","message":"This should be:\n\nPartial-Bug: #1471278","commit_id":"9bd516af6625f4f892d6523c23bc006f8ac03fd7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcba39c5a5a46d5d4ee2f7dc058af9f4227cd239","unresolved":false,"context_lines":[{"line_number":10,"context_line":"provide detach properly. This patch adds the host information to the"},{"line_number":11,"context_line":"aach call under virt/block_device and in volumer/cinder."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially Closes-Bug: #1471278"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I2c19f7a09299ceb266921f97f40354fb2ed76716"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba63e191_8db57e32","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":30},"updated":"2016-01-19 18:54:08.000000000","message":"This should just be:\n\nPartial-Bug: #1471278","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5706046d24061657e3bc678b3d39e9ecdb481b23","unresolved":false,"context_lines":[{"line_number":10,"context_line":"provide detach properly. This patch adds the host information to the"},{"line_number":11,"context_line":"aach call under virt/block_device and in volumer/cinder."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially Closes-Bug: #1471278"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I2c19f7a09299ceb266921f97f40354fb2ed76716"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba63e191_cd85b6ad","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":30},"in_reply_to":"ba63e191_8db57e32","updated":"2016-01-19 20:48:48.000000000","message":"I checked it somewhere I swear, but will fix it now. :)","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a8af97acb1a2e3fbb243138ff3e9e2451ce4f8c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The lvm driver needs the host name information in order to be able to"},{"line_number":10,"context_line":"provide detach properly. This patch adds the host information to the"},{"line_number":11,"context_line":"aach call under virt/block_device and in volumer/cinder."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partial-Bug: #1471278"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":69,"id":"9a68dd71_a603ecb7","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":4},"updated":"2016-01-20 20:55:46.000000000","message":"attach","commit_id":"b3c7a4c4ab6b6e6a74cb0b1ad852994b64b499c5"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcba39c5a5a46d5d4ee2f7dc058af9f4227cd239","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        # stub out virt driver attach"},{"line_number":399,"context_line":"        def fake_get_volume_connector(*args, **kwargs):"},{"line_number":400,"context_line":"            return {\u0027host\u0027: \u0027fake_host\u0027}"},{"line_number":401,"context_line":"        self.stubs.Set(self.compute.driver, \u0027get_volume_connector\u0027,"},{"line_number":402,"context_line":"                       fake_get_volume_connector)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        with (mock.patch.object(cinder.API, \u0027get_volume_encryption_metadata\u0027,"}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_4d3b069d","line":401,"range":{"start_line":401,"start_character":8,"end_line":401,"end_character":22},"updated":"2016-01-19 18:54:08.000000000","message":"Use mock instead, i.e.:\n\nwith mock.patch.object(self.compute.driver, \u0027get_volume_connector\u0027, return_value\u003d{\u0027host\u0027: \u0027fake_host\u0027})","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5706046d24061657e3bc678b3d39e9ecdb481b23","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        # stub out virt driver attach"},{"line_number":399,"context_line":"        def fake_get_volume_connector(*args, **kwargs):"},{"line_number":400,"context_line":"            return {\u0027host\u0027: \u0027fake_host\u0027}"},{"line_number":401,"context_line":"        self.stubs.Set(self.compute.driver, \u0027get_volume_connector\u0027,"},{"line_number":402,"context_line":"                       fake_get_volume_connector)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        with (mock.patch.object(cinder.API, \u0027get_volume_encryption_metadata\u0027,"}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_4b38cea0","line":401,"range":{"start_line":401,"start_character":8,"end_line":401,"end_character":22},"in_reply_to":"ba63e191_4d3b069d","updated":"2016-01-19 20:48:48.000000000","message":"Done","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcba39c5a5a46d5d4ee2f7dc058af9f4227cd239","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        # stub out virt driver attach"},{"line_number":532,"context_line":"        def fake_get_volume_connector(*args, **kwargs):"},{"line_number":533,"context_line":"            return {\u0027host\u0027: \u0027fake_host\u0027}"},{"line_number":534,"context_line":"        self.stubs.Set(self.compute.driver, \u0027get_volume_connector\u0027,"},{"line_number":535,"context_line":"                       fake_get_volume_connector)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        with ("}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_0d450e16","line":534,"range":{"start_line":534,"start_character":8,"end_line":534,"end_character":22},"updated":"2016-01-19 18:54:08.000000000","message":"Use mock.","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5706046d24061657e3bc678b3d39e9ecdb481b23","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        # stub out virt driver attach"},{"line_number":532,"context_line":"        def fake_get_volume_connector(*args, **kwargs):"},{"line_number":533,"context_line":"            return {\u0027host\u0027: \u0027fake_host\u0027}"},{"line_number":534,"context_line":"        self.stubs.Set(self.compute.driver, \u0027get_volume_connector\u0027,"},{"line_number":535,"context_line":"                       fake_get_volume_connector)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        with ("}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_cb4cbe44","line":534,"range":{"start_line":534,"start_character":8,"end_line":534,"end_character":22},"in_reply_to":"ba63e191_0d450e16","updated":"2016-01-19 20:48:48.000000000","message":"Done","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcba39c5a5a46d5d4ee2f7dc058af9f4227cd239","unresolved":false,"context_lines":[{"line_number":794,"context_line":"        # stub out virt driver attach"},{"line_number":795,"context_line":"        def fake_get_volume_connector(*args, **kwargs):"},{"line_number":796,"context_line":"            return {\u0027host\u0027: \u0027fake_host\u0027}"},{"line_number":797,"context_line":"        self.stubs.Set(self.compute.driver, \u0027get_volume_connector\u0027,"},{"line_number":798,"context_line":"                       fake_get_volume_connector)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        self.compute.attach_volume(self.context, instance, bdm)"}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_4d09c6dc","line":797,"range":{"start_line":797,"start_character":8,"end_line":797,"end_character":22},"updated":"2016-01-19 18:54:08.000000000","message":"Would be better to use self.stub_out here so we don\u0027t introduce more mox usage.","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5706046d24061657e3bc678b3d39e9ecdb481b23","unresolved":false,"context_lines":[{"line_number":794,"context_line":"        # stub out virt driver attach"},{"line_number":795,"context_line":"        def fake_get_volume_connector(*args, **kwargs):"},{"line_number":796,"context_line":"            return {\u0027host\u0027: \u0027fake_host\u0027}"},{"line_number":797,"context_line":"        self.stubs.Set(self.compute.driver, \u0027get_volume_connector\u0027,"},{"line_number":798,"context_line":"                       fake_get_volume_connector)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        self.compute.attach_volume(self.context, instance, bdm)"}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_01271565","line":797,"range":{"start_line":797,"start_character":8,"end_line":797,"end_character":22},"in_reply_to":"ba63e191_4d09c6dc","updated":"2016-01-19 20:48:48.000000000","message":"I used mock.patch here too finally. Let me know if it\u0027s not ok.","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d058e6066d5bbb158bed2b41d98657e88a701852","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        fake_bdm \u003d objects.BlockDeviceMapping(context\u003dself.context,"},{"line_number":396,"context_line":"                                              **self.fake_volume)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        with test.nested("},{"line_number":399,"context_line":"            mock.patch.object(cinder.API, \u0027get_volume_encryption_metadata\u0027),"},{"line_number":400,"context_line":"            mock.patch.object(self.compute.driver, \u0027get_volume_connector\u0027)"},{"line_number":401,"context_line":"        ) as (mock_encryptor, mock_connector):"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_f752d5dc","line":398,"updated":"2016-01-21 10:07:01.000000000","message":"Micro nit: I much prefer decorators for this kind of mocking, using a nested function, but this is OK.","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"}],"nova/tests/unit/volume/test_cinder.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcba39c5a5a46d5d4ee2f7dc058af9f4227cd239","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        mock_volumes \u003d mock.MagicMock()"},{"line_number":253,"context_line":"        mock_cinderclient.return_value \u003d mock.MagicMock(volumes\u003dmock_volumes)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.api.attach(self.ctx, \u0027id1\u0027, \u0027uuid\u0027, \u0027point\u0027)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        mock_cinderclient.assert_called_once_with(self.ctx)"},{"line_number":258,"context_line":"        mock_volumes.attach.assert_called_once_with(\u0027id1\u0027, \u0027uuid\u0027, \u0027point\u0027,"}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_0de18efe","line":255,"range":{"start_line":255,"start_character":8,"end_line":255,"end_character":57},"updated":"2016-01-19 18:54:08.000000000","message":"You could make this more interesting by passing in a fake host value and asserting that it\u0027s passed through. Then leave it out in the other test that\u0027s below to show None is used.","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5706046d24061657e3bc678b3d39e9ecdb481b23","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        mock_volumes \u003d mock.MagicMock()"},{"line_number":253,"context_line":"        mock_cinderclient.return_value \u003d mock.MagicMock(volumes\u003dmock_volumes)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.api.attach(self.ctx, \u0027id1\u0027, \u0027uuid\u0027, \u0027point\u0027)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        mock_cinderclient.assert_called_once_with(self.ctx)"},{"line_number":258,"context_line":"        mock_volumes.attach.assert_called_once_with(\u0027id1\u0027, \u0027uuid\u0027, \u0027point\u0027,"}],"source_content_type":"text/x-python","patch_set":67,"id":"ba63e191_e16e8195","line":255,"range":{"start_line":255,"start_character":8,"end_line":255,"end_character":57},"in_reply_to":"ba63e191_0de18efe","updated":"2016-01-19 20:48:48.000000000","message":"Done","commit_id":"8b4753281d16df9f72ed14afdb6fe48b5b583ce8"}],"nova/virt/block_device.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"335786d12ad162cff9c825d26954c3eb1e0309fe","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                    # we should detach the volume. If the attach did not"},{"line_number":342,"context_line":"                    # happen, the detach request will be ignored."},{"line_number":343,"context_line":"                    volume_api.detach(context, volume_id)"},{"line_number":344,"context_line":"        "},{"line_number":345,"context_line":"    @update_db"},{"line_number":346,"context_line":"    def refresh_connection_info(self, context, instance,"},{"line_number":347,"context_line":"                                volume_api, virt_driver):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a710552_652fcff6","line":344,"updated":"2015-12-16 15:42:34.000000000","message":"pesky whitespace","commit_id":"393a06ae8e830baf231056a97e6976d9554b849b"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e55b1d017b9339c523a71419eed91c36a30224f7","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                    # we should detach the volume. If the attach did not"},{"line_number":342,"context_line":"                    # happen, the detach request will be ignored."},{"line_number":343,"context_line":"                    volume_api.detach(context, volume_id)"},{"line_number":344,"context_line":"        "},{"line_number":345,"context_line":"    @update_db"},{"line_number":346,"context_line":"    def refresh_connection_info(self, context, instance,"},{"line_number":347,"context_line":"                                volume_api, virt_driver):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a710552_40e080fa","line":344,"in_reply_to":"5a710552_652fcff6","updated":"2015-12-16 16:09:26.000000000","message":"Thanks for catching. I always knew that quick rebase is against the law... :)","commit_id":"393a06ae8e830baf231056a97e6976d9554b849b"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"46c23cbe9fab77f2647e27599d488e520671ce88","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                context, volume_api, volume_id, connection_info)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"            try:"},{"line_number":276,"context_line":"                virt_driver.attach_volume("},{"line_number":277,"context_line":"                        context, connection_info, instance,"},{"line_number":278,"context_line":"                        self[\u0027mount_device\u0027], disk_bus\u003dself[\u0027disk_bus\u0027],"},{"line_number":279,"context_line":"                        device_type\u003dself[\u0027device_type\u0027], encryption\u003dencryption)"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_b709bd97","line":276,"range":{"start_line":276,"start_character":28,"end_line":276,"end_character":41},"updated":"2016-01-21 09:59:05.000000000","message":"My concern with this series was that in order to do multi attach properly - we should consider the (edge?) case of 2 instances being on the same host. This means that we need to make sure the driver code is aware of whether it needs to connect and disconnect the volume in case there are other instances using it still.\n\nCurrently - any attach would try to connect the volume (probably OK but os-brick drivers may not be expecting it) and detach would try to disconnect (likely catastrophic for any instances that may have the volume attached).\n\nThe main point I was trying to make was that unless that\u0027s sorted in Mitaka - we won\u0027t really be able to just flip the API switch in Newton in case of a multi-version cloud, as older compute nodes would still not be doing the right thing (assumption is the Newton code would do the right thing).\n\nSo even if we land this in Mitaka - unless we have all the working logic in Mitaka compute nodes, we would still have to block them from doing multi attach.\n\nI hope the above makes sense.","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e239291ea84724f315a5df30a590dd7521cbf56e","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                context, volume_api, volume_id, connection_info)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"            try:"},{"line_number":276,"context_line":"                virt_driver.attach_volume("},{"line_number":277,"context_line":"                        context, connection_info, instance,"},{"line_number":278,"context_line":"                        self[\u0027mount_device\u0027], disk_bus\u003dself[\u0027disk_bus\u0027],"},{"line_number":279,"context_line":"                        device_type\u003dself[\u0027device_type\u0027], encryption\u003dencryption)"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_802695cc","line":276,"range":{"start_line":276,"start_character":28,"end_line":276,"end_character":41},"in_reply_to":"9a68dd71_15abca1e","updated":"2016-01-21 18:48:12.000000000","message":"Yeah, we tried to prepare ourselves to this answer. :(\n\nWould that be a correct way then to pass the info to this function even in the connection info or somehow else and then decide whether call down to the driver or not: https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L1104 ? Or it\u0027s not the right path I found?","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"be3879c6fcdc2747e66a4bed49751603db8e5f30","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                context, volume_api, volume_id, connection_info)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"            try:"},{"line_number":276,"context_line":"                virt_driver.attach_volume("},{"line_number":277,"context_line":"                        context, connection_info, instance,"},{"line_number":278,"context_line":"                        self[\u0027mount_device\u0027], disk_bus\u003dself[\u0027disk_bus\u0027],"},{"line_number":279,"context_line":"                        device_type\u003dself[\u0027device_type\u0027], encryption\u003dencryption)"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_b9731de7","line":276,"range":{"start_line":276,"start_character":28,"end_line":276,"end_character":41},"in_reply_to":"9a68dd71_802695cc","updated":"2016-01-26 12:30:33.000000000","message":"Walter - should os-brick blow up if you try to disconnect but there are still multiple connections - or doesn\u0027t it know that information, because it\u0027s dumb?","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a6b43fda9fe8fa4475227a80cc71b2c5341d5a9f","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                context, volume_api, volume_id, connection_info)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"            try:"},{"line_number":276,"context_line":"                virt_driver.attach_volume("},{"line_number":277,"context_line":"                        context, connection_info, instance,"},{"line_number":278,"context_line":"                        self[\u0027mount_device\u0027], disk_bus\u003dself[\u0027disk_bus\u0027],"},{"line_number":279,"context_line":"                        device_type\u003dself[\u0027device_type\u0027], encryption\u003dencryption)"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_15abca1e","line":276,"range":{"start_line":276,"start_character":28,"end_line":276,"end_character":41},"in_reply_to":"9a68dd71_b709bd97","updated":"2016-01-21 16:54:11.000000000","message":"os-brick is dumb in this respect.   It can only find the paths associated with the connection_info passed in.   Attach isn\u0027t a problem, because it will simply look for the paths it expects to be there and return them.   For iSCSI it will simply do a rescan and that will be fine.   \n\nFor detach, we can\u0027t call os-brick to remove if there is only 1 volume being used multiple times.  We should only call disconnect_volume when we know it\u0027s the last instances using that volume that\u0027s trying to detach.","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"9f1aa9b85fe635af62d92a096d9f30dc5dbb5173","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                context, volume_api, volume_id, connection_info)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"            try:"},{"line_number":276,"context_line":"                virt_driver.attach_volume("},{"line_number":277,"context_line":"                        context, connection_info, instance,"},{"line_number":278,"context_line":"                        self[\u0027mount_device\u0027], disk_bus\u003dself[\u0027disk_bus\u0027],"},{"line_number":279,"context_line":"                        device_type\u003dself[\u0027device_type\u0027], encryption\u003dencryption)"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_6c195822","line":276,"range":{"start_line":276,"start_character":28,"end_line":276,"end_character":41},"in_reply_to":"9a68dd71_b9731de7","updated":"2016-01-26 15:53:30.000000000","message":"Maybe dumb question, sorry if yes. Does it depend on the back end Cinder uses whether we need to call disconnect_volume or not in this case? I mean detach when we have two attachments on the same host.","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d058e6066d5bbb158bed2b41d98657e88a701852","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            # detach."},{"line_number":301,"context_line":"            self.save()"},{"line_number":302,"context_line":"            try:"},{"line_number":303,"context_line":"                host \u003d connector.get(\u0027host\u0027)"},{"line_number":304,"context_line":"                volume_api.attach(context, volume_id, instance.uuid,"},{"line_number":305,"context_line":"                                  self[\u0027mount_device\u0027], mode\u003dmode,"},{"line_number":306,"context_line":"                                  host\u003dhost)"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_17276913","line":303,"updated":"2016-01-21 10:07:01.000000000","message":"ah, I see...\nhttps://github.com/openstack/os-brick/blob/master/os_brick/initiator/connector.py#L128","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"}],"nova/volume/cinder.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5ea632237065fbf66c2e7c02581d239fd1ff8455","unresolved":false,"context_lines":[{"line_number":368,"context_line":"               host\u003dNone):"},{"line_number":369,"context_line":"        cinderclient(context).volumes.attach(volume_id, instance_uuid,"},{"line_number":370,"context_line":"                                             mountpoint, mode\u003dmode,"},{"line_number":371,"context_line":"                                             host_name\u003dhost)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @translate_volume_exception"},{"line_number":374,"context_line":"    def get_volume_attachment(self, volume, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_89ed808d","line":371,"updated":"2015-12-17 12:28:51.000000000","message":"Is it OK sending host to cinder versions that don\u0027t get accept that information?","commit_id":"5bdb2765795255c17dae22e278157f3ed0605252"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f6859495153f11b14c73f107e389f47daf6ba4a5","unresolved":false,"context_lines":[{"line_number":368,"context_line":"               host\u003dNone):"},{"line_number":369,"context_line":"        cinderclient(context).volumes.attach(volume_id, instance_uuid,"},{"line_number":370,"context_line":"                                             mountpoint, mode\u003dmode,"},{"line_number":371,"context_line":"                                             host_name\u003dhost)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @translate_volume_exception"},{"line_number":374,"context_line":"    def get_volume_attachment(self, volume, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_d10f8986","line":371,"in_reply_to":"3a7e1126_89ed808d","updated":"2015-12-17 20:21:29.000000000","message":"The host has been around since the Havana timeframe in the cinder API.  Nova just hasn\u0027t been sending it.","commit_id":"5bdb2765795255c17dae22e278157f3ed0605252"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"dee11b3d4f163f0f3a4e52ca3ffe9f3fcdcae6a1","unresolved":false,"context_lines":[{"line_number":369,"context_line":"               host\u003dNone):"},{"line_number":370,"context_line":"        cinderclient(context).volumes.attach(volume_id, instance_uuid,"},{"line_number":371,"context_line":"                                             mountpoint, mode\u003dmode,"},{"line_number":372,"context_line":"                                             host_name\u003dhost)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    @translate_volume_exception"},{"line_number":375,"context_line":"    def detach(self, context, volume_id, instance_uuid \u003d None):"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa69d971_ce4493b8","line":372,"updated":"2016-01-05 00:08:32.000000000","message":"Regarding the tempest failures: I don\u0027t think you can specify instance_uuid and host_name at the same time in the cinder attach API.\n\nhttp://developer.openstack.org/api-ref-blockstorage-v2.html#attachVolume\n\nhttps://bugs.launchpad.net/openstack-api-site/+bug/1515614\n\nhttps://github.com/openstack/cinder/blob/a9151c2/cinder/api/contrib/volume_actions.py#L101-L108","commit_id":"b475d3d8ddb1ce969ad85c33fb5ee5df82a2103c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d058e6066d5bbb158bed2b41d98657e88a701852","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    @translate_volume_exception"},{"line_number":361,"context_line":"    def attach(self, context, volume_id, instance_uuid, mountpoint, mode\u003d\u0027rw\u0027,"},{"line_number":362,"context_line":"               host\u003dNone):"},{"line_number":363,"context_line":"        cinderclient(context).volumes.attach(volume_id, instance_uuid,"},{"line_number":364,"context_line":"                                             mountpoint, mode\u003dmode,"},{"line_number":365,"context_line":"                                             host_name\u003dhost)"}],"source_content_type":"text/x-python","patch_set":71,"id":"9a68dd71_77b585cb","line":362,"updated":"2016-01-21 10:07:01.000000000","message":"Micro nit: tempting to have host_name here","commit_id":"d31bb4be8edbce6719258ae1cbbb583a2c3c3a28"}]}
