diff --git a/contrib/raftexample/README.md b/contrib/raftexample/README.md index 312adeb9c2e..2e73996a6a6 100644 --- a/contrib/raftexample/README.md +++ b/contrib/raftexample/README.md @@ -6,6 +6,16 @@ raftexample is an example usage of etcd's [raft library](../../raft). It provide ## Getting Started +### Building raftexample + +Clone `etcd` to `/src/go.etcd.io/etcd` + +```sh +export GOPATH= +cd /src/go.etcd.io/etcd/contrib/raftexample +go build -o raftexample +``` + ### Running single node raftexample First start a single-member cluster of raftexample: diff --git a/contrib/raftexample/kvstore.go b/contrib/raftexample/kvstore.go index b56dcb31aec..b057501a40a 100644 --- a/contrib/raftexample/kvstore.go +++ b/contrib/raftexample/kvstore.go @@ -48,8 +48,8 @@ func newKVStore(snapshotter *snap.Snapshotter, proposeC chan<- string, commitC < func (s *kvstore) Lookup(key string) (string, bool) { s.mu.RLock() + defer s.mu.RUnlock() v, ok := s.kvStore[key] - s.mu.RUnlock() return v, ok } @@ -106,7 +106,7 @@ func (s *kvstore) recoverFromSnapshot(snapshot []byte) error { return err } s.mu.Lock() + defer s.mu.Unlock() s.kvStore = store - s.mu.Unlock() return nil }