package raft import ( "errors" "git.giftfish.de/ston1th/vipman/pkg/cluster" "github.com/go-logr/logr" "github.com/hashicorp/raft" ) type Cluster struct { logr.Logger cluster.KV r *raft.Raft kvm *kv stepdown chan struct{} stop chan struct{} done chan struct{} callbacks cluster.Callbacks id string } func NewCluster(log logr.Logger) cluster.Cluster { kvm := &kv{ m: make(map[string][]byte), } return &Cluster{ Logger: log, KV: kvm, kvm: kvm, stepdown: make(chan struct{}, 1), stop: make(chan struct{}, 1), done: make(chan struct{}, 1), } } func (c *Cluster) ID() string { return c.id } func (c *Cluster) SetCallbacks(callbacks cluster.Callbacks) error { c.callbacks = callbacks return c.checkConfig() } func (c *Cluster) checkConfig() error { if c.callbacks.Leader == nil { return errors.New("Leader callback is nil") } if c.callbacks.Follower == nil { return errors.New("Follower callback is nil") } return nil }