Skip to content

Instantly share code, notes, and snippets.

@ridv
Created November 8, 2017 18:07
Show Gist options
  • Save ridv/a0340e7944aed2ddbee08fd77e13fbd2 to your computer and use it in GitHub Desktop.
Save ridv/a0340e7944aed2ddbee08fd77e13fbd2 to your computer and use it in GitHub Desktop.

Draining

In order to use gorealis to perform maintenance calls to the Aurora scheduler, a client must be created and then used to send a list of hosts to place into DRAINING mode.

First create the client and create a monitor:

    r, err = realis.NewRealisClient(realis.ZKUrl(zkUrl),
        realis.BasicAuth(username, password),
        realis.ThriftJSON(),
        realis.TimeoutMS(CONNECTION_TIMEOUT),
        realis.BackOff(defaultBackoff))

    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    monitor = &realis.Monitor{r}

Then perform a draining call:

    hosts := strings.Split(hostList, ",")
    _, result, err := r.DrainHosts(hosts...)
    if err != nil {
        fmt.Printf("error: %+v\n", err.Error())
        os.Exit(1)
    }

    // Monitor change to DRAINING and DRAINED mode
    hostResult, err := monitor.HostMaintenance(
        hosts,
        []aurora.MaintenanceMode{aurora.MaintenanceMode_DRAINED, aurora.MaintenanceMode_DRAINING},
        5,
        10)
    if err != nil {
        for host, ok := range hostResult {
            if !ok {
                fmt.Printf("Host %s did not transtion into desired mode(s)\n", host)
            }
        }

        fmt.Printf("error: %+v\n", err.Error())
        os.Exit(1)
    }

    fmt.Print(result.String())

To end the maintenance, send an endMaintenance call:

    hosts := strings.Split(hostList, ",")
    _, result, err := r.EndMaintenance(hosts...)
    if err != nil {
        fmt.Printf("error: %+v\n", err.Error())
        os.Exit(1)
    }

    // Monitor change to DRAINING and DRAINED mode
    hostResult, err := monitor.HostMaintenance(
        hosts,
        []aurora.MaintenanceMode{aurora.MaintenanceMode_NONE},
        5,
        10)
    if err != nil {
        for host, ok := range hostResult {
            if !ok {
                fmt.Printf("Host %s did not transtion into desired mode(s)\n", host)
            }
        }

        fmt.Printf("error: %+v\n", err.Error())
        os.Exit(1)
    }

    fmt.Print(result.String())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment