Browse Source

Add event-based debugging output.

Ben Johnson 12 years ago
parent
commit
4acfc26c5e
2 changed files with 36 additions and 2 deletions
  1. 30 0
      server/peer_server.go
  2. 6 2
      test.sh

+ 30 - 0
server/peer_server.go

@@ -94,6 +94,11 @@ func NewPeerServer(name string, path string, url string, bindAddr string, tlsCon
 	}
 
 	s.raftServer = raftServer
+	s.raftServer.AddEventListener(raft.StateChangeEventType, s.raftEventLogger)
+	s.raftServer.AddEventListener(raft.LeaderChangeEventType, s.raftEventLogger)
+	s.raftServer.AddEventListener(raft.TermChangeEventType, s.raftEventLogger)
+	s.raftServer.AddEventListener(raft.AddPeerEventType, s.raftEventLogger)
+	s.raftServer.AddEventListener(raft.RemovePeerEventType, s.raftEventLogger)
 
 	return s
 }
@@ -422,6 +427,31 @@ func (s *PeerServer) PeerStats() []byte {
 	return nil
 }
 
+// raftEventLogger converts events from the Raft server into log messages.
+func (s *PeerServer) raftEventLogger(event raft.Event) {
+	value := event.Value()
+	prevValue := event.PrevValue()
+	if value == nil {
+		value = "<nil>"
+	}
+	if prevValue == nil {
+		prevValue = "<nil>"
+	}
+
+	switch event.Type() {
+	case raft.StateChangeEventType:
+		fmt.Printf("[%s] State changed from '%v' to '%v'.\n", s.name, prevValue, value)
+	case raft.TermChangeEventType:
+		fmt.Printf("[%s] Term #%v started.\n", s.name, value)
+	case raft.LeaderChangeEventType:
+		fmt.Printf("[%s] Leader changed from '%v' to '%v'.\n", s.name, prevValue, value)
+	case raft.AddPeerEventType:
+		fmt.Printf("[%s] Peer added: '%v'\n", s.name, value)
+	case raft.RemovePeerEventType:
+		fmt.Printf("[%s] Peer removed: '%v'\n", s.name, value)
+	}
+}
+
 func (s *PeerServer) monitorSnapshot() {
 	for {
 		time.Sleep(s.snapConf.checkingInterval)

+ 6 - 2
test.sh

@@ -5,6 +5,10 @@ if [ -z "$PKG" ]; then
     PKG="./store ./server ./server/v2/tests ./mod/lock/v2/tests"
 fi
 
+if [ -z "$RUN" ]; then
+    RUN="."
+fi
+
 # Get GOPATH, etc from build
 . ./build
 
@@ -15,9 +19,9 @@ export GOPATH="${PWD}"
 for i in $PKG
 do
     go test -i $i
-    go test -v $i
+    go test -v -test.run=$RUN $i
 done
 
 # Functional tests
 go test -i ./tests/functional
-ETCD_BIN_PATH=$(pwd)/etcd go test -v ./tests/functional
+ETCD_BIN_PATH=$(pwd)/etcd go test -v  -test.run=$RUN ./tests/functional