2020-04-11 12:48:32 +03:00
|
|
|
// Package sync is an interface for distributed synchronization
|
2019-05-31 02:43:23 +03:00
|
|
|
package sync
|
|
|
|
|
|
|
|
import (
|
2020-04-11 12:37:54 +03:00
|
|
|
"errors"
|
|
|
|
"time"
|
2019-05-31 02:43:23 +03:00
|
|
|
)
|
|
|
|
|
2020-04-11 12:37:54 +03:00
|
|
|
var (
|
|
|
|
ErrLockTimeout = errors.New("lock timeout")
|
|
|
|
)
|
|
|
|
|
2020-04-11 12:48:32 +03:00
|
|
|
// Sync is an interface for distributed synchronization
|
2020-04-11 12:37:54 +03:00
|
|
|
type Sync interface {
|
|
|
|
// Initialise options
|
|
|
|
Init(...Option) error
|
|
|
|
// Return the options
|
|
|
|
Options() Options
|
|
|
|
// Elect a leader
|
|
|
|
Leader(id string, opts ...LeaderOption) (Leader, error)
|
|
|
|
// Lock acquires a lock
|
|
|
|
Lock(id string, opts ...LockOption) error
|
|
|
|
// Unlock releases a lock
|
|
|
|
Unlock(id string) error
|
|
|
|
// Sync implementation
|
|
|
|
String() string
|
2019-05-31 02:43:23 +03:00
|
|
|
}
|
|
|
|
|
2020-04-11 12:37:54 +03:00
|
|
|
// Leader provides leadership election
|
|
|
|
type Leader interface {
|
|
|
|
// resign leadership
|
|
|
|
Resign() error
|
|
|
|
// status returns when leadership is lost
|
|
|
|
Status() chan bool
|
2019-05-31 02:43:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
type Options struct {
|
2020-04-11 12:37:54 +03:00
|
|
|
Nodes []string
|
|
|
|
Prefix string
|
2019-05-31 02:43:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
type Option func(o *Options)
|
2020-04-11 12:37:54 +03:00
|
|
|
|
|
|
|
type LeaderOptions struct {}
|
|
|
|
|
|
|
|
type LeaderOption func(o *LeaderOptions)
|
|
|
|
|
|
|
|
type LockOptions struct {
|
|
|
|
TTL time.Duration
|
|
|
|
Wait time.Duration
|
|
|
|
}
|
|
|
|
|
|
|
|
type LockOption func(o *LockOptions)
|