mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-28 13:52:55 +02:00
cluster: add etcd based leader elector and factory
This commit is contained in:
37
cluster/factory.go
Normal file
37
cluster/factory.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package cluster
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// leaderElectorFactoryFunc is a LeaderElector factory method type.
|
||||
type leaderElectorFactoryFunc func(context.Context, ...interface{}) (
|
||||
LeaderElector, error)
|
||||
|
||||
var leaderElectorFactories map[string]leaderElectorFactoryFunc
|
||||
|
||||
// RegisterLeaderElectorFactory will register a new LeaderElector factory
|
||||
// method corresponding to the passed id.
|
||||
func RegisterLeaderElectorFactory(id string, factory leaderElectorFactoryFunc) {
|
||||
if leaderElectorFactories == nil {
|
||||
leaderElectorFactories = make(
|
||||
map[string]leaderElectorFactoryFunc,
|
||||
)
|
||||
}
|
||||
|
||||
leaderElectorFactories[id] = factory
|
||||
}
|
||||
|
||||
// MakeLeaderElector will constuct a LeaderElector identified by id with the
|
||||
// passed arguments.
|
||||
func MakeLeaderElector(ctx context.Context, id string, args ...interface{}) (
|
||||
LeaderElector, error) {
|
||||
|
||||
if _, ok := leaderElectorFactories[id]; !ok {
|
||||
return nil, fmt.Errorf("leader elector factory for '%v' "+
|
||||
"not found", id)
|
||||
}
|
||||
|
||||
return leaderElectorFactories[id](ctx, args...)
|
||||
}
|
Reference in New Issue
Block a user