diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index 59ccca5c8..2d9c497cd 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -202,9 +202,15 @@ func (s *Server) workers(w http.ResponseWriter, req *http.Request) { resp, err = s.controller.ListQueue(uint32(workerID)) } else if matches := util.FindNamedStringSubmatch(workerStatusURL, req.URL.Path); matches != nil { - workerID, _ := strconv.Atoi(matches["id"]) + var workerStatus *spec.WorkerStatus - resp, err = s.controller.WorkerStatus(uint32(workerID)) + workerID, _ := strconv.Atoi(matches["id"]) + workerStatus, err = s.controller.WorkerStatus(uint32(workerID)) + if workerStatus == nil { + resp = "idle" + } else { + resp = workerStatus + } } else if workerAllStatus.MatchString(req.URL.Path) { s.allWorkers(w, req) return @@ -234,14 +240,19 @@ func (s *Server) allQueues(w http.ResponseWriter, r *http.Request) { func (s *Server) allWorkers(w http.ResponseWriter, r *http.Request) { workersCnt := s.controller.GetWorkersCnt() - resp := make(map[uint32]*spec.WorkerStatus, workersCnt) + resp := make(map[uint32]interface{}, workersCnt) for i := uint32(0); i < workersCnt; i++ { status, err := s.controller.WorkerStatus(i) if err != nil { + s.respond(nil, err, w) continue } - resp[i] = status + if status == nil { + resp[i] = "idle" + } else { + resp[i] = status + } } s.respond(resp, nil, w) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index b1175fe96..b826106f9 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -73,7 +73,7 @@ type Cluster struct { teamsAPIClient *teams.API KubeClient k8sutil.KubernetesClient //TODO: move clients to the better place? currentProcess spec.Process - processMu sync.RWMutex + processMu sync.RWMutex } type compareStatefulsetResult struct { diff --git a/pkg/cluster/exec.go b/pkg/cluster/exec.go index beb551222..f11ceb457 100644 --- a/pkg/cluster/exec.go +++ b/pkg/cluster/exec.go @@ -2,8 +2,8 @@ package cluster import ( "bytes" - "strings" "fmt" + "strings" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" diff --git a/pkg/controller/status.go b/pkg/controller/status.go index af670e1a1..27465fdd7 100644 --- a/pkg/controller/status.go +++ b/pkg/controller/status.go @@ -173,7 +173,7 @@ func (c *Controller) GetWorkersCnt() uint32 { func (c *Controller) WorkerStatus(workerID uint32) (*spec.WorkerStatus, error) { obj, ok := c.curWorkerCluster.Load(workerID) if !ok || obj == nil { - return nil, fmt.Errorf("worker has no status") + return nil, nil } cl, ok := obj.(*cluster.Cluster)