All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticsearch.cluster.coordination.ClusterStatePublisher Maven / Gradle / Ivy

There is a newer version: 8.14.0
Show newest version
/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License
 * 2.0 and the Server Side Public License, v 1; you may not use this file except
 * in compliance with, at your election, the Elastic License 2.0 or the Server
 * Side Public License, v 1.
 */
package org.elasticsearch.cluster.coordination;

import org.elasticsearch.action.ActionListener;
import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.ClusterStateApplier;
import org.elasticsearch.cluster.ClusterStatePublicationEvent;
import org.elasticsearch.cluster.Diff;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.core.Nullable;
import org.elasticsearch.core.TimeValue;

public interface ClusterStatePublisher {
    /**
     * Publishes an updated {@link ClusterState} to all the nodes in the cluster:
     *
     * 
    *
  • Send the updated state to all nodes. Typically we only send a {@link 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 {@link * ClusterStateApplier#applyClusterState}.
  • *
  • Finally, apply the state on the master.
  • *
* * @param publishListener Notified when the publication completes, whether successful or not. In particular, publication may fail with a * {@link 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. * * @param ackListener Notified when individual nodes acknowledge that they've applied the cluster state (or failed to do so). */ void publish(ClusterStatePublicationEvent clusterStatePublicationEvent, ActionListener publishListener, AckListener ackListener); interface AckListener { /** * Should be called when the cluster coordination layer has committed the cluster state (i.e. even if this publication fails, it is * guaranteed to appear in future publications). * @param commitTime the time it took to commit the cluster state */ void onCommit(TimeValue commitTime); /** * Should be called whenever the cluster coordination layer receives confirmation from a node that it has successfully applied the * cluster state. In case of failures, an exception should be provided as parameter. * @param node the node * @param e the optional exception */ void onNodeAck(DiscoveryNode node, @Nullable Exception e); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy