Fix readiness to return 200 for read-only mode (#8728)

- We should declare a cluster ready even if read quorum is achieved (atleast n/2 disks are online).
- Such that, all the zones should have enough read quorum. Thus making the cluster ready for reads.
master
Praveen raj Mani 5 years ago committed by kannappanr
parent 97d799b9f0
commit 157721f694
  1. 2
      cmd/healthcheck-handler.go
  2. 6
      cmd/xl-sets.go

@ -26,7 +26,7 @@ import (
// ReadinessCheckHandler -- Checks if the quorum number of disks are available. // ReadinessCheckHandler -- Checks if the quorum number of disks are available.
// For FS - Checks if the backend disk is available // For FS - Checks if the backend disk is available
// For Zones - Checks if all the zones have enough quorum // For Zones - Checks if all the zones have enough read quorum
func ReadinessCheckHandler(w http.ResponseWriter, r *http.Request) { func ReadinessCheckHandler(w http.ResponseWriter, r *http.Request) {
ctx := newContext(r, w, "ReadinessCheckHandler") ctx := newContext(r, w, "ReadinessCheckHandler")

@ -1657,7 +1657,7 @@ func (s *xlSets) GetMetrics(ctx context.Context) (*Metrics, error) {
return &Metrics{}, NotImplemented{} return &Metrics{}, NotImplemented{}
} }
// IsReady - Returns true if more than n/2 disks (quorum) are online // IsReady - Returns true if atleast n/2 disks (read quorum) are online
func (s *xlSets) IsReady(_ context.Context) bool { func (s *xlSets) IsReady(_ context.Context) bool {
s.xlDisksMu.RLock() s.xlDisksMu.RLock()
defer s.xlDisksMu.RUnlock() defer s.xlDisksMu.RUnlock()
@ -1674,8 +1674,8 @@ func (s *xlSets) IsReady(_ context.Context) bool {
if s.xlDisks[i][j].IsOnline() { if s.xlDisks[i][j].IsOnline() {
activeDisks++ activeDisks++
} }
// Return if more than n/2 disks are online. // Return true if read quorum is available.
if activeDisks > len(s.endpoints)/2 { if activeDisks >= len(s.endpoints)/2 {
return true return true
} }
} }

Loading…
Cancel
Save