Jelajahi Sumber

Refresh worker LastOnline when worker updates

Jiajie Chen 5 tahun lalu
induk
melakukan
fd274cc976
2 mengubah file dengan 13 tambahan dan 0 penghapusan
  1. 10 0
      manager/db.go
  2. 3 0
      manager/server.go

+ 10 - 0
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 {

+ 3 - 0
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 {