durabletask 0.0.0.dev39__tar.gz → 0.0.0.dev41__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.dev39 → durabletask-0.0.0.dev41}/PKG-INFO +1 -1
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/client.py +35 -2
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask.egg-info/PKG-INFO +1 -1
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/pyproject.toml +1 -1
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/LICENSE +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/README.md +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/__init__.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/__init__.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/durable_entity.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/entity_context.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/entity_instance_id.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/entity_lock.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/entity_metadata.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/entity_operation_failed_exception.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/entity_state_shim.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/exceptions.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/grpc_interceptor.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/helpers.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/json_encode_output_exception.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/orchestration_entity_context.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/orchestrator_service_pb2.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/orchestrator_service_pb2.pyi +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/orchestrator_service_pb2_grpc.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/proto_task_hub_sidecar_service_stub.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/shared.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/py.typed +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/task.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/worker.py +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask.egg-info/SOURCES.txt +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask.egg-info/dependency_links.txt +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask.egg-info/requires.txt +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask.egg-info/top_level.txt +0 -0
- {durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/setup.cfg +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import logging
|
|
5
5
|
import uuid
|
|
6
6
|
from dataclasses import dataclass
|
|
7
|
-
from datetime import datetime,
|
|
7
|
+
from datetime import datetime, timezone
|
|
8
8
|
from enum import Enum
|
|
9
9
|
from typing import Any, List, Optional, Sequence, TypeVar, Union
|
|
10
10
|
|
|
@@ -63,6 +63,12 @@ class PurgeInstancesResult:
|
|
|
63
63
|
self.is_complete = is_complete
|
|
64
64
|
|
|
65
65
|
|
|
66
|
+
class CleanEntityStorageResult:
|
|
67
|
+
def __init__(self, empty_entities_removed: int, orphaned_locks_released: int):
|
|
68
|
+
self.empty_entities_removed = empty_entities_removed
|
|
69
|
+
self.orphaned_locks_released = orphaned_locks_released
|
|
70
|
+
|
|
71
|
+
|
|
66
72
|
class OrchestrationFailedError(Exception):
|
|
67
73
|
def __init__(self, message: str, failure_details: task.FailureDetails):
|
|
68
74
|
super().__init__(message)
|
|
@@ -356,7 +362,7 @@ class TaskHubGrpcClient:
|
|
|
356
362
|
page_size: Optional[int] = None,
|
|
357
363
|
_continuation_token: Optional[pb2.StringValue] = None
|
|
358
364
|
) -> List[EntityMetadata]:
|
|
359
|
-
self._logger.info(
|
|
365
|
+
self._logger.info("Getting entities")
|
|
360
366
|
query_request = pb.QueryEntitiesRequest(
|
|
361
367
|
query=pb.EntityQuery(
|
|
362
368
|
instanceIdStartsWith=helpers.get_string_value(instance_id_starts_with),
|
|
@@ -382,3 +388,30 @@ class TaskHubGrpcClient:
|
|
|
382
388
|
_continuation_token=resp.continuationToken
|
|
383
389
|
)
|
|
384
390
|
return entities
|
|
391
|
+
|
|
392
|
+
def clean_entity_storage(self,
|
|
393
|
+
remove_empty_entities: bool = True,
|
|
394
|
+
release_orphaned_locks: bool = True,
|
|
395
|
+
_continuation_token: Optional[pb2.StringValue] = None
|
|
396
|
+
) -> CleanEntityStorageResult:
|
|
397
|
+
self._logger.info("Cleaning entity storage")
|
|
398
|
+
req = pb.CleanEntityStorageRequest(
|
|
399
|
+
removeEmptyEntities=remove_empty_entities,
|
|
400
|
+
releaseOrphanedLocks=release_orphaned_locks,
|
|
401
|
+
continuationToken=_continuation_token
|
|
402
|
+
)
|
|
403
|
+
resp: pb.CleanEntityStorageResponse = self._stub.CleanEntityStorage(req)
|
|
404
|
+
empty_entities_removed = resp.emptyEntitiesRemoved
|
|
405
|
+
orphaned_locks_released = resp.orphanedLocksReleased
|
|
406
|
+
|
|
407
|
+
if resp.continuationToken and resp.continuationToken.value != "0":
|
|
408
|
+
self._logger.info(f"Received continuation token with value {resp.continuationToken.value}, cleaning next page...")
|
|
409
|
+
next_result = self.clean_entity_storage(
|
|
410
|
+
remove_empty_entities=remove_empty_entities,
|
|
411
|
+
release_orphaned_locks=release_orphaned_locks,
|
|
412
|
+
_continuation_token=resp.continuationToken
|
|
413
|
+
)
|
|
414
|
+
empty_entities_removed += next_result.empty_entities_removed
|
|
415
|
+
orphaned_locks_released += next_result.orphaned_locks_released
|
|
416
|
+
|
|
417
|
+
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.dev39 → durabletask-0.0.0.dev41}/durabletask/entities/entity_instance_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/entity_state_shim.py
RENAMED
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/durabletask/internal/grpc_interceptor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{durabletask-0.0.0.dev39 → durabletask-0.0.0.dev41}/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.dev39 → durabletask-0.0.0.dev41}/durabletask.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|