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  }