From 60fcefd5bb50e9578dac0cb8a09c053465f7f4bd Mon Sep 17 00:00:00 2001 From: Abhidnya Patil Date: Fri, 27 Mar 2020 16:24:25 -0700 Subject: [PATCH 1/7] Adding explicit unlocking using portalocker --- msal_extensions/cache_lock.py | 1 + 1 file changed, 1 insertion(+) diff --git a/msal_extensions/cache_lock.py b/msal_extensions/cache_lock.py index 2a73f24..ba0bf2d 100644 --- a/msal_extensions/cache_lock.py +++ b/msal_extensions/cache_lock.py @@ -22,6 +22,7 @@ def __enter__(self): self._fh.write('{} {}'.format(pid, sys.argv[0]).encode('utf-8')) def __exit__(self, *args): + portalocker.unlock(self._fh) self._fh.close() try: # Attempt to delete the lockfile. In either of the failure cases enumerated below, it is From 790fc2a80fc83b920c942674b745fccef434d83d Mon Sep 17 00:00:00 2001 From: Abhidnya Patil Date: Fri, 27 Mar 2020 17:05:13 -0700 Subject: [PATCH 2/7] Updating setup file --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ce2845c..4c742a7 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ package_data={'': ['LICENSE']}, install_requires=[ 'msal>=0.4.1,<2.0.0', - 'portalocker~=1.0', + 'portalocker~=1.6', ], tests_require=['pytest'], ) From a9a00e8d3306a4eca94601cf07b38904ab3b10fd Mon Sep 17 00:00:00 2001 From: Abhidnya Patil Date: Thu, 9 Apr 2020 01:37:45 -0700 Subject: [PATCH 3/7] building on top of portlocker Lock --- msal_extensions/cache_lock.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/msal_extensions/cache_lock.py b/msal_extensions/cache_lock.py index ba0bf2d..2f9cb73 100644 --- a/msal_extensions/cache_lock.py +++ b/msal_extensions/cache_lock.py @@ -12,18 +12,16 @@ class CrossPlatLock(object): """ def __init__(self, lockfile_path): self._lockpath = lockfile_path - self._fh = None + self._lock = portalocker.Lock(lockfile_path, mode='wb+', + flags=portalocker.LOCK_EX, buffering=0) def __enter__(self): - pid = os.getpid() - - self._fh = open(self._lockpath, 'wb+', buffering=0) - portalocker.lock(self._fh, portalocker.LOCK_EX) - self._fh.write('{} {}'.format(pid, sys.argv[0]).encode('utf-8')) + fh = self._lock.__enter__() + fh.write('{} {}'.format(os.getpid(), sys.argv[0]).encode('utf-8')) + return fh def __exit__(self, *args): - portalocker.unlock(self._fh) - self._fh.close() + self._lock.__exit__(*args) try: # Attempt to delete the lockfile. In either of the failure cases enumerated below, it is # likely that another process has raced this one and ended up clearing or locking the From 82c807435c6240a3e1c540f6e1530f92dfde07e3 Mon Sep 17 00:00:00 2001 From: Abhidnya Patil Date: Thu, 9 Apr 2020 02:03:29 -0700 Subject: [PATCH 4/7] changing variable name for pylint --- msal_extensions/cache_lock.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/msal_extensions/cache_lock.py b/msal_extensions/cache_lock.py index 2f9cb73..dec006e 100644 --- a/msal_extensions/cache_lock.py +++ b/msal_extensions/cache_lock.py @@ -16,9 +16,9 @@ def __init__(self, lockfile_path): flags=portalocker.LOCK_EX, buffering=0) def __enter__(self): - fh = self._lock.__enter__() - fh.write('{} {}'.format(os.getpid(), sys.argv[0]).encode('utf-8')) - return fh + file_handle = self._lock.__enter__() + file_handle.write('{} {}'.format(os.getpid(), sys.argv[0]).encode('utf-8')) + return file_handle def __exit__(self, *args): self._lock.__exit__(*args) From eac8a611ea8d5fe58cf7ae473f8a1cfb89c7406b Mon Sep 17 00:00:00 2001 From: Abhidnya Patil Date: Fri, 10 Apr 2020 12:50:05 -0700 Subject: [PATCH 5/7] Changing locking flags --- msal_extensions/cache_lock.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/msal_extensions/cache_lock.py b/msal_extensions/cache_lock.py index dec006e..af826cd 100644 --- a/msal_extensions/cache_lock.py +++ b/msal_extensions/cache_lock.py @@ -12,8 +12,14 @@ class CrossPlatLock(object): """ def __init__(self, lockfile_path): self._lockpath = lockfile_path - self._lock = portalocker.Lock(lockfile_path, mode='wb+', - flags=portalocker.LOCK_EX, buffering=0) + self._lock = portalocker.Lock( + lockfile_path, + mode='wb+', + # In posix systems, we HAVE to use LOCK_EX(exclusive lock) bitwise ORed + # with LOCK_NB(non-blocking) to avoid blocking on lock acquisition. + # More information on this here: https://docs.python.org/3/library/fcntl.html#fcntl.lockf + flags=portalocker.LOCK_EX | portalocker.LOCK_NB, + buffering=0) def __enter__(self): file_handle = self._lock.__enter__() From 34beb50953bb6e5f4ccf8a4392feb4091c3251ec Mon Sep 17 00:00:00 2001 From: Abhidnya Patil Date: Fri, 10 Apr 2020 12:53:54 -0700 Subject: [PATCH 6/7] Fixing pylint issues --- msal_extensions/cache_lock.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msal_extensions/cache_lock.py b/msal_extensions/cache_lock.py index af826cd..f41954c 100644 --- a/msal_extensions/cache_lock.py +++ b/msal_extensions/cache_lock.py @@ -17,7 +17,7 @@ def __init__(self, lockfile_path): mode='wb+', # In posix systems, we HAVE to use LOCK_EX(exclusive lock) bitwise ORed # with LOCK_NB(non-blocking) to avoid blocking on lock acquisition. - # More information on this here: https://docs.python.org/3/library/fcntl.html#fcntl.lockf + # More information here: https://docs.python.org/3/library/fcntl.html#fcntl.lockf flags=portalocker.LOCK_EX | portalocker.LOCK_NB, buffering=0) From a53a655c4100a8d3baaa3496f52a17e5cf999130 Mon Sep 17 00:00:00 2001 From: Abhidnya Date: Fri, 10 Apr 2020 13:23:57 -0700 Subject: [PATCH 7/7] Update msal_extensions/cache_lock.py Co-Authored-By: Ray Luo --- msal_extensions/cache_lock.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/msal_extensions/cache_lock.py b/msal_extensions/cache_lock.py index f41954c..1adcb5d 100644 --- a/msal_extensions/cache_lock.py +++ b/msal_extensions/cache_lock.py @@ -17,7 +17,8 @@ def __init__(self, lockfile_path): mode='wb+', # In posix systems, we HAVE to use LOCK_EX(exclusive lock) bitwise ORed # with LOCK_NB(non-blocking) to avoid blocking on lock acquisition. - # More information here: https://docs.python.org/3/library/fcntl.html#fcntl.lockf + # More information here: + # https://docs.python.org/3/library/fcntl.html#fcntl.lockf flags=portalocker.LOCK_EX | portalocker.LOCK_NB, buffering=0)