atlan-application-sdk 0.1.1rc56__py3-none-any.whl → 0.1.1rc57__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -256,7 +256,7 @@ REDIS_SENTINEL_HOSTS = os.getenv("REDIS_SENTINEL_HOSTS", "")
256
256
  #: Whether to enable strict locking
257
257
  IS_LOCKING_DISABLED = os.getenv("IS_LOCKING_DISABLED", "true").lower() == "true"
258
258
  #: Retry interval for lock acquisition
259
- LOCK_RETRY_INTERVAL = int(os.getenv("LOCK_RETRY_INTERVAL", "5"))
259
+ LOCK_RETRY_INTERVAL_SECONDS = int(os.getenv("LOCK_RETRY_INTERVAL_SECONDS", "60"))
260
260
 
261
261
  # MCP Configuration
262
262
  #: Flag to indicate if MCP should be enabled or not. Turning this to true will setup an MCP server along
@@ -2,6 +2,11 @@
2
2
 
3
3
  Manages distributed locks for activities decorated with @needs_lock using
4
4
  separate lock acquisition and release activities to avoid workflow deadlocks.
5
+
6
+ IMPORTANT: Uses regular activities (not local activities) for lock operations to prevent
7
+ workflow task blocking and deadlocks. Local activities would block the workflow task during
8
+ lock acquisition retries, preventing lock releases from executing and causing infinite deadlock
9
+ when all lock slots are taken.
5
10
  """
6
11
 
7
12
  from datetime import timedelta
@@ -22,7 +27,7 @@ from application_sdk.constants import (
22
27
  APPLICATION_NAME,
23
28
  IS_LOCKING_DISABLED,
24
29
  LOCK_METADATA_KEY,
25
- LOCK_RETRY_INTERVAL,
30
+ LOCK_RETRY_INTERVAL_SECONDS,
26
31
  )
27
32
  from application_sdk.observability.logger_adaptor import get_logger
28
33
 
@@ -109,12 +114,14 @@ class RedisLockOutboundInterceptor(WorkflowOutboundInterceptor):
109
114
  try:
110
115
  # Step 1: Acquire lock via dedicated activity with Temporal retry policy
111
116
  schedule_to_close_timeout = workflow.info().execution_timeout
112
- lock_result = await workflow.execute_local_activity(
117
+ lock_result = await workflow.execute_activity(
113
118
  "acquire_distributed_lock",
114
119
  args=[lock_name, max_locks, ttl_seconds, owner_id],
115
120
  start_to_close_timeout=timedelta(seconds=30),
116
121
  retry_policy=RetryPolicy(
117
- initial_interval=timedelta(seconds=int(LOCK_RETRY_INTERVAL)),
122
+ initial_interval=timedelta(
123
+ seconds=int(LOCK_RETRY_INTERVAL_SECONDS)
124
+ ),
118
125
  backoff_coefficient=1.0,
119
126
  ),
120
127
  schedule_to_close_timeout=schedule_to_close_timeout,
@@ -129,7 +136,7 @@ class RedisLockOutboundInterceptor(WorkflowOutboundInterceptor):
129
136
  # Step 3: Release lock (fire-and-forget with short timeout)
130
137
  if lock_result is not None:
131
138
  try:
132
- await workflow.execute_local_activity(
139
+ await workflow.execute_activity(
133
140
  "release_distributed_lock",
134
141
  args=[lock_result["resource_id"], lock_result["owner_id"]],
135
142
  start_to_close_timeout=timedelta(seconds=5),
@@ -2,4 +2,4 @@
2
2
  Version information for the application_sdk package.
3
3
  """
4
4
 
5
- __version__ = "0.1.1rc56"
5
+ __version__ = "0.1.1rc57"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atlan-application-sdk
3
- Version: 0.1.1rc56
3
+ Version: 0.1.1rc57
4
4
  Summary: Atlan Application SDK is a Python library for developing applications on the Atlan Platform
5
5
  Project-URL: Repository, https://github.com/atlanhq/application-sdk
6
6
  Project-URL: Documentation, https://github.com/atlanhq/application-sdk/README.md
@@ -1,6 +1,6 @@
1
1
  application_sdk/__init__.py,sha256=2e2mvmLJ5dxmJGPELtb33xwP-j6JMdoIuqKycEn7hjg,151
