mirror of
https://github.com/datarhei/core.git
synced 2025-10-05 16:07:07 +08:00
Return proper HTTP status on leave
This commit is contained in:
@@ -186,6 +186,7 @@ type cluster struct {
|
||||
}
|
||||
|
||||
var ErrDegraded = errors.New("cluster is currently degraded")
|
||||
var ErrUnknownNode = errors.New("unknown node id")
|
||||
|
||||
func New(config Config) (Cluster, error) {
|
||||
c := &cluster{
|
||||
@@ -717,6 +718,14 @@ func (c *cluster) Leave(origin, id string) error {
|
||||
id = c.nodeID
|
||||
}
|
||||
|
||||
c.nodesLock.RLock()
|
||||
_, hasNode := c.nodes[id]
|
||||
c.nodesLock.RUnlock()
|
||||
|
||||
if !hasNode {
|
||||
return ErrUnknownNode
|
||||
}
|
||||
|
||||
c.logger.Debug().WithFields(log.Fields{
|
||||
"nodeid": id,
|
||||
}).Log("Received leave request for server")
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
@@ -196,7 +197,14 @@ func (h *ClusterHandler) Leave(c echo.Context) error {
|
||||
}
|
||||
}
|
||||
|
||||
h.cluster.Leave("", nodeid.ID)
|
||||
err = h.cluster.Leave("", nodeid.ID)
|
||||
if err != nil {
|
||||
if errors.Is(err, cluster.ErrUnknownNode) {
|
||||
return api.Err(http.StatusNotFound, "", "node not found")
|
||||
}
|
||||
|
||||
return api.Err(http.StatusInternalServerError, "", "%s", err.Error())
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, "OK")
|
||||
}
|
||||
|
Reference in New Issue
Block a user