mirror of
https://github.com/rqlite/rqlite.git
synced 2026-01-25 04:16:26 +00:00
Implement stepdown command for rqlite shell
Co-authored-by: otoolep <536312+otoolep@users.noreply.github.com>
This commit is contained in:
@@ -73,6 +73,7 @@ func init() {
|
|||||||
`.schema Show CREATE statements for all tables`,
|
`.schema Show CREATE statements for all tables`,
|
||||||
`.snapshot Request a Raft snapshot and log truncation on connected node`,
|
`.snapshot Request a Raft snapshot and log truncation on connected node`,
|
||||||
`.status Show status and diagnostic information for connected node`,
|
`.status Show status and diagnostic information for connected node`,
|
||||||
|
`.stepdown Instruct the cluster leader to stepdown and transfer leadership`,
|
||||||
`.sysdump FILE Dump system diagnostics to FILE`,
|
`.sysdump FILE Dump system diagnostics to FILE`,
|
||||||
`.tables List names of tables`,
|
`.tables List names of tables`,
|
||||||
`.timer on|off Turn query timings on or off`,
|
`.timer on|off Turn query timings on or off`,
|
||||||
@@ -254,6 +255,8 @@ func main() {
|
|||||||
break FOR_READ
|
break FOR_READ
|
||||||
case ".SNAPSHOT":
|
case ".SNAPSHOT":
|
||||||
err = snapshot(client, argv)
|
err = snapshot(client, argv)
|
||||||
|
case ".STEPDOWN":
|
||||||
|
err = stepdown(client, argv)
|
||||||
case "SELECT", "PRAGMA":
|
case "SELECT", "PRAGMA":
|
||||||
err = queryWithClient(ctx, client, timer, blobArray, consistency, line)
|
err = queryWithClient(ctx, client, timer, blobArray, consistency, line)
|
||||||
default:
|
default:
|
||||||
@@ -375,6 +378,31 @@ func snapshot(client *httpcl.Client, argv *argT) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func stepdown(client *httpcl.Client, argv *argT) error {
|
||||||
|
url := fmt.Sprintf("%s://%s/leader", argv.Protocol, address6(argv))
|
||||||
|
req, err := http.NewRequest("DELETE", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if argv.Credentials != "" {
|
||||||
|
creds := strings.Split(argv.Credentials, ":")
|
||||||
|
if len(creds) != 2 {
|
||||||
|
return fmt.Errorf("invalid Basic Auth credentials format")
|
||||||
|
}
|
||||||
|
req.SetBasicAuth(creds[0], creds[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return fmt.Errorf("server responded with %s", resp.Status)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func sysdump(ctx *cli.Context, client *http.Client, filename string, argv *argT) error {
|
func sysdump(ctx *cli.Context, client *http.Client, filename string, argv *argT) error {
|
||||||
_ = ctx
|
_ = ctx
|
||||||
nodes, err := getNodes(client, argv)
|
nodes, err := getNodes(client, argv)
|
||||||
|
|||||||
Reference in New Issue
Block a user