mirror of https://github.com/docker/docs.git
store: Make KVEntry a struct rather than an interface.
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
parent
747a83a40a
commit
d4bdb10d35
|
@ -71,9 +71,9 @@ func (s *Discovery) Fetch() ([]*discovery.Entry, error) {
|
|||
|
||||
// Watch is exported
|
||||
func (s *Discovery) Watch(callback discovery.WatchCallback) {
|
||||
s.store.WatchRange(s.prefix, "", s.heartbeat, func(kvalues ...store.KVEntry) {
|
||||
s.store.WatchRange(s.prefix, "", s.heartbeat, func(kv ...*store.KVEntry) {
|
||||
// Traduce byte array entries to discovery.Entry
|
||||
entries, _ := discovery.CreateEntries(convertToStringArray(kvalues))
|
||||
entries, _ := discovery.CreateEntries(convertToStringArray(kv))
|
||||
callback(entries)
|
||||
})
|
||||
}
|
||||
|
@ -84,9 +84,9 @@ func (s *Discovery) Register(addr string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func convertToStringArray(entries []store.KVEntry) (addrs []string) {
|
||||
func convertToStringArray(entries []*store.KVEntry) (addrs []string) {
|
||||
for _, entry := range entries {
|
||||
addrs = append(addrs, string(entry.Value()))
|
||||
addrs = append(addrs, string(entry.Value))
|
||||
}
|
||||
return addrs
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ func (s *Consul) Exists(key string) (bool, error) {
|
|||
}
|
||||
|
||||
// GetRange gets a range of values at "directory"
|
||||
func (s *Consul) GetRange(prefix string) (kvi []KVEntry, err error) {
|
||||
func (s *Consul) GetRange(prefix string) ([]*KVEntry, error) {
|
||||
pairs, _, err := s.client.KV().List(s.normalize(prefix), nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -126,13 +126,14 @@ func (s *Consul) GetRange(prefix string) (kvi []KVEntry, err error) {
|
|||
if len(pairs) == 0 {
|
||||
return nil, ErrKeyNotFound
|
||||
}
|
||||
kv := []*KVEntry{}
|
||||
for _, pair := range pairs {
|
||||
if pair.Key == prefix {
|
||||
continue
|
||||
}
|
||||
kvi = append(kvi, &kviTuple{pair.Key, pair.Value, pair.ModifyIndex})
|
||||
kv = append(kv, &KVEntry{pair.Key, pair.Value, pair.ModifyIndex})
|
||||
}
|
||||
return kvi, nil
|
||||
return kv, nil
|
||||
}
|
||||
|
||||
// DeleteRange deletes a range of values at "directory"
|
||||
|
@ -163,7 +164,7 @@ func (s *Consul) Watch(key string, heartbeat time.Duration, callback WatchCallba
|
|||
s.watches[fkey] = nil
|
||||
return err
|
||||
}
|
||||
callback(&kviTuple{key, entry, index})
|
||||
callback(&KVEntry{key, entry, index})
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -155,7 +155,7 @@ func (s *Etcd) Watch(key string, _ time.Duration, callback WatchCallback) error
|
|||
s.watches[key] = nil
|
||||
return err
|
||||
}
|
||||
callback(&kviTuple{key, entry, index})
|
||||
callback(&KVEntry{key, entry, index})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -204,16 +204,16 @@ func (s *Etcd) AtomicDelete(key string, oldValue []byte, index uint64) (bool, er
|
|||
}
|
||||
|
||||
// GetRange gets a range of values at "directory"
|
||||
func (s *Etcd) GetRange(prefix string) ([]KVEntry, error) {
|
||||
func (s *Etcd) GetRange(prefix string) ([]*KVEntry, error) {
|
||||
resp, err := s.client.Get(normalize(prefix), true, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
kvi := make([]KVEntry, len(resp.Node.Nodes))
|
||||
for i, n := range resp.Node.Nodes {
|
||||
kvi[i] = &kviTuple{n.Key, []byte(n.Value), n.ModifiedIndex}
|
||||
kv := []*KVEntry{}
|
||||
for _, n := range resp.Node.Nodes {
|
||||
kv = append(kv, &KVEntry{n.Key, []byte(n.Value), n.ModifiedIndex})
|
||||
}
|
||||
return kvi, nil
|
||||
return kv, nil
|
||||
}
|
||||
|
||||
// DeleteRange deletes a range of values at "directory"
|
||||
|
|
|
@ -20,7 +20,7 @@ const (
|
|||
|
||||
// WatchCallback is used for watch methods on keys
|
||||
// and is triggered on key change
|
||||
type WatchCallback func(kviTuple ...KVEntry)
|
||||
type WatchCallback func(entries ...*KVEntry)
|
||||
|
||||
// Initialize creates a new Store object, initializing the client
|
||||
type Initialize func(addrs []string, options *Config) (Store, error)
|
||||
|
@ -54,7 +54,7 @@ type Store interface {
|
|||
CreateLock(key string, value []byte) (Locker, error)
|
||||
|
||||
// Get range of keys based on prefix
|
||||
GetRange(prefix string) ([]KVEntry, error)
|
||||
GetRange(prefix string) ([]*KVEntry, error)
|
||||
|
||||
// Delete range of keys based on prefix
|
||||
DeleteRange(prefix string) error
|
||||
|
@ -73,10 +73,10 @@ type Store interface {
|
|||
}
|
||||
|
||||
// KVEntry represents {Key, Value, Lastindex} tuple
|
||||
type KVEntry interface {
|
||||
Key() string
|
||||
Value() []byte
|
||||
LastIndex() uint64
|
||||
type KVEntry struct {
|
||||
Key string
|
||||
Value []byte
|
||||
LastIndex uint64
|
||||
}
|
||||
|
||||
// Locker provides locking mechanism on top of the store.
|
||||
|
|
|
@ -28,21 +28,3 @@ type Config struct {
|
|||
TLS *tls.Config
|
||||
Timeout time.Duration
|
||||
}
|
||||
|
||||
type kviTuple struct {
|
||||
key string
|
||||
value []byte
|
||||
lastIndex uint64
|
||||
}
|
||||
|
||||
func (kvi *kviTuple) Key() string {
|
||||
return kvi.key
|
||||
}
|
||||
|
||||
func (kvi *kviTuple) Value() []byte {
|
||||
return kvi.value
|
||||
}
|
||||
|
||||
func (kvi *kviTuple) LastIndex() uint64 {
|
||||
return kvi.lastIndex
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ func (s *Zookeeper) Watch(key string, _ time.Duration, callback WatchCallback) e
|
|||
log.WithField("name", "zk").Debug("Discovery watch triggered")
|
||||
entry, index, err := s.Get(key)
|
||||
if err == nil {
|
||||
callback(&kviTuple{key, []byte(entry), index})
|
||||
callback(&KVEntry{key, []byte(entry), index})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -140,17 +140,18 @@ func (s *Zookeeper) CancelWatch(key string) error {
|
|||
}
|
||||
|
||||
// GetRange gets a range of values at "directory"
|
||||
func (s *Zookeeper) GetRange(prefix string) (kvi []KVEntry, err error) {
|
||||
func (s *Zookeeper) GetRange(prefix string) ([]*KVEntry, error) {
|
||||
prefix = normalize(prefix)
|
||||
entries, stat, err := s.client.Children(prefix)
|
||||
if err != nil {
|
||||
log.Error("Cannot fetch range of keys beginning with prefix: ", prefix)
|
||||
return nil, err
|
||||
}
|
||||
kv := []*KVEntry{}
|
||||
for _, item := range entries {
|
||||
kvi = append(kvi, &kviTuple{prefix, []byte(item), uint64(stat.Mzxid)})
|
||||
kv = append(kv, &KVEntry{prefix, []byte(item), uint64(stat.Mzxid)})
|
||||
}
|
||||
return kvi, err
|
||||
return kv, err
|
||||
}
|
||||
|
||||
// DeleteRange deletes a range of values at "directory"
|
||||
|
|
Loading…
Reference in New Issue