Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
6f859ad
revise copilot instructions
sanderegg Sep 12, 2025
3b2b0a9
intiial idea
sanderegg Sep 10, 2025
3bb29fa
ongoing
sanderegg Sep 10, 2025
14d0e36
initial tests
sanderegg Sep 11, 2025
aaf1a27
step 2
sanderegg Sep 11, 2025
21c04eb
refactor tests
sanderegg Sep 11, 2025
e8cb055
refactor
sanderegg Sep 11, 2025
3673528
refactor
sanderegg Sep 11, 2025
97eee5f
rename
sanderegg Sep 11, 2025
52577a8
use pydantic
sanderegg Sep 11, 2025
617f9af
minor
sanderegg Sep 11, 2025
5905927
simplify
sanderegg Sep 11, 2025
0308d1c
simplify
sanderegg Sep 11, 2025
0d48f31
minor
sanderegg Sep 11, 2025
11211c7
same pattern as with exclusive
sanderegg Sep 11, 2025
c3ffdf7
ensure clean exceptions
sanderegg Sep 11, 2025
74bf4f0
ensure clean exceptions
sanderegg Sep 11, 2025
d07bc92
minor
sanderegg Sep 11, 2025
889f792
add test for exceptions
sanderegg Sep 11, 2025
4b6d828
added many tests
sanderegg Sep 11, 2025
7b332a8
improve coverage
sanderegg Sep 11, 2025
d5358a2
minor
sanderegg Sep 11, 2025
cef4a3b
minor
sanderegg Sep 11, 2025
b1ae217
direct access to semaphore without decorator prohibited
sanderegg Sep 11, 2025
7ac5844
direct access to semaphore without decorator prohibited
sanderegg Sep 11, 2025
9fa6386
test renewal fail
sanderegg Sep 11, 2025
4d68ab0
simplify
sanderegg Sep 11, 2025
e0655f2
100%
sanderegg Sep 11, 2025
b7be5de
minor
sanderegg Sep 11, 2025
dbc1844
minor
sanderegg Sep 11, 2025
7bbb0ba
minor
sanderegg Sep 11, 2025
2393418
default TTL
sanderegg Sep 11, 2025
af87770
large capacity
sanderegg Sep 11, 2025
c95fee5
use redis TIME
sanderegg Sep 11, 2025
6bdf807
heavy test
sanderegg Sep 11, 2025
47f9140
shorter ttl
sanderegg Sep 11, 2025
d1ecbd3
improve test
sanderegg Sep 11, 2025
de9a606
ok this is nice
sanderegg Sep 11, 2025
0b57ea4
Squashed commit of the following:
sanderegg Sep 11, 2025
5bcb9e2
wait random expo
sanderegg Sep 11, 2025
6d956fc
cleaning
sanderegg Sep 11, 2025
bfdf7f1
seconds
sanderegg Sep 11, 2025
236d3f6
now it works but that is strange
sanderegg Sep 11, 2025
b678363
ensure lua scripts are transferred
sanderegg Sep 12, 2025
54eb54a
remove weird construction
sanderegg Sep 12, 2025
ed7153f
ensure cancel_wait_task properly re-raise
sanderegg Sep 12, 2025
6685fa4
this now works
sanderegg Sep 12, 2025
8d975e5
add marker
sanderegg Sep 12, 2025
821c49f
fix typing
sanderegg Sep 12, 2025
4338d42
fix import
sanderegg Sep 12, 2025
41076f9
some more
sanderegg Sep 12, 2025
62931e2
linting
sanderegg Sep 12, 2025
644efd7
minor
sanderegg Sep 12, 2025
8639fc3
fix
sanderegg Sep 12, 2025
b83b74b
remove useless readme
sanderegg Sep 15, 2025
72ca310
use resources
sanderegg Sep 15, 2025
3e4872b
only lua scripts in lua folder
sanderegg Sep 15, 2025
35626ec
added some description
sanderegg Sep 15, 2025
c934c31
docs
sanderegg Sep 15, 2025
240a36b
revert
sanderegg Sep 15, 2025
45a611b
clean
sanderegg Sep 15, 2025
9c2f66e
refactor
sanderegg Sep 15, 2025
47f917d
ongoing
sanderegg Sep 15, 2025
f151c4a
bad merge
sanderegg Sep 15, 2025
fbde48e
fixed check of return codes
sanderegg Sep 15, 2025
e79a578
show overflow
sanderegg Sep 15, 2025
1f99867
create meaningful semaphore key name
sanderegg Sep 15, 2025
2e61168
linter
sanderegg Sep 15, 2025
a972960
added tests for context manager
sanderegg Sep 15, 2025
20dda7f
add cache
sanderegg Sep 15, 2025
fb0f334
removed useless instructions
sanderegg Sep 15, 2025
987d51d
improvements
sanderegg Sep 15, 2025
ea5ffce
improvements
sanderegg Sep 15, 2025
c29e2b9
use class variable
sanderegg Sep 15, 2025
056822b
fixes
sanderegg Sep 16, 2025
a78e2cf
fix warning
sanderegg Sep 16, 2025
25536ce
fix usage
sanderegg Sep 16, 2025
4b1595d
ruff
sanderegg Sep 16, 2025
f19ad40
no need for task group here
sanderegg Sep 16, 2025
b946905
linter
sanderegg Sep 16, 2025
fdd6e16
Revert "no need for task group here"
sanderegg Sep 16, 2025
7ce8a21
do not use deprecated stuff
sanderegg Sep 16, 2025
7317e12
fixed tests
sanderegg Sep 16, 2025
caaaf9c
added a setting
sanderegg Sep 16, 2025
51e56a0
rename
sanderegg Sep 16, 2025
3aaa478
pylint
sanderegg Sep 16, 2025
701c798
Added docs
sanderegg Sep 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/service-library/setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ markers =
testit: "marks test to run during development"
performance_test: "performance test"
no_cleanup_check_rabbitmq_server_has_no_errors: "no check in rabbitmq logs"
heavy_load: "marks test as heavy load"

