summaryrefslogtreecommitdiff
path: root/glance_store/_drivers
diff options
context:
space:
mode:
authorwhoami-rajat <rajatdhasmana@gmail.com>2021-04-15 09:17:59 -0400
committerRajat Dhasmana <rajatdhasmana@gmail.com>2021-08-12 09:20:20 -0400
commitecda7f640fe4e807ba07981abfc1a637ddb496cd (patch)
tree3cbb1f16a6a36cbcbfa2e6975490d39f7dc8f564 /glance_store/_drivers
parent85c7a06687291eba30510d63d3ee8b9e9cb33c5f (diff)
downloadglance_store-ecda7f640fe4e807ba07981abfc1a637ddb496cd.tar.gz
Add volume multiattach handling
We implemented cinder's new attachment API support with patch[1]. It was needed to add multiattach volume handling added with this patch. There is no special configuration change or user interference needed. If a volume is of a multiattach type, then it will be handled as a multiattach volume. [1] https://review.opendev.org/c/openstack/glance_store/+/782200 Implements: blueprint attachment-api-and-multiattach-support Closes-Bug: #1904546 Change-Id: Iffb825492a20fd877476acad05f817b399072f01
Diffstat (limited to 'glance_store/_drivers')
-rw-r--r--glance_store/_drivers/cinder.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/glance_store/_drivers/cinder.py b/glance_store/_drivers/cinder.py
index d62feb3..3ccfe29 100644
--- a/glance_store/_drivers/cinder.py
+++ b/glance_store/_drivers/cinder.py
@@ -33,6 +33,7 @@ from oslo_config import cfg
from oslo_utils import units
from glance_store import capabilities
+from glance_store.common import attachment_state_manager
from glance_store.common import cinder_utils
from glance_store.common import utils
import glance_store.driver
@@ -699,8 +700,13 @@ class Store(glance_store.driver.Store):
connector_prop = connector.get_connector_properties(
root_helper, host, use_multipath, enforce_multipath)
- attachment = self.volume_api.attachment_create(client, volume_id,
- mode=attach_mode)
+ if volume.multiattach:
+ attachment = attachment_state_manager.attach(client, volume_id,
+ host,
+ mode=attach_mode)
+ else:
+ attachment = self.volume_api.attachment_create(client, volume_id,
+ mode=attach_mode)
attachment = self.volume_api.attachment_update(
client, attachment['id'], connector_prop,
mountpoint='glance_store')
@@ -767,13 +773,19 @@ class Store(glance_store.driver.Store):
root_helper)
disconnect_volume_nfs()
else:
- conn.disconnect_volume(connection_info, device)
+ if volume.multiattach:
+ attachment_state_manager.detach(
+ client, attachment.id, volume_id, host, conn,
+ connection_info, device)
+ else:
+ conn.disconnect_volume(connection_info, device)
except Exception:
LOG.exception(_LE('Failed to disconnect volume '
'%(volume_id)s.'),
{'volume_id': volume.id})
- self.volume_api.attachment_delete(client, attachment.id)
+ if not volume.multiattach:
+ self.volume_api.attachment_delete(client, attachment.id)
def _cinder_volume_data_iterator(self, client, volume, max_size, offset=0,
chunk_size=None, partial_length=None):