From f13c7872d58a80a066a853b7a84830988afd6bd2 Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Wed, 4 Feb 2015 16:33:40 -0800 Subject: [PATCH] etcdserver: register pre-defined namespaces in store --- etcdserver/server.go | 2 +- store/store.go | 10 +++++++--- store/store_test.go | 9 +++++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/etcdserver/server.go b/etcdserver/server.go index 856f5138c..c3f72704d 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -141,7 +141,7 @@ type EtcdServer struct { // NewServer creates a new EtcdServer from the supplied configuration. The // configuration is considered static for the lifetime of the EtcdServer. func NewServer(cfg *ServerConfig) (*EtcdServer, error) { - st := store.New() + st := store.New(StoreAdminPrefix, StoreKeysPrefix) var w *wal.WAL var n raft.Node var s *raft.MemoryStorage diff --git a/store/store.go b/store/store.go index 7553b5a73..b8529afb7 100644 --- a/store/store.go +++ b/store/store.go @@ -70,16 +70,20 @@ type store struct { clock clockwork.Clock } -func New() Store { - s := newStore() +// The given namespaces will be created as initial directories in the returned store. +func New(namespaces ...string) Store { + s := newStore(namespaces...) s.clock = clockwork.NewRealClock() return s } -func newStore() *store { +func newStore(namespaces ...string) *store { s := new(store) s.CurrentVersion = defaultVersion s.Root = newDir(s, "/", s.CurrentIndex, nil, "", Permanent) + for _, namespace := range namespaces { + s.Root.Add(newDir(s, namespace, s.CurrentIndex, s.Root, "", Permanent)) + } s.Stats = newStats() s.WatcherHub = newWatchHub(1000) s.ttlKeyHeap = newTtlKeyHeap() diff --git a/store/store_test.go b/store/store_test.go index 5cfe49901..1b11229b6 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -23,6 +23,15 @@ import ( etcdErr "github.com/coreos/etcd/error" ) +func TestNewStoreWithNamespaces(t *testing.T) { + s := newStore("/0", "/1") + + _, err := s.Get("/0", false, false) + assert.Nil(t, err, "") + _, err = s.Get("/1", false, false) + assert.Nil(t, err, "") +} + // Ensure that the store can retrieve an existing value. func TestStoreGetValue(t *testing.T) { s := newStore()