github.com/decred/dcrlnd@v0.7.6/cluster/etcd_elector_factory.go (about) 1 //go:build kvdb_etcd 2 // +build kvdb_etcd 3 4 package cluster 5 6 import ( 7 "context" 8 "fmt" 9 10 "github.com/decred/dcrlnd/kvdb/etcd" 11 ) 12 13 // makeEtcdElector will construct a new etcdLeaderElector. It expects a cancel 14 // context a unique (in the cluster) LND id and a *etcd.Config as arguments. 15 func makeEtcdElector(ctx context.Context, args ...interface{}) (LeaderElector, 16 error) { 17 18 if len(args) != 4 { 19 return nil, fmt.Errorf("invalid number of arguments to "+ 20 "cluster.makeEtcdElector(): expected 4, got %v", 21 len(args)) 22 } 23 24 id, ok := args[0].(string) 25 if !ok { 26 return nil, fmt.Errorf("invalid argument (0) to " + 27 "cluster.makeEtcdElector(), expected: string") 28 } 29 30 electionPrefix, ok := args[1].(string) 31 if !ok { 32 return nil, fmt.Errorf("invalid argument (1) to " + 33 "cluster.makeEtcdElector(), expected: string") 34 } 35 36 leaderSessionTTL, ok := args[2].(int) 37 if !ok { 38 return nil, fmt.Errorf("invalid argument (2) to " + 39 "cluster.makeEtcdElector(), expected: int") 40 } 41 42 etcdCfg, ok := args[3].(*etcd.Config) 43 if !ok { 44 return nil, fmt.Errorf("invalid argument (3) to " + 45 "cluster.makeEtcdElector(), expected: *etcd.Config") 46 } 47 48 return newEtcdLeaderElector( 49 ctx, id, electionPrefix, leaderSessionTTL, etcdCfg, 50 ) 51 } 52 53 func init() { 54 RegisterLeaderElectorFactory(EtcdLeaderElector, makeEtcdElector) 55 }