Skip to content

Commit 9a7159c

Browse files
committed
Unity: add option to delete attached snapshots
Add a option to delete the snapshot even if it is attached to hosts. Closes-bug: #1798529 Change-Id: I53b7efc093f7fc5823e0543aca4ce57720b88f5b (cherry picked from commit 547ec23bcd1fac006e0a9c6949fd34e0698e1ca1)
1 parent 758eae5 commit 9a7159c

5 files changed

Lines changed: 465 additions & 5 deletions

File tree

cinder/volume/drivers/dell_emc/unity/adapter.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ def __init__(self, version=None):
138138
self.storage_pools_map = None
139139
self._client = None
140140
self.allowed_ports = None
141+
self.force_delete_attached_snapshots = False
141142

142143
def do_setup(self, driver, conf):
143144
self.driver = driver
@@ -166,6 +167,9 @@ def do_setup(self, driver, conf):
166167

167168
self.allowed_ports = self.validate_ports(self.config.unity_io_ports)
168169

170+
self.force_delete_attached_snapshots = (
171+
self.config.force_delete_attached_snapshots)
172+
169173
group_name = (self.config.config_group if self.config.config_group
170174
else 'DEFAULT')
171175
folder_name = '%(group)s.%(sys_name)s' % {
@@ -408,7 +412,8 @@ def delete_snapshot(self, snapshot):
408412
:param snapshot: the snapshot to delete.
409413
"""
410414
snap = self.client.get_snap(name=snapshot.name)
411-
self.client.delete_snap(snap)
415+
self.client.delete_snap(
416+
snap, even_attached=self.force_delete_attached_snapshots)
412417

413418
def _get_referenced_lun(self, existing_ref):
414419
if 'source-id' in existing_ref:

cinder/volume/drivers/dell_emc/unity/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,13 @@ def create_snap(self, src_lun_id, name=None):
160160
return snap
161161

162162
@staticmethod
163-
def delete_snap(snap):
163+
def delete_snap(snap, even_attached=False):
164164
if snap is None:
165165
LOG.debug("Snap to delete is None, skipping deletion.")
166166
return
167167

168168
try:
169-
snap.delete()
169+
snap.delete(even_attached=even_attached)
170170
except storops_ex.UnityResourceNotFoundError as err:
171171
LOG.debug("Snap %(snap_name)s may be deleted already. "
172172
"Message: %(err)s",

cinder/volume/drivers/dell_emc/unity/driver.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@
3636
cfg.ListOpt('unity_io_ports',
3737
default=None,
3838
help='A comma-separated list of iSCSI or FC ports to be used. '
39-
'Each port can be Unix-style glob expressions.')]
39+
'Each port can be Unix-style glob expressions.'),
40+
cfg.BoolOpt('force_delete_attached_snapshots',
41+
default=False,
42+
help='To force delete the snapshot from Unity even when it is '
43+
'attached to hosts. Be careful to set it to True. If the '
44+
'snapshot is attached, force deleting it could cause data'
45+
'unaccessble and/or data loss. By default, it is False.')]
4046

4147
CONF.register_opts(UNITY_OPTS)
4248

@@ -52,9 +58,11 @@ class UnityDriver(driver.TransferVD,
5258
00.05.00 - Initial version
5359
00.05.01 - Backport thin clone from Pike
5460
00.05.02 - Fixed bug 170311: temp snapshot for backup was deleted twice
61+
00.05.03 - Fixed bug 1798529: add option for force deleting attached
62+
snapshots
5563
"""
5664

57-
VERSION = '00.05.02'
65+
VERSION = '00.05.03'
5866
VENDOR = 'Dell EMC'
5967
# ThirdPartySystems wiki page
6068
CI_WIKI_NAME = "EMC_UNITY_CI"

0 commit comments

Comments
 (0)