<!-- .github/pull_request_template.md --> ## Description This PR introduces a shared locked mechanism in KuzuAdapter to avoid use case when multiple subprocesses from different environments are trying to use the same Kuzu adatabase. ## Type of Change <!-- Please check the relevant option --> - [ ] Bug fix (non-breaking change that fixes an issue) - [x] New feature (non-breaking change that adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update - [ ] Code refactoring - [x] Performance improvement - [ ] Other (please specify): ## Screenshots/Videos (if applicable) None ## Pre-submission Checklist <!-- Please check all boxes that apply before submitting your PR --> - [x] **I have tested my changes thoroughly before submitting this PR** - [x] **This PR contains minimal changes necessary to address the issue/feature** - [x] My code follows the project's coding standards and style guidelines - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added necessary documentation (if applicable) - [x] All new and existing tests pass - [x] I have searched existing PRs to ensure this change hasn't been submitted already - [x] I have linked any relevant issues in the description - [x] My commits have clear and descriptive messages ## DCO Affirmation I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin.
42 lines
1 KiB
Python
42 lines
1 KiB
Python
from abc import ABC, abstractmethod
|
|
from contextlib import contextmanager
|
|
|
|
|
|
class CacheDBInterface(ABC):
|
|
"""
|
|
Abstract base class for distributed cache coordination systems (e.g., Redis, Memcached).
|
|
Provides a common interface for lock acquisition, release, and context-managed locking.
|
|
"""
|
|
|
|
def __init__(self, host: str, port: int, lock_key: str):
|
|
self.host = host
|
|
self.port = port
|
|
self.lock_key = lock_key
|
|
self.lock = None
|
|
|
|
@abstractmethod
|
|
def acquire_lock(self):
|
|
"""
|
|
Acquire a lock on the given key.
|
|
Must be implemented by subclasses.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def release_lock(self):
|
|
"""
|
|
Release the lock if it is held.
|
|
Must be implemented by subclasses.
|
|
"""
|
|
pass
|
|
|
|
@contextmanager
|
|
def hold_lock(self):
|
|
"""
|
|
Context manager for safely acquiring and releasing the lock.
|
|
"""
|
|
self.acquire()
|
|
try:
|
|
yield
|
|
finally:
|
|
self.release()
|