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 2012/03/15 19:19:14 UTC
svn commit: r1301125 - in /incubator/mesos/trunk: ./ include/mesos/ src/
src/common/ src/examples/java/ src/java/generated/ src/java/generated/org/
src/java/generated/org/apache/ src/java/generated/org/apache/mesos/
src/java/jni/ src/java/src/org/apach...
Author: benh
Date: Thu Mar 15 18:19:14 2012
New Revision: 1301125
URL: http://svn.apache.org/viewvc?rev=1301125&view=rev
Log:
Added versioning information into headers, updated Java's MesosNativeLibrary to expect a specific native library version, and removed the JAR file from getting installed as well as the Python egg.
Added:
incubator/mesos/trunk/include/mesos/mesos.hpp.in
- copied, changed from r1299823, incubator/mesos/trunk/src/common/build.hpp
incubator/mesos/trunk/src/java/generated/
incubator/mesos/trunk/src/java/generated/org/
incubator/mesos/trunk/src/java/generated/org/apache/
incubator/mesos/trunk/src/java/generated/org/apache/mesos/
incubator/mesos/trunk/src/java/generated/org/apache/mesos/MesosNativeLibrary.java.in
- copied, changed from r1299823, incubator/mesos/trunk/src/java/src/org/apache/mesos/MesosNativeLibrary.java
Removed:
incubator/mesos/trunk/include/mesos/mesos.hpp
incubator/mesos/trunk/src/java/src/org/apache/mesos/MesosNativeLibrary.java
Modified:
incubator/mesos/trunk/configure.ac
incubator/mesos/trunk/src/Makefile.am
incubator/mesos/trunk/src/common/build.hpp
incubator/mesos/trunk/src/examples/java/TestFramework.java
incubator/mesos/trunk/src/java/jni/convert.cpp
incubator/mesos/trunk/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
Modified: incubator/mesos/trunk/configure.ac
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/configure.ac?rev=1301125&r1=1301124&r2=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/configure.ac (original)
+++ incubator/mesos/trunk/configure.ac Thu Mar 15 18:19:14 2012
@@ -18,7 +18,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.61])
-AC_INIT([mesos], [0.0.1])
+AC_INIT([mesos], [0.9.0])
# Have autoconf setup some variables related to the system.
AC_CANONICAL_HOST
@@ -75,6 +75,7 @@ AC_CONFIG_SUBDIRS([third_party/libproces
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([src/Makefile])
AC_CONFIG_FILES([third_party/Makefile])
+
AC_CONFIG_FILES([bin/mesos-build-env.sh])
AC_CONFIG_FILES([bin/mesos-local.sh], [chmod +x bin/mesos-local.sh])
AC_CONFIG_FILES([bin/mesos-master.sh], [chmod +x bin/mesos-master.sh])
@@ -84,6 +85,9 @@ AC_CONFIG_FILES([bin/gdb-mesos-local.sh]
AC_CONFIG_FILES([bin/gdb-mesos-master.sh], [chmod +x bin/gdb-mesos-master.sh])
AC_CONFIG_FILES([bin/gdb-mesos-slave.sh], [chmod +x bin/gdb-mesos-slave.sh])
AC_CONFIG_FILES([bin/gdb-mesos-tests.sh], [chmod +x bin/gdb-mesos-tests.sh])
+AC_CONFIG_FILES([include/mesos/mesos.hpp])
+AC_CONFIG_FILES([src/java/generated/org/apache/mesos/MesosNativeLibrary.java])
+
AC_ARG_ENABLE([java],
AS_HELP_STRING([--disable-java],
Copied: incubator/mesos/trunk/include/mesos/mesos.hpp.in (from r1299823, incubator/mesos/trunk/src/common/build.hpp)
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/include/mesos/mesos.hpp.in?p2=incubator/mesos/trunk/include/mesos/mesos.hpp.in&p1=incubator/mesos/trunk/src/common/build.hpp&r1=1299823&r2=1301125&rev=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/src/common/build.hpp (original)
+++ incubator/mesos/trunk/include/mesos/mesos.hpp.in Thu Mar 15 18:19:14 2012
@@ -16,16 +16,13 @@
* limitations under the License.
*/
-#include <string>
+#ifndef __MESOS_HPP__
+#define __MESOS_HPP__
-namespace mesos {
-namespace internal {
-namespace build {
+#include <mesos.pb.h> // ONLY USEFUL AFTER RUNNING PROTOC.
-extern const std::string DATE;
-extern const std::string USER;
-extern const std::string FLAGS;
+#define MESOS_VERSION "@PACKAGE_VERSION@"
-} // namespace build {
-} // namespace internal {
-} // namespace mesos {
+// TODO(benh): MESOS_MAJOR_VERSION, MESOS_MINOR_VERSION, MESOS_PATCH_VERSION.
+
+#endif // __MESOS_HPP__
Modified: incubator/mesos/trunk/src/Makefile.am
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/Makefile.am?rev=1301125&r1=1301124&r2=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/src/Makefile.am (original)
+++ incubator/mesos/trunk/src/Makefile.am Thu Mar 15 18:19:14 2012
@@ -38,15 +38,12 @@ LIBPROCESS = third_party/libprocess
# automake version).
pkglibexecdir = $(libexecdir)/$(PACKAGE)
-# These next definitions may not seem like, much, but they are very
-# important! They inform where things that have the webui_, pythonegg_
-# and javalib_ prefix get installed! Also note that pkg*dir contains
-# the package name in the path (in our case 'mesos') which is valuable
-# because we'd prefer /path/to/mesos/webui versus something like
-# /path/to/webui.
+# Set install directory for webui artifacts (i.e., the location where
+# anything with the webui_ prefix will get installed). Also note that
+# pkg*dir contains the package name in the path (in our case 'mesos')
+# which is valuable because we'd prefer /path/to/mesos/webui versus
+# something like /path/to/webui.
webuidir = $(pkgdatadir)
-pythoneggdir = $(pythondir)
-javalibdir = $(libdir)/java
# Used for building Python eggs.
SETUPTOOLS = \
@@ -84,6 +81,7 @@ MESOS_CPPFLAGS += -DMESOS_WEBUI_DIR=\"$(
MESOS_CPPFLAGS += -DMESOS_LIBEXECDIR=\"$(pkglibexecdir)\"
MESOS_CPPFLAGS += -I$(top_srcdir)/include
MESOS_CPPFLAGS += -I$(top_srcdir)/$(LIBPROCESS)/include
+MESOS_CPPFLAGS += -I../include
MESOS_CPPFLAGS += -I../$(BOOST)
MESOS_CPPFLAGS += -I../$(PROTOBUF)/src
MESOS_CPPFLAGS += -I../$(GLOG)/src
@@ -163,10 +161,9 @@ libmesos_no_third_party_la_SOURCES = sch
pkginclude_HEADERS = $(top_srcdir)/include/mesos/executor.hpp \
$(top_srcdir)/include/mesos/scheduler.hpp \
- $(top_srcdir)/include/mesos/mesos.hpp \
$(top_srcdir)/include/mesos/mesos.proto
-nodist_pkginclude_HEADERS = mesos.pb.h
+nodist_pkginclude_HEADERS = ../include/mesos/mesos.hpp mesos.pb.h
if OS_LINUX
libmesos_no_third_party_la_SOURCES += slave/lxc_isolation_module.cpp
@@ -264,7 +261,7 @@ lib_LTLIBRARIES += libmesos.la
libmesos_la_SOURCES = $(MESOS_PROTO) # Part of the distribution.
-libmesos_la_LDFLAGS = -version-info 0:0 -shared
+libmesos_la_LDFLAGS = -release $(PACKAGE_VERSION) -version-info 0:0:0 -shared
# Since we just include the convenience library (and no sources), we
# need to tell libtool to build this as a C++ library.
@@ -353,27 +350,28 @@ dist_pkglibexec_SCRIPTS += scripts/killt
# Mesos JAR.
MESOS_JAR = mesos-$(PACKAGE_VERSION).jar
-MESOS_JAR_SRCROOT = $(srcdir)/java/src
-MESOS_JAR_SRCDIR = $(srcdir)/java/src/org/apache/mesos
-MESOS_JAR_SRC = $(MESOS_JAR_SRCDIR)/ExecutorDriver.java \
- $(MESOS_JAR_SRCDIR)/Executor.java \
- $(MESOS_JAR_SRCDIR)/Log.java \
- $(MESOS_JAR_SRCDIR)/MesosExecutorDriver.java \
- $(MESOS_JAR_SRCDIR)/MesosNativeLibrary.java \
- $(MESOS_JAR_SRCDIR)/MesosSchedulerDriver.java \
- $(MESOS_JAR_SRCDIR)/SchedulerDriver.java \
- $(MESOS_JAR_SRCDIR)/Scheduler.java
-
-EXTRA_DIST += $(MESOS_JAR_SRC)
+MESOS_JAR_SOURCE = \
+ $(srcdir)/java/src/org/apache/mesos/ExecutorDriver.java \
+ $(srcdir)/java/src/org/apache/mesos/Executor.java \
+ $(srcdir)/java/src/org/apache/mesos/Log.java \
+ $(srcdir)/java/src/org/apache/mesos/MesosExecutorDriver.java \
+ $(srcdir)/java/src/org/apache/mesos/MesosSchedulerDriver.java \
+ $(srcdir)/java/src/org/apache/mesos/SchedulerDriver.java \
+ $(srcdir)/java/src/org/apache/mesos/Scheduler.java
+MESOS_JAR_GENERATED = $(JAVA_PROTOS) \
+ java/generated/org/apache/mesos/MesosNativeLibrary.java
+EXTRA_DIST += $(MESOS_JAR_SOURCE) \
+ $(srcdir)/java/generated/org/apache/mesos/MesosNativeLibrary.java.in
# We build all the Java examples into their own JAR.
EXAMPLES_JAR = examples.jar
-JAVA_EXAMPLES_SRC = $(srcdir)/examples/java/TestExceptionFramework.java \
+EXAMPLES_SOURCE = \
+ $(srcdir)/examples/java/TestExceptionFramework.java \
$(srcdir)/examples/java/TestExecutor.java \
$(srcdir)/examples/java/TestFramework.java \
$(srcdir)/examples/java/TestMultipleExecutorsFramework.java
-EXTRA_DIST += $(JAVA_EXAMPLES_SRC)
-CLEANFILES += $(EXAMPLES_JAR)
+EXTRA_DIST += $(EXAMPLES_SOURCE)
+
if HAS_JAVA
# Protocol buffers JAR.
@@ -395,25 +393,23 @@ $(PROTOBUF_JAR): # TODO(charles): Specif
CLEANFILES += $(PROTOBUF_JAR)
-$(MESOS_JAR): $(MESOS_JAR_SRC) $(JAVA_PROTOS) $(PROTOBUF_JAR)
+$(MESOS_JAR): $(MESOS_JAR_SOURCE) $(MESOS_JAR_GENERATED) $(PROTOBUF_JAR)
@echo "Building mesos-$(PACKAGE_VERSION).jar ..."
@rm -f java/classes/org/apache/mesos/*
@$(MKDIR_P) java/classes/org/apache/mesos
@$(JAVA_HOME)/bin/javac \
- -cp $(PROTOBUF_JAR) -sourcepath java/generated \
- -d java/classes $(MESOS_JAR_SRC) $(JAVA_PROTOS)
+ -cp $(PROTOBUF_JAR) \
+ -d java/classes $(MESOS_JAR_SOURCE) $(MESOS_JAR_GENERATED)
@$(JAVA_HOME)/bin/jar cf $@ -C java/classes org
CLEANFILES += $(MESOS_JAR)
-javalib_DATA = $(MESOS_JAR)
+MESOS_SOURCES_JAR = ../src/mesos-$(PACKAGE_VERSION)-sources.jar
-MESOS_SOURCES_JAR = ../src/mesos-sources.jar
-
-$(MESOS_SOURCES_JAR): $(MESOS_JAR_SRC)
+$(MESOS_SOURCES_JAR): $(MESOS_JAR_SOURCE)
@rm -f $(MESOS_SOURCES_JAR)
- @$(JAVA_HOME)/bin/jar cf $@ -C $(MESOS_JAR_SRCROOT) org
+ @$(JAVA_HOME)/bin/jar cf $@ -C $(srcdir)/java/src org
@$(JAVA_HOME)/bin/jar uf $@ -C java/generated org
CLEANFILES += $(MESOS_SOURCES_JAR)
@@ -478,7 +474,7 @@ java/jni/org_apache_mesos_Log.h: $(MESOS
@$(JAVA_HOME)/bin/javah -d java/jni -classpath \
$(PROTOBUF_JAR):java/classes org.apache.mesos.Log
-$(EXAMPLES_JAR): $(JAVA_EXAMPLES_SRC)
+$(EXAMPLES_JAR): $(EXAMPLES_SOURCE)
@echo "Building examples.jar ..."
@$(MKDIR_P) examples/java
@$(JAVA_HOME)/bin/javac -cp \
@@ -487,7 +483,7 @@ $(EXAMPLES_JAR): $(JAVA_EXAMPLES_SRC)
$(srcdir)/examples/java/*.java
@$(JAVA_HOME)/bin/jar cf $@ -C examples/java .
-CLEANFILES += $(EXMAPLES_JAR)
+CLEANFILES += $(EXAMPLES_JAR)
maven-install: $(MESOS_JAR) $(MESOS_SOURCES_JAR) java/mesos.pom
mvn install:install-file -Dfile=$(MESOS_JAR) \
@@ -557,8 +553,6 @@ $(MESOS_EGG): python/setup.py $(srcdir)/
CLEANFILES += $(MESOS_EGG) python/build/temp.*/native/*.o python/build/lib.*/*
-pythonegg_DATA = $(MESOS_EGG)
-
# Make sure the egg gets built via 'make all'.
all-local: $(MESOS_EGG)
endif # HAS_PYTHON
Modified: incubator/mesos/trunk/src/common/build.hpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/common/build.hpp?rev=1301125&r1=1301124&r2=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/src/common/build.hpp (original)
+++ incubator/mesos/trunk/src/common/build.hpp Thu Mar 15 18:19:14 2012
@@ -15,6 +15,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#ifndef __BUILD_HPP__
+#define __BUILD_HPP__
#include <string>
@@ -29,3 +31,5 @@ extern const std::string FLAGS;
} // namespace build {
} // namespace internal {
} // namespace mesos {
+
+#endif // __BUILD_HPP__
Modified: incubator/mesos/trunk/src/examples/java/TestFramework.java
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/examples/java/TestFramework.java?rev=1301125&r1=1301124&r2=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/src/examples/java/TestFramework.java (original)
+++ incubator/mesos/trunk/src/examples/java/TestFramework.java Thu Mar 15 18:19:14 2012
@@ -89,13 +89,14 @@ public class TestFramework {
@Override
public void statusUpdate(SchedulerDriver driver, TaskStatus status) {
- System.out.println("Status update: task " + status.getTaskId() +
+ System.out.println("Status update: task " + status.getTaskId().getValue() +
" is in state " + status.getState());
if (status.getState() == TaskState.TASK_FINISHED) {
finishedTasks++;
System.out.println("Finished tasks: " + finishedTasks);
- if (finishedTasks == totalTasks)
+ if (finishedTasks == totalTasks) {
driver.stop();
+ }
}
}
Copied: incubator/mesos/trunk/src/java/generated/org/apache/mesos/MesosNativeLibrary.java.in (from r1299823, incubator/mesos/trunk/src/java/src/org/apache/mesos/MesosNativeLibrary.java)
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/java/generated/org/apache/mesos/MesosNativeLibrary.java.in?p2=incubator/mesos/trunk/src/java/generated/org/apache/mesos/MesosNativeLibrary.java.in&p1=incubator/mesos/trunk/src/java/src/org/apache/mesos/MesosNativeLibrary.java&r1=1299823&r2=1301125&rev=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/src/java/src/org/apache/mesos/MesosNativeLibrary.java (original)
+++ incubator/mesos/trunk/src/java/generated/org/apache/mesos/MesosNativeLibrary.java.in Thu Mar 15 18:19:14 2012
@@ -46,12 +46,14 @@ public class MesosNativeLibrary {
System.loadLibrary("mesos");
} catch (UnsatisfiedLinkError error) {
System.err.println("Failed to load native Mesos library from " +
- System.getenv("java.library.path"));
+ System.getProperty("java.library.path"));
throw error;
}
}
}
}
+ public static final String VERSION = "@PACKAGE_VERSION@";
+
private static boolean loaded = false;
}
Modified: incubator/mesos/trunk/src/java/jni/convert.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/java/jni/convert.cpp?rev=1301125&r1=1301124&r2=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/src/java/jni/convert.cpp (original)
+++ incubator/mesos/trunk/src/java/jni/convert.cpp Thu Mar 15 18:19:14 2012
@@ -23,8 +23,12 @@
#include <mesos/mesos.hpp>
+#include "construct.hpp"
#include "convert.hpp"
+#include "common/logging.hpp"
+#include "common/strings.hpp"
+
using namespace mesos;
using std::string;
@@ -134,12 +138,29 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM
mesosClassLoader = env->NewWeakGlobalRef(classLoader);
}
+ // Check that we are loading the correct version of the native library.
+ jclass clazz = FindMesosClass(env, "org/apache/mesos/MesosNativeLibrary");
+ jobject jVERSION = env->GetStaticObjectField(
+ clazz, env->GetStaticFieldID(clazz, "VERSION", "Ljava/lang/String;"));
+
+ const string& expected = construct<string>(env, jVERSION);
+
+ if (MESOS_VERSION != expected) {
+ env->DeleteWeakGlobalRef(mesosClassLoader);
+ mesosClassLoader = NULL;
+ const string& error =
+ "Java expecting version " + expected + ", found version " + MESOS_VERSION;
+ clazz = env->FindClass("java/lang/UnsatisfiedLinkError");
+ env->ThrowNew(clazz, error.c_str());
+ return JNI_ERR;
+ }
+
// Set the 'loaded' property so we don't try and load it again. This
// is necessary because a native library can be loaded either with
// 'System.load' or 'System.loadLibrary' and while redundant calls
// to 'System.loadLibrary' will be ignored one call of each could
// cause an error.
- jclass clazz = env->FindClass("org/apache/mesos/MesosNativeLibrary");
+ clazz = FindMesosClass(env, "org/apache/mesos/MesosNativeLibrary");
jfieldID loaded = env->GetStaticFieldID(clazz, "loaded", "Z");
env->SetStaticBooleanField(clazz, loaded, (jboolean) true);
Modified: incubator/mesos/trunk/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp?rev=1301125&r1=1301124&r2=1301125&view=diff
==============================================================================
--- incubator/mesos/trunk/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp (original)
+++ incubator/mesos/trunk/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp Thu Mar 15 18:19:14 2012
@@ -96,7 +96,7 @@ string JNIScheduler::getFrameworkName(Sc
return "";
}
- string name = construct<string>(env, (jstring) jname);
+ string name = construct<string>(env, jname);
jvm->DetachCurrentThread();