recipe

package
v2.3.0-alpha.1+incompa... Latest Latest
Warning

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

Go to latest
Published: Feb 17, 2016 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Copyright 2016 CoreOS, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 CoreOS, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrKeyExists      = errors.New("key already exists")
	ErrWaitMismatch   = errors.New("unexpected wait result")
	ErrTooManyClients = errors.New("too many clients")
)

Functions

func NewLocker

func NewLocker(client *clientv3.Client, key string) sync.Locker

func NewSTM

func NewSTM(client *clientv3.Client, apply func(*STM) error) <-chan error

NewSTM creates new transaction loop for a given apply function.

func RevokeSessionLease

func RevokeSessionLease(client *clientv3.Client) (err error)

RevokeSessionLease revokes the session lease.

func SessionLease

func SessionLease(client *clientv3.Client) (lease.LeaseID, error)

func SessionLeaseTTL

func SessionLeaseTTL(client *clientv3.Client, ttl int64) (lease.LeaseID, error)

func StopSessionLease

func StopSessionLease(client *clientv3.Client)

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

func WaitEvents

func WaitEvents(c *clientv3.Client, key string, rev int64, evs []storagepb.Event_EventType) (*storagepb.Event, error)

WaitEvents waits on a key until it observes the given events and returns the final one.

func WaitPrefixEvents

func WaitPrefixEvents(c *clientv3.Client, prefix string, rev int64, evs []storagepb.Event_EventType) (*storagepb.Event, error)

Types

type Barrier

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

Barrier creates a key in etcd to block processes, then deletes the key to release all blocked processes.

func NewBarrier

func NewBarrier(client *clientv3.Client, key string) *Barrier

func (*Barrier) Hold

func (b *Barrier) Hold() error

Hold creates the barrier key causing processes to block on Wait.

func (*Barrier) Release

func (b *Barrier) Release() error

Release deletes the barrier key to unblock all waiting processes.

func (*Barrier) Wait

func (b *Barrier) Wait() error

Wait blocks on the barrier key until it is deleted. If there is no key, Wait assumes Release has already been called and returns immediately.

type DoubleBarrier

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

DoubleBarrier blocks processes on Enter until an expected count enters, then blocks again on Leave until all processes have left.

func NewDoubleBarrier

func NewDoubleBarrier(client *clientv3.Client, key string, count int) *DoubleBarrier

func (*DoubleBarrier) Enter

func (b *DoubleBarrier) Enter() error

Enter waits for "count" processes to enter the barrier then returns

func (*DoubleBarrier) Leave

func (b *DoubleBarrier) Leave() error

Leave waits for "count" processes to leave the barrier then returns

type Election

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

func NewElection

func NewElection(client *clientv3.Client, keyPrefix string) *Election

NewElection returns a new election on a given key prefix.

func (*Election) Leader

func (e *Election) Leader() (string, error)

Leader returns the leader value for the current election.

func (*Election) Resign

func (e *Election) Resign() (err error)

Resign lets a leader start a new election.

func (*Election) Volunteer

func (e *Election) Volunteer(val string) error

Volunteer puts a value as eligible for the election. It blocks until it is elected or an error occurs (cannot withdraw candidacy)

func (*Election) Wait

func (e *Election) Wait() (string, error)

Wait waits for a leader to be elected, returning the leader value.

type EphemeralKV

type EphemeralKV struct{ RemoteKV }

EphemeralKV is a new key associated with a session lease

func NewEphemeralKV

func NewEphemeralKV(client *clientv3.Client, key, val string) (*EphemeralKV, error)

NewEphemeralKV creates a new key/value pair associated with a session lease

func NewUniqueEphemeralKV

func NewUniqueEphemeralKV(client *clientv3.Client, prefix, val string) (ek *EphemeralKV, err error)

NewUniqueEphemeralKV creates a new unique key/value pair associated with a session lease

func NewUniqueEphemeralKey

func NewUniqueEphemeralKey(client *clientv3.Client, prefix string) (*EphemeralKV, error)

NewUniqueEphemeralKey creates a new unique valueless key associated with a session lease

type Mutex

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

Mutex implements the sync Locker interface with etcd

func NewMutex

func NewMutex(client *clientv3.Client, key string) *Mutex

func (*Mutex) Lock

func (m *Mutex) Lock() (err error)

func (*Mutex) Unlock

func (m *Mutex) Unlock() error

type PriorityQueue

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

PriorityQueue implements a multi-reader, multi-writer distributed queue.

func NewPriorityQueue

func NewPriorityQueue(client *clientv3.Client, key string) *PriorityQueue

NewPriorityQueue creates an etcd priority queue.

