fixed kv errors
This commit is contained in:
parent
5bb67f7922
commit
ab12dd67d4
4 changed files with 16 additions and 15 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue