cluster: add etcd based leader elector and factory

This commit is contained in:
Andras Banki-Horvath
2021-02-08 21:55:52 +01:00
parent e62dbca11a
commit 41532ce634
5 changed files with 337 additions and 0 deletions

38
lncfg/cluster.go Normal file
View File

@@ -0,0 +1,38 @@
package lncfg
import (
"fmt"
"github.com/lightningnetwork/lnd/cluster"
)
// Cluster holds configuration for clustered LND.
type Cluster struct {
LeaderElector string `long:"leader-elector" choice:"etcd" description:"Leader elector to use. Valid values: \"etcd\"."`
EtcdElectionPrefix string `long:"etcd-election-prefix" description:"Election key prefix when using etcd leader elector."`
}
// DefaultCluster creates and returns a new default DB config.
func DefaultCluster() *Cluster {
return &Cluster{}
}
// Validate validates the Cluster config.
func (c *Cluster) Validate() error {
switch c.LeaderElector {
case cluster.EtcdLeaderElector:
if c.EtcdElectionPrefix == "" {
return fmt.Errorf("etcd-election-prefix must be set")
}
default:
return fmt.Errorf("unknown leader elector, valid values are: "+
"\"%v\"", cluster.EtcdLeaderElector)
}
return nil
}
// Compile-time constraint to ensure Workers implements the Validator interface.
var _ Validator = (*Cluster)(nil)