Browse Source

raftexample: added build instruction and minor refactoring

Trung Nguyen 6 years ago
parent
commit
74d6df2bd6
2 changed files with 12 additions and 2 deletions
  1. 10 0
      contrib/raftexample/README.md
  2. 2 2
      contrib/raftexample/kvstore.go

+ 10 - 0
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 `<your directory>/src/go.etcd.io/etcd`
+
+```sh
+export GOPATH=<your directory>
+cd <your directory>/src/go.etcd.io/etcd/contrib/raftexample
+go build -o raftexample
+```
+
 ### Running single node raftexample
 
 First start a single-member cluster of raftexample:

+ 2 - 2
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
 }