56 lines
1,003 B
Go
56 lines
1,003 B
Go
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
|
|
}
|