You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by we...@apache.org on 2015/01/29 21:43:05 UTC

[21/31] incubator-reef git commit: [REEF-97] Add the REEF.NET code base

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskRunningHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskRunningHandler.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskRunningHandler.cs
new file mode 100644
index 0000000..0811967
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskRunningHandler.cs
@@ -0,0 +1,54 @@
+/**
+ * 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.Driver.Task;
+using Org.Apache.Reef.Utilities.Logging;
+using Org.Apache.Reef.Tang.Annotations;
+using System;
+
+namespace Org.Apache.Reef.Driver.Defaults
+{
+    /// <summary>
+    ///  Default event handler for TaskRuntime: Logging it.
+    /// </summary>
+    public class DefaultTaskRunningHandler : IObserver<IRunningTask>
+    {
+        private static readonly Logger LOGGER = Logger.GetLogger(typeof(DefaultTaskRunningHandler));
+        
+        [Inject]
+        public DefaultTaskRunningHandler()
+        {
+        }
+
+        public void OnNext(IRunningTask runningTask)
+        {
+            LOGGER.Log(Level.Info, "Received TaskRuntime: " + runningTask.Id);
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskSuspensionHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskSuspensionHandler.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskSuspensionHandler.cs
new file mode 100644
index 0000000..328b745
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/defaults/DefaultTaskSuspensionHandler.cs
@@ -0,0 +1,53 @@
+/**
+ * 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.Common;
+using Org.Apache.Reef.Utilities.Diagnostics;
+using Org.Apache.Reef.Utilities.Logging;
+using Org.Apache.Reef.Tang.Annotations;
+using System;
+
+namespace Org.Apache.Reef.Driver.Defaults
+{
+    /// <summary>
+    /// Default event handler used for SuspendedTask: It crashes the driver.
+    /// </summary>
+    public class DefaultTaskSuspensionHandler : IObserver<ISuspendedTask>
+    {
+        [Inject]
+        public DefaultTaskSuspensionHandler()
+        {
+        }
+
+        public void OnNext(ISuspendedTask value)
+        {
+            Exceptions.Throw(new InvalidOperationException("No handler bound for SuspendedTask: " + value.Id), Logger.GetLogger(typeof(DefaultTaskSuspensionHandler)));
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorDescriptorImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorDescriptorImpl.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorDescriptorImpl.cs
new file mode 100644
index 0000000..a43337e
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorDescriptorImpl.cs
@@ -0,0 +1,218 @@
+/**
+ * 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.Common.Catalog;
+using Org.Apache.Reef.Common.Evaluator;
+using Org.Apache.Reef.Driver.Bridge;
+using Org.Apache.Reef.Utilities.Diagnostics;
+using Org.Apache.Reef.Utilities.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    public class EvaluatorDescriptorImpl : IEvaluatorDescriptor
+    {
+        private static readonly Logger LOGGER = Logger.GetLogger(typeof(EvaluatorDescriptorImpl));
+        
+        private INodeDescriptor _nodeDescriptor;
+
+        private EvaluatorType _type;
+
+        private int _megaBytes;
+
+        private int _virtualCore;
+
+        private string _rack = "default_rack";
+
+        public EvaluatorDescriptorImpl(string serializedString)
+        {
+            FromString(serializedString);
+        }
+
+        public EvaluatorDescriptorImpl(INodeDescriptor nodeDescriptor, EvaluatorType type, int megaBytes, int core)
+        {
+            _nodeDescriptor = nodeDescriptor;
+            _type = type;
+            _megaBytes = megaBytes;
+            _virtualCore = core;
+        }
+
+        public INodeDescriptor NodeDescriptor 
+        {
+            get
+            {
+                return _nodeDescriptor;
+            }
+
+            set
+            {
+            }
+        }
+
+        public EvaluatorType EvaluatorType
+        {
+            get
+            {
+                return _type;
+            }
+
+            set
+            {
+            }
+        }
+
+        public int Memory
+        {
+            get
+            {
+                return _megaBytes;
+            }
+
+            set
+            {
+            }
+        }
+
+        public int VirtualCore
+        {
+            get
+            {
+                return _virtualCore;
+            }
+
+            set
+            {
+            }
+        }
+
+        public string Rack
+        {
+            get
+            {
+                return _rack;
+            }
+
+            set
+            {
+            }
+        }
+
+        public void FromString(string str)
+        {
+            Dictionary<string, string> settings = new Dictionary<string, string>();
+            string[] components = str.Split(',');
+            foreach (string component in components)
+            {
+                string[] pair = component.Trim().Split('=');
+                if (pair == null || pair.Length != 2)
+                {
+                    var e = new ArgumentException("invalid component to be used as key-value pair:", component);
+                    Exceptions.Throw(e, LOGGER);
+                }
+                settings.Add(pair[0], pair[1]);
+            }
+            string ipAddress;
+            if (!settings.TryGetValue("IP", out ipAddress))
+            {
+                Exceptions.Throw(new ArgumentException("cannot find IP entry"), LOGGER); 
+            }
+            ipAddress = ipAddress.Split('/').Last();
+            string port;
+            if (!settings.TryGetValue("Port", out port))
+            {
+                Exceptions.Throw(new ArgumentException("cannot find Port entry"), LOGGER); 
+            }
+            int portNumber = 0;
+            int.TryParse(port, out portNumber);
+            string hostName;
+            if (!settings.TryGetValue("HostName", out hostName))
+            {
+                Exceptions.Throw(new ArgumentException("cannot find HostName entry"), LOGGER); 
+            }
+            string memory;
+            if (!settings.TryGetValue("Memory", out memory))
+            {
+                Exceptions.Throw(new ArgumentException("cannot find Memory entry"), LOGGER);
+            }
+            int memoryInMegaBytes = 0;
+            int.TryParse(memory, out memoryInMegaBytes);
+
+            string core;
+            if (!settings.TryGetValue("Core", out core))
+            {
+                Exceptions.Throw(new ArgumentException("cannot find Core entry"), LOGGER);
+            }
+            int vCore = 0;
+            int.TryParse(core, out vCore);
+
+            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(ipAddress), portNumber);
+
+            _nodeDescriptor = new NodeDescriptorImpl();
+            _nodeDescriptor.InetSocketAddress = ipEndPoint;
+            _nodeDescriptor.HostName = hostName;        
+            _type = EvaluatorType.CLR;
+            _megaBytes = memoryInMegaBytes;
+            _virtualCore = vCore;
+        }
+
+        public void SetType(EvaluatorType type)
+        {
+            lock (this)
+            {
+                if (_type != EvaluatorType.UNDECIDED)
+                {
+                    var e = new InvalidOperationException("Cannot change a set evaluator type: " + _type);
+                    Exceptions.Throw(e, LOGGER);
+                }
+                _type = type;
+            }
+        }
+
+        public override bool Equals(object obj)
+        {
+            EvaluatorDescriptorImpl other = obj as EvaluatorDescriptorImpl;
+            if (other == null)
+            {
+                return false;
+            }
+
+            return EquivalentMemory(other);
+            // we don't care about rack now;
+            // && string.Equals(_rack, other.Rack, StringComparison.OrdinalIgnoreCase);
+        }
+
+        public override int GetHashCode()
+        {
+            return base.GetHashCode();
+        }
+
+        private bool EquivalentMemory(EvaluatorDescriptorImpl other)
+        {
+            int granularity = ClrHandlerHelper.MemoryGranularity == 0
+                                  ? Constants.DefaultMemoryGranularity
+                                  : ClrHandlerHelper.MemoryGranularity;
+            int m1 = (Memory - 1) / granularity;
+            int m2 = (other.Memory - 1 ) / granularity;
+            return (m1 == m2);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequest.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequest.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequest.cs
new file mode 100644
index 0000000..fda7d5b
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequest.cs
@@ -0,0 +1,108 @@
+/**
+ * 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.Common.Capabilities;
+using Org.Apache.Reef.Common.Catalog;
+using Org.Apache.Reef.Driver.Evaluator;
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace Org.Apache.Reef.Driver.Bridge
+{
+    [DataContract]
+    public class EvaluatorRequest : IEvaluatorRequest
+    {
+        public EvaluatorRequest() 
+            : this(0, 0, 1, string.Empty, Guid.NewGuid().ToString("N"))
+        {
+        }
+
+        public EvaluatorRequest(int number, int megaBytes) 
+            : this(number, megaBytes, 1, string.Empty, Guid.NewGuid().ToString("N"))
+        {
+        }
+
+        public EvaluatorRequest(int number, int megaBytes, int core)
+            : this(number, megaBytes, core, string.Empty, Guid.NewGuid().ToString("N"))
+        {
+        }
+
+        public EvaluatorRequest(int number, int megaBytes, string rack)
+            : this(number, megaBytes, 1, rack, Guid.NewGuid().ToString("N"))
+        {
+        }
+
+        public EvaluatorRequest(int number, int megaBytes, int core, string rack)
+            : this(number, megaBytes, core, rack, Guid.NewGuid().ToString("N"))
+        {
+        }
+
+        public EvaluatorRequest(int number, int megaBytes, int core, string rack, string evaluatorBatchId)
+        {
+            Number = number;
+            MemoryMegaBytes = megaBytes;
+            VirtualCore = core;
+            Rack = rack;
+            EvaluatorBatchId = evaluatorBatchId;
+        }
+
+        public EvaluatorRequest(int number, int megaBytes, int core, List<ICapability> capabilitieses, IResourceCatalog catalog)
+        {
+            Number = number;
+            MemoryMegaBytes = megaBytes;
+            Capabilities = capabilitieses;
+            VirtualCore = core;
+            Catalog = catalog;
+            EvaluatorBatchId = Guid.NewGuid().ToString("N");
+        }
+
+        [DataMember]
+        public string InstanceId { get; set; }
+
+        [DataMember]
+        public int MemoryMegaBytes { get; set; }
+
+        [DataMember]
+        public int Number { get; set; }
+        
+        [DataMember]
+        public int VirtualCore { get; set; }
+
+        [DataMember]
+        public string Rack { get; set; }
+
+        [DataMember]
+        public string EvaluatorBatchId { get; set; }
+
+        public List<ICapability> Capabilities { get; set; }
+
+        public IResourceCatalog Catalog { get; set; }
+
+        public static EvaluatorRequestBuilder NewBuilder()
+        {
+            return new EvaluatorRequestBuilder();
+        }
+
+        public static EvaluatorRequestBuilder NewBuilder(EvaluatorRequest request)
+        {
+            return new EvaluatorRequestBuilder(request);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequestBuilder.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequestBuilder.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequestBuilder.cs
new file mode 100644
index 0000000..475d9af
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/EvaluatorRequestBuilder.cs
@@ -0,0 +1,60 @@
+/**
+ * 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.Common.Capabilities;
+using Org.Apache.Reef.Common.Catalog;
+using Org.Apache.Reef.Driver.Bridge;
+using System.Collections.Generic;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    public class EvaluatorRequestBuilder
+    {
+        public EvaluatorRequestBuilder(EvaluatorRequest request)
+        {
+            foreach (ICapability capability in request.Capabilities)
+            {
+                Capabilities.Add(capability);
+            }
+            Number = request.Number;
+            Catalog = request.Catalog;
+            MegaBytes = request.MemoryMegaBytes;
+            VirtualCore = request.VirtualCore;
+        }
+
+        internal EvaluatorRequestBuilder()
+        {
+        }
+
+        public int Number { get; set; }
+
+        public List<ICapability> Capabilities { get; set; }
+
+        public IResourceCatalog Catalog { get; set; }
+
+        public int MegaBytes { get; set; }
+
+        public int VirtualCore { get; set; }
+
+        public EvaluatorRequest Build()
+        {
+            return new EvaluatorRequest(Number, MegaBytes, VirtualCore, Capabilities, Catalog);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IAllocatedEvaluator.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IAllocatedEvaluator.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IAllocatedEvaluator.cs
new file mode 100644
index 0000000..ce2bf08
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IAllocatedEvaluator.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 Org.Apache.Reef.Common;
+using Org.Apache.Reef.Common.Evaluator;
+using Org.Apache.Reef.Utilities;
+using System;
+using System.Net;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    /// <summary>
+    /// Represents an Evaluator that is allocated, but is not running yet.
+    /// </summary>
+    public interface IAllocatedEvaluator : IDisposable, IIdentifiable, IContextSubmittable, IContextAndTaskSubmittable
+    {
+        EvaluatorType Type { get; set; }
+
+        string NameServerInfo { get; set; }
+
+        string EvaluatorBatchId { get; set; }
+
+        IEvaluatorDescriptor GetEvaluatorDescriptor();
+
+        /// <summary>
+        /// Puts the given file into the working directory of the Evaluator.
+        /// </summary>
+        /// <param name="file">the file to be copied</param>
+        void AddFile(string file);
+
+        /// <summary>
+        /// Puts the given file into the working directory of the Evaluator and adds it to its classpath.
+        /// </summary>
+        /// <param name="file">the file to be copied</param>
+        void AddLibrary(string file);
+
+        void AddFileResource(string file);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/ICompletedEvaluator.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/ICompletedEvaluator.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/ICompletedEvaluator.cs
new file mode 100644
index 0000000..5c5fb62
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/ICompletedEvaluator.cs
@@ -0,0 +1,30 @@
+/**
+ * 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.Utilities;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    /// <summary>
+    /// Represents an Evaluator that has completed
+    /// </summary>
+    public interface ICompletedEvaluator : IIdentifiable
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorDescriptor.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorDescriptor.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorDescriptor.cs
new file mode 100644
index 0000000..29e822f
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorDescriptor.cs
@@ -0,0 +1,57 @@
+/**
+ * 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.Common.Catalog;
+using Org.Apache.Reef.Common.Evaluator;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    /// <summary>
+    ///  Metadata about an Evaluator.
+    /// </summary>
+    public interface IEvaluatorDescriptor
+    {
+        /// <summary>
+        ///  NodeDescriptor of the node where this Evaluator is running.
+        /// </summary>
+        INodeDescriptor NodeDescriptor { get; set; }
+
+        /// <summary>
+        /// type of Evaluator.
+        /// </summary>
+        EvaluatorType EvaluatorType { get; set; }
+
+        /// <summary>
+        /// the amount of memory allocated to this Evaluator.
+        /// </summary>
+        int Memory { get; set; }
+
+        /// <summary>
+        /// the virtual core allocated to this Evaluator.
+        /// </summary>
+        int VirtualCore { get; set; }
+
+        /// <summary>
+        /// rack on which the evaluator was allocated
+        /// </summary>
+        string Rack { get; set; }
+
+        void FromString(string str);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequest .cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequest .cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequest .cs
new file mode 100644
index 0000000..4a9633a
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequest .cs	
@@ -0,0 +1,42 @@
+/**
+ * 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.Common.Capabilities;
+using Org.Apache.Reef.Common.Catalog;
+using System.Collections.Generic;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    public interface IEvaluatorRequest
+    {
+        int MemoryMegaBytes { get; set; }
+
+        int Number { get;  set; }
+
+        int VirtualCore { get; set; }
+
+        string Rack { get; set; }
+
+        string EvaluatorBatchId { get; set; }
+
+        List<ICapability> Capabilities { get; set; }
+
+        IResourceCatalog Catalog { get; set; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequestor.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequestor.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequestor.cs
new file mode 100644
index 0000000..e562f96
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IEvaluatorRequestor.cs
@@ -0,0 +1,47 @@
+/**
+ * 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.Collections.Generic;
+
+using Org.Apache.Reef.Common.Catalog;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    /// <summary>
+    /// Interface through which Evaluators can be requested.
+    /// </summary>
+    public interface IEvaluatorRequestor
+    {
+        /// <summary>
+        /// Access to the {@link ResourceCatalog} for the cluster this Factory has access to
+        /// </summary>
+        IResourceCatalog ResourceCatalog { get; set; }
+
+        /// <summary>
+        /// Map between user evaluator id and evaluator information
+        /// </summary>
+        //IDictionary<string, IEvaluatorDescriptor> Evaluators { get; }
+
+        /// <summary>
+        /// Submit the request for new evaluator. The response will surface in the AllocatedEvaluator message handler.
+        /// </summary>
+        /// <param name="request"></param>
+        void Submit(IEvaluatorRequest request);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IFailedEvaluator.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IFailedEvaluator.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IFailedEvaluator.cs
new file mode 100644
index 0000000..328d3ca
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/evaluator/IFailedEvaluator.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.Common.Exceptions;
+using Org.Apache.Reef.Driver.Bridge;
+using Org.Apache.Reef.Driver.Task;
+using Org.Apache.Reef.Utilities;
+using System.Collections.Generic;
+
+namespace Org.Apache.Reef.Driver.Evaluator
+{
+    /// <summary>
+    /// Represents an Evaluator that became unavailable.
+    /// </summary>
+    public interface IFailedEvaluator : IIdentifiable
+    {
+        EvaluatorException EvaluatorException { get; set; }
+
+        List<FailedContext> FailedContexts { get; set; }
+
+        Optional<IFailedTask> FailedTask { get; set; }
+
+        IEvaluatorRequestor GetEvaluatorRequetor();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/packages.config
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/packages.config b/lang/cs/Source/REEF/reef-common/ReefDriver/packages.config
new file mode 100644
index 0000000..933b7e1
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/packages.config
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
+<packages>
+  <package id="Microsoft.Hadoop.Avro" version="1.4.0.0" targetFramework="net45" />
+  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
+  <package id="protobuf-net" version="2.0.0.668" targetFramework="net45" />
+</packages>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/task/ICompletedTask.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/task/ICompletedTask.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/task/ICompletedTask.cs
new file mode 100644
index 0000000..336fd5c
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/task/ICompletedTask.cs
@@ -0,0 +1,29 @@
+/**
+ * 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.Driver.Context;
+using Org.Apache.Reef.Utilities;
+
+namespace Org.Apache.Reef.Driver.Task
+{
+    public interface ICompletedTask : IMessage, IIdentifiable
+    {
+         IActiveContext ActiveContext { get; set; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/task/IFailedTask.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/task/IFailedTask.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/task/IFailedTask.cs
new file mode 100644
index 0000000..f85f28d
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/task/IFailedTask.cs
@@ -0,0 +1,30 @@
+/**
+ * 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.Common.Api;
+using Org.Apache.Reef.Driver.Context;
+using Org.Apache.Reef.Utilities;
+
+namespace Org.Apache.Reef.Driver.Task
+{
+    public interface IFailedTask : IAbstractFailure
+    {
+        Optional<IActiveContext> GetActiveContext();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/task/IRunningTask.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/task/IRunningTask.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/task/IRunningTask.cs
new file mode 100644
index 0000000..7870777
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/task/IRunningTask.cs
@@ -0,0 +1,65 @@
+/**
+ * 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.Driver.Context;
+using Org.Apache.Reef.Utilities;
+using System;
+
+namespace Org.Apache.Reef.Driver.Task
+{
+    /// <summary>
+    /// Represents a running Task
+    /// </summary>
+    public interface IRunningTask : IIdentifiable, IDisposable
+    {
+        /// <summary>
+        /// the context the task is running on.
+        /// </summary>
+        IActiveContext ActiveContext { get; set; }
+
+        /// <summary>
+        /// Sends the message to the running task.
+        /// </summary>
+        /// <param name="message"></param>
+        void OnNext(byte[] message);
+
+        /// <summary>
+        /// Sends the message
+        /// </summary>
+        /// <param name="message"></param>
+        void Send(byte[] message);
+
+        /// <summary>
+        ///  Signal the task to suspend.
+        /// </summary>
+        /// <param name="message">a message that is sent to the Task.</param>
+        void Suspend(byte[] message);
+
+        /// <summary>
+        /// Sends the message to the running task.
+        /// </summary>
+        void Suspend();
+
+        /// <summary>
+        /// Signal the task to shut down.
+        /// </summary>
+        /// <param name="message">a message that is sent to the Task.</param>
+        void Dispose(byte[] message);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/task/ISuspendedTask.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/task/ISuspendedTask.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/task/ISuspendedTask.cs
new file mode 100644
index 0000000..c6b769a
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/task/ISuspendedTask.cs
@@ -0,0 +1,29 @@
+/**
+ * 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.Driver.Context;
+using Org.Apache.Reef.Utilities;
+
+namespace Org.Apache.Reef.Driver
+{
+    public interface ISuspendedTask : IMessage, IIdentifiable
+    {
+        IActiveContext ActiveContext { get; set; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/task/ITaskMessage.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/task/ITaskMessage.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/task/ITaskMessage.cs
new file mode 100644
index 0000000..e6fb7a1
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/task/ITaskMessage.cs
@@ -0,0 +1,28 @@
+/**
+ * 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.Task
+{
+    public interface ITaskMessage
+    {
+        byte[] Message { get; set; }
+
+        string TaskId { get; set; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-common/ReefDriver/task/RunningTaskImpl.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-common/ReefDriver/task/RunningTaskImpl.cs b/lang/cs/Source/REEF/reef-common/ReefDriver/task/RunningTaskImpl.cs
new file mode 100644
index 0000000..277e742
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-common/ReefDriver/task/RunningTaskImpl.cs
@@ -0,0 +1,127 @@
+/**
+ * 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.Common;
+using Org.Apache.Reef.Common.ProtoBuf.EvaluatorRunTimeProto;
+using Org.Apache.Reef.Driver.Context;
+using Org.Apache.Reef.Utilities.Logging;
+using System.Globalization;
+
+namespace Org.Apache.Reef.Driver.Task
+{
+   public class RunningTaskImpl : IRunningTask
+   {
+       private static readonly Logger LOGGER = Logger.GetLogger(typeof(RunningTaskImpl));
+       
+       private string _id;
+
+       private EvaluatorManager _evaluatorManager;
+
+       private EvaluatorContext _evaluatorContext;
+
+       public RunningTaskImpl(EvaluatorManager evaluatorManager, string taskId, EvaluatorContext evaluatorContext)
+       {
+           LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "INIT: TaskRuntime id [{0}] on evaluator id [{1}]", taskId, evaluatorManager.Id));
+           _id = taskId;
+           _evaluatorManager = evaluatorManager;
+           _evaluatorContext = evaluatorContext;
+       }
+
+       public string Id
+       {
+           get
+           {
+               return _id;
+           }
+
+           set
+           {
+           }
+       }
+
+       public IActiveContext ActiveContext
+       {
+           get
+           {
+               return _evaluatorContext;
+           }
+
+           set
+           {
+           }
+       }
+
+       public void Dispose()
+       {
+           LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "DISPOSE: TaskRuntime id [{0}] on evaluator id [{1}]", _id, _evaluatorManager.Id));
+           ContextControlProto contextControlProto = new ContextControlProto();
+           contextControlProto.stop_task = new StopTaskProto();
+           _evaluatorManager.Handle(contextControlProto);
+       }
+
+       public void Dispose(byte[] message)
+       {
+           LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "DISPOSE: TaskRuntime id [{0}] on evaluator id [{1}] with message", _id, _evaluatorManager.Id));
+           ContextControlProto contextControlProto = new ContextControlProto();
+           contextControlProto.stop_task = new StopTaskProto();
+           contextControlProto.task_message = message;
+           _evaluatorManager.Handle(contextControlProto);
+       }
+
+       public void OnNext(byte[] message)
+       {
+           LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "MESSAGE: TaskRuntime id [{0}] on evaluator id [{1}]", _id, _evaluatorManager.Id));
+           ContextControlProto contextControlProto = new ContextControlProto();
+           contextControlProto.task_message = message;
+           _evaluatorManager.Handle(contextControlProto);
+       }
+
+       public void Suspend(byte[] message)
+       {
+           LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "SUSPEND: TaskRuntime id [{0}] on evaluator id [{1}] with message", _id, _evaluatorManager.Id));
+           ContextControlProto contextControlProto = new ContextControlProto();
+           contextControlProto.suspend_task = new SuspendTaskProto();
+           contextControlProto.task_message = message;
+           _evaluatorManager.Handle(contextControlProto);
+       }
+
+       public void Suspend()
+       {
+           LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "SUSPEND: TaskRuntime id [{0}] on evaluator id [{1}]", _id, _evaluatorManager.Id));
+           ContextControlProto contextControlProto = new ContextControlProto();
+           contextControlProto.suspend_task = new SuspendTaskProto();
+           _evaluatorManager.Handle(contextControlProto);
+       }
+
+       public override string ToString()
+       {
+           return "TaskRuntime with taskId = " + _id;
+       }
+
+       public override int GetHashCode()
+       {
+           return _id.GetHashCode();
+       }
+
+       public void Send(byte[] message)
+       {
+           LOGGER.Log(Level.Info, "RunningTaskImpl.Send() is called");
+       }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloCLRBridge.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloCLRBridge.csproj b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloCLRBridge.csproj
new file mode 100644
index 0000000..09c8b0b
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloCLRBridge.csproj
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{A78DD8E8-31D0-4506-8738-DAA9DA86D55B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Org.Apache.Reef.Examples.HelloCLRBridge</RootNamespace>
+    <AssemblyName>Org.Apache.Reef.Examples.HelloCLRBridge</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\bin\Debug\Org.Apache.Reef.Examples.HelloCLRBridge\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\bin\Release\Microsoft.Reef.Examples.HelloCLRBridge\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="handlers\AnotherHelloAllocatedEvaluatorHandler.cs" />
+    <Compile Include="handlers\HelloActiveContextHandler.cs" />
+    <Compile Include="handlers\HelloAllocatedEvaluatorHandler.cs" />
+    <Compile Include="handlers\HelloCompletedEvaluatorHandler.cs" />
+    <Compile Include="handlers\HelloDriverRestartActiveContextHandler.cs" />
+    <Compile Include="handlers\HelloDriverRestartRunningTaskHandler.cs" />
+    <Compile Include="handlers\HelloEvaluatorRequestorHandler.cs" />
+    <Compile Include="handlers\HelloFailedEvaluatorHandler.cs" />
+    <Compile Include="handlers\HelloFailedTaskHandler.cs" />
+    <Compile Include="handlers\HelloHttpHandler.cs" />
+    <Compile Include="handlers\HelloRestartHandler.cs" />
+    <Compile Include="handlers\HelloRunningTaskHandler.cs" />
+    <Compile Include="handlers\HelloSimpleEventHandlers.cs" />
+    <Compile Include="handlers\HelloStartHandler.cs" />
+    <Compile Include="handlers\HelloTaskMessageHandler.cs" />
+    <Compile Include="HelloTraceListener.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Tang\Tang\Tang.csproj">
+      <Project>{97dbb573-3994-417a-9f69-ffa25f00d2a6}</Project>
+      <Name>Tang</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\Utilities\Utilities.csproj">
+      <Project>{79e7f89a-1dfb-45e1-8d43-d71a954aeb98}</Project>
+      <Name>Utilities</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\WAKE\Wake\Wake.csproj">
+      <Project>{cdfb3464-4041-42b1-9271-83af24cd5008}</Project>
+      <Name>Wake</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\reef-common\ReefCommon\ReefCommon.csproj">
+      <Project>{545a0582-4105-44ce-b99c-b1379514a630}</Project>
+      <Name>ReefCommon</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\reef-common\ReefDriver\ReefDriver.csproj">
+      <Project>{a6baa2a7-f52f-4329-884e-1bcf711d6805}</Project>
+      <Name>ReefDriver</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\reef-io\NetWork\NetWork.csproj">
+      <Project>{883ce800-6a6a-4e0a-b7fe-c054f4f2c1dc}</Project>
+      <Name>NetWork</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\reef-tasks\Tasks\Tasks.csproj">
+      <Project>{75503f90-7b82-4762-9997-94b5c68f15db}</Project>
+      <Name>Tasks</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloTraceListener.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloTraceListener.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloTraceListener.cs
new file mode 100644
index 0000000..18bcd7b
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/HelloTraceListener.cs
@@ -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.
+ */
+
+using Org.Apache.Reef.Tang.Annotations;
+using System.Diagnostics;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    /// <summary>
+    /// This is a sample implemenation on how custom trace listner can be implemented
+    /// </summary>
+    public class HelloTraceListener : TraceListener
+    {
+        private TraceListener _listener;
+
+        [Inject]
+        public HelloTraceListener()
+        {
+            _listener = new ConsoleTraceListener();
+        }
+
+        public override void Write(string message)
+        {
+            _listener.Write("[helloTrace]" + message );
+        }
+
+        public override void WriteLine(string message)
+        {
+            _listener.WriteLine("[helloTrace]" + message);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/Properties/AssemblyInfo.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..6c1a298
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/Properties/AssemblyInfo.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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HelloCLRBridge")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HelloCLRBridge")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("aedd2853-36a1-4a95-ac5c-1535374fa90c")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/AnotherHelloAllocatedEvaluatorHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/AnotherHelloAllocatedEvaluatorHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/AnotherHelloAllocatedEvaluatorHandler.cs
new file mode 100644
index 0000000..5fff7b0
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/AnotherHelloAllocatedEvaluatorHandler.cs
@@ -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.
+ */
+
+using Org.Apache.Reef.Driver.Evaluator;
+using Org.Apache.Reef.Tang.Annotations;
+using System;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    public class AnotherHelloAllocatedEvaluatorHandler : IObserver<IAllocatedEvaluator>
+    {
+        [Inject]
+        public AnotherHelloAllocatedEvaluatorHandler()
+        {
+        }
+
+        public void OnNext(IAllocatedEvaluator allocatedEvaluator)
+        {
+            Console.WriteLine("I am just here for the ride.");
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloActiveContextHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloActiveContextHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloActiveContextHandler.cs
new file mode 100644
index 0000000..98cf687
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloActiveContextHandler.cs
@@ -0,0 +1,82 @@
+/**
+ * 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.Driver.Context;
+using Org.Apache.Reef.Driver.Evaluator;
+using Org.Apache.Reef.Tasks;
+using Org.Apache.Reef.Tang.Annotations;
+using Org.Apache.Reef.Tang.Formats;
+using Org.Apache.Reef.Tang.Interface;
+using Org.Apache.Reef.Tang.Util;
+using System;
+using System.Globalization;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    public class HelloActiveContextHandler : IObserver<IActiveContext>
+    {
+        [Inject]
+        public HelloActiveContextHandler()
+        {
+        }
+
+        public void OnNext(IActiveContext activeContext)
+        {
+            Console.WriteLine(
+                string.Format(
+                    CultureInfo.InvariantCulture,
+                    "Active context {0} received from evaluator {1}",
+                    activeContext.Id,
+                    activeContext.EvaluatorId));
+
+            IEvaluatorDescriptor evaluatorDescriptor = activeContext.EvaluatorDescriptor;
+            string ipAddress = evaluatorDescriptor.NodeDescriptor.InetSocketAddress.Address.ToString();
+            int port = evaluatorDescriptor.NodeDescriptor.InetSocketAddress.Port;
+            string hostName = evaluatorDescriptor.NodeDescriptor.HostName;
+
+            Console.WriteLine(
+                string.Format(
+                CultureInfo.InvariantCulture, 
+                "The running evaluator is assigned with {0} MB of memory and is running at ip: {1} and port {2}, with hostname {3}", 
+                evaluatorDescriptor.Memory, 
+                ipAddress, 
+                port, 
+                hostName));
+
+            IConfiguration taskConfiguration = TaskConfiguration.ConfigurationModule
+                .Set(TaskConfiguration.Identifier, "bridgeCLRHelloTask_" + DateTime.Now.Ticks)
+                .Set(TaskConfiguration.Task, GenericType<HelloTask>.Class)
+                .Set(TaskConfiguration.OnMessage, GenericType<HelloTask.HelloDriverMessageHandler>.Class)
+                .Set(TaskConfiguration.OnSendMessage, GenericType<HelloTaskMessage>.Class)
+                .Build();
+
+            activeContext.SubmitTask(taskConfiguration);
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloAllocatedEvaluatorHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloAllocatedEvaluatorHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloAllocatedEvaluatorHandler.cs
new file mode 100644
index 0000000..a4e4d46
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloAllocatedEvaluatorHandler.cs
@@ -0,0 +1,131 @@
+/**
+ * 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.Common.io;
+using Org.Apache.Reef.Driver.Bridge;
+using Org.Apache.Reef.Driver.Context;
+using Org.Apache.Reef.Driver.Evaluator;
+using Org.Apache.Reef.IO.Network.Naming;
+using Org.Apache.Reef.Services;
+using Org.Apache.Reef.Tasks;
+using Org.Apache.Reef.Utilities;
+using Org.Apache.Reef.Tang.Annotations;
+using Org.Apache.Reef.Tang.Implementations;
+using Org.Apache.Reef.Tang.Implementations.Configuration;
+using Org.Apache.Reef.Tang.Interface;
+using Org.Apache.Reef.Tang.Util;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Net;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    public class HelloAllocatedEvaluatorHandler : IObserver<IAllocatedEvaluator>
+    {
+        [Inject]
+        public HelloAllocatedEvaluatorHandler()
+        {
+        }
+
+        public void OnNext(IAllocatedEvaluator allocatedEvaluator)
+        {
+            string control = string.Empty;
+
+            ISet<string> arguments = ClrHandlerHelper.GetCommandLineArguments();
+
+            if (arguments != null && arguments.Any())
+            {
+                foreach (string argument in arguments)
+                {
+                    Console.WriteLine("testing argument: " + argument);
+                }
+
+                control = arguments.Last();
+            }
+
+            IEvaluatorDescriptor descriptor = allocatedEvaluator.GetEvaluatorDescriptor();
+
+            IConfiguration serviceConfiguration = ServiceConfiguration.ConfigurationModule
+                .Set(ServiceConfiguration.Services, GenericType<HelloService>.Class)
+                .Build();
+
+            IConfiguration contextConfiguration = ContextConfiguration.ConfigurationModule
+                .Set(ContextConfiguration.Identifier, "bridgeHelloCLRContextId_" + Guid.NewGuid().ToString("N"))
+                .Build();
+
+            IConfiguration taskConfiguration = TaskConfiguration.ConfigurationModule
+                .Set(TaskConfiguration.Identifier, "bridgeHelloCLRTaskId_" + Guid.NewGuid().ToString("N"))
+                .Set(TaskConfiguration.Task, GenericType<HelloTask>.Class)
+                .Set(TaskConfiguration.OnMessage, GenericType<HelloTask.HelloDriverMessageHandler>.Class)
+                .Set(TaskConfiguration.OnSendMessage, GenericType<HelloTaskMessage>.Class)
+                .Build();
+
+            IConfiguration mergedTaskConfiguration = taskConfiguration;
+
+            if (allocatedEvaluator.NameServerInfo != null)
+            {
+                IPEndPoint nameServerEndpoint = NetUtilities.ParseIpEndpoint(allocatedEvaluator.NameServerInfo);
+
+                IConfiguration nameClientConfiguration = TangFactory.GetTang().NewConfigurationBuilder(
+                    NamingConfiguration.ConfigurationModule
+                                       .Set(NamingConfiguration.NameServerAddress, nameServerEndpoint.Address.ToString())
+                                       .Set(NamingConfiguration.NameServerPort,
+                                            nameServerEndpoint.Port.ToString(CultureInfo.InvariantCulture))
+                                       .Build())
+                                                                    .BindImplementation(GenericType<INameClient>.Class,
+                                                                                        GenericType<NameClient>.Class)
+                                                                    .Build();
+
+                mergedTaskConfiguration = Configurations.Merge(taskConfiguration, nameClientConfiguration);
+            }
+
+            string ipAddress = descriptor.NodeDescriptor.InetSocketAddress.Address.ToString();
+            int port = descriptor.NodeDescriptor.InetSocketAddress.Port;
+            string hostName = descriptor.NodeDescriptor.HostName;
+            Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "Alloated evaluator {0} with ip {1}:{2}. Hostname is {3}", allocatedEvaluator.Id, ipAddress, port, hostName));
+            Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "Evaluator is assigned with {0} MB of memory and {1} cores.", descriptor.Memory, descriptor.VirtualCore));
+
+            if (control.Equals("submitContext", StringComparison.OrdinalIgnoreCase))
+            {
+                allocatedEvaluator.SubmitContext(contextConfiguration);
+            }
+            else if (control.Equals("submitContextAndServiceAndTask", StringComparison.OrdinalIgnoreCase))
+            {
+                allocatedEvaluator.SubmitContextAndServiceAndTask(contextConfiguration, serviceConfiguration, mergedTaskConfiguration);
+            }
+            else
+            {
+                // default behavior
+                allocatedEvaluator.SubmitContextAndTask(contextConfiguration, mergedTaskConfiguration);
+            }
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloCompletedEvaluatorHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloCompletedEvaluatorHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloCompletedEvaluatorHandler.cs
new file mode 100644
index 0000000..3eeef00
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloCompletedEvaluatorHandler.cs
@@ -0,0 +1,59 @@
+/**
+ * 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.Driver.Context;
+using Org.Apache.Reef.Driver.Evaluator;
+using Org.Apache.Reef.Driver.Task;
+using Org.Apache.Reef.Utilities;
+using Org.Apache.Reef.Tang.Annotations;
+using System;
+using System.Globalization;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge.Handlers
+{
+    /// <summary>
+    /// Sample implementaion of RunningTaskHandler
+    /// </summary>
+    public class HelloCompletedEvaluatorHandler : IObserver<ICompletedEvaluator>
+    {
+        [Inject]
+        public HelloCompletedEvaluatorHandler()
+        {
+        }
+
+        public void OnNext(ICompletedEvaluator completedEvaluator)
+        {
+            string messageStr = string.Format(
+                CultureInfo.InvariantCulture,
+                "HelloCompletedEvaluatorHandler: Evaluator [{0}] is done.",
+                completedEvaluator.Id);
+            Console.WriteLine(messageStr);
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartActiveContextHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartActiveContextHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartActiveContextHandler.cs
new file mode 100644
index 0000000..f60daf2
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartActiveContextHandler.cs
@@ -0,0 +1,69 @@
+/**
+ * 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.Driver.Context;
+using Org.Apache.Reef.Driver.Evaluator;
+using Org.Apache.Reef.Tang.Annotations;
+using System;
+using System.Globalization;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    public class HelloDriverRestartActiveContextHandler : IObserver<IActiveContext>
+    {
+        [Inject]
+        public HelloDriverRestartActiveContextHandler()
+        {
+        }
+
+        public void OnNext(IActiveContext activeContext)
+        {
+            Console.WriteLine(
+                string.Format(
+                    CultureInfo.InvariantCulture,
+                    "Active context {0} received after driver restart, from evaluator {1}",
+                    activeContext.Id,
+                    activeContext.EvaluatorId));
+
+            IEvaluatorDescriptor evaluatorDescriptor = activeContext.EvaluatorDescriptor;
+            string ipAddress = evaluatorDescriptor.NodeDescriptor.InetSocketAddress.Address.ToString();
+            int port = evaluatorDescriptor.NodeDescriptor.InetSocketAddress.Port;
+            string hostName = evaluatorDescriptor.NodeDescriptor.HostName;
+
+            Console.WriteLine(
+                string.Format(
+                CultureInfo.InvariantCulture, 
+                "The running evaluator allocated by previous driver is assigned with {0} MB of memory and is running at ip: {1} and port {2}, with hostname {3}", 
+                evaluatorDescriptor.Memory, 
+                ipAddress, 
+                port, 
+                hostName));
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartRunningTaskHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartRunningTaskHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartRunningTaskHandler.cs
new file mode 100644
index 0000000..26f72b8
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloDriverRestartRunningTaskHandler.cs
@@ -0,0 +1,67 @@
+/**
+ * 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 System.Globalization;
+using Org.Apache.Reef.Driver.Context;
+using Org.Apache.Reef.Driver.Task;
+using Org.Apache.Reef.Utilities;
+using Org.Apache.Reef.Tang.Annotations;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge.Handlers
+{
+    /// <summary>
+    /// Sample implementaion of RunningTaskHandler
+    /// </summary>
+    public class HelloDriverRestartRunningTaskHandler : IObserver<IRunningTask>
+    {
+        [Inject]
+        public HelloDriverRestartRunningTaskHandler()
+        {
+        }
+
+        public void OnNext(IRunningTask runningTask)
+        {
+            IActiveContext context = runningTask.ActiveContext;
+
+            Console.WriteLine(string.Format(
+                CultureInfo.InvariantCulture,
+                "HelloDriverRestartRunningTaskHandler: Task [{0}] is running after driver restart. Evaluator id: [{1}].",
+                runningTask.Id,
+                context.EvaluatorId));
+
+            runningTask.Send(ByteUtilities.StringToByteArrays(
+                string.Format(
+                CultureInfo.InvariantCulture,
+                "Hello, task {0}! Glad to know that you are still running in Evaluator {1} after driver restart!",
+                runningTask.Id,
+                context.EvaluatorId)));
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloEvaluatorRequestorHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloEvaluatorRequestorHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloEvaluatorRequestorHandler.cs
new file mode 100644
index 0000000..08f2308
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloEvaluatorRequestorHandler.cs
@@ -0,0 +1,65 @@
+/**
+ * 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.Driver.Bridge;
+using Org.Apache.Reef.Driver.Evaluator;
+using System;
+
+using Org.Apache.Reef.Tang.Annotations;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    public class HelloEvaluatorRequestorHandler : IObserver<IEvaluatorRequestor>
+    {
+        [Inject]
+        public HelloEvaluatorRequestorHandler()
+        {
+        }
+
+        public void OnNext(IEvaluatorRequestor evalutorRequestor)
+        {
+            int evaluatorsNumber = 1;
+            int memory = 512;
+            int core = 2;
+            string rack = "WonderlandRack";
+            string evaluatorBatchId = "evaluatorThatRequires512MBofMemory";
+            EvaluatorRequest request = new EvaluatorRequest(evaluatorsNumber, memory, core, rack, evaluatorBatchId);
+
+            evalutorRequestor.Submit(request);
+
+            evaluatorsNumber = 1;
+            memory = 1999;
+            core = 2;
+            rack = "WonderlandRack";
+            evaluatorBatchId = "evaluatorThatRequires1999MBofMemory";
+            request = new EvaluatorRequest(evaluatorsNumber, memory, core, rack, evaluatorBatchId);
+            evalutorRequestor.Submit(request);
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedEvaluatorHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedEvaluatorHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedEvaluatorHandler.cs
new file mode 100644
index 0000000..22732e6
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedEvaluatorHandler.cs
@@ -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.
+ */
+
+using Org.Apache.Reef.Driver.Bridge;
+using Org.Apache.Reef.Driver.Evaluator;
+using Org.Apache.Reef.Tang.Annotations;
+using System;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    public class HelloFailedEvaluatorHandler : IObserver<IFailedEvaluator>
+    {
+        private static int _failureCount = 0;
+
+        private static int _maxTrial = 2;
+
+        [Inject]
+        public HelloFailedEvaluatorHandler()
+        {
+        }
+
+        public void OnNext(IFailedEvaluator failedEvaluator)
+        {
+            Console.WriteLine("Receive a failed evaluator: " + failedEvaluator.Id);
+            if (++_failureCount < _maxTrial)
+            {
+                Console.WriteLine("Requesting another evaluator");
+                EvaluatorRequest newRequest = new EvaluatorRequest(1, 512, "somerack");
+                IEvaluatorRequestor requestor = failedEvaluator.GetEvaluatorRequetor();
+                if (failedEvaluator.GetEvaluatorRequetor() != null)
+                {
+                    requestor.Submit(newRequest);
+                }
+            }
+            else
+            {
+                Console.WriteLine("Exceed max retries number");
+                throw new Exception("Unrecoverable evaluator failure.");
+            }
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedTaskHandler.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedTaskHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedTaskHandler.cs
new file mode 100644
index 0000000..541a419
--- /dev/null
+++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloFailedTaskHandler.cs
@@ -0,0 +1,67 @@
+/**
+ * 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.Driver.Task;
+using Org.Apache.Reef.Utilities;
+using Org.Apache.Reef.Tang.Annotations;
+using System;
+using System.Globalization;
+
+namespace Org.Apache.Reef.Examples.HelloCLRBridge
+{
+    public class HelloFailedTaskHandler : IObserver<IFailedTask>
+    {
+        [Inject]
+        public HelloFailedTaskHandler()
+        {
+        }
+
+        public void OnNext(IFailedTask failedTask)
+        {
+            string errorMessage = string.Format(
+                CultureInfo.InvariantCulture,
+                "Task [{0}] has failed caused by [{1}], with message [{2}] and description [{3}]. The raw data for failure is [{4}].",
+                failedTask.Id,
+                failedTask.Reason.IsPresent() ? failedTask.Reason.Value : string.Empty,
+                failedTask.Message,
+                failedTask.Description.IsPresent() ? failedTask.Description.Value : string.Empty,
+                failedTask.Data.IsPresent() ? ByteUtilities.ByteArrarysToString(failedTask.Data.Value) : string.Empty);
+
+            Console.WriteLine(errorMessage);
+
+            if (failedTask.GetActiveContext().IsPresent())
+            {
+                Console.WriteLine("Disposing the active context the failed task ran in.");
+
+                // we must do something here: either close the context or resubmit a task to the active context
+                failedTask.GetActiveContext().Value.Dispose();
+            }
+        }
+
+        public void OnCompleted()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnError(Exception error)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}