From 33afbfead648e04a9b86a996870d94140e75012f Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 28 Jan 2015 14:07:07 -0800 Subject: [PATCH] etcdserver: remove the dep on metrics. first step towards removing metrics pkg from etcd. --- etcdserver/etcdhttp/client.go | 3 +-- etcdserver/raft.go | 17 +++++++++++++++++ etcdserver/server.go | 5 ----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/etcdserver/etcdhttp/client.go b/etcdserver/etcdhttp/client.go index 39d0fadf0..2a393d336 100644 --- a/etcdserver/etcdhttp/client.go +++ b/etcdserver/etcdhttp/client.go @@ -35,7 +35,6 @@ import ( "github.com/coreos/etcd/etcdserver/etcdhttp/httptypes" "github.com/coreos/etcd/etcdserver/etcdserverpb" "github.com/coreos/etcd/etcdserver/stats" - "github.com/coreos/etcd/pkg/metrics" "github.com/coreos/etcd/pkg/types" "github.com/coreos/etcd/raft" "github.com/coreos/etcd/store" @@ -291,7 +290,7 @@ func serveStats(w http.ResponseWriter, r *http.Request) { // TODO: getting one key or a prefix of keys based on path fmt.Fprintf(w, "{\n") first := true - metrics.Do(func(kv expvar.KeyValue) { + expvar.Do(func(kv expvar.KeyValue) { if !first { fmt.Fprintf(w, ",\n") } diff --git a/etcdserver/raft.go b/etcdserver/raft.go index 0d7d5d001..02e8d61ec 100644 --- a/etcdserver/raft.go +++ b/etcdserver/raft.go @@ -16,6 +16,7 @@ package etcdserver import ( "encoding/json" + "expvar" "log" "os" "sort" @@ -31,6 +32,19 @@ import ( "github.com/coreos/etcd/wal/walpb" ) +var ( + // indirection for expvar func interface + // expvar panics when publishing duplicate name + // expvar does not support remove a registered name + // so only register a func that calls raftStatus + // and change raftStatus as we need. + raftStatus func() raft.Status +) + +func init() { + expvar.Publish("raft.status", expvar.Func(func() interface{} { return raftStatus() })) +} + type RaftTimer interface { Index() uint64 Term() uint64 @@ -96,6 +110,7 @@ func startNode(cfg *ServerConfig, ids []types.ID) (id types.ID, n raft.Node, s * log.Printf("etcdserver: start member %s in cluster %s", id, cfg.Cluster.ID()) s = raft.NewMemoryStorage() n = raft.StartNode(uint64(id), peers, cfg.ElectionTicks, 1, s) + raftStatus = n.Status return } @@ -115,6 +130,7 @@ func restartNode(cfg *ServerConfig, snapshot *raftpb.Snapshot) (types.ID, raft.N s.SetHardState(st) s.Append(ents) n := raft.RestartNode(uint64(id), cfg.ElectionTicks, 1, s, 0) + raftStatus = n.Status return id, n, s, w } @@ -156,6 +172,7 @@ func restartAsStandaloneNode(cfg *ServerConfig, snapshot *raftpb.Snapshot) (type s.SetHardState(st) s.Append(ents) n := raft.RestartNode(uint64(id), cfg.ElectionTicks, 1, s, 0) + raftStatus = n.Status return id, n, s, w } diff --git a/etcdserver/server.go b/etcdserver/server.go index cc8f527d5..8895d36cf 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -16,7 +16,6 @@ package etcdserver import ( "encoding/json" - "expvar" "fmt" "log" "math/rand" @@ -32,7 +31,6 @@ import ( "github.com/coreos/etcd/etcdserver/stats" "github.com/coreos/etcd/pkg/fileutil" "github.com/coreos/etcd/pkg/idutil" - "github.com/coreos/etcd/pkg/metrics" "github.com/coreos/etcd/pkg/pbutil" "github.com/coreos/etcd/pkg/timeutil" "github.com/coreos/etcd/pkg/types" @@ -277,7 +275,6 @@ func (s *EtcdServer) Start() { s.start() go s.publish(defaultPublishRetryInterval) go s.purgeFile() - metrics.Publish("raft.status", expvar.Func(s.raftStatus)) } // start prepares and starts server in a new goroutine. It is no longer safe to @@ -540,8 +537,6 @@ func (s *EtcdServer) LeaderStats() []byte { func (s *EtcdServer) StoreStats() []byte { return s.store.JsonStats() } -func (s *EtcdServer) raftStatus() interface{} { return s.r.Status() } - func (s *EtcdServer) AddMember(ctx context.Context, memb Member) error { // TODO: move Member to protobuf type b, err := json.Marshal(memb)