Make timeout events appear at the right time in workflow history
This commit is contained in:
parent
d618585790
commit
65c35bfa69
@ -159,16 +159,19 @@ class WorkflowExecution(object):
|
|||||||
self._add_event(
|
self._add_event(
|
||||||
"WorkflowExecutionTimedOut",
|
"WorkflowExecutionTimedOut",
|
||||||
child_policy=self.child_policy,
|
child_policy=self.child_policy,
|
||||||
|
event_timestamp=_timeout.timestamp,
|
||||||
timeout_type=self.timeout_type,
|
timeout_type=self.timeout_type,
|
||||||
)
|
)
|
||||||
|
|
||||||
# decision tasks timeouts
|
# decision tasks timeouts
|
||||||
for task in self.decision_tasks:
|
for task in self.decision_tasks:
|
||||||
if task.state == "STARTED" and task.first_timeout():
|
_timeout = task.first_timeout()
|
||||||
|
if task.state == "STARTED" and _timeout:
|
||||||
self.should_schedule_decision_next = True
|
self.should_schedule_decision_next = True
|
||||||
task.process_timeouts()
|
task.process_timeouts()
|
||||||
self._add_event(
|
self._add_event(
|
||||||
"DecisionTaskTimedOut",
|
"DecisionTaskTimedOut",
|
||||||
|
event_timestamp=_timeout.timestamp,
|
||||||
scheduled_event_id=task.scheduled_event_id,
|
scheduled_event_id=task.scheduled_event_id,
|
||||||
started_event_id=task.started_event_id,
|
started_event_id=task.started_event_id,
|
||||||
timeout_type=task.timeout_type,
|
timeout_type=task.timeout_type,
|
||||||
@ -176,17 +179,20 @@ class WorkflowExecution(object):
|
|||||||
|
|
||||||
# activity tasks timeouts
|
# activity tasks timeouts
|
||||||
for task in self.activity_tasks:
|
for task in self.activity_tasks:
|
||||||
if task.open and task.first_timeout():
|
_timeout = task.first_timeout()
|
||||||
|
if task.open and _timeout:
|
||||||
self.should_schedule_decision_next = True
|
self.should_schedule_decision_next = True
|
||||||
task.process_timeouts()
|
task.process_timeouts()
|
||||||
self._add_event(
|
self._add_event(
|
||||||
"ActivityTaskTimedOut",
|
"ActivityTaskTimedOut",
|
||||||
details=task.details,
|
details=task.details,
|
||||||
|
event_timestamp=_timeout.timestamp,
|
||||||
scheduled_event_id=task.scheduled_event_id,
|
scheduled_event_id=task.scheduled_event_id,
|
||||||
started_event_id=task.started_event_id,
|
started_event_id=task.started_event_id,
|
||||||
timeout_type=task.timeout_type,
|
timeout_type=task.timeout_type,
|
||||||
)
|
)
|
||||||
# schedule decision task if needed
|
# schedule decision task if needed
|
||||||
|
# TODO: make decision appear as if it has been scheduled immediately after the timeout
|
||||||
if self.should_schedule_decision_next:
|
if self.should_schedule_decision_next:
|
||||||
self.schedule_decision_task()
|
self.schedule_decision_task()
|
||||||
|
|
||||||
|
@ -30,6 +30,8 @@ def test_activity_task_heartbeat_timeout():
|
|||||||
resp["events"][-2]["eventType"].should.equal("ActivityTaskTimedOut")
|
resp["events"][-2]["eventType"].should.equal("ActivityTaskTimedOut")
|
||||||
attrs = resp["events"][-2]["activityTaskTimedOutEventAttributes"]
|
attrs = resp["events"][-2]["activityTaskTimedOutEventAttributes"]
|
||||||
attrs["timeoutType"].should.equal("HEARTBEAT")
|
attrs["timeoutType"].should.equal("HEARTBEAT")
|
||||||
|
# checks that event has been emitted at 12:05:00, not 12:05:30
|
||||||
|
resp["events"][-2]["eventTimestamp"].should.equal(1420113900)
|
||||||
|
|
||||||
resp["events"][-1]["eventType"].should.equal("DecisionTaskScheduled")
|
resp["events"][-1]["eventType"].should.equal("DecisionTaskScheduled")
|
||||||
|
|
||||||
@ -63,6 +65,8 @@ def test_decision_task_start_to_close_timeout():
|
|||||||
attrs.should.equal({
|
attrs.should.equal({
|
||||||
"scheduledEventId": 2, "startedEventId": 3, "timeoutType": "START_TO_CLOSE"
|
"scheduledEventId": 2, "startedEventId": 3, "timeoutType": "START_TO_CLOSE"
|
||||||
})
|
})
|
||||||
|
# checks that event has been emitted at 12:05:00, not 12:05:30
|
||||||
|
resp["events"][-2]["eventTimestamp"].should.equal(1420113900)
|
||||||
|
|
||||||
# Workflow Execution Start to Close timeout
|
# Workflow Execution Start to Close timeout
|
||||||
# Default value in workflow helpers: 2 hours
|
# Default value in workflow helpers: 2 hours
|
||||||
@ -92,3 +96,5 @@ def test_workflow_execution_start_to_close_timeout():
|
|||||||
attrs.should.equal({
|
attrs.should.equal({
|
||||||
"childPolicy": "ABANDON", "timeoutType": "START_TO_CLOSE"
|
"childPolicy": "ABANDON", "timeoutType": "START_TO_CLOSE"
|
||||||
})
|
})
|
||||||
|
# checks that event has been emitted at 14:00:00, not 14:00:30
|
||||||
|
resp["events"][-1]["eventTimestamp"].should.equal(1420120800)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user