durabletask 0.0.0.dev45__tar.gz → 0.0.0.dev48__tar.gz
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.
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/PKG-INFO +1 -1
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/client.py +42 -4
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask.egg-info/PKG-INFO +1 -1
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/pyproject.toml +1 -1
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/LICENSE +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/README.md +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/__init__.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/__init__.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/durable_entity.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/entity_context.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/entity_instance_id.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/entity_lock.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/entity_metadata.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/entity_operation_failed_exception.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/entity_state_shim.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/exceptions.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/grpc_interceptor.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/helpers.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/json_encode_output_exception.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/orchestration_entity_context.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/orchestrator_service_pb2.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/orchestrator_service_pb2.pyi +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/orchestrator_service_pb2_grpc.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/proto_task_hub_sidecar_service_stub.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/shared.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/py.typed +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/task.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/worker.py +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask.egg-info/SOURCES.txt +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask.egg-info/dependency_links.txt +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask.egg-info/requires.txt +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask.egg-info/top_level.txt +0 -0
- {durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/setup.cfg +0 -0
|
@@ -63,6 +63,12 @@ class PurgeInstancesResult:
|
|
|
63
63
|
is_complete: bool
|
|
64
64
|
|
|
65
65
|
|
|
66
|
+
@dataclass
|
|
67
|
+
class CleanEntityStorageResult:
|
|
68
|
+
empty_entities_removed: int
|
|
69
|
+
orphaned_locks_released: int
|
|
70
|
+
|
|
71
|
+
|
|
66
72
|
class OrchestrationFailedError(Exception):
|
|
67
73
|
def __init__(self, message: str, failure_details: task.FailureDetails):
|
|
68
74
|
super().__init__(message)
|
|
@@ -147,7 +153,7 @@ class TaskHubGrpcClient:
|
|
|
147
153
|
req = pb.CreateInstanceRequest(
|
|
148
154
|
name=name,
|
|
149
155
|
instanceId=instance_id if instance_id else uuid.uuid4().hex,
|
|
150
|
-
input=helpers.get_string_value(shared.to_json(input)),
|
|
156
|
+
input=helpers.get_string_value(shared.to_json(input) if input is not None else None),
|
|
151
157
|
scheduledStartTimestamp=helpers.new_timestamp(start_at) if start_at else None,
|
|
152
158
|
version=helpers.get_string_value(version if version else self.default_version),
|
|
153
159
|
orchestrationIdReusePolicy=reuse_id_policy,
|
|
@@ -269,7 +275,8 @@ class TaskHubGrpcClient:
|
|
|
269
275
|
req = pb.RaiseEventRequest(
|
|
270
276
|
instanceId=instance_id,
|
|
271
277
|
name=event_name,
|
|
272
|
-
input=helpers.get_string_value(shared.to_json(data))
|
|
278
|
+
input=helpers.get_string_value(shared.to_json(data) if data is not None else None)
|
|
279
|
+
)
|
|
273
280
|
|
|
274
281
|
self._logger.info(f"Raising event '{event_name}' for instance '{instance_id}'.")
|
|
275
282
|
self._stub.RaiseEvent(req)
|
|
@@ -279,7 +286,7 @@ class TaskHubGrpcClient:
|
|
|
279
286
|
recursive: bool = True):
|
|
280
287
|
req = pb.TerminateRequest(
|
|
281
288
|
instanceId=instance_id,
|
|
282
|
-
output=helpers.get_string_value(shared.to_json(output)),
|
|
289
|
+
output=helpers.get_string_value(shared.to_json(output) if output is not None else None),
|
|
283
290
|
recursive=recursive)
|
|
284
291
|
|
|
285
292
|
self._logger.info(f"Terminating instance '{instance_id}'.")
|
|
@@ -329,7 +336,7 @@ class TaskHubGrpcClient:
|
|
|
329
336
|
req = pb.SignalEntityRequest(
|
|
330
337
|
instanceId=str(entity_instance_id),
|
|
331
338
|
name=operation_name,
|
|
332
|
-
input=helpers.get_string_value(shared.to_json(input)),
|
|
339
|
+
input=helpers.get_string_value(shared.to_json(input) if input is not None else None),
|
|
333
340
|
requestId=str(uuid.uuid4()),
|
|
334
341
|
scheduledTime=None,
|
|
335
342
|
parentTraceContext=None,
|
|
@@ -405,3 +412,34 @@ class TaskHubGrpcClient:
|
|
|
405
412
|
else:
|
|
406
413
|
break
|
|
407
414
|
return entities
|
|
415
|
+
|
|
416
|
+
def clean_entity_storage(self,
|
|
417
|
+
remove_empty_entities: bool = True,
|
|
418
|
+
release_orphaned_locks: bool = True,
|
|
419
|
+
_continuation_token: Optional[pb2.StringValue] = None
|
|
420
|
+
) -> CleanEntityStorageResult:
|
|
421
|
+
self._logger.info("Cleaning entity storage")
|
|
422
|
+
|
|
423
|
+
empty_entities_removed = 0
|
|
424
|
+
orphaned_locks_released = 0
|
|
425
|
+
|
|
426
|
+
while True:
|
|
427
|
+
req = pb.CleanEntityStorageRequest(
|
|
428
|
+
removeEmptyEntities=remove_empty_entities,
|
|
429
|
+
releaseOrphanedLocks=release_orphaned_locks,
|
|
430
|
+
continuationToken=_continuation_token
|
|
431
|
+
)
|
|
432
|
+
resp: pb.CleanEntityStorageResponse = self._stub.CleanEntityStorage(req)
|
|
433
|
+
empty_entities_removed += resp.emptyEntitiesRemoved
|
|
434
|
+
orphaned_locks_released += resp.orphanedLocksReleased
|
|
435
|
+
|
|
436
|
+
if resp.continuationToken and resp.continuationToken.value and resp.continuationToken.value != "0":
|
|
437
|
+
self._logger.info(f"Received continuation token with value {resp.continuationToken.value}, cleaning next page...")
|
|
438
|
+
if _continuation_token and _continuation_token.value and _continuation_token.value == resp.continuationToken.value:
|
|
439
|
+
self._logger.warning(f"Received the same continuation token value {resp.continuationToken.value} again, stopping to avoid infinite loop.")
|
|
440
|
+
break
|
|
441
|
+
_continuation_token = resp.continuationToken
|
|
442
|
+
else:
|
|
443
|
+
break
|
|
444
|
+
|
|
445
|
+
return CleanEntityStorageResult(empty_entities_removed, orphaned_locks_released)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/entities/entity_instance_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/entity_state_shim.py
RENAMED
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/grpc_interceptor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask/internal/orchestrator_service_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev45 → durabletask-0.0.0.dev48}/durabletask.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|