[mypy]
plugins =
Expand Down
2 changes: 1 addition & 1 deletion packages/service-library/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def read_reqs(reqs_path: Path) -> set[str]:
"python_requires": "~=3.11",
"install_requires": tuple(PROD_REQUIREMENTS),
"packages": find_packages(where="src"),
"package_data": {"": ["py.typed"]},
"package_data": {"": ["py.typed", "redis/lua/*.lua"]},
"package_dir": {"": "src"},
"test_suite": "tests",
"tests_require": tuple(TEST_REQUIREMENTS),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from common_library.async_tools import cancel_wait_task
from models_library.api_schemas_long_running_tasks.base import TaskProgress
from pydantic import NonNegativeFloat, PositiveFloat
from servicelib.utils import limited_gather
from settings_library.redis import RedisDatabase, RedisSettings
from tenacity import (
AsyncRetrying,
Expand All @@ -24,6 +23,7 @@
from ..logging_errors import create_troubleshootting_log_kwargs
from ..logging_utils import log_catch, log_context
from ..redis import RedisClientSDK, exclusive
from ..utils import limited_gather
from ._redis_store import RedisStore
from ._serialization import dumps
from .errors import (
Expand Down
22 changes: 13 additions & 9 deletions packages/service-library/src/servicelib/redis/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
CouldNotConnectToRedisError,
LockLostError,
ProjectLockError,
SemaphoreAcquisitionError,
SemaphoreNotAcquiredError,
)
from ._models import RedisManagerDBConfig
from ._project_document_version import (
Expand All @@ -18,24 +20,26 @@
is_project_locked,
with_project_locked,
)
from ._semaphore_decorator import with_limited_concurrency
from ._utils import handle_redis_returns_union_types

__all__: tuple[str, ...] = (
"PROJECT_DB_UPDATE_REDIS_LOCK_KEY",
"PROJECT_DOCUMENT_VERSION_KEY",
"CouldNotAcquireLockError",
"CouldNotConnectToRedisError",
"exclusive",
"increment_and_return_project_document_version",
"get_project_locked_state",
"handle_redis_returns_union_types",
"is_project_locked",
"LockLostError",
"PROJECT_DB_UPDATE_REDIS_LOCK_KEY",
"PROJECT_DOCUMENT_VERSION_KEY",
"ProjectLockError",
"RedisClientSDK",
"RedisClientsManager",
"RedisManagerDBConfig",
"SemaphoreAcquisitionError",
"SemaphoreNotAcquiredError",
"exclusive",
"get_project_locked_state",
"handle_redis_returns_union_types",
"increment_and_return_project_document_version",
"is_project_locked",
"with_limited_concurrency",
"with_project_locked",
)

# nopycln: file
3 changes: 3 additions & 0 deletions packages/service-library/src/servicelib/redis/_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
DEFAULT_LOCK_TTL: Final[datetime.timedelta] = datetime.timedelta(seconds=10)
DEFAULT_SOCKET_TIMEOUT: Final[datetime.timedelta] = datetime.timedelta(seconds=30)

DEFAULT_SEMAPHORE_TTL: Final[datetime.timedelta] = datetime.timedelta(seconds=10)
SEMAPHORE_KEY_PREFIX: Final[str] = "semaphores:"
SEMAPHORE_HOLDER_KEY_PREFIX: Final[str] = "semaphores:holders:"

DEFAULT_DECODE_RESPONSES: Final[bool] = True
DEFAULT_HEALTH_CHECK_INTERVAL: Final[datetime.timedelta] = datetime.timedelta(seconds=5)
Expand Down
15 changes: 13 additions & 2 deletions packages/service-library/src/servicelib/redis/_errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
from common_library.errors_classes import OsparcErrorMixin


class BaseRedisError(OsparcErrorMixin, RuntimeError):
...
class BaseRedisError(OsparcErrorMixin, RuntimeError): ...


class CouldNotAcquireLockError(BaseRedisError):
Expand All @@ -25,3 +24,15 @@ class LockLostError(BaseRedisError):


ProjectLockError: TypeAlias = redis.exceptions.LockError # NOTE: backwards compatible


class SemaphoreAcquisitionError(BaseRedisError):
msg_template: str = "Could not acquire semaphore '{name}' (capacity: {capacity})"


class SemaphoreNotAcquiredError(BaseRedisError):
msg_template: str = "Semaphore '{name}' was not acquired by this instance"


class SemaphoreLostError(BaseRedisError):
msg_template: str = "Semaphore '{name}' was lost by this instance `{instance_id}`"
Loading
Loading