From 3352deff3973964f5a60d080b6a77d92fe75c005 Mon Sep 17 00:00:00 2001 From: Eryu Guan <45746212+eryugey@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:07:21 +0800 Subject: [PATCH] fix: unregister task from scheduler in storage.deleteTask (#2100) On graceful shutdown we will call forceGC() to delete all cached tasks if 'keepStorage' is false. And we rely on deleteTask() to delete the given task from both local storage and scheduler. But commit 86a6030c8f10 ("feat: unregister failed task storage (#1717)") changed MarkReclaim() to MarkInvalid() in deleteTask(), and resulted in task leak in scheduler. Fix it by calling MarkReclaim() in deleteTask(). Fixes: 86a6030c8f10 ("feat: unregister failed task storage (#1717)") Signed-off-by: Eryu Guan --- client/daemon/storage/storage_manager.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/daemon/storage/storage_manager.go b/client/daemon/storage/storage_manager.go index 74db496df..9117ac5fb 100644 --- a/client/daemon/storage/storage_manager.go +++ b/client/daemon/storage/storage_manager.go @@ -886,6 +886,7 @@ func (s *storageManager) TryGC() (bool, error) { return true, nil } +// delete the given task from local storage and unregister it from scheduler. func (s *storageManager) deleteTask(meta PeerTaskMetadata) error { task, ok := s.LoadAndDeleteTask(meta) if !ok { @@ -899,7 +900,8 @@ func (s *storageManager) deleteTask(meta PeerTaskMetadata) error { } else { s.cleanSubIndex(meta.TaskID, meta.PeerID) } - task.(Reclaimer).MarkInvalid() + // MarkReclaim() will call gcCallback, which will unregister task from scheduler + task.(Reclaimer).MarkReclaim() return task.(Reclaimer).Reclaim() }