Repository: reef
Updated Branches:
  refs/heads/master 4ddbc29be -> 4088f3c73


[REEF-1072] Add IDriverConnection as part of evaluator configuration

This addressed the issue by
  * Adds an IDriverReconnectionConfigurationProvider to replace 
IDriverConnection usage in DriverConfiguration.

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

This CLoses #914


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

Branch: refs/heads/master
Commit: 4088f3c7359cd35ba66f3a67faab744181413b3d
Parents: 4ddbc29
Author: Andrew Chung <[email protected]>
Authored: Thu Mar 24 18:23:38 2016 -0700
Committer: Julia Wang <[email protected]>
Committed: Fri Apr 1 13:40:17 2016 -0700

----------------------------------------------------------------------
 .../DefaultDriverReconnConfigProvider.cs        | 44 ++++++++++++++++
 .../DynamicDriverReconnConfigProvider.cs        | 55 ++++++++++++++++++++
 .../IDriverReconnConfigProvider.cs              | 31 +++++++++++
 .../LocalHttpDriverReconnConfigProvider.cs      | 41 +++++++++++++++
 ...YarnClusterHttpDriverReconnConfigProvider.cs | 41 +++++++++++++++
 .../YarnOneBoxHttpDriverReconnConfigProvider.cs | 43 +++++++++++++++
 .../Evaluator/IDriverConnection.cs              |  2 +
 .../Evaluator/MissingDriverConnection.cs        | 38 ++++++++++++++
 .../Org.Apache.REEF.Common.csproj               |  7 +++
 .../Bridge/DriverBridge.cs                      | 30 ++++++++++-
 .../DriverConfiguration.cs                      | 13 +++++
 .../DriverRestart.cs                            |  4 +-
 12 files changed, 347 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DefaultDriverReconnConfigProvider.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DefaultDriverReconnConfigProvider.cs
 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DefaultDriverReconnConfigProvider.cs
