35c086fa6b
Absorb Swarm's discovery package in order to provide a common node discovery mechanism to be used by both Swarm and networking code. Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
35 lines
1 KiB
Go
35 lines
1 KiB
Go
package discovery
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// ErrNotSupported is returned when a discovery service is not supported.
|
|
ErrNotSupported = errors.New("discovery service not supported")
|
|
|
|
// ErrNotImplemented is returned when discovery feature is not implemented
|
|
// by discovery backend.
|
|
ErrNotImplemented = errors.New("not implemented in this discovery service")
|
|
)
|
|
|
|
// Watcher provides watching over a cluster for nodes joining and leaving.
|
|
type Watcher interface {
|
|
// Watch the discovery for entry changes.
|
|
// Returns a channel that will receive changes or an error.
|
|
// Providing a non-nil stopCh can be used to stop watching.
|
|
Watch(stopCh <-chan struct{}) (<-chan Entries, <-chan error)
|
|
}
|
|
|
|
// Backend is implemented by discovery backends which manage cluster entries.
|
|
type Backend interface {
|
|
// Watcher must be provided by every backend.
|
|
Watcher
|
|
|
|
// Initialize the discovery with URIs, a heartbeat and a ttl.
|
|
Initialize(string, time.Duration, time.Duration) error
|
|
|
|
// Register to the discovery.
|
|
Register(string) error
|
|
}
|