func (*PriorityQueue) Dequeue

func (q *PriorityQueue) Dequeue() (string, error)

Dequeue returns Enqueue()'d items in FIFO order. If the queue is empty, Dequeue blocks until items are available.

func (*PriorityQueue) Enqueue

func (q *PriorityQueue) Enqueue(val string, pr uint16) error

Enqueue puts a value into a queue with a given priority.

type Queue

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

Queue implements a multi-reader, multi-writer distributed queue.

func NewQueue

func NewQueue(client *clientv3.Client, keyPrefix string) *Queue

func (*Queue) Dequeue

func (q *Queue) Dequeue() (string, error)

Dequeue returns Enqueue()'d elements in FIFO order. If the queue is empty, Dequeue blocks until elements are available.

func (*Queue) Enqueue

func (q *Queue) Enqueue(val string) error

type RWMutex

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

func NewRWMutex

func NewRWMutex(client *clientv3.Client, key string) *RWMutex

func (*RWMutex) Lock

func (rwm *RWMutex) Lock() error

func (*RWMutex) RLock

func (rwm *RWMutex) RLock() error

func (*RWMutex) RUnlock

func (rwm *RWMutex) RUnlock() error

func (*RWMutex) Unlock

func (rwm *RWMutex) Unlock() error

type Range

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

func NewRange

func NewRange(client *clientv3.Client, key string) *Range

func NewRangeRev

func NewRangeRev(client *clientv3.Client, key string, rev int64) *Range

func (*Range) FirstCreate

func (r *Range) FirstCreate() (*pb.RangeResponse, error)

func (*Range) FirstKey

func (r *Range) FirstKey() (*pb.RangeResponse, error)

func (*Range) FirstRev

func (r *Range) FirstRev() (*pb.RangeResponse, error)

func (*Range) LastCreate

func (r *Range) LastCreate() (*pb.RangeResponse, error)

func (*Range) LastKey

func (r *Range) LastKey() (*pb.RangeResponse, error)

func (*Range) LastRev

func (r *Range) LastRev() (*pb.RangeResponse, error)

func (*Range) OpenInterval

func (r *Range) OpenInterval() (*pb.RangeResponse, error)

OpenInterval gets the keys in the set <key>* - <key>

func (*Range) Prefix

func (r *Range) Prefix() (*pb.RangeResponse, error)

Prefix performs a RangeRequest to get keys matching <key>*

type RemoteKV

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

Key is a key/revision pair created by the client and stored on etcd

func GetRemoteKV

func GetRemoteKV(client *clientv3.Client, key string) (*RemoteKV, error)

func NewKV

func NewKV(client *clientv3.Client, key, val string, leaseID lease.LeaseID) (*RemoteKV, error)

func NewKey

func NewKey(client *clientv3.Client, key string, leaseID lease.LeaseID) (*RemoteKV, error)

func NewSequentialKV

func NewSequentialKV(client *clientv3.Client, prefix, val string) (*RemoteKV, error)

NewSequentialKV allocates a new sequential key-value pair at <prefix>/nnnnn

func NewUniqueKV

func NewUniqueKV(client *clientv3.Client, prefix string, val string, leaseID lease.LeaseID) (*RemoteKV, error)

func NewUniqueKey

func NewUniqueKey(client *clientv3.Client, prefix string) (*RemoteKV, error)

func (*RemoteKV) Delete

func (rk *RemoteKV) Delete() error

func (*RemoteKV) Key

func (rk *RemoteKV) Key() string

func (*RemoteKV) Put

func (rk *RemoteKV) Put(val string) error

func (*RemoteKV) Revision

func (rk *RemoteKV) Revision() int64

func (*RemoteKV) Value

func (rk *RemoteKV) Value() string

type STM

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

STM implements software transactional memory over etcd

func (*STM) Abort

func (s *STM) Abort()

Abort abandons the apply loop, letting the transaction close without a commit.

func (*STM) Get

func (s *STM) Get(key string) (string, error)

Get returns the value for a given key, inserting the key into the txn's rset.

func (*STM) Put

func (s *STM) Put(key string, val string)

Put adds a value for a key to the write set.

type Watcher

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

func NewPrefixWatcher

func NewPrefixWatcher(c *clientv3.Client, prefix string, rev int64) (*Watcher, error)

func NewWatcher

func NewWatcher(c *clientv3.Client, key string, rev int64) (*Watcher, error)

func (*Watcher) Chan

func (w *Watcher) Chan() <-chan *storagepb.Event

func (*Watcher) Close

func (w *Watcher) Close() error

Jump to

Keyboard shortcuts

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