Documentation
¶
Overview ¶
package zookeeper implements a ZooKeeper based Lock.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrAlreadyOwnLock is returned if Lock is called with a context holding an // OwnerKey equal to that of an active lock. ErrAlreadyOwnLock = errors.New("requestor already has an active lock") // ErrLockingTimedOut is returned when a lock couldn't be acquired by the // context deadline. ErrLockingTimedOut = errors.New("attempt to acquire lock timed out") // ErrInvalidSeqNode is returned when sequential znodes are being parsed for // a trailing integer ID, but one isn't found. ErrInvalidSeqNode = errors.New("znode doesn't appear to be a sequential type") // ErrNotLockOwner is returned when Unlock is attempting to be called where the // requestor's OwnerKey value does not equal the current lock owner. ErrNotLockOwner = errors.New("non-owner attempted to call unlock") // ErrOwnerAlreadySet is returned when SetOwner is being called on a lock where // the owner field is non-nil. ErrOwnerAlreadySet = errors.New("attempt to set owner on a claimed lock") )
Functions ¶
This section is empty.
Types ¶
type ErrExpireLockFailed ¶
type ErrExpireLockFailed struct {
// contains filtered or unexported fields
}
ErrExpireLockFailed is returned when a lock with an expired TTL fails to purge.
func (ErrExpireLockFailed) Error ¶
func (err ErrExpireLockFailed) Error() string
Error returns an error string.
type ErrLockingFailed ¶
type ErrLockingFailed struct {
// contains filtered or unexported fields
}
ErrLockingFailed is a general failure.
func (ErrLockingFailed) Error ¶
func (err ErrLockingFailed) Error() string
Error returns an error string.
type ErrUnlockingFailed ¶
type ErrUnlockingFailed struct {
// contains filtered or unexported fields
}
ErrUnlockingFailed is a general failure.
func (ErrUnlockingFailed) Error ¶
func (err ErrUnlockingFailed) Error() string
Error returns an error string.
type LockEntries ¶
type LockEntries struct {
// contains filtered or unexported fields
}
LockEntries is a container of locks.
func (LockEntries) First ¶
func (le LockEntries) First() (int, error)
First returns the ID with the lowest value.
type ZooKeeperClient ¶
type ZooKeeperClient interface {
Children(string) ([]string, *zk.Stat, error)
Create(string, []byte, int32, []zk.ACL) (string, error)
CreateProtectedEphemeralSequential(string, []byte, []zk.ACL) (string, error)
Delete(string, int32) error
Get(string) ([]byte, *zk.Stat, error)
GetW(string) ([]byte, *zk.Stat, <-chan zk.Event, error)
}
ZooKeeperClient interface.
type ZooKeeperLock ¶
type ZooKeeperLock struct {
Path string
OwnerKey string
TTL int
// contains filtered or unexported fields
}
ZooKeeperLock implements a Lock.
func NewZooKeeperLock ¶
func NewZooKeeperLock(c ZooKeeperLockConfig) (*ZooKeeperLock, error)
NewZooKeeperLock returns a ZooKeeperLock.
func NewZooKeeperLockWithClient ¶
func NewZooKeeperLockWithClient(cfg ZooKeeperLockConfig, zkc ZooKeeperClient) (*ZooKeeperLock, error)
NewZooKeeperLock takes a ZooKeeperLockConfig and ZooKeeperClient and returns a ZooKeeperLock. Any initialization (such as path creation) should be performed outside of this initializer.
func (*ZooKeeperLock) Lock ¶
func (z *ZooKeeperLock) Lock(ctx context.Context) error
Lock attemps to acquire a lock. If the lock cannot be acquired by the context deadline, the lock attempt times out.
func (*ZooKeeperLock) Owner ¶
func (z *ZooKeeperLock) Owner() interface{}
Owner returns the current lock owner.
func (*ZooKeeperLock) Unlock ¶
func (z *ZooKeeperLock) Unlock(ctx context.Context) error
Unlock releases a lock.
func (*ZooKeeperLock) UnlockLogError ¶
func (z *ZooKeeperLock) UnlockLogError(ctx context.Context)
Unlock releases a lock and logs, rather than returning, any errors if encountered.
type ZooKeeperLockConfig ¶
type ZooKeeperLockConfig struct {
// The address of the ZooKeeper cluster.
Address string
// The locking path; this is the register that locks are attempting to acquire.
Path string
// A non-zero TTL sets a limit (in milliseconds) on how long a lock is possibly
// valid for. Once this limit is exceeded, any new lock claims can destroy those
// exceeding their TTL.
TTL int
// An optional lock ownership identifier. Context values can be inspected to
// determine if a lock owner already has the lock. For example, if we specify
// an OwnerKey configuration value of UserID, any successful lock claim will
// set the lock owner as the value of UserID from the context received. Any
// successive calls to Lock() with the same UserID context value will also
// succeed. As a safety, this is not a distributed feature and is scoped to the
// ZooKeeperLock instance; attempting to have two processes claim a lock
// on the same path with the same OwnerKey/value will result in only one lock
// being granted. This also prevents a concurrent program sharing a ZooKeeperLock
// from allowing requestors to call Unlock on a lock that it doesn't own.
OwnerKey string
}
ZooKeeperLockConfig holds ZooKeeperLock configurations.