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().

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

        @Deprecated
        public Map<String,​DocCollection> getCollectionsMap()
        Deprecated.
        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.
      • liveNodesContain

        public boolean liveNodesContain​(String name)
        Check if node is alive.
      • 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
      • hashCode

        public int hashCode()
        Overrides:
        hashCode 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.