Change in vdsm[master]: storage: add a context manager for the domainLock
alitke at redhat.com
alitke at redhat.com
Thu Dec 10 16:34:26 UTC 2015
Adam Litke has uploaded a new change for review.
Change subject: storage: add a context manager for the domainLock
......................................................................
storage: add a context manager for the domainLock
Change-Id: Id7b831d4fe5a67f6998f31978f2399fdebdb3ceb
Signed-off-by: Adam Litke <alitke at redhat.com>
---
M tests/manifest_tests.py
M vdsm/storage/sd.py
2 files changed, 50 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/72/50272/1
diff --git a/tests/manifest_tests.py b/tests/manifest_tests.py
index cfb5ee7..1e0e18a 100644
--- a/tests/manifest_tests.py
+++ b/tests/manifest_tests.py
@@ -20,7 +20,7 @@
import os
import uuid
-from testlib import VdsmTestCase, namedTemporaryDir, make_file
+from testlib import VdsmTestCase, namedTemporaryDir, make_file, recorded
from monkeypatch import MonkeyPatchScope
from storagefakelib import FakeLVM
from storagetestlib import make_filesd_manifest, make_blocksd, make_file_volume
@@ -169,3 +169,43 @@
with manifest.acquireVolumeMetadataSlot(None, 1):
acquired = manifest._lvTagMetaSlotLock.acquire(False)
self.assertFalse(acquired)
+
+
+class FakeStorageDomainManifest(sd.StorageDomainManifest):
+ def __init__(self):
+ pass
+
+ @recorded
+ def acquireDomainLock(self, host_id):
+ pass
+
+ @recorded
+ def releaseDomainLock(self):
+ pass
+
+
+class FakeDomainManifestTests(VdsmTestCase):
+
+ def test_domainlock_contextmanager(self):
+ expected_calls = []
+ manifest = FakeStorageDomainManifest()
+ with manifest.domain_lock(1):
+ expected_calls.append(("acquireDomainLock", (1,), {}))
+ self.assertEqual(manifest.__calls__, expected_calls)
+ expected_calls.append(("releaseDomainLock", (), {}))
+ self.assertEqual(manifest.__calls__, expected_calls)
+
+ def test_domainlock_contextmanager_exception(self):
+ class InjectedFailure(Exception):
+ pass
+
+ expected_calls = []
+ manifest = FakeStorageDomainManifest()
+ try:
+ with manifest.domain_lock(1):
+ expected_calls.append(("acquireDomainLock", (1,), {}))
+ self.assertEqual(manifest.__calls__, expected_calls)
+ raise InjectedFailure()
+ except InjectedFailure:
+ expected_calls.append(("releaseDomainLock", (), {}))
+ self.assertEqual(manifest.__calls__, expected_calls)
diff --git a/vdsm/storage/sd.py b/vdsm/storage/sd.py
index 68fa285..807d92a 100644
--- a/vdsm/storage/sd.py
+++ b/vdsm/storage/sd.py
@@ -24,6 +24,7 @@
import threading
from collections import namedtuple
import codecs
+from contextlib import contextmanager
import image
import storage_exception as se
@@ -422,6 +423,14 @@
def releaseDomainLock(self):
self._domainLock.release()
+ @contextmanager
+ def domain_lock(self, host_id):
+ self.acquireDomainLock(host_id)
+ try:
+ yield
+ finally:
+ self.releaseDomainLock()
+
def inquireDomainLock(self):
return self._domainLock.inquire()
--
To view, visit https://gerrit.ovirt.org/50272
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id7b831d4fe5a67f6998f31978f2399fdebdb3ceb
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Adam Litke <alitke at redhat.com>
More information about the vdsm-patches
mailing list