You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2013/08/06 08:08:38 UTC
[12/13] git commit: Refactored ZooKeeperState.java into
AbstractState.java.
Refactored ZooKeeperState.java into AbstractState.java.
Review: https://reviews.apache.org/r/12441
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7e6da6d5
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7e6da6d5
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7e6da6d5
Branch: refs/heads/master
Commit: 7e6da6d521774712e63c95a7cf5faa4ff496c6c9
Parents: f51cf44
Author: Benjamin Hindman <be...@gmail.com>
Authored: Tue Jul 9 07:43:07 2013 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Mon Aug 5 23:08:04 2013 -0700
----------------------------------------------------------------------
src/Makefile.am | 14 +-
.../org_apache_mesos_state_AbstractState.cpp | 770 +++++++++++++++++++
.../org_apache_mesos_state_ZooKeeperState.cpp | 748 +-----------------
.../org/apache/mesos/state/AbstractState.java | 239 ++++++
.../org/apache/mesos/state/ZooKeeperState.java | 216 +-----
5 files changed, 1021 insertions(+), 966 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index e4c3d06..33ef056 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -445,6 +445,7 @@ MESOS_JAR_SOURCE = \
$(srcdir)/java/src/org/apache/mesos/MesosSchedulerDriver.java \
$(srcdir)/java/src/org/apache/mesos/SchedulerDriver.java \
$(srcdir)/java/src/org/apache/mesos/Scheduler.java \
+ $(srcdir)/java/src/org/apache/mesos/state/AbstractState.java \
$(srcdir)/java/src/org/apache/mesos/state/InMemoryState.java \
$(srcdir)/java/src/org/apache/mesos/state/State.java \
$(srcdir)/java/src/org/apache/mesos/state/Variable.java \
@@ -520,6 +521,7 @@ libjava_la_SOURCES = \
java/jni/org_apache_mesos_Log.cpp \
java/jni/org_apache_mesos_MesosSchedulerDriver.cpp \
java/jni/org_apache_mesos_MesosExecutorDriver.cpp \
+ java/jni/org_apache_mesos_state_AbstractState.cpp \
java/jni/org_apache_mesos_state_Variable.cpp \
java/jni/org_apache_mesos_state_ZooKeeperState.cpp \
jvm/jvm.cpp \
@@ -557,15 +559,11 @@ nodist_libjava_la_SOURCES = \
java/jni/org_apache_mesos_MesosSchedulerDriver.h \
java/jni/org_apache_mesos_MesosExecutorDriver.h \
java/jni/org_apache_mesos_Log.h \
+ java/jni/org_apache_mesos_state_AbstractState.h \
java/jni/org_apache_mesos_state_Variable.h \
java/jni/org_apache_mesos_state_ZooKeeperState.h
-BUILT_SOURCES += java/jni/org_apache_mesos_MesosSchedulerDriver.h \
- java/jni/org_apache_mesos_MesosExecutorDriver.h \
- java/jni/org_apache_mesos_Log.h \
- java/jni/org_apache_mesos_state_Variable.h \
- java/jni/org_apache_mesos_state_ZooKeeperState.h
-
+BUILT_SOURCES += $(nodist_libjava_la_SOURCES)
java/jni/org_apache_mesos_MesosSchedulerDriver.h: $(MESOS_JAR)
$(JAVA_HOME)/bin/javah -d java/jni -classpath \
@@ -581,6 +579,10 @@ java/jni/org_apache_mesos_Log.h: $(MESOS_JAR)
$(JAVA_HOME)/bin/javah -d java/jni -classpath \
$(PROTOBUF_JAR):java/classes org.apache.mesos.Log
+java/jni/org_apache_mesos_state_AbstractState.h: $(MESOS_JAR)
+ $(JAVA_HOME)/bin/javah -d java/jni -classpath \
+ $(PROTOBUF_JAR):java/classes org.apache.mesos.state.AbstractState
+
java/jni/org_apache_mesos_state_Variable.h: $(MESOS_JAR)
$(JAVA_HOME)/bin/javah -d java/jni -classpath \
$(PROTOBUF_JAR):java/classes org.apache.mesos.state.Variable
http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/jni/org_apache_mesos_state_AbstractState.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/org_apache_mesos_state_AbstractState.cpp b/src/java/jni/org_apache_mesos_state_AbstractState.cpp
new file mode 100644
index 0000000..2ee0b1b
--- /dev/null
+++ b/src/java/jni/org_apache_mesos_state_AbstractState.cpp
@@ -0,0 +1,770 @@
+#include <jni.h>
+
+#include <string>
+#include <vector>
+
+#include <process/future.hpp>
+
+#include <stout/duration.hpp>
+
+#include "state/leveldb.hpp"
+#include "state/state.hpp"
+
+#include "construct.hpp"
+#include "convert.hpp"
+
+using namespace mesos::internal::state;
+
+using process::Future;
+
+using std::string;
+using std::vector;
+
+extern "C" {
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState_finalize
+ (JNIEnv* env, jobject thiz)
+{
+ jclass clazz = env->GetObjectClass(thiz);
+
+ jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+ State* state = (State*) env->GetLongField(thiz, __state);
+
+ delete state;
+
+ jfieldID __storage = env->GetFieldID(clazz, "__storage", "J");
+
+ Storage* storage = (Storage*) env->GetLongField(thiz, __storage);
+
+ delete storage;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __fetch
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch
+ (JNIEnv* env, jobject thiz, jstring jname)
+{
+ string name = construct<string>(env, jname);
+
+ jclass clazz = env->GetObjectClass(thiz);
+
+ jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+ State* state = (State*) env->GetLongField(thiz, __state);
+
+ Future<Variable>* future = new Future<Variable>(state->fetch(name));
+
+ return (jlong) future;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __fetch_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1cancel
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Variable>* future = (Future<Variable>*) jfuture;
+
+ if (!future->isDiscarded()) {
+ future->discard();
+ return (jboolean) future->isDiscarded();
+ }
+
+ return (jboolean) true;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __fetch_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1is_1cancelled
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Variable>* future = (Future<Variable>*) jfuture;
+
+ return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __fetch_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1is_1done
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Variable>* future = (Future<Variable>*) jfuture;
+
+ return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __fetch_get
+ * Signature: (J)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1get
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Variable>* future = (Future<Variable>*) jfuture;
+
+ future->await();
+
+ if (future->isFailed()) {
+ jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+
+ Variable* variable = new Variable(future->get());
+
+ // Variable variable = new Variable();
+ jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+ jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+ jobject jvariable = env->NewObject(clazz, _init_);
+
+ jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+ env->SetLongField(jvariable, __variable, (jlong) variable);
+
+ return jvariable;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __fetch_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1get_1timeout
+ (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+ Future<Variable>* future = (Future<Variable>*) jfuture;
+
+ jclass clazz = env->GetObjectClass(junit);
+
+ // long seconds = unit.toSeconds(time);
+ jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+ jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+ Seconds seconds(jseconds);
+
+ if (future->await(seconds)) {
+ if (future->isFailed()) {
+ clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+ Variable* variable = new Variable(future->get());
+
+ // Variable variable = new Variable();
+ clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+ jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+ jobject jvariable = env->NewObject(clazz, _init_);
+
+ jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+ env->SetLongField(jvariable, __variable, (jlong) variable);
+
+ return jvariable;
+ }
+
+ clazz = env->FindClass("java/util/concurrent/TimeoutException");
+ env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+ return NULL;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __fetch_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1finalize
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Variable>* future = (Future<Variable>*) jfuture;
+
+ delete future;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __store
+ * Signature: (Lorg/apache/mesos/state/Variable;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1store
+ (JNIEnv* env, jobject thiz, jobject jvariable)
+{
+ jclass clazz = env->GetObjectClass(jvariable);
+
+ jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+
+ Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
+
+ clazz = env->GetObjectClass(thiz);
+
+ jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+ State* state = (State*) env->GetLongField(thiz, __state);
+
+ Future<Option<Variable> >* future =
+ new Future<Option<Variable> >(state->store(*variable));
+
+ return (jlong) future;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __store_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1cancel
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+ if (!future->isDiscarded()) {
+ future->discard();
+ return (jboolean) future->isDiscarded();
+ }
+
+ return (jboolean) true;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __store_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1is_1cancelled
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+ return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __store_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1is_1done
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+ return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __store_get
+ * Signature: (J)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1get
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+ future->await();
+
+ if (future->isFailed()) {
+ jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+
+ if (future->get().isSome()) {
+ Variable* variable = new Variable(future->get().get());
+
+ // Variable variable = new Variable();
+ jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+ jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+ jobject jvariable = env->NewObject(clazz, _init_);
+
+ jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+ env->SetLongField(jvariable, __variable, (jlong) variable);
+
+ return jvariable;
+ }
+
+ return NULL;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __store_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1get_1timeout
+ (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+ Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+ jclass clazz = env->GetObjectClass(junit);
+
+ // long seconds = unit.toSeconds(time);
+ jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+ jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+ Seconds seconds(jseconds);
+
+ if (future->await(seconds)) {
+ if (future->isFailed()) {
+ clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+
+ if (future->get().isSome()) {
+ Variable* variable = new Variable(future->get().get());
+
+ // Variable variable = new Variable();
+ clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+ jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+ jobject jvariable = env->NewObject(clazz, _init_);
+
+ jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+ env->SetLongField(jvariable, __variable, (jlong) variable);
+
+ return jvariable;
+ }
+
+ return NULL;
+ }
+
+ clazz = env->FindClass("java/util/concurrent/TimeoutException");
+ env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+ return NULL;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __store_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1finalize
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+ delete future;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __expunge
+ * Signature: (Lorg/apache/mesos/state/Variable;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge
+ (JNIEnv* env, jobject thiz, jobject jvariable)
+{
+ jclass clazz = env->GetObjectClass(jvariable);
+
+ jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+
+ Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
+
+ clazz = env->GetObjectClass(thiz);
+
+ jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+ State* state = (State*) env->GetLongField(thiz, __state);
+
+ Future<bool>* future = new Future<bool>(state->expunge(*variable));
+
+ return (jlong) future;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __expunge_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1cancel
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<bool>* future = (Future<bool>*) jfuture;
+
+ if (!future->isDiscarded()) {
+ future->discard();
+ return (jboolean) future->isDiscarded();
+ }
+
+ return (jboolean) true;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __expunge_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1is_1cancelled
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<bool>* future = (Future<bool>*) jfuture;
+
+ return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __expunge_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1is_1done
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<bool>* future = (Future<bool>*) jfuture;
+
+ return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __expunge_get
+ * Signature: (J)Ljava/lang/Boolean;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1get
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<bool>* future = (Future<bool>*) jfuture;
+
+ future->await();
+
+ if (future->isFailed()) {
+ jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+
+ if (future->get()) {
+ jclass clazz = env->FindClass("java/lang/Boolean");
+ return env->GetStaticObjectField(
+ clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
+ }
+
+ jclass clazz = env->FindClass("java/lang/Boolean");
+ return env->GetStaticObjectField(
+ clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __expunge_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/lang/Boolean;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1get_1timeout
+ (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+ Future<bool>* future = (Future<bool>*) jfuture;
+
+ jclass clazz = env->GetObjectClass(junit);
+
+ // long seconds = unit.toSeconds(time);
+ jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+ jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+ Seconds seconds(jseconds);
+
+ if (future->await(seconds)) {
+ if (future->isFailed()) {
+ clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+
+ if (future->get()) {
+ jclass clazz = env->FindClass("java/lang/Boolean");
+ return env->GetStaticObjectField(
+ clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
+ }
+
+ jclass clazz = env->FindClass("java/lang/Boolean");
+ return env->GetStaticObjectField(
+ clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
+ }
+
+ clazz = env->FindClass("java/util/concurrent/TimeoutException");
+ env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+ return NULL;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __expunge_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1finalize
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<bool>* future = (Future<bool>*) jfuture;
+
+ delete future;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __names
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1names
+ (JNIEnv* env, jobject thiz)
+{
+ jclass clazz = env->GetObjectClass(thiz);
+
+ jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+ State* state = (State*) env->GetLongField(thiz, __state);
+
+ Future<vector<string> >* future =
+ new Future<vector<string> >(state->names());
+
+ return (jlong) future;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __names_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1cancel
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+ if (!future->isDiscarded()) {
+ future->discard();
+ return (jboolean) future->isDiscarded();
+ }
+
+ return (jboolean) true;
+}
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __names_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1is_1cancelled
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+ return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __names_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1is_1done
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+ return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __names_get
+ * Signature: (J)Ljava/util/Iterator;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1get
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+ future->await();
+
+ if (future->isFailed()) {
+ jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+
+ // List names = new ArrayList();
+ jclass clazz = env->FindClass("java/util/ArrayList");
+
+ jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+ jobject jnames = env->NewObject(clazz, _init_);
+
+ jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
+
+ foreach (const string& name, future->get()) {
+ jobject jname = convert<string>(env, name);
+ env->CallBooleanMethod(jnames, add, jname);
+ }
+
+ // Iterator iterator = jnames.iterator();
+ jmethodID iterator =
+ env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
+ jobject jiterator = env->CallObjectMethod(jnames, iterator);
+
+ return jiterator;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __names_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/util/Iterator;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1get_1timeout
+ (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+ Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+ jclass clazz = env->GetObjectClass(junit);
+
+ // long seconds = unit.toSeconds(time);
+ jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+ jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+ Seconds seconds(jseconds);
+
+ if (future->await(seconds)) {
+ if (future->isFailed()) {
+ clazz = env->FindClass("java/util/concurrent/ExecutionException");
+ env->ThrowNew(clazz, future->failure().c_str());
+ return NULL;
+ } else if (future->isDiscarded()) {
+ clazz = env->FindClass("java/util/concurrent/CancellationException");
+ env->ThrowNew(clazz, "Future was discarded");
+ return NULL;
+ }
+
+ CHECK(future->isReady());
+
+ // List names = new ArrayList();
+ clazz = env->FindClass("java/util/ArrayList");
+
+ jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+ jobject jnames = env->NewObject(clazz, _init_);
+
+ jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
+
+ foreach (const string& name, future->get()) {
+ jobject jname = convert<string>(env, name);
+ env->CallBooleanMethod(jnames, add, jname);
+ }
+
+ // Iterator iterator = jnames.iterator();
+ jmethodID iterator =
+ env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
+ jobject jiterator = env->CallObjectMethod(jnames, iterator);
+
+ return jiterator;
+ }
+
+ clazz = env->FindClass("java/util/concurrent/TimeoutException");
+ env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+ return NULL;
+}
+
+
+/*
+ * Class: org_apache_mesos_state_AbstractState
+ * Method: __names_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1finalize
+ (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+ Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+ delete future;
+}
+
+} // extern "C" {
http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp b/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
index 84174d5..41f974e 100644
--- a/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
+++ b/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
@@ -55,6 +55,8 @@ JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState_initialize__Lj
clazz = env->GetObjectClass(thiz);
+ clazz = env->GetSuperclass(clazz);
+
jfieldID __storage = env->GetFieldID(clazz, "__storage", "J");
env->SetLongField(thiz, __storage, (jlong) storage);
@@ -124,750 +126,4 @@ JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState_initialize__Lj
env->SetLongField(thiz, __state, (jlong) state);
}
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState_finalize
- (JNIEnv* env, jobject thiz)
-{
- jclass clazz = env->GetObjectClass(thiz);
-
- jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
- State* state = (State*) env->GetLongField(thiz, __state);
-
- delete state;
-
- jfieldID __storage = env->GetFieldID(clazz, "__storage", "J");
-
- Storage* storage = (Storage*) env->GetLongField(thiz, __storage);
-
- delete storage;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __fetch
- * Signature: (Ljava/lang/String;)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch
- (JNIEnv* env, jobject thiz, jstring jname)
-{
- string name = construct<string>(env, jname);
-
- jclass clazz = env->GetObjectClass(thiz);
-
- jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
- State* state = (State*) env->GetLongField(thiz, __state);
-
- Future<Variable>* future = new Future<Variable>(state->fetch(name));
-
- return (jlong) future;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __fetch_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1cancel
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Variable>* future = (Future<Variable>*) jfuture;
-
- if (!future->isDiscarded()) {
- future->discard();
- return (jboolean) future->isDiscarded();
- }
-
- return (jboolean) true;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __fetch_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1is_1cancelled
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Variable>* future = (Future<Variable>*) jfuture;
-
- return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __fetch_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1is_1done
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Variable>* future = (Future<Variable>*) jfuture;
-
- return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __fetch_get
- * Signature: (J)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1get
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Variable>* future = (Future<Variable>*) jfuture;
-
- future->await();
-
- if (future->isFailed()) {
- jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
-
- Variable* variable = new Variable(future->get());
-
- // Variable variable = new Variable();
- jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
-
- jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
- jobject jvariable = env->NewObject(clazz, _init_);
-
- jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
- env->SetLongField(jvariable, __variable, (jlong) variable);
-
- return jvariable;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __fetch_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1get_1timeout
- (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
- Future<Variable>* future = (Future<Variable>*) jfuture;
-
- jclass clazz = env->GetObjectClass(junit);
-
- // long seconds = unit.toSeconds(time);
- jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
- jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
- Seconds seconds(jseconds);
-
- if (future->await(seconds)) {
- if (future->isFailed()) {
- clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
- Variable* variable = new Variable(future->get());
-
- // Variable variable = new Variable();
- clazz = env->FindClass("org/apache/mesos/state/Variable");
-
- jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
- jobject jvariable = env->NewObject(clazz, _init_);
-
- jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
- env->SetLongField(jvariable, __variable, (jlong) variable);
-
- return jvariable;
- }
-
- clazz = env->FindClass("java/util/concurrent/TimeoutException");
- env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
- return NULL;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __fetch_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1finalize
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Variable>* future = (Future<Variable>*) jfuture;
-
- delete future;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __store
- * Signature: (Lorg/apache/mesos/state/Variable;)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store
- (JNIEnv* env, jobject thiz, jobject jvariable)
-{
- jclass clazz = env->GetObjectClass(jvariable);
-
- jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-
- Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
-
- clazz = env->GetObjectClass(thiz);
-
- jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
- State* state = (State*) env->GetLongField(thiz, __state);
-
- Future<Option<Variable> >* future =
- new Future<Option<Variable> >(state->store(*variable));
-
- return (jlong) future;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __store_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1cancel
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
- if (!future->isDiscarded()) {
- future->discard();
- return (jboolean) future->isDiscarded();
- }
-
- return (jboolean) true;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __store_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1is_1cancelled
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
- return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __store_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1is_1done
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
- return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __store_get
- * Signature: (J)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1get
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
- future->await();
-
- if (future->isFailed()) {
- jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
-
- if (future->get().isSome()) {
- Variable* variable = new Variable(future->get().get());
-
- // Variable variable = new Variable();
- jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
-
- jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
- jobject jvariable = env->NewObject(clazz, _init_);
-
- jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
- env->SetLongField(jvariable, __variable, (jlong) variable);
-
- return jvariable;
- }
-
- return NULL;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __store_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1get_1timeout
- (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
- Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
- jclass clazz = env->GetObjectClass(junit);
-
- // long seconds = unit.toSeconds(time);
- jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
- jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
- Seconds seconds(jseconds);
-
- if (future->await(seconds)) {
- if (future->isFailed()) {
- clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
-
- if (future->get().isSome()) {
- Variable* variable = new Variable(future->get().get());
-
- // Variable variable = new Variable();
- clazz = env->FindClass("org/apache/mesos/state/Variable");
-
- jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
- jobject jvariable = env->NewObject(clazz, _init_);
-
- jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
- env->SetLongField(jvariable, __variable, (jlong) variable);
-
- return jvariable;
- }
-
- return NULL;
- }
-
- clazz = env->FindClass("java/util/concurrent/TimeoutException");
- env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
- return NULL;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __store_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1finalize
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
- delete future;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __expunge
- * Signature: (Lorg/apache/mesos/state/Variable;)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge
- (JNIEnv* env, jobject thiz, jobject jvariable)
-{
- jclass clazz = env->GetObjectClass(jvariable);
-
- jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-
- Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
-
- clazz = env->GetObjectClass(thiz);
-
- jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
- State* state = (State*) env->GetLongField(thiz, __state);
-
- Future<bool>* future = new Future<bool>(state->expunge(*variable));
-
- return (jlong) future;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __expunge_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1cancel
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<bool>* future = (Future<bool>*) jfuture;
-
- if (!future->isDiscarded()) {
- future->discard();
- return (jboolean) future->isDiscarded();
- }
-
- return (jboolean) true;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __expunge_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1is_1cancelled
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<bool>* future = (Future<bool>*) jfuture;
-
- return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __expunge_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1is_1done
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<bool>* future = (Future<bool>*) jfuture;
-
- return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __expunge_get
- * Signature: (J)Ljava/lang/Boolean;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1get
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<bool>* future = (Future<bool>*) jfuture;
-
- future->await();
-
- if (future->isFailed()) {
- jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
-
- if (future->get()) {
- jclass clazz = env->FindClass("java/lang/Boolean");
- return env->GetStaticObjectField(
- clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
- }
-
- jclass clazz = env->FindClass("java/lang/Boolean");
- return env->GetStaticObjectField(
- clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __expunge_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/lang/Boolean;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1get_1timeout
- (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
- Future<bool>* future = (Future<bool>*) jfuture;
-
- jclass clazz = env->GetObjectClass(junit);
-
- // long seconds = unit.toSeconds(time);
- jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
- jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
- Seconds seconds(jseconds);
-
- if (future->await(seconds)) {
- if (future->isFailed()) {
- clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
-
- if (future->get()) {
- jclass clazz = env->FindClass("java/lang/Boolean");
- return env->GetStaticObjectField(
- clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
- }
-
- jclass clazz = env->FindClass("java/lang/Boolean");
- return env->GetStaticObjectField(
- clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
- }
-
- clazz = env->FindClass("java/util/concurrent/TimeoutException");
- env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
- return NULL;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __expunge_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1finalize
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<bool>* future = (Future<bool>*) jfuture;
-
- delete future;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __names
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names
- (JNIEnv* env, jobject thiz)
-{
- jclass clazz = env->GetObjectClass(thiz);
-
- jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
- State* state = (State*) env->GetLongField(thiz, __state);
-
- Future<vector<string> >* future =
- new Future<vector<string> >(state->names());
-
- return (jlong) future;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __names_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1cancel
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
- if (!future->isDiscarded()) {
- future->discard();
- return (jboolean) future->isDiscarded();
- }
-
- return (jboolean) true;
-}
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __names_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1is_1cancelled
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
- return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __names_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1is_1done
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
- return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __names_get
- * Signature: (J)Ljava/util/Iterator;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1get
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
- future->await();
-
- if (future->isFailed()) {
- jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
-
- // List names = new ArrayList();
- jclass clazz = env->FindClass("java/util/ArrayList");
-
- jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
- jobject jnames = env->NewObject(clazz, _init_);
-
- jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
-
- foreach (const string& name, future->get()) {
- jobject jname = convert<string>(env, name);
- env->CallBooleanMethod(jnames, add, jname);
- }
-
- // Iterator iterator = jnames.iterator();
- jmethodID iterator =
- env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
- jobject jiterator = env->CallObjectMethod(jnames, iterator);
-
- return jiterator;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __names_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/util/Iterator;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1get_1timeout
- (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
- Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
- jclass clazz = env->GetObjectClass(junit);
-
- // long seconds = unit.toSeconds(time);
- jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
- jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
- Seconds seconds(jseconds);
-
- if (future->await(seconds)) {
- if (future->isFailed()) {
- clazz = env->FindClass("java/util/concurrent/ExecutionException");
- env->ThrowNew(clazz, future->failure().c_str());
- return NULL;
- } else if (future->isDiscarded()) {
- clazz = env->FindClass("java/util/concurrent/CancellationException");
- env->ThrowNew(clazz, "Future was discarded");
- return NULL;
- }
-
- CHECK(future->isReady());
-
- // List names = new ArrayList();
- clazz = env->FindClass("java/util/ArrayList");
-
- jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
- jobject jnames = env->NewObject(clazz, _init_);
-
- jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
-
- foreach (const string& name, future->get()) {
- jobject jname = convert<string>(env, name);
- env->CallBooleanMethod(jnames, add, jname);
- }
-
- // Iterator iterator = jnames.iterator();
- jmethodID iterator =
- env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
- jobject jiterator = env->CallObjectMethod(jnames, iterator);
-
- return jiterator;
- }
-
- clazz = env->FindClass("java/util/concurrent/TimeoutException");
- env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
- return NULL;
-}
-
-
-/*
- * Class: org_apache_mesos_state_ZooKeeperState
- * Method: __names_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1finalize
- (JNIEnv* env, jobject thiz, jlong jfuture)
-{
- Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
- delete future;
-}
-
} // extern "C" {
http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/src/org/apache/mesos/state/AbstractState.java
----------------------------------------------------------------------
diff --git a/src/java/src/org/apache/mesos/state/AbstractState.java b/src/java/src/org/apache/mesos/state/AbstractState.java
new file mode 100644
index 0000000..774b217
--- /dev/null
+++ b/src/java/src/org/apache/mesos/state/AbstractState.java
@@ -0,0 +1,239 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.mesos.state;
+
+import java.util.Iterator;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.mesos.MesosNativeLibrary;
+
+/**
+ * Abstract implementation of State that provides operations on
+ * futures to make concrete classes easier to create.
+ */
+public abstract class AbstractState implements State {
+ static {
+ MesosNativeLibrary.load();
+ }
+
+ @Override
+ public Future<Variable> fetch(final String name) {
+ final long future = __fetch(name); // Asynchronously start the operation.
+ return new Future<Variable>() {
+ @Override
+ public boolean cancel(boolean mayInterruptIfRunning) {
+ if (mayInterruptIfRunning) {
+ return __fetch_cancel(future);
+ }
+ return false; // Should not interrupt and already running (or finished).
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return __fetch_is_cancelled(future);
+ }
+
+ @Override
+ public boolean isDone() {
+ return __fetch_is_done(future);
+ }
+
+ @Override
+ public Variable get() throws InterruptedException, ExecutionException {
+ return __fetch_get(future);
+ }
+
+ @Override
+ public Variable get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ return __fetch_get_timeout(future, timeout, unit);
+ }
+
+ @Override
+ protected void finalize() {
+ __fetch_finalize(future);
+ }
+ };
+ }
+
+ @Override
+ public Future<Variable> store(Variable variable) {
+ final long future = __store(variable); // Asynchronously start the operation.
+ return new Future<Variable>() {
+ @Override
+ public boolean cancel(boolean mayInterruptIfRunning) {
+ if (mayInterruptIfRunning) {
+ return __store_cancel(future);
+ }
+ return false; // Should not interrupt and already running (or finished).
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return __store_is_cancelled(future);
+ }
+
+ @Override
+ public boolean isDone() {
+ return __store_is_done(future);
+ }
+
+ @Override
+ public Variable get() throws InterruptedException, ExecutionException {
+ return __store_get(future);
+ }
+
+ @Override
+ public Variable get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ return __store_get_timeout(future, timeout, unit);
+ }
+
+ @Override
+ protected void finalize() {
+ __store_finalize(future);
+ }
+ };
+ }
+
+ @Override
+ public Future<Boolean> expunge(Variable variable) {
+ final long future = __expunge(variable); // Asynchronously start the operation.
+ return new Future<Boolean>() {
+ @Override
+ public boolean cancel(boolean mayInterruptIfRunning) {
+ if (mayInterruptIfRunning) {
+ return __expunge_cancel(future);
+ }
+ return false; // Should not interrupt and already running (or finished).
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return __expunge_is_cancelled(future);
+ }
+
+ @Override
+ public boolean isDone() {
+ return __expunge_is_done(future);
+ }
+
+ @Override
+ public Boolean get() throws InterruptedException, ExecutionException {
+ return __expunge_get(future);
+ }
+
+ @Override
+ public Boolean get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ return __expunge_get_timeout(future, timeout, unit);
+ }
+
+ @Override
+ protected void finalize() {
+ __expunge_finalize(future);
+ }
+ };
+ }
+
+ public Future<Iterator<String>> names() {
+ final long future = __names(); // Asynchronously start the operation.
+ return new Future<Iterator<String>>() {
+ @Override
+ public boolean cancel(boolean mayInterruptIfRunning) {
+ if (mayInterruptIfRunning) {
+ return __names_cancel(future);
+ }
+ return false; // Should not interrupt and already running (or finished).
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return __names_is_cancelled(future);
+ }
+
+ @Override
+ public boolean isDone() {
+ return __names_is_done(future);
+ }
+
+ @Override
+ public Iterator<String> get() throws InterruptedException, ExecutionException {
+ return __names_get(future);
+ }
+
+ @Override
+ public Iterator<String> get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ return __names_get_timeout(future, timeout, unit);
+ }
+
+ @Override
+ protected void finalize() {
+ __names_finalize(future);
+ }
+ };
+ }
+
+ protected native void finalize();
+
+ // Native implementations of 'fetch', 'store', 'expunge', and 'names'.
+ private native long __fetch(String name);
+ private native boolean __fetch_cancel(long future);
+ private native boolean __fetch_is_cancelled(long future);
+ private native boolean __fetch_is_done(long future);
+ private native Variable __fetch_get(long future);
+ private native Variable __fetch_get_timeout(
+ long future, long timeout, TimeUnit unit);
+ private native void __fetch_finalize(long future);
+
+ private native long __store(Variable variable);
+ private native boolean __store_cancel(long future);
+ private native boolean __store_is_cancelled(long future);
+ private native boolean __store_is_done(long future);
+ private native Variable __store_get(long future);
+ private native Variable __store_get_timeout(
+ long future, long timeout, TimeUnit unit);
+ private native void __store_finalize(long future);
+
+ private native long __expunge(Variable variable);
+ private native boolean __expunge_cancel(long future);
+ private native boolean __expunge_is_cancelled(long future);
+ private native boolean __expunge_is_done(long future);
+ private native Boolean __expunge_get(long future);
+ private native Boolean __expunge_get_timeout(
+ long future, long timeout, TimeUnit unit);
+ private native void __expunge_finalize(long future);
+
+ private native long __names();
+ private native boolean __names_cancel(long future);
+ private native boolean __names_is_cancelled(long future);
+ private native boolean __names_is_done(long future);
+ private native Iterator<String> __names_get(long future);
+ private native Iterator<String> __names_get_timeout(
+ long future, long timeout, TimeUnit unit);
+ private native void __names_finalize(long future);
+
+ private long __storage;
+ private long __state;
+}
http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/src/org/apache/mesos/state/ZooKeeperState.java
----------------------------------------------------------------------
diff --git a/src/java/src/org/apache/mesos/state/ZooKeeperState.java b/src/java/src/org/apache/mesos/state/ZooKeeperState.java
index 999d593..f3d939f 100644
--- a/src/java/src/org/apache/mesos/state/ZooKeeperState.java
+++ b/src/java/src/org/apache/mesos/state/ZooKeeperState.java
@@ -18,26 +18,15 @@
package org.apache.mesos.state;
-import java.util.Iterator;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeoutException;
import java.util.concurrent.TimeUnit;
-import org.apache.mesos.MesosNativeLibrary;
-
/**
* Implementation of State that uses ZooKeeper to store
* variables/values. Note that this means the values associated with
* variables can not be more than 1 MB (actually slightly less since
* we store some bookkeeping information).
*/
-public class ZooKeeperState implements State {
- static {
- MesosNativeLibrary.load();
- }
-
+public class ZooKeeperState extends AbstractState {
/**
* Constructs a new instance of ZooKeeperState.
*
@@ -72,165 +61,6 @@ public class ZooKeeperState implements State {
initialize(servers, timeout, unit, znode, scheme, credentials);
}
- @Override
- public Future<Variable> fetch(final String name) {
- final long future = __fetch(name); // Asynchronously start the operation.
- return new Future<Variable>() {
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- if (mayInterruptIfRunning) {
- return __fetch_cancel(future);
- }
- return false; // Should not interrupt and already running (or finished).
- }
-
- @Override
- public boolean isCancelled() {
- return __fetch_is_cancelled(future);
- }
-
- @Override
- public boolean isDone() {
- return __fetch_is_done(future);
- }
-
- @Override
- public Variable get() throws InterruptedException, ExecutionException {
- return __fetch_get(future);
- }
-
- @Override
- public Variable get(long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- return __fetch_get_timeout(future, timeout, unit);
- }
-
- @Override
- protected void finalize() {
- __fetch_finalize(future);
- }
- };
- }
-
- @Override
- public Future<Variable> store(Variable variable) {
- final long future = __store(variable); // Asynchronously start the operation.
- return new Future<Variable>() {
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- if (mayInterruptIfRunning) {
- return __store_cancel(future);
- }
- return false; // Should not interrupt and already running (or finished).
- }
-
- @Override
- public boolean isCancelled() {
- return __store_is_cancelled(future);
- }
-
- @Override
- public boolean isDone() {
- return __store_is_done(future);
- }
-
- @Override
- public Variable get() throws InterruptedException, ExecutionException {
- return __store_get(future);
- }
-
- @Override
- public Variable get(long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- return __store_get_timeout(future, timeout, unit);
- }
-
- @Override
- protected void finalize() {
- __store_finalize(future);
- }
- };
- }
-
- @Override
- public Future<Boolean> expunge(Variable variable) {
- final long future = __expunge(variable); // Asynchronously start the operation.
- return new Future<Boolean>() {
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- if (mayInterruptIfRunning) {
- return __expunge_cancel(future);
- }
- return false; // Should not interrupt and already running (or finished).
- }
-
- @Override
- public boolean isCancelled() {
- return __expunge_is_cancelled(future);
- }
-
- @Override
- public boolean isDone() {
- return __expunge_is_done(future);
- }
-
- @Override
- public Boolean get() throws InterruptedException, ExecutionException {
- return __expunge_get(future);
- }
-
- @Override
- public Boolean get(long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- return __expunge_get_timeout(future, timeout, unit);
- }
-
- @Override
- protected void finalize() {
- __expunge_finalize(future);
- }
- };
- }
-
- public Future<Iterator<String>> names() {
- final long future = __names(); // Asynchronously start the operation.
- return new Future<Iterator<String>>() {
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- if (mayInterruptIfRunning) {
- return __names_cancel(future);
- }
- return false; // Should not interrupt and already running (or finished).
- }
-
- @Override
- public boolean isCancelled() {
- return __names_is_cancelled(future);
- }
-
- @Override
- public boolean isDone() {
- return __names_is_done(future);
- }
-
- @Override
- public Iterator<String> get() throws InterruptedException, ExecutionException {
- return __names_get(future);
- }
-
- @Override
- public Iterator<String> get(long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- return __names_get_timeout(future, timeout, unit);
- }
-
- @Override
- protected void finalize() {
- __names_finalize(future);
- }
- };
- }
-
protected native void initialize(String servers,
long timeout,
TimeUnit unit,
@@ -242,46 +72,4 @@ public class ZooKeeperState implements State {
String znode,
String scheme,
byte[] credentials);
-
- protected native void finalize();
-
- // Native implementations of 'fetch', 'store', 'expunge', and 'names'.
- private native long __fetch(String name);
- private native boolean __fetch_cancel(long future);
- private native boolean __fetch_is_cancelled(long future);
- private native boolean __fetch_is_done(long future);
- private native Variable __fetch_get(long future);
- private native Variable __fetch_get_timeout(
- long future, long timeout, TimeUnit unit);
- private native void __fetch_finalize(long future);
-
- private native long __store(Variable variable);
- private native boolean __store_cancel(long future);
- private native boolean __store_is_cancelled(long future);
- private native boolean __store_is_done(long future);
- private native Variable __store_get(long future);
- private native Variable __store_get_timeout(
- long future, long timeout, TimeUnit unit);
- private native void __store_finalize(long future);
-
- private native long __expunge(Variable variable);
- private native boolean __expunge_cancel(long future);
- private native boolean __expunge_is_cancelled(long future);
- private native boolean __expunge_is_done(long future);
- private native Boolean __expunge_get(long future);
- private native Boolean __expunge_get_timeout(
- long future, long timeout, TimeUnit unit);
- private native void __expunge_finalize(long future);
-
- private native long __names();
- private native boolean __names_cancel(long future);
- private native boolean __names_is_cancelled(long future);
- private native boolean __names_is_done(long future);
- private native Iterator<String> __names_get(long future);
- private native Iterator<String> __names_get_timeout(
- long future, long timeout, TimeUnit unit);
- private native void __names_finalize(long future);
-
- private long __storage;
- private long __state;
-};
+}