blob: dc17d98d1ea4cf5b6dec9d11d30148147ce535f2 [file] [log] [blame]
// Package store is for storing and retrieving machine.Descriptions.
package store
import (
"context"
"go.skia.org/infra/machine/go/machine"
)
// TxCallback is the callback that Store.Update() takes to update a single
// machine.Description. We use a callback because we want to compare the old
// state to decide the new state, along with other bits of info we can include
// in a closure, such as an incoming event. See also processor.Process.
type TxCallback func(machine.Description) machine.Description
// Store and retrieve machine.Descriptions.
type Store interface {
// Update the machine with the given machineID using the given callback
// function.
//
// txCallback will be called inside a firestore transaction and may be
// called more than once.
Update(ctx context.Context, machineID string, txCallback TxCallback) error
// Watch returns a channel that will produce a machine.Description every time
// the description for machineID changes.
Watch(ctx context.Context, machineID string) <-chan machine.Description
// WatchForDeletablePods returns a channel that will produce the name of a
// k8s pod for every pod that becomes eligible for deletion. Note that since
// these k8s pods are from a daemonset the pod will automatically be
// restarted, but with the latest image.
WatchForDeletablePods(ctx context.Context) <-chan string
// WatchForPowerCycle returns a channel that will produce the name of a
// machine that needs to be power-cycled. Before a machineID is sent on the
// channel the PowerCycle value is set back to false.
WatchForPowerCycle(ctx context.Context) <-chan string
// List returns a slice containing all known machines.
List(ctx context.Context) ([]machine.Description, error)
// Delete removes a machine from the database.
Delete(ctx context.Context, machineID string) error
}