54 lines
		
	
	
		
			999 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			999 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Package sync is an interface for distributed synchronization
 | 
						|
package sync
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	ErrLockTimeout = errors.New("lock timeout")
 | 
						|
)
 | 
						|
 | 
						|
// Sync is an interface for distributed synchronization
 | 
						|
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
 | 
						|
}
 | 
						|
 | 
						|
// Leader provides leadership election
 | 
						|
type Leader interface {
 | 
						|
	// resign leadership
 | 
						|
	Resign() error
 | 
						|
	// status returns when leadership is lost
 | 
						|
	Status() chan bool
 | 
						|
}
 | 
						|
 | 
						|
type Options struct {
 | 
						|
	Nodes  []string
 | 
						|
	Prefix string
 | 
						|
}
 | 
						|
 | 
						|
type Option func(o *Options)
 | 
						|
 | 
						|
type LeaderOptions struct{}
 | 
						|
 | 
						|
type LeaderOption func(o *LeaderOptions)
 | 
						|
 | 
						|
type LockOptions struct {
 | 
						|
	TTL  time.Duration
 | 
						|
	Wait time.Duration
 | 
						|
}
 | 
						|
 | 
						|
type LockOption func(o *LockOptions)
 |