diff --git a/CHANGELOG b/CHANGELOG index 682d56a..d69c3a0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +- 0.2.6 + * Ensure atomic state lock in fs +- 0.2.5 + * Correct handling of persistent sync when no not-state filter has been set - 0.2.4 * Add optional concurrency lock for persistence store, implemented for file store - 0.2.3 diff --git a/setup.cfg b/setup.cfg index 906b39c..b5a9e97 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = shep -version = 0.2.5 +version = 0.2.6 description = Multi-state key stores using bit masks author = Louis Holbrook author_email = dev@holbrook.no diff --git a/shep/store/file.py b/shep/store/file.py index 88059be..bcd9451 100644 --- a/shep/store/file.py +++ b/shep/store/file.py @@ -28,22 +28,17 @@ class SimpleFileStore: os.makedirs(lock_path, exist_ok=True) - def __is_locked(self, k): - if self.__lock_path == None: - return False - for v in os.listdir(self.__lock_path): - if k == v: - return True - return False - - def __lock(self, k): if self.__lock_path == None: return - if self.__is_locked(k): - raise StateLockedKey(k) fp = os.path.join(self.__lock_path, k) - f = open(fp, 'w') + f = None + try: + f = open(fp, 'x') + except FileExistsError: + pass + if f == None: + raise StateLockedKey(k) f.close()