|
@@ -350,6 +350,28 @@ public class ClusterState implements ChunkedToXContent, Diffable<ClusterState> {
|
|
.anyMatch(e -> e.systemIndexMappingsVersion().equals(minVersions.systemIndexMappingsVersion()) == false);
|
|
.anyMatch(e -> e.systemIndexMappingsVersion().equals(minVersions.systemIndexMappingsVersion()) == false);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @return the minimum {@link TransportVersion} that will be used for all future intra-cluster node-to-node communications. This value
|
|
|
|
+ * only ever increases, so if {@code v.onOrAfter(cs.getMinTransportVersion())} is true once then it will remain true in the
|
|
|
|
+ * future.
|
|
|
|
+ * <p>
|
|
|
|
+ * There are some subtle exceptions:
|
|
|
|
+ * <ul>
|
|
|
|
+ * <li>The "only ever increases" property is handled by the master node using the in-memory (ephemeral) part of the
|
|
|
|
+ * {@link ClusterState} only, so in theory a full restart of a mixed-version cluster may lose that state and allow some nodes to see
|
|
|
|
+ * this value decrease. For this to happen in practice requires some fairly unlucky timing during the initial master election. We
|
|
|
|
+ * tell users not to do this: if something breaks during a rolling upgrade then they should upgrade all remaining nodes to continue.
|
|
|
|
+ * But we do not enforce it.
|
|
|
|
+ * <li>The "used for all node-to-node communications" is false in a disordered upgrade (an upgrade to a semantically-newer but
|
|
|
|
+ * chronologically-older version) because for each connection between such nodes we will use {@link
|
|
|
|
+ * TransportVersion#bestKnownVersion} to pick a transport version which is known by both endpoints. We tell users not to do
|
|
|
|
+ * disordered upgrades too, but do not enforce it.
|
|
|
|
+ * </ul>
|
|
|
|
+ * <p>
|
|
|
|
+ * Note also that node-to-node communications which are not <i>intra-cluster</i> (i.e. they are not between nodes in the same cluster)
|
|
|
|
+ * may sometimes use an earlier {@link TransportVersion} than this value. This includes remote-cluster communication, and communication
|
|
|
|
+ * with nodes that are just starting up or otherwise are attempting to join this cluster.
|
|
|
|
+ */
|
|
public TransportVersion getMinTransportVersion() {
|
|
public TransportVersion getMinTransportVersion() {
|
|
return this.minVersions.transportVersion();
|
|
return this.minVersions.transportVersion();
|
|
}
|
|
}
|