code: func (c *cluster) determineClusterState() (clusterState string) {
  	if c.state == ClusterStateResizing {
  		return ClusterStateResizing
  	}
  	if c.haveTopologyAgreement() && c.allNodesReady() {
  		return ClusterStateNormal
  	}
  	if len(c.Topology.nodeIDs)-len(c.nodeIDs()) < c.ReplicaN && c.allNodesReady() {
  		return ClusterStateDegraded
  	}
  	return ClusterStateStarting
  }
docs: // determineClusterState is unprotected.