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'