You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by as...@apache.org on 2020/09/25 16:04:41 UTC
[mesos] 05/05: Added offer constraints to `updateFramework()` in
the Java bindings.
This is an automated email from the ASF dual-hosted git repository.
asekretenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 930c7e98d17e71192dae1d49b4b2217cc2dbd8b2
Author: Andrei Sekretenko <as...@mesosphere.com>
AuthorDate: Wed Sep 16 12:28:24 2020 +0200
Added offer constraints to `updateFramework()` in the Java bindings.
Review: https://reviews.apache.org/r/72900
---
src/examples/java/TestFramework.java | 7 +++-
src/java/jni/construct.cpp | 10 ++++++
.../jni/org_apache_mesos_MesosSchedulerDriver.cpp | 15 +++++++--
.../src/org/apache/mesos/MesosSchedulerDriver.java | 10 +++++-
src/java/src/org/apache/mesos/SchedulerDriver.java | 37 ++++++++++++++++------
5 files changed, 64 insertions(+), 15 deletions(-)
diff --git a/src/examples/java/TestFramework.java b/src/examples/java/TestFramework.java
index 1dea79c..1a84ca3 100644
--- a/src/examples/java/TestFramework.java
+++ b/src/examples/java/TestFramework.java
@@ -28,6 +28,8 @@ import com.google.protobuf.ByteString;
import org.apache.mesos.*;
import org.apache.mesos.Protos.*;
+import org.apache.mesos.scheduler.Protos.OfferConstraints;
+import org.apache.mesos.scheduler.Protos.AttributeConstraint;
public class TestFramework {
static class TestScheduler implements Scheduler {
@@ -50,7 +52,10 @@ public class TestFramework {
// Clear suppressed roles.
FrameworkInfo.Builder builder = framework.toBuilder();
builder.setId(frameworkId);
- driver.updateFramework(builder.build(), new ArrayList<String>());
+ driver.updateFramework(
+ builder.build(),
+ new ArrayList<String>(),
+ OfferConstraints.getDefaultInstance());
}
@Override
diff --git a/src/java/jni/construct.cpp b/src/java/jni/construct.cpp
index a48ca07..d45ed6c 100644
--- a/src/java/jni/construct.cpp
+++ b/src/java/jni/construct.cpp
@@ -25,6 +25,8 @@
#include <mesos/mesos.hpp>
+#include <mesos/scheduler/scheduler.hpp>
+
#include <mesos/v1/mesos.hpp>
#include <mesos/v1/scheduler/scheduler.hpp>
@@ -147,6 +149,14 @@ FrameworkInfo construct(JNIEnv* env, jobject jobj)
return constructViaProtobufSerialization<FrameworkInfo>(env, jobj);
}
+template <>
+::mesos::scheduler::OfferConstraints construct(JNIEnv* env, jobject jobj)
+{
+ return constructViaProtobufSerialization<
+ ::mesos::scheduler::OfferConstraints>(env, jobj);
+}
+
+
template <>
Credential construct(JNIEnv* env, jobject jobj)
diff --git a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
index 4d71765..4efde30 100644
--- a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
+++ b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
@@ -1068,18 +1068,27 @@ Java_org_apache_mesos_MesosSchedulerDriver_reconcileTasks(
/* Class: org_apache_mesos_MesosSchedulerDriver
* Method: updateFramework
- * Signature: (Lorg/apache/mesos/Protos/FrameworkInfo;Ljava/util/Collection;)Lorg/apache/mesos/Protos/Status;
+ * Signature: (Lorg/apache/mesos/Protos/FrameworkInfo;Ljava/util/Collection;Lorg/apache/mesos/scheduler/Protos/OfferConstraints;)Lorg/apache/mesos/Protos/Status;
*/
JNIEXPORT jobject JNICALL
Java_org_apache_mesos_MesosSchedulerDriver_updateFramework(
- JNIEnv* env, jobject thiz, jobject jframeworkInfo, jobject jsuppressedRoles)
+ JNIEnv* env,
+ jobject thiz,
+ jobject jframeworkInfo,
+ jobject jsuppressedRoles,
+ jobject jofferConstraints)
{
+ using ::mesos::scheduler::OfferConstraints;
+
const FrameworkInfo& frameworkInfo =
construct<FrameworkInfo>(env, jframeworkInfo);
const vector<string> suppressedRoles =
constructFromIterable<string>(env, jsuppressedRoles);
+ ::mesos::scheduler::OfferConstraints offerConstraints =
+ construct<OfferConstraints>(env, jofferConstraints);
+
jclass clazz = env->GetObjectClass(thiz);
jfieldID __driver = env->GetFieldID(clazz, "__driver", "J");
@@ -1087,7 +1096,7 @@ Java_org_apache_mesos_MesosSchedulerDriver_updateFramework(
(MesosSchedulerDriver*) env->GetLongField(thiz, __driver);
Status status = driver->updateFramework(
- frameworkInfo, suppressedRoles, ::mesos::scheduler::OfferConstraints());
+ frameworkInfo, suppressedRoles, std::move(offerConstraints));
return convert<Status>(env, status);
}
diff --git a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
index 3e74be9..4fdae33 100644
--- a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
+++ b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
@@ -19,6 +19,7 @@
package org.apache.mesos;
import org.apache.mesos.Protos.*;
+import org.apache.mesos.scheduler.Protos.OfferConstraints;
import java.util.ArrayList;
import java.util.Collection;
@@ -408,7 +409,14 @@ public class MesosSchedulerDriver implements SchedulerDriver {
public native Status reconcileTasks(Collection<TaskStatus> statuses);
public native Status updateFramework(FrameworkInfo frameworkInfo,
- Collection<String> suppressedRoles);
+ Collection<String> suppressedRoles,
+ OfferConstraints offerConstraints);
+
+ public Status updateFramework(FrameworkInfo frameworkInfo,
+ Collection<String> suppressedRoles) {
+ return updateFramework(
+ frameworkInfo, suppressedRoles, OfferConstraints.getDefaultInstance());
+ }
protected native void initialize();
protected native void finalize();
diff --git a/src/java/src/org/apache/mesos/SchedulerDriver.java b/src/java/src/org/apache/mesos/SchedulerDriver.java
index e04916e..b400034 100644
--- a/src/java/src/org/apache/mesos/SchedulerDriver.java
+++ b/src/java/src/org/apache/mesos/SchedulerDriver.java
@@ -19,6 +19,8 @@
package org.apache.mesos;
import org.apache.mesos.Protos.*;
+import org.apache.mesos.scheduler.Protos.OfferConstraints;
+
import java.util.Collection;
import java.util.Map;
@@ -364,14 +366,17 @@ public interface SchedulerDriver {
*/
Status reconcileTasks(Collection<TaskStatus> statuses);
- /**
- * Inform Mesos master about changes to the `FrameworkInfo` and the list of
- * suppressed roles. The driver will store the new `FrameworkInfo` and the new
- * suppressed roles list, and all subsequent re-registrations will use it.
+ /*
+ * Requests Mesos master to change the `FrameworkInfo`, the set of suppressed
+ * roles and the offer constraints. The driver will store the new
+ * `FrameworkInfo`, the new set of suppressed roles and the new offer
+ * constraints, and all subsequent re-registrations will use them.
*
* NOTE: If the supplied info is invalid or fails authorization,
- * the `error()` callback will be invoked asynchronously (after
- * the master replies with a `FrameworkErrorMessage`).
+ * or the supplied offer constraints are not valid, the `error()` callback
+ * will be invoked asynchronously (after the master replies with a
+ * `FrameworkErrorMessage`). Note that validity of non-empty (i.e.
+ * not default-constructed) offer constraints may depend on master flags.
*
* NOTE: This must be called after initial registration with the
* master completes and the `FrameworkID` is assigned. The assigned
@@ -381,14 +386,26 @@ public interface SchedulerDriver {
* fields will be auto-populated using the same approach used
* during driver initialization.
*
- * @param frameworkInfo The new FrameworkInfo.
- *
- * @param suppressedRoles The new list of suppressed roles.
+ * @param frameworkInfo The new FrameworkInfo.
+ * @param suppressedRoles The new list of suppressed roles.
+ * @param offerConstraints The new offer constraints.
*
- * @return The state of the driver after the call.
+ * @return The state of the driver after the call.
*
* @see FrameworkInfo
+ * @see OfferConstraints
*/
Status updateFramework(FrameworkInfo frameworkInfo,
+ Collection<String> suppressedRoles,
+ OfferConstraints offerConstraints);
+
+ /**
+ * @deprecated
+ * To call UPDATE_FRAMEWORK without setting offer constraints,
+ * use the new `updateFramework()` signature and pass empty constraints
+ * (for example, the ones returned by `OfferConstraints.getDefaultInstance()`).
+ */
+ @Deprecated
+ Status updateFramework(FrameworkInfo frameworkInfo,
Collection<String> suppressedRoles);
}