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


The following commit(s) were added to refs/heads/master by this push:
     new c28fd3a  Re-added the obsolete `updateFramework` signature into 
libmesos-java.so.
c28fd3a is described below

commit c28fd3a93e0d9d9a868aec2380abd1dd338304ef
Author: Andrei Sekretenko <[email protected]>
AuthorDate: Thu Oct 1 14:06:59 2020 +0200

    Re-added the obsolete `updateFramework` signature into libmesos-java.so.
    
    This patch converts the implementation of the obsolete 2-parameter
    `SchedulerDriver.updateFramework(frameworkInfo, suppressedRoles)`
    from a wrapper around the new signature back into a JNI method
    that 930c7e98d17e71192dae1d49b4b2217cc2dbd8b2 attempted to remove.
    
    This is needed to keep compatibility between older versions of
    `mesos.jar` and newer versions of `libmesos-java.so`.
    
    Review: https://reviews.apache.org/r/72922
---
 .../jni/org_apache_mesos_MesosSchedulerDriver.cpp  | 42 +++++++++++++++++-----
 .../src/org/apache/mesos/MesosSchedulerDriver.java | 28 ++++++++++++---
 2 files changed, 56 insertions(+), 14 deletions(-)

diff --git a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp 
b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
index 4efde30..afdaa3b 100644
--- a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
+++ b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
@@ -21,6 +21,7 @@
 #include <mesos/scheduler.hpp>
 
 #include <stout/foreach.hpp>
+#include <stout/option.hpp>
 #include <stout/result.hpp>
 #include <stout/try.hpp>
 
@@ -1066,17 +1067,12 @@ 
Java_org_apache_mesos_MesosSchedulerDriver_reconcileTasks(
   return convert<Status>(env, status);
 }
 
-/* Class:     org_apache_mesos_MesosSchedulerDriver
- * Method:    updateFramework
- * 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(
+static jobject updateFramework(
     JNIEnv* env,
     jobject thiz,
     jobject jframeworkInfo,
     jobject jsuppressedRoles,
-    jobject jofferConstraints)
+    Option<jobject> jofferConstraints)
 {
   using ::mesos::scheduler::OfferConstraints;
 
@@ -1086,8 +1082,9 @@ 
Java_org_apache_mesos_MesosSchedulerDriver_updateFramework(
   const vector<string> suppressedRoles =
     constructFromIterable<string>(env, jsuppressedRoles);
 
-  ::mesos::scheduler::OfferConstraints offerConstraints =
-    construct<OfferConstraints>(env, jofferConstraints);
+  OfferConstraints offerConstraints = jofferConstraints.isSome()
+      ? construct<OfferConstraints>(env, *jofferConstraints)
+      : OfferConstraints();
 
   jclass clazz = env->GetObjectClass(thiz);
 
@@ -1101,4 +1098,31 @@ 
Java_org_apache_mesos_MesosSchedulerDriver_updateFramework(
   return convert<Status>(env, status);
 }
 
+/* Class:     org_apache_mesos_MesosSchedulerDriver
+ * Method:    updateFramework
+ * Signature: 
(Lorg/apache/mesos/Protos/FrameworkInfo;Ljava/util/Collection;)Lorg/apache/mesos/Protos/Status;
+ */
+JNIEXPORT jobject JNICALL
+Java_org_apache_mesos_MesosSchedulerDriver_updateFramework(
+    JNIEnv* env, jobject thiz, jobject jframeworkInfo, jobject 
jsuppressedRoles)
+{
+  return updateFramework(env, thiz, jframeworkInfo, jsuppressedRoles, None());
+}
+
+/* Class:     org_apache_mesos_MesosSchedulerDriver
+ * Method:    updateFrameworkWithConstraints
+ * 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_updateFrameworkWithConstraints(
+    JNIEnv* env,
+    jobject thiz,
+    jobject jframeworkInfo,
+    jobject jsuppressedRoles,
+    jobject jofferConstraints)
+{
+  return updateFramework(
+      env, thiz, jframeworkInfo, jsuppressedRoles, jofferConstraints);
+}
+
 } // extern "C" {
diff --git a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java 
b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
index 4fdae33..9be0ec1 100644
--- a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
+++ b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
@@ -408,16 +408,34 @@ public class MesosSchedulerDriver implements 
SchedulerDriver {
 
   public native Status reconcileTasks(Collection<TaskStatus> statuses);
 
+  /**
+   * @deprecated Replaced by
+   * {@link #updateFramework(FrameworkInfo, Collection<String>, 
OfferConstraints)}
+   *
+   * NOTE: The underlying JNI method exists only to maintain compatibility
+   * of newer versions of libmesos-java.so with older versions of mesos.jar
+   */
+  @Deprecated
   public native Status updateFramework(FrameworkInfo frameworkInfo,
-                                       Collection<String> suppressedRoles,
-                                       OfferConstraints offerConstraints);
+                                       Collection<String> suppressedRoles);
 
   public Status updateFramework(FrameworkInfo frameworkInfo,
-                                Collection<String> suppressedRoles) {
-    return updateFramework(
-        frameworkInfo, suppressedRoles, OfferConstraints.getDefaultInstance());
+                                Collection<String> suppressedRoles,
+                                OfferConstraints offerConstraints) {
+    return updateFrameworkWithConstraints(
+        frameworkInfo, suppressedRoles, offerConstraints);
   }
 
+  /*
+   * NOTE: This method exists only because an `updateFramework()` signature
+   * with added offer constraints needs to have a different name, due to the
+   * `extern "C"` linkage of JNI method implementations.
+   */
+  private native Status updateFrameworkWithConstraints(
+      FrameworkInfo frameworkInfo,
+      Collection<String> suppressedRoles,
+      OfferConstraints offerConstraints);
+
   protected native void initialize();
   protected native void finalize();
 

Reply via email to