|
|
|
@ -49,8 +49,8 @@ type Store interface {
|
|
|
|
|
// Remove removes the node, specified by addr, from the cluster.
|
|
|
|
|
Remove(addr string) error
|
|
|
|
|
|
|
|
|
|
// Leader returns the Raft leader of the cluster.
|
|
|
|
|
Leader() string
|
|
|
|
|
// LeaderAddr returns the Raft address of the leader of the cluster.
|
|
|
|
|
LeaderAddr() string
|
|
|
|
|
|
|
|
|
|
// Peer returns the API peer for the given address
|
|
|
|
|
Peer(addr string) string
|
|
|
|
@ -309,7 +309,7 @@ func (s *Service) handleJoin(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
if err := s.store.Join(remoteID, remoteAddr); err != nil {
|
|
|
|
|
if err == store.ErrNotLeader {
|
|
|
|
|
leader := s.store.Peer(s.store.Leader())
|
|
|
|
|
leader := s.store.Peer(s.store.LeaderAddr())
|
|
|
|
|
if leader == "" {
|
|
|
|
|
http.Error(w, err.Error(), http.StatusServiceUnavailable)
|
|
|
|
|
return
|
|
|
|
@ -363,7 +363,7 @@ func (s *Service) handleRemove(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
if err := s.store.Remove(remoteAddr); err != nil {
|
|
|
|
|
if err == store.ErrNotLeader {
|
|
|
|
|
leader := s.store.Peer(s.store.Leader())
|
|
|
|
|
leader := s.store.Peer(s.store.LeaderAddr())
|
|
|
|
|
if leader == "" {
|
|
|
|
|
http.Error(w, err.Error(), http.StatusServiceUnavailable)
|
|
|
|
|
return
|
|
|
|
@ -448,7 +448,7 @@ func (s *Service) handleLoad(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
results, err := s.store.ExecuteOrAbort(&store.ExecuteRequest{queries, timings, false})
|
|
|
|
|
if err != nil {
|
|
|
|
|
if err == store.ErrNotLeader {
|
|
|
|
|
leader := s.store.Peer(s.store.Leader())
|
|
|
|
|
leader := s.store.Peer(s.store.LeaderAddr())
|
|
|
|
|
if leader == "" {
|
|
|
|
|
http.Error(w, err.Error(), http.StatusServiceUnavailable)
|
|
|
|
|
return
|
|
|
|
@ -498,7 +498,7 @@ func (s *Service) handleStatus(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
httpStatus := map[string]interface{}{
|
|
|
|
|
"addr": s.Addr().String(),
|
|
|
|
|
"auth": prettyEnabled(s.credentialStore != nil),
|
|
|
|
|
"redirect": s.store.Peer(s.store.Leader()),
|
|
|
|
|
"redirect": s.store.Peer(s.store.LeaderAddr()),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nodeStatus := map[string]interface{}{
|
|
|
|
@ -595,7 +595,7 @@ func (s *Service) handleExecute(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
results, err := s.store.Execute(&store.ExecuteRequest{queries, timings, isTx})
|
|
|
|
|
if err != nil {
|
|
|
|
|
if err == store.ErrNotLeader {
|
|
|
|
|
leader := s.store.Peer(s.store.Leader())
|
|
|
|
|
leader := s.store.Peer(s.store.LeaderAddr())
|
|
|
|
|
if leader == "" {
|
|
|
|
|
http.Error(w, err.Error(), http.StatusServiceUnavailable)
|
|
|
|
|
return
|
|
|
|
@ -657,7 +657,7 @@ func (s *Service) handleQuery(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
results, err := s.store.Query(&store.QueryRequest{queries, timings, isTx, lvl})
|
|
|
|
|
if err != nil {
|
|
|
|
|
if err == store.ErrNotLeader {
|
|
|
|
|
leader := s.store.Peer(s.store.Leader())
|
|
|
|
|
leader := s.store.Peer(s.store.LeaderAddr())
|
|
|
|
|
if leader == "" {
|
|
|
|
|
http.Error(w, err.Error(), http.StatusServiceUnavailable)
|
|
|
|
|
return
|
|
|
|
|