diff --git a/manager/db.go b/manager/db.go index 68caae7..7c02180 100644 --- a/manager/db.go +++ b/manager/db.go @@ -17,6 +17,7 @@ type dbAdapter interface { GetWorker(workerID string) (WorkerStatus, error) DeleteWorker(workerID string) error CreateWorker(w WorkerStatus) (WorkerStatus, error) + RefreshWorker(workerID string) (WorkerStatus, error) UpdateMirrorStatus(workerID, mirrorID string, status MirrorStatus) (MirrorStatus, error) GetMirrorStatus(workerID, mirrorID string) (MirrorStatus, error) ListMirrorStatus(workerID string) ([]MirrorStatus, error) @@ -125,6 +126,15 @@ func (b *boltAdapter) CreateWorker(w WorkerStatus) (WorkerStatus, error) { return w, err } +func (b *boltAdapter) RefreshWorker(workerID string) (w WorkerStatus, err error) { + w, err = b.GetWorker(workerID) + if err == nil { + w.LastOnline = time.Now() + w, err = b.CreateWorker(w) + } + return w, err +} + func (b *boltAdapter) UpdateMirrorStatus(workerID, mirrorID string, status MirrorStatus) (MirrorStatus, error) { id := mirrorID + "/" + workerID err := b.db.Update(func(tx *bolt.Tx) error { diff --git a/manager/server.go b/manager/server.go index 04ce207..18a94da 100644 --- a/manager/server.go +++ b/manager/server.go @@ -270,6 +270,7 @@ func (s *Manager) updateSchedulesOfWorker(c *gin.Context) { } s.rwmu.RLock() + s.adapter.RefreshWorker(workerID) curStatus, err := s.adapter.GetMirrorStatus(workerID, mirrorName) s.rwmu.RUnlock() if err != nil { @@ -314,6 +315,7 @@ func (s *Manager) updateJobOfWorker(c *gin.Context) { } s.rwmu.RLock() + s.adapter.RefreshWorker(workerID) curStatus, _ := s.adapter.GetMirrorStatus(workerID, mirrorName) s.rwmu.RUnlock() @@ -376,6 +378,7 @@ func (s *Manager) updateMirrorSize(c *gin.Context) { mirrorName := msg.Name s.rwmu.RLock() + s.adapter.RefreshWorker(workerID) status, err := s.adapter.GetMirrorStatus(workerID, mirrorName) s.rwmu.RUnlock() if err != nil {