@@ -47,8 +47,10 @@ type SyncMeta struct {
4747//go:generate mockery --name=SyncManager --structname=MockSyncManager --output=./ --filename=mock_sync_manager.go --with-expecter --inpackage
4848type SyncManager interface {
4949 // SyncData is the method to submit sync task.
50- SyncData (ctx context.Context , task Task , callbacks ... func (error ) error ) * conc.Future [struct {}]
50+ SyncData (ctx context.Context , task Task , callbacks ... func (error ) error ) ( * conc.Future [struct {}], error )
5151
52+ // Close waits for the task to finish and then shuts down the sync manager.
53+ Close () error
5254 TaskStatsJSON () string
5355}
5456
@@ -97,13 +99,17 @@ func (mgr *syncManager) resizeHandler(evt *config.Event) {
9799 }
98100}
99101
100- func (mgr * syncManager ) SyncData (ctx context.Context , task Task , callbacks ... func (error ) error ) * conc.Future [struct {}] {
102+ func (mgr * syncManager ) SyncData (ctx context.Context , task Task , callbacks ... func (error ) error ) (* conc.Future [struct {}], error ) {
103+ if mgr .workerPool .IsClosed () {
104+ return nil , fmt .Errorf ("sync manager is closed" )
105+ }
106+
101107 switch t := task .(type ) {
102108 case * SyncTask :
103109 t .WithChunkManager (mgr .chunkManager )
104110 }
105111
106- return mgr .safeSubmitTask (ctx , task , callbacks ... )
112+ return mgr .safeSubmitTask (ctx , task , callbacks ... ), nil
107113}
108114
109115// safeSubmitTask submits task to SyncManager
@@ -126,6 +132,7 @@ func (mgr *syncManager) submit(ctx context.Context, key int64, task Task, callba
126132 }
127133 callbacks = append ([]func (error ) error {handler }, callbacks ... )
128134 log .Info ("sync mgr sumbit task with key" , zap .Int64 ("key" , key ))
135+
129136 return mgr .Submit (ctx , key , task , callbacks ... )
130137}
131138
@@ -142,3 +149,8 @@ func (mgr *syncManager) TaskStatsJSON() string {
142149 }
143150 return string (ret )
144151}
152+
153+ func (mgr * syncManager ) Close () error {
154+ timeout := paramtable .Get ().CommonCfg .SyncTaskPoolReleaseTimeoutSeconds .GetAsDuration (time .Second )
155+ return mgr .workerPool .ReleaseTimeout (timeout )
156+ }
0 commit comments