Skip to content

Commit 7098172

Browse files
authored
Move version check to process_event (#61)
* Move version check to process_event * Pass failure details correctly * Update import * Bump versions
1 parent c60e9bb commit 7098172

File tree

4 files changed

+25
-26
lines changed

4 files changed

+25
-26
lines changed

durabletask-azuremanaged/pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
99

1010
[project]
1111
name = "durabletask.azuremanaged"
12-
version = "0.3.0"
12+
version = "0.3.1"
1313
description = "Durable Task Python SDK provider implementation for the Azure Durable Task Scheduler"
1414
keywords = [
1515
"durable",
@@ -26,7 +26,7 @@ requires-python = ">=3.9"
2626
license = {file = "LICENSE"}
2727
readme = "README.md"
2828
dependencies = [
29-
"durabletask>=0.4.0",
29+
"durabletask>=0.4.1",
3030
"azure-identity>=1.19.0"
3131
]
3232

durabletask/internal/exceptions.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
import durabletask.internal.orchestrator_service_pb2 as pb
2+
3+
14
class VersionFailureException(Exception):
2-
pass
5+
def __init__(self, error_details: pb.TaskFailureDetails) -> None:
6+
super().__init__()
7+
self.error_details = error_details
38

49

510
class AbandonOrchestrationError(Exception):
6-
def __init__(self, *args: object) -> None:
7-
super().__init__(*args)
11+
pass

durabletask/worker.py

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -970,7 +970,6 @@ def execute(
970970
)
971971

972972
ctx = _RuntimeOrchestrationContext(instance_id, self._registry)
973-
version_failure = None
974973
try:
975974
# Rebuild local state by replaying old history into the orchestrator function
976975
self._logger.debug(
@@ -980,23 +979,6 @@ def execute(
980979
for old_event in old_events:
981980
self.process_event(ctx, old_event)
982981

983-
# Process versioning if applicable
984-
execution_started_events = [e.executionStarted for e in old_events if e.HasField("executionStarted")]
985-
# We only check versioning if there are executionStarted events - otherwise, on the first replay when
986-
# ctx.version will be Null, we may invalidate orchestrations early depending on the versioning strategy.
987-
if self._registry.versioning and len(execution_started_events) > 0:
988-
version_failure = self.evaluate_orchestration_versioning(
989-
self._registry.versioning,
990-
ctx.version
991-
)
992-
if version_failure:
993-
self._logger.warning(
994-
f"Orchestration version did not meet worker versioning requirements. "
995-
f"Error action = '{self._registry.versioning.failure_strategy}'. "
996-
f"Version error = '{version_failure}'"
997-
)
998-
raise pe.VersionFailureException
999-
1000982
# Get new actions by executing newly received events into the orchestrator function
1001983
if self._logger.level <= logging.DEBUG:
1002984
summary = _get_new_event_summary(new_events)
@@ -1009,8 +991,8 @@ def execute(
1009991

1010992
except pe.VersionFailureException as ex:
1011993
if self._registry.versioning and self._registry.versioning.failure_strategy == VersionFailureStrategy.FAIL:
1012-
if version_failure:
1013-
ctx.set_failed(version_failure)
994+
if ex.error_details:
995+
ctx.set_failed(ex.error_details)
1014996
else:
1015997
ctx.set_failed(ex)
1016998
elif self._registry.versioning and self._registry.versioning.failure_strategy == VersionFailureStrategy.REJECT:
@@ -1068,6 +1050,19 @@ def process_event(
10681050
if event.executionStarted.version:
10691051
ctx._version = event.executionStarted.version.value
10701052

1053+
if self._registry.versioning:
1054+
version_failure = self.evaluate_orchestration_versioning(
1055+
self._registry.versioning,
1056+
ctx.version
1057+
)
1058+
if version_failure:
1059+
self._logger.warning(
1060+
f"Orchestration version did not meet worker versioning requirements. "
1061+
f"Error action = '{self._registry.versioning.failure_strategy}'. "
1062+
f"Version error = '{version_failure}'"
1063+
)
1064+
raise pe.VersionFailureException(version_failure)
1065+
10711066
# deserialize the input, if any
10721067
input = None
10731068
if (

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
99

1010
[project]
1111
name = "durabletask"
12-
version = "0.4.0"
12+
version = "0.4.1"
1313
description = "A Durable Task Client SDK for Python"
1414
keywords = [
1515
"durable",

0 commit comments

Comments
 (0)