diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-09-11 14:24:51 +0200 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-09-11 14:25:18 +0200 |
commit | a4cb51b28f43420db61a2459737c7585a227ee54 (patch) | |
tree | a83d2df85feae5bb748553feee42206a49d69173 /clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/VersionDependentTaskCompletion.java | |
parent | 0c8f9bdd5a8d6ce35e1a8adba174c51dc8583a92 (diff) |
Add support for version ACK-dependent tasks in cluster controller
Used to enable synchronous operation for set-node-state calls, which
ensure that side-effects of the call are visible when the response
returns.
If controller leadership is lost before state is published, tasks will
be failed back to the client.
Diffstat (limited to 'clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/VersionDependentTaskCompletion.java')
-rw-r--r-- | clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/VersionDependentTaskCompletion.java | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/VersionDependentTaskCompletion.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/VersionDependentTaskCompletion.java new file mode 100644 index 00000000000..d7b8f96005a --- /dev/null +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/VersionDependentTaskCompletion.java @@ -0,0 +1,43 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.clustercontroller.core; + +import java.util.Objects; + +/** + * Wrapper for a remote (i.e. REST API) cluster controller task whose + * completion depends on side effects by the task becoming visible in + * the cluster before a response can be sent. Each such task is associated + * with a particular cluster state version number representing a lower bound + * on the published state containing the side effect. + */ +class VersionDependentTaskCompletion { + private final long minimumVersion; + private final RemoteClusterControllerTask task; + + VersionDependentTaskCompletion(long minimumVersion, RemoteClusterControllerTask task) { + this.minimumVersion = minimumVersion; + this.task = task; + } + + long getMinimumVersion() { + return minimumVersion; + } + + RemoteClusterControllerTask getTask() { + return task; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + VersionDependentTaskCompletion that = (VersionDependentTaskCompletion) o; + return minimumVersion == that.minimumVersion && + Objects.equals(task, that.task); + } + + @Override + public int hashCode() { + return Objects.hash(minimumVersion, task); + } +} |