Documentation
¶
Overview ¶
Package election2 provides master election tools, and interfaces for plugging in a custom underlying mechanism.
There are two important abstractions in this package: instance and resource.
- An instance is a single client of the library. An instance is represented by an Election object (possibly multiple).
- A resource is something guarded by master election (e.g. a piece of data, or operation). Each resource has at most one (most of the time; see note below) master instance which is said to own this resource. A single instance may own multiple resources (one resource per Election object).
Note: Sometimes there can be more than 1 instance "believing" to own a resource. The reason is that the client code operates outside of the election mechanism (e.g. a distributed consensus group), so mastership updates can race with the operation.
TODO(pavelkalinnikov): Merge this package with util/election.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Providers ¶ added in v1.7.2
func Providers() []string
Providers returns a slice of registered quota provider names.
func RegisterProvider ¶ added in v1.7.2
func RegisterProvider(name string, qp NewFactoryFunc) error
RegisterProvider registers a function that provides Manager instances.
Types ¶
type Election ¶
type Election interface {
// Await blocks until the instance captures mastership. Returns immediately
// if it is already the master. Returns an error if capturing fails, or the
// passed in context is canceled before mastership is captured. If an error
// is returned, the instance might still have become the master. Idempotent,
// might be useful to retry in case of an error.
Await(ctx context.Context) error
// WithMastership returns a "mastership context" which remains active until
// the instance stops being the master, or the passed in context is canceled.
// If the instance is not the master during this call, returns an already
// canceled context. In particular, this will happen if WithMastership is
// called without a preceding Await.
//
// The resources used for maintaining the mastership context are released
// when the latter gets canceled. This happens when the instance loses
// mastership, calls Resign, an error occurs in mastership monitoring, or the
// context passed in to WithMastership is explicitly canceled.
//
// If the passed in ctx is canceled, the instance does not resign mastership.
// Use Resign or Close method for that.
WithMastership(ctx context.Context) (context.Context, error)
// Resign releases mastership for this instance. The instance can be elected
// again using Await. Idempotent, might be useful to retry if fails.
//
// Note: Resign does not guarantee immediate cancelation of the context
// returned from WithMastership. However, the latter will happen *eventually* if
// resigning is successful. The caller can force mastership context
// cancelation by explicitly canceling the context passed in to WithMastership.
//
// The caller is advised to tear down mastership-related work before invoking
// Resign to have best protection against double-master situations.
Resign(ctx context.Context) error
// Close permanently stops participating in election, and releases the
// resources. It does best effort on resigning despite potential cancelation
// of the passed in context, so that other instances can overtake mastership
// faster. No other method should be called after Close.
//
// Note: Does not guarantee immediate mastership context cancelation, see
// Resign comment for details.
Close(ctx context.Context) error
}
Election controls an instance's participation in master election process. Note: Implementations are not intended to be thread-safe.
type Factory ¶
Factory encapsulates the creation of an Election instance for a resource with the specified ID.
func NewProvider ¶ added in v1.7.2
NewProvider returns a Manager implementation.
type NewFactoryFunc ¶ added in v1.7.2
NewFactoryFunc is the signature of a function which can be registered to provide instances of an election factory.
type NoopElection ¶
type NoopElection string
NoopElection is a stub Election that always believes to be the master.
func (NoopElection) Await ¶
func (ne NoopElection) Await(ctx context.Context) error
Await returns immediately, as the instance is always the master.
func (NoopElection) Close ¶
func (ne NoopElection) Close(ctx context.Context) error
Close does nothing because NoopElection is always the master.
func (NoopElection) Resign ¶
func (ne NoopElection) Resign(ctx context.Context) error
Resign does nothing because NoopElection is always the master.
func (NoopElection) WithMastership ¶
WithMastership returns the passed in context as a mastership context.
type NoopFactory ¶
type NoopFactory struct{}
NoopFactory creates NoopElection instances.
func (NoopFactory) NewElection ¶
NewElection creates a specific NoopElection instance.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package etcd provides an implementation of master election based on etcd.
|
Package etcd provides an implementation of master election based on etcd. |
|
Package testonly contains an Election implementation for testing.
|
Package testonly contains an Election implementation for testing. |