Class ClusterState

java.lang.Object
org.apache.solr.common.cloud.ClusterState
All Implemented Interfaces:
MapSerializable, MapWriter, NavigableObject, org.noggit.JSONWriter.Writable

public class ClusterState extends Object implements MapWriter
Immutable state of the cloud. Normally you can get the state by using ZkStateReader#getClusterState().

However, the list of live nodes is updated when nodes go up and down.

WARNING: This API is experimental and might change in incompatible ways in the next release.
  • Field Details

  • Constructor Details

    • ClusterState

      public ClusterState(Set<String> liveNodes, Map<String,DocCollection> collectionStates)
      Use this constr when ClusterState is meant for consumption.
    • ClusterState

      public ClusterState(Map<String,ClusterState.CollectionRef> collectionStates, Set<String> liveNodes)
      Use this if all the collection states are not readily available and some needs to be lazily loaded (parameter order different from constructor above to have different erasures)
  • Method Details

    • copyWith

      public ClusterState copyWith(String collectionName, DocCollection collection)
      Returns a new cluster state object modified with the given collection.
      Parameters:
      collectionName - the name of the modified (or deleted) collection
      collection - the collection object. A null value deletes the collection from the state
      Returns:
      the updated cluster state which preserves the current live nodes
      NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
    • hasCollection

      public boolean hasCollection(String collectionName)
      Returns true if the specified collection name exists, false otherwise.

      Implementation note: This method resolves the collection reference by calling ClusterState.CollectionRef.get() which can make a call to ZooKeeper. This is necessary because the semantics of how collection list is loaded have changed in SOLR-6629.

    • getCollection

      public DocCollection getCollection(String collection)
      Get the named DocCollection object, or throw an exception if it doesn't exist.
    • getCollectionRef

      public ClusterState.CollectionRef getCollectionRef(String coll)
    • getCollectionOrNull

      public DocCollection getCollectionOrNull(String collectionName)
      Returns the corresponding DocCollection object for the given collection name if such a collection exists. Returns null otherwise. Equivalent to getCollectionOrNull(collectionName, false)
    • getCollectionOrNull

      public DocCollection getCollectionOrNull(String collectionName, boolean allowCached)
      Returns the corresponding DocCollection object for the given collection name if such a collection exists. Returns null otherwise.
      Parameters:
      collectionName - Name of the collection
      allowCached - allow LazyCollectionRefs to use a time-based cached value

      Implementation note: This method resolves the collection reference by calling ClusterState.CollectionRef.get() which may make a call to ZooKeeper. This is necessary because the semantics of how collection list is loaded have changed in SOLR-6629.

    • getCollectionNames

      public Collection<String> getCollectionNames()
      The collection names. Like a Set but might not implement it. Immutable; non-null. Some names returned might not resolve via getCollectionOrNull(String), so consider this a close approximation.
    • getLiveNodes

      public Set<String> getLiveNodes()
      Get names of the currently live nodes.
    • getReplicaNamesPerCollectionOnNode

      @Deprecated public Map<String,List<Replica>> getReplicaNamesPerCollectionOnNode(String nodeName)
      Deprecated.
    • liveNodesContain

      public boolean liveNodesContain(String name)
      Check if node is alive.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • createFromJson

      @Deprecated public static ClusterState createFromJson(int version, byte[] bytes, Set<String> liveNodes, Instant creationTime, DocCollection.PrsSupplier prsSupplier)
      Deprecated.
      Create a ClusterState from Json. This method doesn't support legacy configName location and thus don't call it where that's important
      Parameters:
      bytes - a byte array of a Json representation of a mapping from collection name to the Json representation of a DocCollection as written by MapWriter.write(JSONWriter). It can represent one or more collections.
      liveNodes - list of live nodes
      creationTime - assigns this date to all DocCollection referenced by the returned ClusterState
      Returns:
      the ClusterState
    • createFromCollectionMap

      @Deprecated public static ClusterState createFromCollectionMap(int version, Map<String,Object> stateMap, Set<String> liveNodes, Instant creationTime, DocCollection.PrsSupplier prsSupplier)
      Deprecated.
    • collectionFromObjects

      public static DocCollection collectionFromObjects(String name, Map<String,Object> objs, int version, Instant creationTime, DocCollection.PrsSupplier prsSupplier)
      NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
    • writeMap

      public void writeMap(MapWriter.EntryWriter ew) throws IOException
      Description copied from interface: MapWriter
      Writes this object's entries out to ew.
      Specified by:
      writeMap in interface MapWriter
      Throws:
      IOException
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • collectionStream

      public Stream<DocCollection> collectionStream()
      Streams the resolved DocCollections, which will often fetch from ZooKeeper for each one for a many-collection scenario. Use this sparingly; some users have thousands of collections!
    • size

      public int size()
      The approximate number of collections.
    • setStrInternerParser

      public static void setStrInternerParser(Function<org.noggit.JSONParser,org.noggit.ObjectBuilder> fun)
      NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.