You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by an...@apache.org on 2016/08/02 15:42:45 UTC

[3/7] mesos git commit: Added helper functions for v1 JNI `construct()`/`convert()`.

Added helper functions for v1 JNI `construct()`/`convert()`.

These would be used later in the chain for the making JNI
calls to v1 Mesos implementation in native code.

Review: https://reviews.apache.org/r/50248


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/07a1802f
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/07a1802f
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/07a1802f

Branch: refs/heads/master
Commit: 07a1802f1a6c1b7b3b778bb86d17254842322e5c
Parents: e184216
Author: Anand Mazumdar <an...@apache.org>
Authored: Tue Jul 19 19:07:41 2016 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Tue Aug 2 08:25:48 2016 -0700

----------------------------------------------------------------------
 src/java/jni/construct.cpp | 67 +++++++++++++++++++++++++++++++++++++++++
 src/java/jni/convert.cpp   | 26 ++++++++++++++++
 2 files changed, 93 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/07a1802f/src/java/jni/construct.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/construct.cpp b/src/java/jni/construct.cpp
index e5c070c..2645d9e 100644
--- a/src/java/jni/construct.cpp
+++ b/src/java/jni/construct.cpp
@@ -25,6 +25,10 @@
 
 #include <mesos/mesos.hpp>
 
+#include <mesos/v1/mesos.hpp>
+
+#include <mesos/v1/scheduler/scheduler.hpp>
+
 #include "construct.hpp"
 
 using namespace mesos;
@@ -399,3 +403,66 @@ Offer::Operation construct(JNIEnv* env, jobject jobj)
 
   return operation;
 }
+
+
+template <>
+v1::Credential construct(JNIEnv* env, jobject jobj)
+{
+  jclass clazz = env->GetObjectClass(jobj);
+
+  // byte[] data = obj.toByteArray();
+  jmethodID toByteArray = env->GetMethodID(clazz, "toByteArray", "()[B");
+
+  jbyteArray jdata = (jbyteArray) env->CallObjectMethod(jobj, toByteArray);
+
+  jbyte* data = env->GetByteArrayElements(jdata, nullptr);
+  jsize length = env->GetArrayLength(jdata);
+
+  const v1::Credential& credential = parse<v1::Credential>(data, length);
+
+  env->ReleaseByteArrayElements(jdata, data, 0);
+
+  return credential;
+}
+
+
+template <>
+v1::FrameworkInfo construct(JNIEnv* env, jobject jobj)
+{
+  jclass clazz = env->GetObjectClass(jobj);
+
+  // byte[] data = obj.toByteArray();
+  jmethodID toByteArray = env->GetMethodID(clazz, "toByteArray", "()[B");
+
+  jbyteArray jdata = (jbyteArray) env->CallObjectMethod(jobj, toByteArray);
+
+  jbyte* data = env->GetByteArrayElements(jdata, nullptr);
+  jsize length = env->GetArrayLength(jdata);
+
+  const v1::FrameworkInfo& framework = parse<v1::FrameworkInfo>(data, length);
+
+  env->ReleaseByteArrayElements(jdata, data, 0);
+
+  return framework;
+}
+
+
+template<>
+v1::scheduler::Call construct(JNIEnv* env, jobject jobj)
+{
+  jclass clazz = env->GetObjectClass(jobj);
+
+  // byte[] data = obj.toByteArray();
+  jmethodID toByteArray = env->GetMethodID(clazz, "toByteArray", "()[B");
+
+  jbyteArray jdata = (jbyteArray) env->CallObjectMethod(jobj, toByteArray);
+
+  jbyte* data = env->GetByteArrayElements(jdata, nullptr);
+  jsize length = env->GetArrayLength(jdata);
+
+  const v1::scheduler::Call& call = parse<v1::scheduler::Call>(data, length);
+
+  env->ReleaseByteArrayElements(jdata, data, 0);
+
+  return call;
+}

http://git-wip-us.apache.org/repos/asf/mesos/blob/07a1802f/src/java/jni/convert.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/convert.cpp b/src/java/jni/convert.cpp
index 45ff488..338eb96 100644
--- a/src/java/jni/convert.cpp
+++ b/src/java/jni/convert.cpp
@@ -21,6 +21,8 @@
 
 #include <mesos/mesos.hpp>
 
+#include <mesos/v1/scheduler/scheduler.hpp>
+
 #include <stout/result.hpp>
 #include <stout/strings.hpp>
 
@@ -488,6 +490,30 @@ jobject convert(JNIEnv* env, const Status& status)
 }
 
 
+template <>
+jobject convert(JNIEnv* env, const v1::scheduler::Event& event)
+{
+  string data;
+  event.SerializeToString(&data);
+
+  // byte[] data = ..;
+  jbyteArray jdata = env->NewByteArray(data.size());
+  env->SetByteArrayRegion(jdata, 0, data.size(), (jbyte*) data.data());
+
+  // Event event = Event.parseFrom(data);
+  jclass clazz =
+    FindMesosClass(env, "org/apache/mesos/v1/scheduler/Protos$Event");
+
+  jmethodID parseFrom =
+    env->GetStaticMethodID(clazz, "parseFrom",
+                           "([B)Lorg/apache/mesos/v1/scheduler/Protos$Event;");
+
+  jobject jevent = env->CallStaticObjectMethod(clazz, parseFrom, jdata);
+
+  return jevent;
+}
+
+
 // Helper to safely return the 'jfieldID' of the given 'name'
 // and 'signature'. If the field doesn't exist 'None' is
 // returned. If any other JVM Exception is encountered an 'Error'