From 2765aa8c35efdf73c621e3527a385241c3d5214e Mon Sep 17 00:00:00 2001 From: Gaius Date: Tue, 28 Mar 2023 18:56:53 +0800 Subject: [PATCH] fix: fsm events failed when register task (#2225) fix: fsm events failed when register task. When there is a high concurrency of registration tasks, it can cause error InTransitionError, because of looplab/fsm library uses optimistic locking to implement state transitions, refer to https://github.com/looplab/fsm/blob/main/fsm.go#L312. Signed-off-by: Gaius --- scheduler/service/service_v1.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/service/service_v1.go b/scheduler/service/service_v1.go index 2a380cbb8a0..bd00fa4124a 100644 --- a/scheduler/service/service_v1.go +++ b/scheduler/service/service_v1.go @@ -662,7 +662,7 @@ func (v *V1) triggerTask(ctx context.Context, req *schedulerv1.PeerTaskRequest, // If the task triggers the TaskEventDownload failed and it has no available peer, // let the peer do the scheduling. - if !task.FSM.Is(resource.TaskStateRunning) { + if task.FSM.Can(resource.TaskEventDownload) { if err := task.FSM.Event(ctx, resource.TaskEventDownload); err != nil { peer.Log.Errorf("task fsm event failed: %s", err.Error()) return err