Repository: incubator-reef
Updated Branches:
  refs/heads/master 02156e86e -> a3cf683a2


[REEF-690] Create a DriverRestartCompleted event in .NET

This addressed the issue by
  * Added bridge classes for DriverRestartCompleted.
  * Propagate the isTimedOut field from Java to .NET for
    `DriverRestartCompleted.`

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

Pull Request:
  This closes #468


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/a3cf683a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/a3cf683a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/a3cf683a

Branch: refs/heads/master
Commit: a3cf683a2adc257276b1f8cacffdc29bbcb39649
Parents: 02156e8
Author: Andrew Chung <[email protected]>
Authored: Tue Sep 8 10:06:39 2015 -0700
Committer: Markus Weimer <[email protected]>
Committed: Wed Sep 9 13:10:33 2015 -0700

----------------------------------------------------------------------
 lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h   | 12 ++++
 .../DriverRestartCompletedClr2Java.cpp          | 68 ++++++++++++++++++++
 lang/cs/Org.Apache.REEF.Bridge/InteropUtil.cpp  |  6 ++
 lang/cs/Org.Apache.REEF.Bridge/InteropUtil.h    |  4 ++
 .../cs/Org.Apache.REEF.Bridge/JavaClrBridge.cpp |  7 +-
 .../Org.Apache.REEF.Bridge.vcxproj              |  1 +
 .../Org.Apache.REEF.Bridge.vcxproj.filters      |  3 +
 .../Clr2java/IDriverRestartCompletedClr2Java.cs | 35 ++++++++++
 .../Bridge/ClrSystemHandlerWrapper.cs           |  4 +-
 .../Bridge/Events/DriverRestartCompleted.cs     | 17 +++--
 .../IDriverRestartCompleted.cs                  |  8 +++
 .../Org.Apache.REEF.Driver.csproj               |  1 +
 .../DriverRestart/HelloRestartDriver.cs         |  3 +-
 .../reef/javabridge/DriverRestartedBridge.java  |  3 +-
 .../apache/reef/javabridge/NativeInterop.java   |  5 +-
 .../generic/DriverRestartCompletedBridge.java   | 48 ++++++++++++++
 .../reef/javabridge/generic/JobDriver.java      |  4 +-
 17 files changed, 215 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h 
b/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
index 4e686eb..139cf9d 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
+++ b/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
@@ -227,6 +227,18 @@ namespace Org {
                                                  virtual array<String^>^ 
GetExpectedEvaluatorIds();
                                                  virtual DateTime 
GetStartTime();
                                          };
+
+                                         public ref class 
DriverRestartCompletedClr2Java : public IDriverRestartCompletedClr2Java {
+                                                 jobject 
_jobjectDriverRestartCompleted;
+                                                 JavaVM* _jvm;
+                                                 DateTime 
_restartCompletedTime;
+                                                 bool _isTimedOut;
+                                         public:
+                                                 
DriverRestartCompletedClr2Java(JNIEnv *env, jobject 
jobobjectDriverRestartCompleted);
+                                                 virtual void OnError(String^ 
message);
+                                                 virtual DateTime 
GetCompletedTime();
+                                                 virtual bool IsTimedOut();
+                                         };
                                  }
                          }
                  }

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp 
b/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp
new file mode 100644
index 0000000..f462a73
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp
@@ -0,0 +1,68 @@
+/**
+* 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.
+*/
+#include "Clr2JavaImpl.h"
+
+namespace Org {
+       namespace Apache {
+               namespace REEF {
+                       namespace Driver {
+                               namespace Bridge {
+                                       namespace Clr2java {
+                                               ref class ManagedLog {
+                                               internal:
+                                                       static BridgeLogger^ 
LOGGER = BridgeLogger::GetLogger("<C++>");
+                                               };
+
+                                               
DriverRestartCompletedClr2Java::DriverRestartCompletedClr2Java(JNIEnv *env, 
jobject jdriverRestartCompleted) {
+                                                       
ManagedLog::LOGGER->LogStart("DriverRestartCompletedClr2Java::DriverRestartCompletedClr2Java");
+                                                       pin_ptr<JavaVM*> 
pJavaVm = &_jvm;
+                                                       if 
(env->GetJavaVM(pJavaVm) != 0) {
+                                                               
ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr);
+                                                       }
+                                                       
_jobjectDriverRestartCompleted = 
reinterpret_cast<jobject>(env->NewGlobalRef(jdriverRestartCompleted));
+
+                                                       jclass 
jclassDriverRestartCompleted = 
env->GetObjectClass(_jobjectDriverRestartCompleted);
+                                                       jfieldID jidIsTimedOut 
= env->GetFieldID(jclassDriverRestartCompleted, "isTimedOut", "Z");
+
+                                                       jboolean jisTimedOut = 
env->GetBooleanField(_jobjectDriverRestartCompleted, jidIsTimedOut);
+                                                       _restartCompletedTime = 
System::DateTime::Now;
+                                                       _isTimedOut = 
ClrBoolFromJavaBoolean(env, jisTimedOut);
+
+                                                       
ManagedLog::LOGGER->LogStop("DriverRestartCompletedClr2Java::DriverRestartCompletedClr2Java");
+                                               }
+
+                                               bool 
DriverRestartCompletedClr2Java::IsTimedOut() {
+                                                       return _isTimedOut;
+                                               }
+
+                                               DateTime 
DriverRestartCompletedClr2Java::GetCompletedTime() {
+                                                       return 
_restartCompletedTime;
+                                               }
+
+                                               void 
DriverRestartCompletedClr2Java::OnError(String^ message) {
+                                                       
ManagedLog::LOGGER->Log("DriverRestartCompletedClr2Java::OnError");
+                                                       JNIEnv *env = 
RetrieveEnv(_jvm);
+                                                       
HandleClr2JavaError(env, message, _jobjectDriverRestartCompleted);
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.cpp 
b/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.cpp
index be24f32..1bbabab 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.cpp
@@ -58,6 +58,12 @@ String^ ManagedStringFromJavaString (
   return nullptr;
 }
 
+bool ClrBoolFromJavaBoolean(
+       JNIEnv * env,
+       jboolean jbool) {
+       return jbool != JNI_FALSE;
+}
+
 jstring JavaStringFromManagedString(
   JNIEnv *env,
   String^ managedString) {

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.h
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.h 
b/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.h
index 2d95bcc..16aede6 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.h
+++ b/lang/cs/Org.Apache.REEF.Bridge/InteropUtil.h
@@ -41,6 +41,10 @@ String^ ManagedStringFromJavaString (
   JNIEnv *env,
   jstring javaString);
 
+bool ClrBoolFromJavaBoolean(
+       JNIEnv * env,
+       jboolean jbool);
+
 jstring JavaStringFromManagedString(
   JNIEnv *env,
   String^ managedString);

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Bridge/JavaClrBridge.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/JavaClrBridge.cpp 
b/lang/cs/Org.Apache.REEF.Bridge/JavaClrBridge.cpp
index a21a144..a90c44c 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/JavaClrBridge.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/JavaClrBridge.cpp
@@ -495,13 +495,14 @@ JNIEXPORT void JNICALL 
Java_org_apache_reef_javabridge_NativeInterop_clrSystemDr
 /*
 * Class:     org_apache_reef_javabridge_NativeInterop
 * Method:    clrSystemDriverRestartCompletedHandlerOnNext
-* Signature: (J)V
+* Signature: 
(JLorg/apache/reef/javabridge/generic/DriverRestartCompletedBridge;)V
 */
 JNIEXPORT void JNICALL 
Java_org_apache_reef_javabridge_NativeInterop_clrSystemDriverRestartCompletedHandlerOnNext
-(JNIEnv * env, jclass cls, jlong handler) {
+(JNIEnv * env, jclass cls , jlong handler, jobject jdriverRestartCompleted) {
        
ManagedLog::LOGGER->Log("+Java_org_apache_reef_javabridge_NativeInterop_clrSystemDriverRestartCompletedHandlerOnNext");
+       DriverRestartCompletedClr2Java^ driverRestartCompletedBridge = gcnew 
DriverRestartCompletedClr2Java(env, jdriverRestartCompleted);
        try {
-               
ClrSystemHandlerWrapper::Call_ClrSystemDriverRestartCompleted_OnNext(handler);
+               
ClrSystemHandlerWrapper::Call_ClrSystemDriverRestartCompleted_OnNext(handler, 
driverRestartCompletedBridge);
        }
        catch (System::Exception^ ex) {
                String^ errorMessage = "Exception in 
Call_ClrSystemDriverRestartRunningTask_OnNext";

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj 
b/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj
index 9098e64..eaaaaf9 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj
+++ b/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj
@@ -135,6 +135,7 @@ under the License.
     <ClCompile Include="CompletedTaskClr2Java.cpp" />
     <ClCompile Include="ContextMessageClr2Java.cpp" />
     <ClCompile Include="DriverRestartedClr2Java.cpp" />
+    <ClCompile Include="DriverRestartCompletedClr2Java.cpp" />
     <ClCompile Include="EvaluatorRequestorClr2Java.cpp" />
     <ClCompile Include="FailedContextClr2Java.cpp" />
     <ClCompile Include="FailedEvaluatorClr2Java.cpp" />

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj.filters
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj.filters 
b/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj.filters
index 4d3a847..767c497 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj.filters
+++ b/lang/cs/Org.Apache.REEF.Bridge/Org.Apache.REEF.Bridge.vcxproj.filters
@@ -116,6 +116,9 @@
     <ClCompile Include="DriverRestartedClr2Java.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="DriverRestartCompletedClr2Java.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Text Include="ReadMe.txt" />

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Driver/Bridge/Clr2java/IDriverRestartCompletedClr2Java.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Driver/Bridge/Clr2java/IDriverRestartCompletedClr2Java.cs
 
b/lang/cs/Org.Apache.REEF.Driver/Bridge/Clr2java/IDriverRestartCompletedClr2Java.cs
new file mode 100644
index 0000000..223fde6
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.Driver/Bridge/Clr2java/IDriverRestartCompletedClr2Java.cs
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+using System;
+
+namespace Org.Apache.REEF.Driver.Bridge.Clr2java
+{
+    public interface IDriverRestartCompletedClr2Java
+    {
+        /// <summary>
+        /// Completed time of the restart.
+        /// </summary>
+        DateTime GetCompletedTime();
+
+        /// <summary>
+        /// Returns True if restart completed fired on timeout.
+        /// </summary>
+        bool IsTimedOut();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Driver/Bridge/ClrSystemHandlerWrapper.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Driver/Bridge/ClrSystemHandlerWrapper.cs 
b/lang/cs/Org.Apache.REEF.Driver/Bridge/ClrSystemHandlerWrapper.cs
index b7f9f2e..5f7b61b 100644
--- a/lang/cs/Org.Apache.REEF.Driver/Bridge/ClrSystemHandlerWrapper.cs
+++ b/lang/cs/Org.Apache.REEF.Driver/Bridge/ClrSystemHandlerWrapper.cs
@@ -210,13 +210,13 @@ namespace Org.Apache.REEF.Driver.Bridge
             }
         }
 
-        public static void Call_ClrSystemDriverRestartCompleted_OnNext(ulong 
handle)
+        public static void Call_ClrSystemDriverRestartCompleted_OnNext(ulong 
handle, IDriverRestartCompletedClr2Java clr2Java)
         {
             using 
(LOGGER.LogFunction("ClrSystemHandlerWrapper::Call_ClrSystemDriverRestartCompleted_OnNext"))
             {
                 GCHandle gc = GCHandle.FromIntPtr((IntPtr)handle);
                 ClrSystemHandler<IDriverRestartCompleted> obj = 
(ClrSystemHandler<IDriverRestartCompleted>)gc.Target;
-                obj.OnNext(new DriverRestartCompleted(DateTime.Now));
+                obj.OnNext(new DriverRestartCompleted(clr2Java));
             }
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Driver/Bridge/Events/DriverRestartCompleted.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Driver/Bridge/Events/DriverRestartCompleted.cs 
b/lang/cs/Org.Apache.REEF.Driver/Bridge/Events/DriverRestartCompleted.cs
index e1db1f3..9382b64 100644
--- a/lang/cs/Org.Apache.REEF.Driver/Bridge/Events/DriverRestartCompleted.cs
+++ b/lang/cs/Org.Apache.REEF.Driver/Bridge/Events/DriverRestartCompleted.cs
@@ -18,24 +18,33 @@
  */
 
 using System;
+using Org.Apache.REEF.Driver.Bridge.Clr2java;
+using Org.Apache.REEF.Driver.Defaults;
 
 namespace Org.Apache.REEF.Driver.Bridge.Events
 {
     /// <summary>
-    /// Implementation of IDriverStarted.
+    /// Implementation of IDriverRestartCompleted.
     /// </summary>
     internal sealed class DriverRestartCompleted : IDriverRestartCompleted
     {
         private readonly DateTime _completedTime;
+        private readonly bool _isTimedOut;
 
-        internal DriverRestartCompleted(DateTime completedTime)
+        internal DriverRestartCompleted(IDriverRestartCompletedClr2Java 
driverRestartCompletedClr2Java)
         {
-            this._completedTime = completedTime;
+            _completedTime = driverRestartCompletedClr2Java.GetCompletedTime();
+            _isTimedOut = driverRestartCompletedClr2Java.IsTimedOut();
         }
 
         public DateTime CompletedTime
         {
-            get { return this._completedTime; }
+            get { return _completedTime; }
+        }
+
+        public bool IsTimedOut
+        {
+            get { return _isTimedOut; }
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Driver/IDriverRestartCompleted.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Driver/IDriverRestartCompleted.cs 
b/lang/cs/Org.Apache.REEF.Driver/IDriverRestartCompleted.cs
index a8acd3f..41bd895 100644
--- a/lang/cs/Org.Apache.REEF.Driver/IDriverRestartCompleted.cs
+++ b/lang/cs/Org.Apache.REEF.Driver/IDriverRestartCompleted.cs
@@ -26,6 +26,14 @@ namespace Org.Apache.REEF.Driver
     /// </summary>
     public interface IDriverRestartCompleted
     {
+        /// <summary>
+        /// The completed time of driver restart process.
+        /// </summary>
         DateTime CompletedTime { get; }
+
+        /// <summary>
+        /// Whether the driver restart completed event fired due to a timeout.
+        /// </summary>
+        bool IsTimedOut { get; }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Driver/Org.Apache.REEF.Driver.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Driver/Org.Apache.REEF.Driver.csproj 
b/lang/cs/Org.Apache.REEF.Driver/Org.Apache.REEF.Driver.csproj
index 6fc2426..8a7af98 100644
--- a/lang/cs/Org.Apache.REEF.Driver/Org.Apache.REEF.Driver.csproj
+++ b/lang/cs/Org.Apache.REEF.Driver/Org.Apache.REEF.Driver.csproj
@@ -47,6 +47,7 @@ under the License.
     <Compile Include="Bridge\Clr2java\ICompletedEvaluatorClr2Java.cs" />
     <Compile Include="Bridge\Clr2java\ICompletedTaskClr2Java.cs" />
     <Compile Include="Bridge\Clr2java\IContextMessageClr2Java.cs" />
+    <Compile Include="Bridge\Clr2java\IDriverRestartCompletedClr2Java.cs" />
     <Compile Include="Bridge\Clr2java\IDriverRestartedClr2Java.cs" />
     <Compile Include="Bridge\Clr2java\IEvaluatorRequestorClr2Java.cs" />
     <Compile Include="Bridge\Clr2java\IFailedContextClr2Java.cs" />

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/cs/Org.Apache.REEF.Examples/DriverRestart/HelloRestartDriver.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Examples/DriverRestart/HelloRestartDriver.cs 
b/lang/cs/Org.Apache.REEF.Examples/DriverRestart/HelloRestartDriver.cs
index ed3a59b..00240f1 100644
--- a/lang/cs/Org.Apache.REEF.Examples/DriverRestart/HelloRestartDriver.cs
+++ b/lang/cs/Org.Apache.REEF.Examples/DriverRestart/HelloRestartDriver.cs
@@ -141,7 +141,8 @@ namespace Org.Apache.REEF.Examples.DriverRestart
 
         public void OnNext(IDriverRestartCompleted value)
         {
-            Logger.Log(Level.Info, "Driver restart has completed.");
+            var timedOutStr = (value.IsTimedOut ? " due to timeout" : 
string.Empty);
+            Logger.Log(Level.Info, "Driver restart has completed" + 
timedOutStr + ".");
         }
 
         public void OnNext(ICompletedTask value)

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/DriverRestartedBridge.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/DriverRestartedBridge.java
 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/DriverRestartedBridge.java
index 54b08c0..3c827ee 100644
--- 
a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/DriverRestartedBridge.java
+++ 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/DriverRestartedBridge.java
@@ -25,12 +25,13 @@ import org.apache.reef.annotations.audience.Private;
 import java.util.Set;
 
 /**
- * Created by anchung on 9/1/2015.
+ * The Java-CLR bridge object for {@link 
org.apache.reef.driver.restart.DriverRestarted} events.
  */
 @Private
 @DriverSide
 @Unstable
 public final class DriverRestartedBridge extends NativeBridge {
+  // Used by bridge to extract field. Please take this into consideration when 
changing the name of the field.
   private final String[] expectedEvaluatorIds;
 
   public DriverRestartedBridge(final Set<String> expectedEvaluatorIds) {

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/NativeInterop.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/NativeInterop.java
 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/NativeInterop.java
index a622dda..3b08103 100644
--- 
a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/NativeInterop.java
+++ 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/NativeInterop.java
@@ -18,6 +18,8 @@
  */
 package org.apache.reef.javabridge;
 
+import org.apache.reef.javabridge.generic.DriverRestartCompletedBridge;
+
 import java.util.HashMap;
 
 public final class NativeInterop {
@@ -164,7 +166,8 @@ public final class NativeInterop {
   );
 
   public static native void clrSystemDriverRestartCompletedHandlerOnNext(
-      final long handle
+      final long handle,
+      final DriverRestartCompletedBridge driverRestartCompletedBridge
   );
 
   public static native void clrSystemDriverRestartFailedEvaluatorHandlerOnNext(

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/DriverRestartCompletedBridge.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/DriverRestartCompletedBridge.java
 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/DriverRestartCompletedBridge.java
new file mode 100644
index 0000000..2d03735
--- /dev/null
+++ 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/DriverRestartCompletedBridge.java
@@ -0,0 +1,48 @@
+/*
+ * 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.reef.javabridge.generic;
+
+import org.apache.reef.annotations.Unstable;
+import org.apache.reef.annotations.audience.DriverSide;
+import org.apache.reef.annotations.audience.Private;
+import org.apache.reef.driver.restart.DriverRestartCompleted;
+import org.apache.reef.javabridge.NativeBridge;
+
+/**
+ * The Java-CLR bridge object for {@link DriverRestartCompleted} events.
+ */
+@Private
+@DriverSide
+@Unstable
+public final class DriverRestartCompletedBridge extends NativeBridge {
+  // Used by bridge to extract field. Please take this into consideration when 
changing the name of the field.
+  private boolean isTimedOut;
+
+  DriverRestartCompletedBridge(final DriverRestartCompleted 
driverRestartCompleted) {
+    this.isTimedOut = driverRestartCompleted.isTimedOut();
+  }
+
+  public boolean isTimedOut() {
+    return isTimedOut;
+  }
+
+  @Override
+  public void close() throws Exception {
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/a3cf683a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/JobDriver.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/JobDriver.java
 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/JobDriver.java
index 1b37474..9abdee6 100644
--- 
a/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/JobDriver.java
+++ 
b/lang/java/reef-bridge-java/src/main/java/org/apache/reef/javabridge/generic/JobDriver.java
@@ -650,8 +650,8 @@ public final class JobDriver {
         if (JobDriver.this.driverRestartCompletedHandler != 0) {
           LOG.log(Level.INFO, "CLR driver restart handler implemented, now 
handle it in CLR.");
 
-          // TODO[REEF-690]: Pass in DriverRestartCompleted object to .NET.
-          
NativeInterop.clrSystemDriverRestartCompletedHandlerOnNext(JobDriver.this.driverRestartCompletedHandler);
+          NativeInterop.clrSystemDriverRestartCompletedHandlerOnNext(
+              JobDriver.this.driverRestartCompletedHandler, new 
DriverRestartCompletedBridge(driverRestartCompleted));
         } else {
           LOG.log(Level.WARNING, "No CLR driver restart handler implemented, 
done with DriverRestartCompletedHandler.");
         }

Reply via email to