Interface ClusterStatePublisher

All Known Implementing Classes:
Coordinator

public interface ClusterStatePublisher
  • Method Details

    • publish

      void publish(ClusterStatePublicationEvent clusterStatePublicationEvent, ActionListener<Void> publishListener, ClusterStatePublisher.AckListener ackListener)
      Publishes an updated ClusterState to all the nodes in the cluster:
      • Send the updated state to all nodes. Typically we only send a Diff which each node combines with its local state to yield the updated state very cheaply.
      • Wait for enough master-eligible nodes to indicate that they have accepted the new state (i.e. written it to durable storage).
      • Tell all the nodes that the new state is now committed and should be applied via ClusterStateApplier.applyClusterState(org.elasticsearch.cluster.ClusterChangedEvent).
      • Finally, apply the state on the master.
      Parameters:
      publishListener - Notified when the publication completes, whether successful or not. In particular, publication may fail with a FailedToCommitClusterStateException if this node didn't receive responses to indicate that enough other master-eligible nodes accepted this state. In that case this node stops being the elected master and the master election process starts again.

      If the publication completes successfully then every future state will be a descendant of the published state. If the publication completes exceptionally then the new state may or may not be lost. More precisely, if the published state was accepted by the node that wins the master election triggered by the publication failure then the new master will publish the state which the old master failed to publish.

      If the publication completes successfully then the new state has definitely been applied on this node, and it has usually been applied on all other nodes too. However some nodes might have timed out or otherwise failed to apply the state, so it is possible that the last-applied state on some nodes is somewhat stale.

      ackListener - Notified when individual nodes acknowledge that they've applied the cluster state (or failed to do so).