@@ -172,8 +172,12 @@ func init() {
172172 })
173173 go func () {
174174 // 等待一个周期的原因,避免重载执行正常的任务
175- time .Sleep (time .Duration (HeartbeatInterval ) * time .Second )
176- reloadRunningTaskFromdb ()
175+ // 因为http svr 是graceful shutdown, 可能旧的服务会接受请求
176+ for i := 0 ; i < 5 ; i ++ {
177+ logger .Info ("the %d times reload running task" , i )
178+ time .Sleep (time .Duration (HeartbeatInterval ) * time .Second )
179+ reloadRunningTaskFromdb (i + HeartbeatInterval )
180+ }
177181 rdb .Close ()
178182 }()
179183}
@@ -185,7 +189,8 @@ type ReloadParam struct {
185189}
186190
187191// reloadRunningTaskFromdb 重载重启服务前运行的任务 加锁是避免多个服务同时启动,避免相同任务被重载
188- func reloadRunningTaskFromdb () {
192+ // nolint
193+ func reloadRunningTaskFromdb (heartbeatInterval int ) {
189194 key := "simulation:reload:lock"
190195 locker := redislock .New (rdb )
191196 ctx := context .Background ()
@@ -200,9 +205,8 @@ func reloadRunningTaskFromdb() {
200205 }()
201206 var tks []model.TbSimulationTask
202207 if err := model .DB .Model (model.TbSimulationTask {}).Where (
203- //nolint
204- "phase not in (?) and create_time > DATE_SUB(NOW(),INTERVAL 2 HOUR) and time_to_sec(timediff(now(),heartbeat_time)) > ? " ,
205- []string {model .PhaseDone , model .PhaseReloading }, HeartbeatInterval ).Scan (& tks ).Error ; err != nil {
208+ "phase not in (?) and create_time > DATE_SUB(NOW(),INTERVAL 2 HOUR) and time_to_sec(timediff(now(),heartbeat_time)) > ?" ,
209+ []string {model .PhaseDone , model .PhaseReloading }, heartbeatInterval ).Scan (& tks ).Error ; err != nil {
206210 logger .Error ("get running task failed %s" , err .Error ())
207211 return
208212 }
0 commit comments