MCPcopy Create free account
hub / github.com/apache/kvrocks-controller / Failover

Method Failover

server/api/shard.go:117–146  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

115}
116
117func (handler *ShardHandler) Failover(c *gin.Context) {
118 ns := c.Param("namespace")
119 cluster, _ := c.MustGet(consts.ContextKeyCluster).(*store.Cluster)
120
121 var req struct {
122 PreferredNodeID string `json:"preferred_node_id"`
123 }
124 if c.Request.Body != nil {
125 if err := c.ShouldBindJSON(&req); err != nil {
126 helper.ResponseBadRequest(c, err)
127 return
128 }
129 }
130 if len(req.PreferredNodeID) > 0 && len(req.PreferredNodeID) != store.NodeIDLen {
131 helper.ResponseBadRequest(c, fmt.Errorf("invalid node id: %s", req.PreferredNodeID))
132 return
133 }
134 // We have checked this if statement in middleware.RequiredClusterShard
135 shardIndex, _ := strconv.Atoi(c.Param("shard"))
136 newMasterNodeID, err := cluster.PromoteNewMaster(c, shardIndex, "", req.PreferredNodeID)
137 if err != nil {
138 helper.ResponseError(c, err)
139 return
140 }
141 if err := handler.s.UpdateCluster(c, ns, cluster); err != nil {
142 helper.ResponseError(c, err)
143 return
144 }
145 helper.ResponseOK(c, gin.H{"new_master_id": newMasterNodeID})
146}

Callers 1

TestClusterFailoverFunction · 0.95

Calls 6

ResponseBadRequestFunction · 0.92
ResponseErrorFunction · 0.92
ResponseOKFunction · 0.92
ErrorfMethod · 0.80
PromoteNewMasterMethod · 0.80
UpdateClusterMethod · 0.65

Tested by 1

TestClusterFailoverFunction · 0.76