concurrency

package
v0.0.0-...-8649774 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 11, 2021 License: Apache-2.0, Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package concurrency implements concurrency operations on top of etcd such as distributed locks, barriers, and elections.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrElectionNotLeader = errors.New("election: not leader")
	ErrElectionNoLeader  = errors.New("election: no leader")
)

Functions

func NewLocker

func NewLocker(s *Session, pfx string) sync.Locker

NewLocker creates a sync.Locker backed by an etcd mutex.

func NewSTMReadCommitted

func NewSTMReadCommitted(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error)

NewSTMReadCommitted initiates a new read committed transaction.

func NewSTMRepeatable

func NewSTMRepeatable(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error)

NewSTMRepeatable initiates new repeatable read transaction; reads within the same transaction attempt always return the same data.

func NewSTMSerializable

func NewSTMSerializable(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error)

NewSTMSerializable initiates a new serialized transaction; reads within the same transactiona attempt return data from the revision of the first read.

Types

type Election

type Election struct {
	// contains filtered or unexported fields
}

func NewElection

func NewElection(s *Session, pfx string) *Election

NewElection returns a new election on a given key prefix.

func (*Election) Campaign

func (e *Election) Campaign(ctx context.Context, val string) error

Campaign puts a value as eligible for the election. It blocks until it is elected, an error occurs, or the context is cancelled.

func (*Election) Key

func (e *Election) Key() string

Key returns the leader key if elected, empty string otherwise.

func (*Election) Leader

func (e *Election) Leader(ctx context.Context) (string, error)

Leader returns the leader value for the current election.

func (*Election) Observe

func (e *Election) Observe(ctx context.Context) <-chan v3.GetResponse

Observe returns a channel that observes all leader proposal values as GetResponse values on the current leader key. The channel closes when the context is cancelled or the underlying watcher is otherwise disrupted.

func (*Election) Proclaim

func (e *Election) Proclaim(ctx context.Context, val string) error

Proclaim lets the leader announce a new value without another election.

func (*Election) Resign

func (e *Election) Resign(ctx context.Context) (err error)

Resign lets a leader start a new election.

type Mutex

type Mutex struct {
	// contains filtered or unexported fields
}

Mutex implements the sync Locker interface with etcd

func NewMutex

func NewMutex(s *Session, pfx string) *Mutex

func (*Mutex) IsOwner

func (m *Mutex) IsOwner() v3.Cmp

func (*Mutex) Key

func (m *Mutex) Key() string

func (*Mutex) Lock

func (m *Mutex) Lock(ctx context.Context) error

Lock locks the mutex with a cancellable context. If the context is cancelled while trying to acquire the lock, the mutex tries to clean its stale lock entry.

func (*Mutex) Unlock

func (m *Mutex) Unlock(ctx context.Context) error

type STM

type STM interface {
	// Get returns the value for a key and inserts the key in the txn's read set.
	// If Get fails, it aborts the transaction with an error, never returning.
	Get(key string) string
	// Put adds a value for a key to the write set.
	Put(key, val string, opts ...v3.OpOption)
	// Rev returns the revision of a key in the read set.
	Rev(key string) int64
	// Del deletes a key.
	Del(key string)
	// contains filtered or unexported methods
}

STM is an interface for software transactional memory.

type Session

type Session struct {
	// contains filtered or unexported fields
}

Session represents a lease kept alive for the lifetime of a client. Fault-tolerant applications may use sessions to reason about liveness.

func NewSession

func NewSession(client *v3.Client, opts ...SessionOption) (*Session, error)

NewSession gets the leased session for a client.

func (*Session) Client

func (s *Session) Client() *v3.Client

Client is the etcd client that is attached to the session.

func (*Session) Close

func (s *Session) Close() error

Close orphans the session and revokes the session lease.

func (*Session) Done

func (s *Session) Done() <-chan struct{}

Done returns a channel that closes when the lease is orphaned, expires, or is otherwise no longer being refreshed.

func (*Session) Lease

func (s *Session) Lease() v3.LeaseID

Lease is the lease ID for keys bound to the session.

func (*Session) Orphan

func (s *Session) Orphan()

Orphan ends the refresh for the session lease. This is useful in case the state of the client connection is indeterminate (revoke would fail) or when transferring lease ownership.

type SessionOption

type SessionOption func(*sessionOptions)

SessionOption configures Session.

func WithContext

func WithContext(ctx context.Context) SessionOption

WithContext assigns a context to the session instead of defaulting to using the client context. This is useful for canceling NewSession and Close operations immediately without having to close the client. If the context is canceled before Close() completes, the session's lease will be abandoned and left to expire instead of being revoked.

func WithTTL

func WithTTL(ttl int) SessionOption

WithTTL configures the session's TTL in seconds. If TTL is <= 0, the default 60 seconds TTL will be used.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL