Skip to content
This repository has been archived by the owner on Aug 4, 2022. It is now read-only.

Commit

Permalink
[REEF-891] Remove the usage of lookup tables in favor of passing C# h…
Browse files Browse the repository at this point in the history
…andles through explicit classes

This addressed the issue by
  * Adding the classes BridgeHandlerManager both in Java and .NET.
  * Removing maps in Java and .NET.
  * Modifying InterOp code to be more explicit with the two new classes.

JIRA:
  [REEF-891](https://issues.apache.org/jira/browse/REEF-891)

Pull Request:
  Closes #601
  • Loading branch information
afchung authored and beysims committed Oct 30, 2015
1 parent 8efa4d8 commit f5c9f48
Show file tree
Hide file tree
Showing 12 changed files with 403 additions and 329 deletions.
69 changes: 52 additions & 17 deletions lang/cs/Org.Apache.REEF.Bridge/JavaClrBridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,43 @@ static void MarshalErrorToJava (
env->SetObjectField(jerrorInfo, fieldID, jexceptionString);
}

void populateJavaBridgeHandlerManager(JNIEnv * env, jobject jbridgeHandlerManager, BridgeHandlerManager^ bridgeHandlerManager) {
jclass cls = env->GetObjectClass(jbridgeHandlerManager);
jmethodID jsetAllocatedEvaluatorHandlerMid = env->GetMethodID(cls, "setAllocatedEvaluatorHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetAllocatedEvaluatorHandlerMid, bridgeHandlerManager->AllocatedEvaluatorHandler);
jmethodID jsetActiveContextHandlerMid = env->GetMethodID(cls, "setActiveContextHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetActiveContextHandlerMid, bridgeHandlerManager->ActiveContextHandler);
jmethodID jsetTaskMessageHandlerMid = env->GetMethodID(cls, "setTaskMessageHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetTaskMessageHandlerMid, bridgeHandlerManager->TaskMessageHandler);
jmethodID jsetFailedTaskHandlerMid = env->GetMethodID(cls, "setFailedTaskHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetFailedTaskHandlerMid, bridgeHandlerManager->FailedTaskHandler);
jmethodID jsetFailedEvaluatorHandlerMid = env->GetMethodID(cls, "setFailedEvaluatorHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetFailedEvaluatorHandlerMid, bridgeHandlerManager->FailedEvaluatorHandler);
jmethodID jsetHttpServerEventHandlerMid = env->GetMethodID(cls, "setHttpServerEventHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetHttpServerEventHandlerMid, bridgeHandlerManager->HttpServerHandler);
jmethodID jsetCompletedTaskHandlerMid = env->GetMethodID(cls, "setCompletedTaskHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetCompletedTaskHandlerMid, bridgeHandlerManager->CompletedTaskHandler);
jmethodID jsetRunningTaskHandlerMid = env->GetMethodID(cls, "setRunningTaskHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetRunningTaskHandlerMid, bridgeHandlerManager->RunningTaskHandler);
jmethodID jsetSuspendedTaskHandlerMid = env->GetMethodID(cls, "setSuspendedTaskHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetSuspendedTaskHandlerMid, bridgeHandlerManager->SuspendedTaskHandler);
jmethodID jsetCompletedEvaluatorHandlerMid = env->GetMethodID(cls, "setCompletedEvaluatorHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetCompletedEvaluatorHandlerMid, bridgeHandlerManager->CompletedEvaluatorHandler);
jmethodID jsetClosedContextHandlerMid = env->GetMethodID(cls, "setClosedContextHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetClosedContextHandlerMid, bridgeHandlerManager->ClosedContextHandler);
jmethodID jsetFailedContextHandlerMid = env->GetMethodID(cls, "setFailedContextHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetFailedContextHandlerMid, bridgeHandlerManager->FailedContextHandler);
jmethodID jsetContextMessageHandlerMid = env->GetMethodID(cls, "setContextMessageHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetContextMessageHandlerMid, bridgeHandlerManager->ContextMessageHandler);
jmethodID jsetDriverRestartActiveContextHandlerMid = env->GetMethodID(cls, "setDriverRestartActiveContextHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetDriverRestartActiveContextHandlerMid, bridgeHandlerManager->DriverRestartActiveContextHandler);
jmethodID jsetDriverRestartRunningTaskHandlerMid = env->GetMethodID(cls, "setDriverRestartRunningTaskHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetDriverRestartRunningTaskHandlerMid, bridgeHandlerManager->DriverRestartRunningTaskHandler);
jmethodID jsetDriverRestartCompletedHandlerMid = env->GetMethodID(cls, "setDriverRestartCompletedHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetDriverRestartCompletedHandlerMid, bridgeHandlerManager->DriverRestartCompletedHandler);
jmethodID jsetDriverRestartFailedEvaluatorHandlerMid = env->GetMethodID(cls, "setDriverRestartFailedEvaluatorHandler", "(J)V");
env->CallVoidMethod(jbridgeHandlerManager, jsetDriverRestartFailedEvaluatorHandlerMid, bridgeHandlerManager->DriverRestartFailedEvaluatorHandler);
}

// Loading Clr Assembly. Note that we do not use ManagerLogger in this method since the
// logger assembly needs to be loaded by this method before it can be used.
Expand Down Expand Up @@ -97,24 +134,23 @@ JNIEXPORT void JNICALL Java_org_apache_reef_javabridge_NativeInterop_loadClrAsse
/*
* Class: org_apache_reef_javabridge_NativeInterop
* Method: callClrSystemOnStartHandler
* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;)[J
* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/apache/reef/javabridge/BridgeHandlerManager;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;)V
*/
JNIEXPORT jlongArray JNICALL Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnStartHandler
(JNIEnv * env, jclass jclassx, jstring dateTimeString, jstring httpServerPort, jobject jevaluatorRequestorBridge) {
JNIEXPORT void JNICALL Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnStartHandler
(JNIEnv * env, jclass jclassx, jstring dateTimeString, jstring httpServerPort, jobject jbridgeHandlerManager, jobject jevaluatorRequestorBridge) {
try {
ManagedLog::LOGGER->Log("+Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnStartHandler");
DateTime dt = DateTime::Now;

String^ strPort = ManagedStringFromJavaString(env, httpServerPort);

EvaluatorRequestorClr2Java^ evaluatorRequestorBridge = gcnew EvaluatorRequestorClr2Java(env, jevaluatorRequestorBridge);
array<unsigned long long>^ handlers = ClrSystemHandlerWrapper::Call_ClrSystemStartHandler_OnStart(dt, strPort, evaluatorRequestorBridge);
return JavaLongArrayFromManagedLongArray(env, handlers);
BridgeHandlerManager^ handlerManager = ClrSystemHandlerWrapper::Call_ClrSystemStartHandler_OnStart(dt, strPort, evaluatorRequestorBridge);
populateJavaBridgeHandlerManager(env, jbridgeHandlerManager, handlerManager);
}
catch (System::Exception^ ex) {
// we cannot get error back to java here since we don't have an object to call back (although we ideally should...)
ManagedLog::LOGGER->LogError("Exceptions in Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnStartHandler", ex);
return NULL;
}
}

Expand Down Expand Up @@ -432,25 +468,24 @@ JNIEXPORT void JNICALL Java_org_apache_reef_javabridge_NativeInterop_clrSystemCo
}

/*
* Class: org_apache_reef_javabridge_NativeInterop
* Method: callClrSystemOnRestartHandler
* Signature: (Ljava/lang/String;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;Lorg/apache/reef/javabridge/DriverRestartedBridge;)[J
*/
JNIEXPORT jlongArray JNICALL Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnRestartHandler
(JNIEnv * env, jclass jclassx, jstring httpServerPort, jobject jevaluatorRequestorBridge, jobject jdriverRestartedBridge) {
* Class: org_apache_reef_javabridge_NativeInterop
* Method: callClrSystemOnRestartHandler
* Signature: (Ljava/lang/String;Lorg/apache/reef/javabridge/BridgeHandlerManager;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;Lorg/apache/reef/javabridge/DriverRestartedBridge;)V
*/
JNIEXPORT void JNICALL Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnRestartHandler
(JNIEnv * env, jclass jclassx, jstring httpServerPort, jobject jbridgeHandlerManager, jobject jevaluatorRequestorBridge, jobject jdriverRestartedBridge) {
try {
ManagedLog::LOGGER->Log("+Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnRestartHandler");
String^ strPort = ManagedStringFromJavaString(env, httpServerPort);

EvaluatorRequestorClr2Java^ evaluatorRequestorBridge = gcnew EvaluatorRequestorClr2Java(env, jevaluatorRequestorBridge);
DriverRestartedClr2Java^ driverRestartedBridge = gcnew DriverRestartedClr2Java(env, jdriverRestartedBridge);
array<unsigned long long>^ handlers = ClrSystemHandlerWrapper::Call_ClrSystemRestartHandler_OnRestart(strPort, evaluatorRequestorBridge, driverRestartedBridge);
return JavaLongArrayFromManagedLongArray(env, handlers);
BridgeHandlerManager^ handlerManager = ClrSystemHandlerWrapper::Call_ClrSystemRestartHandler_OnRestart(strPort, evaluatorRequestorBridge, driverRestartedBridge);
populateJavaBridgeHandlerManager(env, jbridgeHandlerManager, handlerManager);
}
catch (System::Exception^ ex) {
// we cannot get error back to java here since we don't have an object to call back (although we ideally should...)
ManagedLog::LOGGER->LogError("Exceptions in Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnRestartHandler", ex);
return NULL;
}
}

Expand Down Expand Up @@ -533,7 +568,7 @@ static JNINativeMethod methods[] = {

{ "clrBufferedLog", "(ILjava/lang/String;)V", (void*)&Java_org_apache_reef_javabridge_NativeInterop_clrBufferedLog },

{ "callClrSystemOnStartHandler", "(Ljava/lang/String;Ljava/lang/String;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;)[J",
{ "callClrSystemOnStartHandler", "(Ljava/lang/String;Ljava/lang/String;Lorg/apache/reef/javabridge/BridgeHandlerManager;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;)V",
(void*)&Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnStartHandler },

{ "clrSystemAllocatedEvaluatorHandlerOnNext", "(JLorg/apache/reef/javabridge/AllocatedEvaluatorBridge;Lorg/apache/reef/javabridge/InteropLogger;)V",
Expand Down Expand Up @@ -575,7 +610,7 @@ static JNINativeMethod methods[] = {
{ "clrSystemContextMessageHandlerOnNext", "(JLorg/apache/reef/javabridge/ContextMessageBridge;)V",
(void*)&Java_org_apache_reef_javabridge_NativeInterop_clrSystemContextMessageHandlerOnNext },

{ "callClrSystemOnRestartHandler", "(Ljava/lang/String;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;Lorg/apache/reef/javabridge/DriverRestartedBridge;)[J",
{ "callClrSystemOnRestartHandler", "(Ljava/lang/String;Lorg/apache/reef/javabridge/BridgeHandlerManager;Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;Lorg/apache/reef/javabridge/DriverRestartedBridge;)V",
(void*)&Java_org_apache_reef_javabridge_NativeInterop_callClrSystemOnRestartHandler },

{ "clrSystemDriverRestartActiveContextHandlerOnNext", "(JLorg/apache/reef/javabridge/ActiveContextBridge;)V",
Expand Down
61 changes: 61 additions & 0 deletions lang/cs/Org.Apache.REEF.Driver/Bridge/BridgeHandlerManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/**
* 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.
*/

namespace Org.Apache.REEF.Driver.Bridge
{
/// <summary>
/// A class that holds all .NET handles for Java InterOp calls.
/// </summary>
public sealed class BridgeHandlerManager
{
public ulong AllocatedEvaluatorHandler { get; internal set; }

public ulong TaskMessageHandler { get; internal set; }

public ulong ActiveContextHandler { get; internal set; }

public ulong FailedTaskHandler { get; internal set; }

public ulong RunningTaskHandler { get; internal set; }

public ulong CompletedTaskHandler { get; internal set; }

public ulong SuspendedTaskHandler { get; internal set; }

public ulong FailedEvaluatorHandler { get; internal set; }

public ulong CompletedEvaluatorHandler { get; internal set; }

public ulong ClosedContextHandler { get; internal set; }

public ulong FailedContextHandler { get; internal set; }

public ulong ContextMessageHandler { get; internal set; }

public ulong DriverRestartActiveContextHandler { get; internal set; }

public ulong DriverRestartRunningTaskHandler { get; internal set; }

public ulong DriverRestartCompletedHandler { get; internal set; }

public ulong DriverRestartFailedEvaluatorHandler { get; internal set; }

public ulong HttpServerHandler { get; internal set; }
}
}
19 changes: 3 additions & 16 deletions lang/cs/Org.Apache.REEF.Driver/Bridge/ClrSystemHandlerWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -230,20 +230,7 @@ public static void Call_ClrSystemDriverRestartFailedEvaluator_OnNext(ulong handl
}
}

//Deprecate, remove after both Java and C# code gets checked in
public static ulong[] Call_ClrSystemStartHandler_OnStart(
DateTime startTime,
IEvaluatorRequestorClr2Java evaluatorRequestorClr2Java)
{
IEvaluatorRequestor evaluatorRequestor = new EvaluatorRequestor(evaluatorRequestorClr2Java);
using (LOGGER.LogFunction("ClrSystemHandlerWrapper::Call_ClrSystemStartHandler_OnStart"))
{
LOGGER.Log(Level.Info, "*** Start time is " + startTime);
return GetHandlers(null, evaluatorRequestor);
}
}

public static ulong[] Call_ClrSystemStartHandler_OnStart(
public static BridgeHandlerManager Call_ClrSystemStartHandler_OnStart(
DateTime startTime,
string httpServerPort,
IEvaluatorRequestorClr2Java evaluatorRequestorClr2Java)
Expand All @@ -260,7 +247,7 @@ public static void Call_ClrSystemDriverRestartFailedEvaluator_OnNext(ulong handl
}
}

public static ulong[] Call_ClrSystemRestartHandler_OnRestart(
public static BridgeHandlerManager Call_ClrSystemRestartHandler_OnRestart(
string httpServerPort,
IEvaluatorRequestorClr2Java evaluatorRequestorClr2Java,
IDriverRestartedClr2Java driverRestartedClr2Java)
Expand All @@ -277,7 +264,7 @@ public static void Call_ClrSystemDriverRestartFailedEvaluator_OnNext(ulong handl
}
}

private static ulong[] GetHandlers(string httpServerPortNumber, IEvaluatorRequestor evaluatorRequestor)
private static BridgeHandlerManager GetHandlers(string httpServerPortNumber, IEvaluatorRequestor evaluatorRequestor)
{
var injector = BridgeConfigurationProvider.GetBridgeInjector(evaluatorRequestor);

Expand Down
Loading

0 comments on commit f5c9f48

Please sign in to comment.