mirror of
https://github.com/datarhei/core.git
synced 2025-10-06 00:17: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 ErrDegraded = errors.New("cluster is currently degraded")
|
||||||
|
var ErrUnknownNode = errors.New("unknown node id")
|
||||||
|
|
||||||
func New(config Config) (Cluster, error) {
|
func New(config Config) (Cluster, error) {
|
||||||
c := &cluster{
|
c := &cluster{
|
||||||
@@ -717,6 +718,14 @@ func (c *cluster) Leave(origin, id string) error {
|
|||||||
id = c.nodeID
|
id = c.nodeID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.nodesLock.RLock()
|
||||||
|
_, hasNode := c.nodes[id]
|
||||||
|
c.nodesLock.RUnlock()
|
||||||
|
|
||||||
|
if !hasNode {
|
||||||
|
return ErrUnknownNode
|
||||||
|
}
|
||||||
|
|
||||||
c.logger.Debug().WithFields(log.Fields{
|
c.logger.Debug().WithFields(log.Fields{
|
||||||
"nodeid": id,
|
"nodeid": id,
|
||||||
}).Log("Received leave request for server")
|
}).Log("Received leave request for server")
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"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")
|
return c.JSON(http.StatusOK, "OK")
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user