Class 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().
    WARNING: This API is experimental and might change in incompatible ways in the next release.
    • Constructor Detail

      • 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 Detail

      • 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
      • 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.
      • 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.

      • getCollectionsMap

        public Map<String,​DocCollection> getCollectionsMap()
        Get a map of collection name vs DocCollection objects

        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.

        Returns:
        a map of collection name vs DocCollection object
      • getLiveNodes

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

        public Map<String,​List<Replica>> getReplicaNamesPerCollectionOnNode​(String nodeName)
      • liveNodesContain

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

        public static ClusterState createFromJson​(int version,
                                                  byte[] bytes,
                                                  Set<String> liveNodes,
                                                  Instant creationTime,
                                                  DocCollection.PrsSupplier prsSupplier)
        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
      • hashCode

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

        public Map<String,​ClusterState.CollectionRef> getCollectionStates()
        Be aware that this may return collections which may not exist now. You can confirm that this collection exists after verifying CollectionRef.get() != null
      • getHostAllowList

        public Set<String> getHostAllowList()
        Gets the set of allowed hosts (host:port) built from the set of live nodes. The set is cached to be reused.
      • forEachCollection

        public void forEachCollection​(Consumer<DocCollection> consumer)
        Iterate over collections. Unlike getCollectionStates() collections passed to the consumer are guaranteed to exist.
        Parameters:
        consumer - collection consumer.
      • size

        public int size()
      • setStrInternerParser

        public static void setStrInternerParser​(Function<org.noggit.JSONParser,​org.noggit.ObjectBuilder> fun)