2
- application_sdk/constants.py,sha256=EDGR-3SuCxNV-3x0D4wA9is9vBbVWa3nHvJ8r2w4lYY,10977
3
- application_sdk/version.py,sha256=CCMicPBa6AW-ZhzHhVwaijqXeu7blFhs7s9tQzWI3V8,88
2
+ application_sdk/constants.py,sha256=WDw0I9u_OoXIE79IFDFBHJYmIS9KAsghMeGOxfshnpg,10994
3
+ application_sdk/version.py,sha256=IyB6vjth_E6FH7I1tBCb3R7pWpyympnG14_n5Dyzamc,88
4
4
  application_sdk/worker.py,sha256=i5f0AeKI39IfsLO05QkwC6uMz0zDPSJqP7B2byri1VI,7489
5
5
  application_sdk/activities/__init__.py,sha256=L5WXkTwOwGtjWAlXrUJRCKGwyIyp3z8fBv8BZVCRFQI,11175
6
6
  application_sdk/activities/lock_management.py,sha256=oX2qPpfEu_xP0MiaCakVGk9ivZDvG4EddVZag1DuHSE,3976
@@ -68,7 +68,7 @@ application_sdk/inputs/.cursor/BUGBOT.md,sha256=hwKGDbopv3NU0bpC_ElpAPDFcS59GWS3
68
68
  application_sdk/interceptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  application_sdk/interceptors/cleanup.py,sha256=JlFcM_2Y5AIEfGTSNe0aoon7eoE68MIXI0rA3LHsSeY,5966
70
70
  application_sdk/interceptors/events.py,sha256=TeStWmBbc4v1-dm2DWeKYsUfUhJLR8CtTQhu3TWOZWM,6524
71
- application_sdk/interceptors/lock.py,sha256=K1e1p11OYDDTy5TFMHcKXAvY4H86yXgpAZiuncEyH2M,5810
71
+ application_sdk/interceptors/lock.py,sha256=5ETm20zrTaH2b9fepN4Ckp1tGJV-uINqDrno_5RW3aw,6169
72
72
  application_sdk/interceptors/.cursor/BUGBOT.md,sha256=pxmUF2c7dtaXAX8yAa1-LBa6FCrj_uw7aQcHrppjf1A,14570
73
73
  application_sdk/observability/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  application_sdk/observability/logger_adaptor.py,sha256=00c0F7maDkp1xrHttW6VQbWFDGr6NkXeDPjmf97ojlY,29989
@@ -157,8 +157,8 @@ application_sdk/workflows/metadata_extraction/__init__.py,sha256=jHUe_ZBQ66jx8bg
157
157
  application_sdk/workflows/metadata_extraction/sql.py,sha256=6ZaVt84n-8U2ZvR9GR7uIJKv5v8CuyQjhlnoRJvDszc,12435
158
158
  application_sdk/workflows/query_extraction/__init__.py,sha256=n066_CX5RpJz6DIxGMkKS3eGSRg03ilaCtsqfJWQb7Q,117
159
159
  application_sdk/workflows/query_extraction/sql.py,sha256=kT_JQkLCRZ44ZpaC4QvPL6DxnRIIVh8gYHLqRbMI-hA,4826
160
- atlan_application_sdk-0.1.1rc56.dist-info/METADATA,sha256=IYJMZEWVkGa4E4e5xGGho-QuvP4NzHOIRY5Jnzi2wU8,5730
161
- atlan_application_sdk-0.1.1rc56.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
162
- atlan_application_sdk-0.1.1rc56.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
163
- atlan_application_sdk-0.1.1rc56.dist-info/licenses/NOTICE,sha256=A-XVVGt3KOYuuMmvSMIFkg534F1vHiCggEBp4Ez3wGk,1041
164
- atlan_application_sdk-0.1.1rc56.dist-info/RECORD,,
160
+ atlan_application_sdk-0.1.1rc57.dist-info/METADATA,sha256=x-HZpkwfS5eNSCyuJAvfy1-X1DznYqFVVdCBbDNmmyc,5730
161
+ atlan_application_sdk-0.1.1rc57.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
162
+ atlan_application_sdk-0.1.1rc57.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
163
+ atlan_application_sdk-0.1.1rc57.dist-info/licenses/NOTICE,sha256=A-XVVGt3KOYuuMmvSMIFkg534F1vHiCggEBp4Ez3wGk,1041
164
+ atlan_application_sdk-0.1.1rc57.dist-info/RECORD,,