Return proper HTTP status on leave

This commit is contained in:
Ingo Oppermann
2024-06-12 15:08:07 +02:00
parent 1a64fddbb1
commit f5d9725a48
2 changed files with 18 additions and 1 deletions

View File

@@ -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")

View File

@@ -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")
}