new file mode 100644
index 0000000..86babe3
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DefaultDriverReconnConfigProvider.cs
@@ -0,0 +1,44 @@
+// 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 Org.Apache.REEF.Tang.Annotations;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Interface;
+
+namespace 
Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders
+{
+    /// <summary>
+    /// The default driver reconnection configuration provider. Provides an 
empty configuration such
+    /// that <see cref="IDriverConnection"/> is bound to its default 
implementation, 
+    /// and no conflicts are caused in TANG.
+    /// </summary>
+    internal sealed class DefaultDriverReconnConfigProvider : 
IDriverReconnConfigProvider
+    {
+        [Inject]
+        private DefaultDriverReconnConfigProvider()
+        {
+        }
+
+        /// <summary>
+        /// Return an empty configuration.
+        /// </summary>
+        public IConfiguration GetConfiguration()
+        {
+            return TangFactory.GetTang().NewConfigurationBuilder().Build();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DynamicDriverReconnConfigProvider.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DynamicDriverReconnConfigProvider.cs
 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DynamicDriverReconnConfigProvider.cs
new file mode 100644
index 0000000..aa745ae
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/DynamicDriverReconnConfigProvider.cs
@@ -0,0 +1,55 @@
+// 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;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Interface;
+
+namespace 
Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders
+{
+    /// <summary>
+    /// A helper <see cref="IDriverReconnConfigProvider"/> that binds <see 
cref="IDriverConnection"/>
+    /// dynamically. This is used such that a <see 
cref="IDriverReconnConfigProvider"/> can
+    /// be used to provide the type of <see cref="IDriverConnection"/> to the 
Evaluator if the user only
+    /// binds the deprecated <see cref="IDriverConnection"/> optional 
implementation, instead of the
+    /// new <see cref="IDriverReconnConfigProvider"/> implementation.
+    /// TODO[JIRA REEF-1306]: Remove.
+    /// </summary>
+    internal sealed class DynamicDriverReconnConfigProvider : 
IDriverReconnConfigProvider
+    {
+        private readonly Type _driverReconnectionType;
+
+        internal DynamicDriverReconnConfigProvider(Type type)
+        {
+            _driverReconnectionType = type;
+            if (!typeof(IDriverConnection).IsAssignableFrom(type))
+            {
+                throw new ArgumentException("The type must be a subclass of 
IDriverConnection.");
+            }
+        }
+
+        /// <summary>
+        /// A configuration where the type of <see cref="IDriverConnection"/> 
is bound dynamically.
+        /// </summary>
+        public IConfiguration GetConfiguration()
+        {
+            return TangFactory.GetTang().NewConfigurationBuilder()
+                .BindImplementation(typeof(IDriverConnection), 
_driverReconnectionType)
+                .Build();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/IDriverReconnConfigProvider.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/IDriverReconnConfigProvider.cs
 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/IDriverReconnConfigProvider.cs
new file mode 100644
index 0000000..4e09ebf
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/IDriverReconnConfigProvider.cs
@@ -0,0 +1,31 @@
+// 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 Org.Apache.REEF.Tang.Annotations;
+using Org.Apache.REEF.Tang.Interface;
+
+namespace 
Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders
+{
+    /// <summary>
+    /// A configuration provider for the Evaluator to create the appropriate 
reconnection
+    /// object to reconnect to the Driver based on the environment.
+    /// </summary>
+    [DefaultImplementation(typeof(DefaultDriverReconnConfigProvider))]
+    public interface IDriverReconnConfigProvider : IConfigurationProvider
+    {
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/LocalHttpDriverReconnConfigProvider.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/LocalHttpDriverReconnConfigProvider.cs
 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/LocalHttpDriverReconnConfigProvider.cs
new file mode 100644
index 0000000..ee16b1b
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/LocalHttpDriverReconnConfigProvider.cs
@@ -0,0 +1,41 @@
+// 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 Org.Apache.REEF.Tang.Annotations;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Interface;
+
+namespace 
Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders
+{
+    /// <summary>
+    /// A driver reconnection configuration provider for the Local Driver 
based on HTTP connection.
+    /// </summary>
+    public sealed class LocalHttpDriverReconnConfigProvider : 
IDriverReconnConfigProvider
+    {
+        [Inject]
+        private LocalHttpDriverReconnConfigProvider()
+        {
+        }
+
+        public IConfiguration GetConfiguration()
+        {
+            return TangFactory.GetTang().NewConfigurationBuilder()
+                    .BindImplementation<IDriverConnection, 
DefaultLocalHttpDriverConnection>()
+                    .Build();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnClusterHttpDriverReconnConfigProvider.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnClusterHttpDriverReconnConfigProvider.cs
 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnClusterHttpDriverReconnConfigProvider.cs
new file mode 100644
index 0000000..bfdae18
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnClusterHttpDriverReconnConfigProvider.cs
@@ -0,0 +1,41 @@
+// 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 Org.Apache.REEF.Tang.Annotations;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Interface;
+
+namespace 
Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders
+{
+    /// <summary>
+    /// A driver reconnection configuration provider for the YARN Driver based 
on HTTP connection.
+    /// </summary>
+    public sealed class YarnClusterHttpDriverReconnConfigProvider : 
IDriverReconnConfigProvider
+    {
+        [Inject]
+        private YarnClusterHttpDriverReconnConfigProvider()
+        {
+        }
+
+        public IConfiguration GetConfiguration()
+        {
+            return TangFactory.GetTang().NewConfigurationBuilder()
+                    .BindImplementation<IDriverConnection, 
DefaultYarnClusterHttpDriverConnection>()
+                    .Build();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnOneBoxHttpDriverReconnConfigProvider.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnOneBoxHttpDriverReconnConfigProvider.cs
 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnOneBoxHttpDriverReconnConfigProvider.cs
new file mode 100644
index 0000000..b88fd0e
--- /dev/null
+++ 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/DriverConnectionConfigurationProviders/YarnOneBoxHttpDriverReconnConfigProvider.cs
@@ -0,0 +1,43 @@
+// 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 Org.Apache.REEF.Tang.Annotations;
+using Org.Apache.REEF.Tang.Implementations.Tang;
+using Org.Apache.REEF.Tang.Interface;
+
+namespace 
Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders
+{
+    /// <summary>
+    /// A driver reconnection configuration provider for the YARN OneBox 
Driver based on HTTP connection.
+    /// </summary>
+    public sealed class YarnOneBoxHttpDriverReconnConfigProvider : 
IDriverReconnConfigProvider
+    {
+        [Inject]
+        private YarnOneBoxHttpDriverReconnConfigProvider()
+        {
+        }
+
+        public IConfiguration GetConfiguration()
+        {
+            return
+                TangFactory.GetTang()
+                    .NewConfigurationBuilder()
+                    .BindImplementation<IDriverConnection, 
DefaultYarnOneBoxHttpDriverConnection>()
+                    .Build();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/IDriverConnection.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Common/Evaluator/IDriverConnection.cs 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/IDriverConnection.cs
index b46ea87..ade9621 100644
--- a/lang/cs/Org.Apache.REEF.Common/Evaluator/IDriverConnection.cs
+++ b/lang/cs/Org.Apache.REEF.Common/Evaluator/IDriverConnection.cs
@@ -15,10 +15,12 @@
 // specific language governing permissions and limitations
 // under the License.
 
+using Org.Apache.REEF.Tang.Annotations;
 using Org.Apache.REEF.Utilities.Attributes;
 
 namespace Org.Apache.REEF.Common.Evaluator
 {
+    [DefaultImplementation(typeof(MissingDriverConnection))]
     public interface IDriverConnection
     {
         [Private]

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Evaluator/MissingDriverConnection.cs
----------------------------------------------------------------------
diff --git 
a/lang/cs/Org.Apache.REEF.Common/Evaluator/MissingDriverConnection.cs 
b/lang/cs/Org.Apache.REEF.Common/Evaluator/MissingDriverConnection.cs
new file mode 100644
index 0000000..ffeacf9
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Common/Evaluator/MissingDriverConnection.cs
@@ -0,0 +1,38 @@
+// 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;
+using Org.Apache.REEF.Tang.Annotations;
+
+namespace Org.Apache.REEF.Common.Evaluator
+{
+    /// <summary>
+    /// The default <see cref="IDriverConnection"/> that throws an Exception.
+    /// </summary>
+    internal sealed class MissingDriverConnection : IDriverConnection
+    {
+        [Inject]
+        private MissingDriverConnection()
+        {
+        }
+
+        public DriverInformation GetDriverInformation()
+        {
+            throw new NotImplementedException("IDriverConnection has not been 
bound, so cannot reconnect to Driver!");
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj 
b/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
index 307c558..b897f89 100644
--- a/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
+++ b/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
@@ -87,15 +87,22 @@ under the License.
     <Compile Include="Context\IContextMessage.cs" />
     <Compile Include="Context\IContextMessageHandler.cs" />
     <Compile Include="Context\IContextMessageSource.cs" />
+    <Compile 
Include="Evaluator\DriverConnectionConfigurationProviders\DefaultDriverReconnConfigProvider.cs"
 />
     <Compile Include="Evaluator\DefaultLocalHttpDriverConnection.cs" />
     <Compile Include="Evaluator\DefaultYarnClusterHttpDriverConnection.cs" />
     <Compile Include="Evaluator\DefaultYarnOneBoxHttpDriverConnection.cs" />
+    <Compile 
Include="Evaluator\DriverConnectionConfigurationProviders\DynamicDriverReconnConfigProvider.cs"
 />
+    <Compile 
Include="Evaluator\DriverConnectionConfigurationProviders\LocalHttpDriverReconnConfigProvider.cs"
 />
+    <Compile 
Include="Evaluator\DriverConnectionConfigurationProviders\YarnOneBoxHttpDriverReconnConfigProvider.cs"
 />
     <Compile Include="Evaluator\DriverInformation.cs" />
     <Compile Include="Evaluator\EvaluatorOperationState.cs" />
     <Compile Include="Evaluator\EvaluatorRuntimeState.cs" />
     <Compile Include="Evaluator\EvaluatorType.cs" />
     <Compile Include="Evaluator\IDriverConnection.cs" />
+    <Compile 
Include="Evaluator\DriverConnectionConfigurationProviders\IDriverReconnConfigProvider.cs"
 />
+    <Compile Include="Evaluator\MissingDriverConnection.cs" />
     <Compile Include="Evaluator\Parameters\EvaluatorConfigurationProviders.cs" 
/>
+    <Compile 
Include="Evaluator\DriverConnectionConfigurationProviders\YarnClusterHttpDriverReconnConfigProvider.cs"
 />
     <Compile Include="Events\IContextStart.cs" />
     <Compile Include="Events\IContextStop.cs" />
     <Compile Include="Exceptions\JobException.cs" />

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Driver/Bridge/DriverBridge.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Driver/Bridge/DriverBridge.cs 
b/lang/cs/Org.Apache.REEF.Driver/Bridge/DriverBridge.cs
index 64c32cf..baa8eb8 100644
--- a/lang/cs/Org.Apache.REEF.Driver/Bridge/DriverBridge.cs
+++ b/lang/cs/Org.Apache.REEF.Driver/Bridge/DriverBridge.cs
@@ -20,6 +20,8 @@ using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
 using Org.Apache.REEF.Common.Context;
+using Org.Apache.REEF.Common.Evaluator;
+using Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders;
 using Org.Apache.REEF.Driver.Context;
 using Org.Apache.REEF.Driver.Evaluator;
 using Org.Apache.REEF.Driver.Task;
@@ -30,6 +32,8 @@ using Org.Apache.REEF.Common.Evaluator.Parameters;
 using Org.Apache.REEF.Driver.Bridge.Clr2java;
 using Org.Apache.REEF.Driver.Bridge.Events;
 using Org.Apache.REEF.Driver.Defaults;
+using Org.Apache.REEF.Tang.Implementations.InjectionPlan;
+using Org.Apache.REEF.Tang.Implementations.Tang;
 
 namespace Org.Apache.REEF.Driver.Bridge
 {
@@ -141,6 +145,7 @@ namespace Org.Apache.REEF.Driver.Bridge
             [Parameter(Value = 
typeof(DriverBridgeConfigurationOptions.TraceListenersSet))] 
ISet<TraceListener> traceListeners,
             [Parameter(Value = typeof(EvaluatorConfigurationProviders))] 
ISet<IConfigurationProvider> configurationProviders,
             [Parameter(Value = 
typeof(DriverBridgeConfigurationOptions.TraceLevel))] string traceLevel,
+            IDriverReconnConfigProvider driverReconnConfigProvider,
             HttpServerHandler httpServerHandler,
             IProgressProvider progressProvider)
         {
@@ -181,7 +186,13 @@ namespace Org.Apache.REEF.Driver.Bridge
             _driverRestartCompletedHandlers = driverRestartCompletedHandlers;
             _driverRestartFailedEvaluatorHandlers = 
driverRestartFailedEvaluatorHandlers;
             _httpServerHandler = httpServerHandler;
-            _configurationProviders = configurationProviders;
+
+            // TODO[JIRA REEF-1306]: Remove after it is bound directly into 
EvaluatorConfigurationProviders.
+            _configurationProviders = new 
HashSet<IConfigurationProvider>(configurationProviders)
+            {
+                GetDriverReconnectionProvider(driverReconnConfigProvider)
+            };
+
             _progressProvider = progressProvider;
             
             _allocatedEvaluatorSubscriber = new 
ClrSystemHandler<IAllocatedEvaluator>();
@@ -204,6 +215,23 @@ namespace Org.Apache.REEF.Driver.Bridge
             _driverRestartFailedEvaluatorSubscriber = new 
ClrSystemHandler<IFailedEvaluator>();
         }
 
+        private static IDriverReconnConfigProvider 
GetDriverReconnectionProvider(
+            IDriverReconnConfigProvider driverReconnConfigProvider)
+        {
+            // If not the default, this means that the user has bound the 
newer configuration. Return it.
+            if (!(driverReconnConfigProvider is 
DefaultDriverReconnConfigProvider))
+            {
+                return driverReconnConfigProvider;
+            }
+
+            // This is done as a stop gap for deprecation because we cannot 
bind an implementation 
+            // of IDriverConnection to the driver CLRBridgeConfiguration if it 
is already bound
+            // by the user, since the driver configuration and Evaluator 
configuration will be combined
+            // at the Evaluator. We thus need to return the 
DriverReconnectionConfigurationProvider
+            // that does not bind IDriverConnection such that a TANG conflict 
does not occur.
+            return 
TangFactory.GetTang().NewInjector().GetInstance<DefaultDriverReconnConfigProvider>();
+        }
+
         public BridgeHandlerManager Subscribe()
         {
             var bridgeHandlerManager = new BridgeHandlerManager();

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Driver/DriverConfiguration.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Driver/DriverConfiguration.cs 
b/lang/cs/Org.Apache.REEF.Driver/DriverConfiguration.cs
index 1827cbf..42254db 100644
--- a/lang/cs/Org.Apache.REEF.Driver/DriverConfiguration.cs
+++ b/lang/cs/Org.Apache.REEF.Driver/DriverConfiguration.cs
@@ -19,6 +19,8 @@ using System;
 using System.Diagnostics;
 using Org.Apache.REEF.Common.Context;
 using Org.Apache.REEF.Common.Evaluator;
+using Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders;
+using Org.Apache.REEF.Common.Evaluator.Parameters;
 using Org.Apache.REEF.Driver.Bridge;
 using Org.Apache.REEF.Driver.Context;
 using Org.Apache.REEF.Driver.Evaluator;
@@ -170,10 +172,18 @@ namespace Org.Apache.REEF.Driver
 
         /// <summary>
         /// The implemenation for (attempting to) re-establish connection to 
driver
+        /// TODO[JIRA REEF-1306]: Remove.
         /// </summary>
+        [Obsolete("Deprecated in 0.15, will be removed. Please use 
DriverReconnectionConfigurationProvider instead.")]
         public static readonly OptionalImpl<IDriverConnection> 
OnDriverReconnect = new OptionalImpl<IDriverConnection>();
 
         /// <summary>
+        /// The configuration provider for driver reconnection.
+        /// </summary>
+        public static readonly OptionalImpl<IDriverReconnConfigProvider> 
DriverReconnectionConfigurationProvider =
+            new OptionalImpl<IDriverReconnConfigProvider>(); 
+
+        /// <summary>
         /// Evaluator recovery timeout for driver restart in seconds. If value 
is greater than 0, restart is enabled. The default value is -1.
         /// </summary>
         public static readonly OptionalParameter<int> 
DriverRestartEvaluatorRecoverySeconds = new OptionalParameter<int>();
@@ -230,6 +240,9 @@ namespace Org.Apache.REEF.Driver
                     
.BindNamedParameter(GenericType<DriverBridgeConfigurationOptions.TraceLevel>.Class,
 CustomTraceLevel)
                     
.BindNamedParameter(GenericType<DriverBridgeConfigurationOptions.DriverRestartEvaluatorRecoverySeconds>.Class,
                         DriverRestartEvaluatorRecoverySeconds)
+
+                    // TODO[JIRA REEF-1306]: Bind 
DriverReconnectionConfigurationProvider into EvaluatorConfigurationProviders.
+                    
.BindImplementation(GenericType<IDriverReconnConfigProvider>.Class, 
DriverReconnectionConfigurationProvider)
                     .BindImplementation(GenericType<IProgressProvider>.Class, 
ProgressProvider)
                     .Build();
             }

http://git-wip-us.apache.org/repos/asf/reef/blob/4088f3c7/lang/cs/Org.Apache.REEF.Examples.DriverRestart/DriverRestart.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Examples.DriverRestart/DriverRestart.cs 
b/lang/cs/Org.Apache.REEF.Examples.DriverRestart/DriverRestart.cs
index 7b0bdb6..fb27128 100644
--- a/lang/cs/Org.Apache.REEF.Examples.DriverRestart/DriverRestart.cs
+++ b/lang/cs/Org.Apache.REEF.Examples.DriverRestart/DriverRestart.cs
@@ -19,6 +19,7 @@ using System;
 using Org.Apache.REEF.Client.API;
 using Org.Apache.REEF.Client.Yarn;
 using Org.Apache.REEF.Common.Evaluator;
+using Org.Apache.REEF.Common.Evaluator.DriverConnectionConfigurationProviders;
 using Org.Apache.REEF.Driver;
 using Org.Apache.REEF.Tang.Annotations;
 using Org.Apache.REEF.Tang.Implementations.Tang;
@@ -62,7 +63,8 @@ namespace Org.Apache.REEF.Examples.DriverRestart
                 .Set(DriverConfiguration.OnEvaluatorAllocated, 
GenericType<HelloRestartDriver>.Class)
                 .Set(DriverConfiguration.OnEvaluatorFailed, 
GenericType<HelloRestartDriver>.Class)
                 .Set(DriverConfiguration.OnDriverRestartEvaluatorFailed, 
GenericType<HelloRestartDriver>.Class)
-                .Set(DriverConfiguration.OnDriverReconnect, 
GenericType<DefaultYarnClusterHttpDriverConnection>.Class)
+                
.Set(DriverConfiguration.DriverReconnectionConfigurationProvider, 
+                    
GenericType<YarnClusterHttpDriverReconnConfigProvider>.Class)
                 
.Set(DriverConfiguration.DriverRestartEvaluatorRecoverySeconds, (5 * 
60).ToString())
                 .Build();
 

Reply via email to