mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge branch 'master' of github.com:coreos/etcd
Conflicts: server/peer_server_handlers.go
This commit is contained in:
@@ -696,8 +696,8 @@ func (s *PeerServer) monitorActiveSize() {
|
||||
|
||||
// Retrieve target active size and actual active size.
|
||||
activeSize := s.ClusterConfig().ActiveSize
|
||||
peerCount := s.registry.Count()
|
||||
peers := s.registry.Names()
|
||||
peerCount := s.registry.Count()
|
||||
if index := sort.SearchStrings(peers, s.Config.Name); index < len(peers) && peers[index] == s.Config.Name {
|
||||
peers = append(peers[:index], peers[index+1:]...)
|
||||
}
|
||||
|
||||
@@ -223,8 +223,9 @@ func (ps *PeerServer) setClusterConfigHttpHandler(w http.ResponseWriter, req *ht
|
||||
// Retrieves a list of peers and standbys.
|
||||
func (ps *PeerServer) getMachinesHttpHandler(w http.ResponseWriter, req *http.Request) {
|
||||
machines := make([]*machineMessage, 0)
|
||||
leader := ps.raftServer.Leader()
|
||||
for _, name := range ps.registry.Names() {
|
||||
if msg := ps.getMachineMessage(name); msg != nil {
|
||||
if msg := ps.getMachineMessage(name, leader); msg != nil {
|
||||
machines = append(machines, msg)
|
||||
}
|
||||
}
|
||||
@@ -234,21 +235,27 @@ func (ps *PeerServer) getMachinesHttpHandler(w http.ResponseWriter, req *http.Re
|
||||
// Retrieve single peer or standby.
|
||||
func (ps *PeerServer) getMachineHttpHandler(w http.ResponseWriter, req *http.Request) {
|
||||
vars := mux.Vars(req)
|
||||
json.NewEncoder(w).Encode(ps.getMachineMessage(vars["name"]))
|
||||
m := ps.getMachineMessage(vars["name"], ps.raftServer.Leader())
|
||||
json.NewEncoder(w).Encode(m)
|
||||
}
|
||||
|
||||
func (ps *PeerServer) getMachineMessage(name string) *machineMessage {
|
||||
func (ps *PeerServer) getMachineMessage(name string, leader string) *machineMessage {
|
||||
if !ps.registry.Exists(name) {
|
||||
return nil
|
||||
}
|
||||
|
||||
clientURL, _ := ps.registry.ClientURL(name)
|
||||
peerURL, _ := ps.registry.PeerURL(name)
|
||||
return &machineMessage{
|
||||
msg := &machineMessage{
|
||||
Name: name,
|
||||
State: raft.Follower,
|
||||
ClientURL: clientURL,
|
||||
PeerURL: peerURL,
|
||||
}
|
||||
if name == leader {
|
||||
msg.State = raft.Leader
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
// Response to the name request
|
||||
@@ -300,6 +307,7 @@ func (ps *PeerServer) UpgradeHttpHandler(w http.ResponseWriter, req *http.Reques
|
||||
// machineMessage represents information about a peer or standby in the registry.
|
||||
type machineMessage struct {
|
||||
Name string `json:"name"`
|
||||
State string `json:"state"`
|
||||
ClientURL string `json:"clientURL"`
|
||||
PeerURL string `json:"peerURL"`
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ type raftServerStats struct {
|
||||
}
|
||||
|
||||
func NewRaftServerStats(name string) *raftServerStats {
|
||||
return &raftServerStats{
|
||||
stats := &raftServerStats{
|
||||
Name: name,
|
||||
StartTime: time.Now(),
|
||||
sendRateQueue: &statsQueue{
|
||||
@@ -43,6 +43,8 @@ func NewRaftServerStats(name string) *raftServerStats {
|
||||
back: -1,
|
||||
},
|
||||
}
|
||||
stats.LeaderInfo.startTime = time.Now()
|
||||
return stats
|
||||
}
|
||||
|
||||
func (ss *raftServerStats) RecvAppendReq(leaderName string, pkgSize int) {
|
||||
|
||||
@@ -38,19 +38,6 @@ func NewRegistry(s store.Store) *Registry {
|
||||
}
|
||||
}
|
||||
|
||||
// Names returns a list of cached peer names.
|
||||
func (r *Registry) Names() []string {
|
||||
r.Lock()
|
||||
defer r.Unlock()
|
||||
|
||||
names := make([]string, 0, len(r.peers))
|
||||
for name := range r.peers {
|
||||
names = append(names, name)
|
||||
}
|
||||
sort.Sort(sort.StringSlice(names))
|
||||
return names
|
||||
}
|
||||
|
||||
// Register adds a peer to the registry.
|
||||
func (r *Registry) Register(name string, peerURL string, machURL string) error {
|
||||
// Write data to store.
|
||||
@@ -167,6 +154,17 @@ func (r *Registry) UpdatePeerURL(name string, peerURL string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Registry) name(key, name string) (string, bool) {
|
||||
return name, true
|
||||
}
|
||||
|
||||
// Names returns a list of cached peer names.
|
||||
func (r *Registry) Names() []string {
|
||||
names := r.urls(RegistryKey, "", "", r.name)
|
||||
sort.Sort(sort.StringSlice(names))
|
||||
return names
|
||||
}
|
||||
|
||||
// Retrieves the Client URLs for all nodes.
|
||||
func (r *Registry) ClientURLs(leaderName, selfName string) []string {
|
||||
return r.urls(RegistryKey, leaderName, selfName, r.clientURL)
|
||||
|
||||
@@ -90,6 +90,13 @@ func TestV2GetKeyRecursively(t *testing.T) {
|
||||
//
|
||||
func TestV2WatchKey(t *testing.T) {
|
||||
tests.RunServer(func(s *server.Server) {
|
||||
// There exists a little gap between etcd ready to serve and
|
||||
// it actually serves the first request, which means the response
|
||||
// delay could be a little bigger.
|
||||
// This test is time sensitive, so it does one request to ensure
|
||||
// that the server is working.
|
||||
tests.Get(fmt.Sprintf("%s%s", s.URL(), "/v2/keys/foo/bar"))
|
||||
|
||||
var watchResp *http.Response
|
||||
c := make(chan bool)
|
||||
go func() {
|
||||
|
||||
Reference in New Issue
Block a user