Skip to content

Commit

Permalink
ctl: add v1/raft/disable api
Browse files Browse the repository at this point in the history
  • Loading branch information
zhyass committed Jul 15, 2021
1 parent 5494c2b commit 0abe249
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/ctl/router.go
Expand Up @@ -28,6 +28,7 @@ func (admin *Admin) NewRouter() (rest.App, error) {
rest.Get("/v1/raft/status", v1.RaftStatusHandler(log, xenon)),
rest.Post("/v1/raft/trytoleader", v1.RaftTryToLeaderHandler(log, xenon)),
rest.Put("/v1/raft/disablechecksemisync", v1.RaftDisableCheckSemiSyncHandler(log, xenon)),
rest.Put("/v1/raft/disable", v1.RaftDisableHandler(log, xenon)),

// xenon.
rest.Get("/v1/xenon/ping", v1.XenonPingHandler(log, xenon)),
Expand Down
31 changes: 27 additions & 4 deletions src/ctl/v1/raft.go
Expand Up @@ -78,7 +78,7 @@ func raftTryToLeaderHandler(log *xlog.Log, xenon *server.Server, w rest.Response
log.Warning("api.v1.raft.trytoleader.[%v].propose.done", address)
}

// RaftTryToLeaderHandler impl.
// RaftDisableCheckSemiSyncHandler impl.
func RaftDisableCheckSemiSyncHandler(log *xlog.Log, xenon *server.Server) rest.HandlerFunc {
f := func(w rest.ResponseWriter, r *rest.Request) {
raftDisableCheckSemiSyncHandler(log, xenon, w, r)
Expand All @@ -88,10 +88,33 @@ func RaftDisableCheckSemiSyncHandler(log *xlog.Log, xenon *server.Server) rest.H

func raftDisableCheckSemiSyncHandler(log *xlog.Log, xenon *server.Server, w rest.ResponseWriter, r *rest.Request) {
address := xenon.Address()
log.Warning("api.v1.disablechecksemisync.[%v].prepare.to.disable.check.semi-sync", address)
log.Warning("api.v1.raft.disablechecksemisync.[%v].prepare.to.disable.check.semi-sync", address)
if err := callx.RaftDisableCheckSemiSyncRPC(address); err != nil {
log.Error("api.v1.disablechecksemisync.error:%+v", err)
log.Error("api.v1.raft.disablechecksemisync.error:%+v", err)
rest.Error(w, err.Error(), http.StatusInternalServerError)
}
log.Warning("api.v1.raft.disablechecksemisync.[%v].disable.check.semi-sync.done", address)
}

// RaftDisableHandler impl.
func RaftDisableHandler(log *xlog.Log, xenon *server.Server) rest.HandlerFunc {
f := func(w rest.ResponseWriter, r *rest.Request) {
raftDisableHandler(log, xenon, w, r)
}
return f
}

func raftDisableHandler(log *xlog.Log, xenon *server.Server, w rest.ResponseWriter, r *rest.Request) {
address := xenon.Address()
log.Warning("api.v1.raft.disable.[%v].prepare.to.disable.raft", address)
rsp, err := callx.DisableRaftRPC(address)
if err != nil {
log.Error("api.v1.raft.disable.error:%+v", err)
rest.Error(w, err.Error(), http.StatusInternalServerError)
}
if rsp.RetCode != model.OK {
log.Error("api.v1.raft.disable.error:rsp[%v] != [OK]", rsp.RetCode)
rest.Error(w, err.Error(), http.StatusInternalServerError)
}
log.Warning("api.v1.disablechecksemisync.[%v].disable.check.semi-sync.done", address)
log.Warning("api.v1.raft.disable.[%v].done", address)
}
10 changes: 10 additions & 0 deletions src/ctl/v1/raft_test.go
Expand Up @@ -45,6 +45,7 @@ func TestCtlV1Raft(t *testing.T) {
rest.Get("/v1/raft/status", RaftStatusHandler(log, xenon)),
rest.Post("/v1/raft/trytoleader", RaftTryToLeaderHandler(log, xenon)),
rest.Put("/v1/raft/disablechecksemisync", RaftDisableCheckSemiSyncHandler(log, xenon)),
rest.Put("/v1/raft/disable", RaftDisableHandler(log, xenon)),
)
api.SetApp(router)
handler := api.MakeHandler()
Expand Down Expand Up @@ -97,4 +98,13 @@ func TestCtlV1Raft(t *testing.T) {
recorded := test.RunRequest(t, handler, req)
recorded.CodeIs(200)
}

// disable 200.
{
req := test.MakeSimpleRequest("PUT", "http://localhost/v1/raft/disable", nil)
encoded := base64.StdEncoding.EncodeToString([]byte("root:"))
req.Header.Set("Authorization", "Basic "+encoded)
recorded := test.RunRequest(t, handler, req)
recorded.CodeIs(200)
}
}

0 comments on commit 0abe249

Please sign in to comment.