fix: advance target steps past peer events
This commit is contained in:
+42
-24
@@ -120,7 +120,11 @@ class ClientJobExecutor:
|
||||
replay = self._replay(
|
||||
command.job_id, command.expected_last_event_sequence
|
||||
)
|
||||
if replay and replay[-1].type in {
|
||||
step_replay = [
|
||||
event for event in replay
|
||||
if event.progress.step == command.step
|
||||
]
|
||||
if step_replay and step_replay[-1].type in {
|
||||
control_pb2.JOB_EVENT_TYPE_STEP_SUCCEEDED,
|
||||
control_pb2.JOB_EVENT_TYPE_COMMITTED,
|
||||
control_pb2.JOB_EVENT_TYPE_SUCCEEDED,
|
||||
@@ -132,31 +136,45 @@ class ClientJobExecutor:
|
||||
for event in replay:
|
||||
event_callback(event)
|
||||
return replay
|
||||
started = replay[0] if replay else self._event(
|
||||
definition,
|
||||
sequence=command.expected_last_event_sequence + 1,
|
||||
revision=command.expected_job_revision + 1,
|
||||
event_type=control_pb2.JOB_EVENT_TYPE_STEP_STARTED,
|
||||
state=job_pb2.JOB_STATE_RUNNING,
|
||||
committed=(
|
||||
self._committed(command.job_id)
|
||||
or command.step == job_pb2.JOB_STEP_KIND_STAGING_CLEANUP
|
||||
or (
|
||||
command.step == job_pb2.JOB_STEP_KIND_SAFE_FILE_UNLINK
|
||||
and self.store.get_job_artifact(
|
||||
command.job_id, "qb-entry-removed"
|
||||
) is not None
|
||||
)
|
||||
),
|
||||
step=command.step,
|
||||
step_state=job_pb2.STEP_STATE_RUNNING,
|
||||
)
|
||||
if not replay:
|
||||
if step_replay:
|
||||
started = step_replay[0]
|
||||
cursor = step_replay[-1]
|
||||
emitted = list(step_replay)
|
||||
else:
|
||||
previous = replay[-1] if replay else None
|
||||
started = self._event(
|
||||
definition,
|
||||
sequence=(
|
||||
previous.sequence + 1
|
||||
if previous is not None
|
||||
else command.expected_last_event_sequence + 1
|
||||
),
|
||||
revision=(
|
||||
previous.job_revision + 1
|
||||
if previous is not None
|
||||
else command.expected_job_revision + 1
|
||||
),
|
||||
event_type=control_pb2.JOB_EVENT_TYPE_STEP_STARTED,
|
||||
state=job_pb2.JOB_STATE_RUNNING,
|
||||
committed=(
|
||||
self._committed(command.job_id)
|
||||
or command.step == job_pb2.JOB_STEP_KIND_STAGING_CLEANUP
|
||||
or (
|
||||
command.step == job_pb2.JOB_STEP_KIND_SAFE_FILE_UNLINK
|
||||
and self.store.get_job_artifact(
|
||||
command.job_id, "qb-entry-removed"
|
||||
) is not None
|
||||
)
|
||||
),
|
||||
step=command.step,
|
||||
step_state=job_pb2.STEP_STATE_RUNNING,
|
||||
)
|
||||
self._record(definition, started)
|
||||
cursor = started
|
||||
emitted = [started]
|
||||
if event_callback is not None:
|
||||
event_callback(started)
|
||||
emitted = [started]
|
||||
cursor = started
|
||||
for event in emitted:
|
||||
event_callback(event)
|
||||
speed_sample = [time.monotonic(), 0]
|
||||
|
||||
def progress(
|
||||
|
||||
Reference in New Issue
Block a user