Skip to content

Commit 33a6e07

Browse files
fix: stop SMGC service on SR detach to prevent orphaned systemd units
Signed-off-by: Mathieu Labourier <mathieu.labourier@vates.tech>
1 parent 921f385 commit 33a6e07

9 files changed

Lines changed: 20 additions & 0 deletions

File tree

drivers/CephFSSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ def detach(self, sr_uuid) -> None:
216216
self.unmount(self.mountpoint, True)
217217
os.unlink(self.path)
218218
self.attached = False
219+
cleanup.stop_gc_service(sr_uuid)
219220

220221
@override
221222
def create(self, sr_uuid, size) -> None:

drivers/FileSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ def detach(self, sr_uuid) -> None:
197197
except Exception as e:
198198
raise xs_errors.XenError('SRInUse', opterr=str(e))
199199
self.attached = False
200+
cleanup.stop_gc_service(sr_uuid)
200201

201202
@override
202203
def scan(self, sr_uuid) -> None:

drivers/GlusterFSSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ def detach(self, sr_uuid) -> None:
196196
self.unmount(self.mountpoint, True)
197197
os.unlink(self.path)
198198
self.attached = False
199+
cleanup.stop_gc_service(sr_uuid)
199200

200201
@override
201202
def create(self, sr_uuid, size) -> None:

drivers/LVHDSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,7 @@ def detach(self, uuid) -> None:
668668
# However, we should still delete lock files on slaves as it is the
669669
# only place to do so.
670670
self._cleanup(self.isMaster)
671+
cleanup.stop_gc_service(uuid)
671672

672673
@override
673674
def forget_vdi(self, uuid) -> None:

drivers/LinstorSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,7 @@ def attach(self, uuid) -> None:
746746
def detach(self, uuid) -> None:
747747
util.SMlog('LinstorSR.detach for {}'.format(self.uuid))
748748
cleanup.abort(self.uuid)
749+
cleanup.stop_gc_service(uuid)
749750

750751
@override
751752
@_locked_load

drivers/MooseFSSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ def detach(self, sr_uuid) -> None:
210210
os.chdir(SR.MOUNT_BASE)
211211
self.unmount(self.mountpoint, True)
212212
self.attached = False
213+
cleanup.stop_gc_service(sr_uuid)
213214

214215
@override
215216
def create(self, sr_uuid, size) -> None:

drivers/NFSSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ def detach(self, sr_uuid) -> None:
206206
raise xs_errors.XenError('NFSUnMount', opterr=exc.errstr)
207207

208208
self.attached = False
209+
cleanup.stop_gc_service(sr_uuid)
209210

210211
@override
211212
def create(self, sr_uuid, size) -> None:

drivers/SMBSR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ def detach(self, sr_uuid) -> None:
248248
raise xs_errors.XenError('SMBUnMount', opterr=exc.errstr)
249249

250250
self.attached = False
251+
cleanup.stop_gc_service(sr_uuid)
251252

252253
@override
253254
def create(self, sr_uuid, size) -> None:

drivers/cleanup.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4040,6 +4040,18 @@ def start_gc_service(sr_uuid, wait=False):
40404040
subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
40414041

40424042

4043+
def stop_gc_service(sr_uuid):
4044+
"""
4045+
Stops the templated systemd service which runs GC on the given SR UUID.
4046+
"""
4047+
sr_uuid_esc = sr_uuid.replace("-", "\\x2d")
4048+
util.SMlog(f"Stopping SMGC@{sr_uuid}...")
4049+
cmd = ["/usr/bin/systemctl", "--quiet", "stop", f"SMGC@{sr_uuid_esc}"]
4050+
try:
4051+
subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True, check=True)
4052+
except subprocess.CalledProcessError as e:
4053+
util.SMlog(f"Failed to stop gc service `SMGC@{sr_uuid_esc}`: `{e.stderr.decode().strip()}`")
4054+
40434055
def gc_force(session, srUuid, force=False, dryRun=False, lockSR=False):
40444056
"""Garbage collect all deleted VDIs in SR "srUuid". The caller must ensure
40454057
the SR lock is held.

0 commit comments

Comments
 (0)