fixed kv errors

This commit is contained in:
ston1th 2021-03-07 14:04:06 +01:00
commit ab12dd67d4
4 changed files with 16 additions and 15 deletions

View file

@ -2,11 +2,18 @@ package cluster
import ( import (
"context" "context"
"errors"
"git.giftfish.de/ston1th/haproxy-lb/pkg/config" "git.giftfish.de/ston1th/haproxy-lb/pkg/config"
"github.com/go-logr/logr" "github.com/go-logr/logr"
) )
var (
ErrNotLeader = errors.New("not leader")
ErrKeyNotFound = errors.New("key not found")
ErrPrefixNotFound = errors.New("prefix not found")
)
type Cluster interface { type Cluster interface {
Start(*config.Config) error Start(*config.Config) error
SetCallbacks(Callbacks) error SetCallbacks(Callbacks) error

View file

@ -45,8 +45,8 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
for { for {
cc.Info("leading", "id", cc.ID()) cc.Info("leading", "id", cc.ID())
ips, err := db.GetIPs() ips, err := db.GetIPs()
if err != nil { if err != nil && err != cluster.ErrPrefixNotFound {
cc.Error(err, "error updating haproxy config") cc.Error(err, "error reading ip list")
<-t.C <-t.C
continue continue
} }

View file

@ -49,7 +49,7 @@ func (c *Cluster) Get(k string) (v []byte, err error) {
return return
} }
if len(r.Kvs) == 0 { if len(r.Kvs) == 0 {
err = ErrKeyNotFound err = cluster.ErrKeyNotFound
return return
} }
v = r.Kvs[0].Value v = r.Kvs[0].Value
@ -62,7 +62,7 @@ func (c *Cluster) GetPrefix(k string) (m map[string][]byte, err error) {
return return
} }
if len(r.Kvs) == 0 { if len(r.Kvs) == 0 {
err = ErrPrefixNotFound err = cluster.ErrPrefixNotFound
return return
} }
m = make(map[string][]byte) m = make(map[string][]byte)

View file

@ -1,20 +1,14 @@
package raft package raft
import ( import (
"errors"
"strings" "strings"
"sync" "sync"
"git.giftfish.de/ston1th/haproxy-lb/pkg/cluster"
"git.giftfish.de/ston1th/raftbbolt/msgpack" "git.giftfish.de/ston1th/raftbbolt/msgpack"
"github.com/hashicorp/raft" "github.com/hashicorp/raft"
) )
var (
ErrNotLeader = errors.New("raft: not leader")
ErrKeyNotFound = errors.New("raft: key not found")
ErrPrefixNotFound = errors.New("raft: prefix not found")
)
type kvm map[string][]byte type kvm map[string][]byte
type kv struct { type kv struct {
@ -28,7 +22,7 @@ func (kv *kv) Get(k string) ([]byte, error) {
defer kv.mu.Unlock() defer kv.mu.Unlock()
v, ok := kv.m[k] v, ok := kv.m[k]
if !ok { if !ok {
return nil, ErrKeyNotFound return nil, cluster.ErrKeyNotFound
} }
return v, nil return v, nil
} }
@ -43,14 +37,14 @@ func (kv *kv) GetPrefix(pk string) (m map[string][]byte, err error) {
} }
} }
if len(m) == 0 { if len(m) == 0 {
err = ErrPrefixNotFound err = cluster.ErrPrefixNotFound
} }
return return
} }
func (kv *kv) Set(k string, v []byte) error { func (kv *kv) Set(k string, v []byte) error {
if kv.r.State() != raft.Leader { if kv.r.State() != raft.Leader {
return ErrNotLeader return cluster.ErrNotLeader
} }
c := &raftCmd{SET, k, v} c := &raftCmd{SET, k, v}
@ -66,7 +60,7 @@ func (kv *kv) Set(k string, v []byte) error {
// Delete deletes the given key. // Delete deletes the given key.
func (kv *kv) Delete(k string) error { func (kv *kv) Delete(k string) error {
if kv.r.State() != raft.Leader { if kv.r.State() != raft.Leader {
return ErrNotLeader return cluster.ErrNotLeader
} }
c := &raftCmd{Op: DELETE, K: k} c := &raftCmd{Op: DELETE, K: k}