Don't turn off all locking with filesystem_locking
This commit is contained in:
parent
b5fb56a31b
commit
c400414b27
@ -752,16 +752,14 @@ class Collection(BaseCollection):
|
|||||||
@classmethod
|
@classmethod
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def acquire_lock(cls, mode, user=None):
|
def acquire_lock(cls, mode, user=None):
|
||||||
if not cls.configuration.getboolean("storage", "filesystem_locking"):
|
|
||||||
yield
|
|
||||||
return
|
|
||||||
|
|
||||||
def condition():
|
def condition():
|
||||||
if mode == "r":
|
if mode == "r":
|
||||||
return not cls._writer
|
return not cls._writer
|
||||||
else:
|
else:
|
||||||
return not cls._writer and cls._readers == 0
|
return not cls._writer and cls._readers == 0
|
||||||
|
|
||||||
|
file_locking = cls.configuration.getboolean("storage",
|
||||||
|
"filesystem_locking")
|
||||||
folder = os.path.expanduser(cls.configuration.get(
|
folder = os.path.expanduser(cls.configuration.get(
|
||||||
"storage", "filesystem_folder"))
|
"storage", "filesystem_folder"))
|
||||||
# Use a primitive lock which only works within one process as a
|
# Use a primitive lock which only works within one process as a
|
||||||
@ -794,7 +792,7 @@ class Collection(BaseCollection):
|
|||||||
except OSError as e:
|
except OSError as e:
|
||||||
cls.logger.info("Failed to set permissions on lock file:"
|
cls.logger.info("Failed to set permissions on lock file:"
|
||||||
" %s", e, exc_info=True)
|
" %s", e, exc_info=True)
|
||||||
if not cls._lock_file_locked:
|
if file_locking and not cls._lock_file_locked:
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
handle = msvcrt.get_osfhandle(cls._lock_file.fileno())
|
handle = msvcrt.get_osfhandle(cls._lock_file.fileno())
|
||||||
flags = LOCKFILE_EXCLUSIVE_LOCK if mode == "w" else 0
|
flags = LOCKFILE_EXCLUSIVE_LOCK if mode == "w" else 0
|
||||||
@ -828,7 +826,7 @@ class Collection(BaseCollection):
|
|||||||
cls._readers -= 1
|
cls._readers -= 1
|
||||||
else:
|
else:
|
||||||
cls._writer = False
|
cls._writer = False
|
||||||
if cls._readers == 0:
|
if file_locking and cls._readers == 0:
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
handle = msvcrt.get_osfhandle(cls._lock_file.fileno())
|
handle = msvcrt.get_osfhandle(cls._lock_file.fileno())
|
||||||
overlapped = Overlapped()
|
overlapped = Overlapped()
|
||||||
|
Loading…
Reference in New Issue
Block a user