http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloHttpHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloHttpHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloHttpHandler.cs new file mode 100644 index 0000000..6a06831 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloHttpHandler.cs @@ -0,0 +1,51 @@ +/** + * 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.Globalization; +using System.Net; +using Org.Apache.Reef.Driver.Bridge; +using Org.Apache.Reef.Utilities; +using Org.Apache.Reef.Utilities.Logging; +using Org.Apache.Reef.Tang.Annotations; + +namespace Org.Apache.Reef.Examples.HelloCLRBridge.Handlers +{ + public class HelloHttpHandler : IHttpHandler + { + private static readonly Logger LOGGER = Logger.GetLogger(typeof(HttpServerHandler)); + + [Inject] + public HelloHttpHandler() + { + } + + public string GetSpecification() + { + return "NRT"; //Client Example + } + + public void OnHttpRequest(ReefHttpRequest requet, ReefHttpResponse response) + { + LOGGER.Log(Level.Info, string.Format(CultureInfo.CurrentCulture, "HelloHttpHandler OnHttpRequest: URL: {0}, QueryString: {1}, inputStream: {2}.", requet.Url, requet.Querystring, ByteUtilities.ByteArrarysToString(requet.InputStream))); + response.Status = HttpStatusCode.OK; + response.OutputStream = + ByteUtilities.StringToByteArrays("Byte array returned from HelloHttpHandler in CLR!!!"); + } + } +}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloRestartHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloRestartHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloRestartHandler.cs new file mode 100644 index 0000000..79e5af3 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloRestartHandler.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 Org.Apache.Reef.Wake.Time; +using System; + +namespace Org.Apache.Reef.Examples.HelloCLRBridge +{ + public class HelloRestartHandler : IObserver<StartTime> + { + [Inject] + public HelloRestartHandler() + { + } + + public void OnNext(StartTime value) + { + Console.WriteLine("Hello from CLR: we are informed that Driver has restarted at " + new DateTime(value.TimeStamp)); + } + + 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/HelloRunningTaskHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloRunningTaskHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloRunningTaskHandler.cs new file mode 100644 index 0000000..927cb47 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloRunningTaskHandler.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 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 HelloRunningTaskHandler : IObserver<IRunningTask> + { + [Inject] + public HelloRunningTaskHandler() + { + } + + public void OnNext(IRunningTask runningTask) + { + IActiveContext context = runningTask.ActiveContext; + + string messageStr = string.Format( + CultureInfo.InvariantCulture, + "HelloRunningTaskHandler: Task [{0}] is running. Evaluator id: [{1}].", + runningTask.Id, + context.EvaluatorId); + Console.WriteLine(messageStr); + + byte[] message = ByteUtilities.StringToByteArrays(messageStr); + + runningTask.Send(message); + } + + 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/HelloSimpleEventHandlers.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloSimpleEventHandlers.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloSimpleEventHandlers.cs new file mode 100644 index 0000000..9e3e804 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloSimpleEventHandlers.cs @@ -0,0 +1,421 @@ +/** + * 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.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using Org.Apache.Reef.Common.io; +using Org.Apache.Reef.Driver; +using Org.Apache.Reef.Driver.Bridge; +using Org.Apache.Reef.Driver.Context; +using Org.Apache.Reef.Driver.Evaluator; +using Org.Apache.Reef.Driver.Task; +using Org.Apache.Reef.IO.Network.Naming; +using Org.Apache.Reef.Tasks; +using Org.Apache.Reef.Utilities; +using Org.Apache.Reef.Utilities.Logging; +using Org.Apache.Reef.Tang.Annotations; +using Org.Apache.Reef.Tang.Interface; +using Org.Apache.Reef.Tang.Util; + +namespace Org.Apache.Reef.Examples.HelloCLRBridge.handlers +{ + enum DriverStatus + { + Init = 0, + Idle = 1, + RunningTasks = 2, + CompleteTasks = 3 + } + + internal enum TaskStatus + { + Submitting = 0, + Running = 1, + Completed = 2 + } + + /// <summary> + /// A demo class that contains basic handlers. It runs given tasks and is able to get request from http server and start to ren the tasks again. + /// It handle various http requests. It also monitoring task status and driver status. + /// </summary> + public class HelloSimpleEventHandlers : + IObserver<IEvaluatorRequestor>, + IObserver<IAllocatedEvaluator>, + IObserver<IActiveContext>, + IObserver<ICompletedTask>, + IObserver<IRunningTask>, + IObserver<IFailedTask>, + IObserver<IFailedEvaluator>, + IObserver<ICompletedEvaluator>, + IStartHandler, + IHttpHandler + { + private const int NumberOfTasks = 5; + private static readonly Logger LOGGER = Logger.GetLogger(typeof(HelloSimpleEventHandlers)); + private IAllocatedEvaluator _allocatedEvaluator; + private IActiveContext _activeContext; + private IList<IActiveContext> _activeContexts = new List<IActiveContext>(); + private DriverStatus driveStatus; + private TaskContext _taskContext; + + [Inject] + public HelloSimpleEventHandlers() + { + LOGGER.Log(Level.Info, "HelloSimpleEventHandlers constructor"); + CreateClassHierarchy(); + Identifier = "HelloSimpleEventHandlers"; + _taskContext = new TaskContext(); + _taskContext.TotalTasks = NumberOfTasks; + driveStatus = DriverStatus.Init; + } + + public string Identifier { get; set; } + + public static string ParsePathInfo(string pathInfo) + { + string[] p = pathInfo.Split('/'); + foreach (string s in p) + { + LOGGER.Log(Level.Info, s); + } + if (p.Length > 3) + { + return p[3]; + } + return null; + } + + public static void BuildHttpResponse( + ReefHttpResponse response, + HttpStatusCode httpStatusCode, + string strResponse) + { + response.Status = httpStatusCode; + response.OutputStream = ByteUtilities.StringToByteArrays(strResponse); + } + + public static void BuildHttpResponse( + ReefHttpResponse response, + HttpStatusCode httpStatusCode, + byte[] bytesResponse) + { + response.Status = httpStatusCode; + response.OutputStream = bytesResponse; + } + + public void OnNext(IEvaluatorRequestor evalutorRequestor) + { + using (LOGGER.LogFunction("HelloSimpleEventHandlers::evalutorRequestor received")) + { + int evaluatorsNumber = 2; + int memory = 1024 * 3; + int cpuCoreCount = 1; + string rack = "WonderlandRack"; + string evaluatorBatchId = "evaluatorThatRequires3GBofMemory"; + EvaluatorRequest request = new EvaluatorRequest(evaluatorsNumber, memory, cpuCoreCount, rack, evaluatorBatchId); + + evalutorRequestor.Submit(request); + } + } + + public void OnNext(IAllocatedEvaluator allocatedEvaluator) + { + string taskId = "Task_" + allocatedEvaluator.Id; + using (LOGGER.LogFunction("HelloSimpleEventHandlers::allocatedEvaluator received {0}.", taskId)) + { + _allocatedEvaluator = allocatedEvaluator; + + IConfiguration contextConfiguration = ContextConfiguration.ConfigurationModule.Set(ContextConfiguration.Identifier, "HelloSimpleEventHandlersContext_" + Guid.NewGuid().ToString("N")).Build(); + + allocatedEvaluator.SubmitContext(contextConfiguration); + } + } + + public void OnNext(IActiveContext activeContext) + { + using (LOGGER.LogFunction("HelloSimpleEventHandlers::activeContext received")) + { + LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "Received activeContext, EvaluatorId id: {0}", activeContext.EvaluatorId)); + _activeContext = activeContext; + _activeContexts.Add(activeContext); + driveStatus = DriverStatus.RunningTasks; + SubmitNextTask(activeContext); + } + } + + public void OnNext(ICompletedTask value) + { + using (LOGGER.LogFunction("HelloSimpleEventHandlers::CompletedTask received")) + { + LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "Received CompletedTask: {0}, task id: {1}", value.Id, _taskContext.CurrentTaskId())); + _activeContext = value.ActiveContext; + _taskContext.UpdateTaskStatus(value.Id, TaskStatus.Completed); + _taskContext.TaskCompleted++; + SubmitNextTask(value.ActiveContext); + } + } + + public void OnError(Exception error) + { + LOGGER.Log(Level.Error, string.Format(CultureInfo.InvariantCulture, "Exception in coral handlers Msg: {1} Stack: {2}", error.Message, error.StackTrace)); + } + + public void OnCompleted() + { + } + + public void OnNext(IRunningTask value) + { + _taskContext.UpdateTaskStatus(_taskContext.CurrentTaskId(), TaskStatus.Running); + } + + public void OnNext(IFailedTask value) + { + } + + public void OnNext(IFailedEvaluator value) + { + } + + public void OnNext(ICompletedEvaluator completedEvaluator) + { + string messageStr = string.Format( + CultureInfo.InvariantCulture, + "HelloSimpleEventHandlers: Evaluator [{0}] is done.", + completedEvaluator.Id); + Console.WriteLine(messageStr); + } + + public string GetSpecification() + { + return "crystal"; + } + + public void OnHttpRequest(ReefHttpRequest request, ReefHttpResponse response) + { + string target = ParsePathInfo(request.PathInfo); + LOGGER.Log(Level.Info, "Target: " + target + ". PathInfo: " + request.PathInfo); + //if (target != null && target.ToLower(CultureInfo.CurrentCulture).Equals("driverstatus")) + if (target != null && target.Equals("driverstatus")) + { + LOGGER.Log(Level.Info, "Target: " + target + ". Driver status: " + driveStatus.ToString()); + string msg = string.Format(CultureInfo.CurrentCulture, "Current Driver status: {0} ", driveStatus.ToString()); + BuildHttpResponse(response, HttpStatusCode.OK, msg); + return; + } + + if (target != null && target.Equals("taskstatus")) + { + LOGGER.Log(Level.Info, "Target: " + target + ". TaskStatus string: " + _taskContext.TaskStatusString()); + BuildHttpResponse(response, HttpStatusCode.OK, _taskContext.TaskStatusString()); + return; + } + + if (target != null && target.ToLower(CultureInfo.CurrentCulture).Equals("run") && driveStatus == DriverStatus.Init) + { + BuildHttpResponse(response, HttpStatusCode.OK, "Driver is not ready, wait a few second then send request again!!!"); + return; + } + + if (target != null && target.ToLower(CultureInfo.CurrentCulture).Equals("run") && driveStatus == DriverStatus.RunningTasks) + { + string msg = string.Format(CultureInfo.CurrentCulture, + "A job is running. Please check driver status and then submit your job again."); + BuildHttpResponse(response, HttpStatusCode.OK, msg); + return; + } + + if (target != null && target.ToLower(CultureInfo.CurrentCulture).Equals("run") && driveStatus == DriverStatus.Idle) + { + string numberOfTasks = getQueryValue(request.Querystring, "numberoftasks"); + if (numberOfTasks == null) + { + BuildHttpResponse(response, HttpStatusCode.OK, "Please specify number of tasks to run"); + return; + } + + driveStatus = DriverStatus.RunningTasks; + using (LOGGER.LogFunction("HelloSimpleEventHandlers::Processing a new Job from web request")) + { + _taskContext = new TaskContext(); + _taskContext.TotalTasks = int.Parse(numberOfTasks, CultureInfo.CurrentCulture); + BuildHttpResponse(response, HttpStatusCode.OK, "Job from web request is submitted and is running!!!"); + } + + foreach (var c in _activeContexts) + { + SubmitNextTask(c); + } + return; + } + BuildHttpResponse(response, HttpStatusCode.OK, "Unsupported query"); + } + + private static IDictionary<string, string> ParseQueryString(string queryString) + { + IDictionary<string, string> queryPairs = new Dictionary<string, string>(); + if (queryString != null && queryString.Length > 0) + { + string[] queries = queryString.Split('&'); + foreach (string query in queries) + { + string[] pairs = query.Split('='); + if (pairs.Length == 2 && !pairs[0].Equals(string.Empty) && !pairs[1].Equals(string.Empty)) + { + queryPairs[pairs[0]] = pairs[1]; + LOGGER.Log(Level.Info, string.Format(CultureInfo.CurrentCulture, "query key: {0}, Query value: {1}.", pairs[0], pairs[1])); + } + } + } + return queryPairs; + } + + private static string getQueryValue(string queryString, string name) + { + IDictionary<string, string> pairs = ParseQueryString(queryString); + string v; + pairs.TryGetValue(name, out v); + return v; + } + + private void CreateClassHierarchy() + { + HashSet<string> clrDlls = new HashSet<string>(); + clrDlls.Add(typeof(IDriver).Assembly.GetName().Name); + clrDlls.Add(typeof(ITask).Assembly.GetName().Name); + clrDlls.Add(typeof(HelloTask).Assembly.GetName().Name); + clrDlls.Add(typeof(INameClient).Assembly.GetName().Name); + clrDlls.Add(typeof(NameClient).Assembly.GetName().Name); + + ClrHandlerHelper.GenerateClassHierarchy(clrDlls); + } + + private void SubmitNextTask(IActiveContext activeContext) + { + LOGGER.Log(Level.Info, "SubmitNextTask with evaluatorid: " + activeContext.EvaluatorId); + IConfiguration finalConfiguration = GetNextTaskConfiguration(); + if (null != finalConfiguration) + { + LOGGER.Log(Level.Info, "Executing task id " + _taskContext.CurrentTaskId()); + LOGGER.Log(Level.Info, string.Format(CultureInfo.InvariantCulture, "Submitting Task {0}", _taskContext.CurrentTaskId())); + + activeContext.SubmitTask(finalConfiguration); + } + else + { + if (_taskContext.TaskCompleted == _taskContext.TotalTasks) + { + LOGGER.Log(Level.Info, "All tasks submitted and completed, active context remian idle"); + driveStatus = DriverStatus.Idle; + } + } + } + + private IConfiguration GetNextTaskConfiguration() + { + string nextTaskId = _taskContext.NextTaskId(); + LOGGER.Log(Level.Info, "GetNextTaskConfiguration, nextTaskId: " + nextTaskId); + if (nextTaskId != null) + { + IConfiguration taskConfiguration = TaskConfiguration.ConfigurationModule + .Set(TaskConfiguration.Identifier, nextTaskId) + .Set(TaskConfiguration.Task, GenericType<HelloTask>.Class) + .Set(TaskConfiguration.OnMessage, GenericType<HelloTask.HelloDriverMessageHandler>.Class) + .Set(TaskConfiguration.OnSendMessage, GenericType<HelloTaskMessage>.Class) + .Build(); + return taskConfiguration; + } + return null; + } + } + + class TaskContext + { + private IList<string> taskIds = new List<string>(); + + private IDictionary<string, TaskStatus> tasks = new Dictionary<string, TaskStatus>(); + + public TaskContext() + { + NextTaskIndex = 0; + TaskCompleted = 0; + } + + public int TotalTasks { get; set; } + + public int NextTaskIndex { get; set; } + + public int TaskCompleted { get; set; } + + public string NextTaskId() + { + Console.WriteLine("NextTaskId: " + NextTaskIndex); + if (NextTaskIndex < TotalTasks) + { + string id = "Jan7DemoTask_" + DateTime.Now.Ticks; + taskIds.Add(id); + tasks.Add(id, TaskStatus.Submitting); + NextTaskIndex++; + return id; + } + return null; + } + + public string CurrentTaskId() + { + Console.WriteLine("CurrentTaskIndex: " + (NextTaskIndex - 1)); + if (NextTaskIndex <= TotalTasks) + { + Console.WriteLine("CurrentTaskId: " + taskIds[NextTaskIndex - 1]); + return taskIds[NextTaskIndex - 1]; + } + return null; //either not started or completed + } + + public void UpdateTaskStatus(string taskId, TaskStatus status) + { + tasks[taskId] = status; + } + + public string TaskStatusString() + { + Console.WriteLine("TaskStatusString 1, nextTaskIndex: " + NextTaskIndex); + StringBuilder sb = new StringBuilder(); + + if (tasks.Count > 0) + { + foreach (var pair in tasks) + { + sb.AppendLine("Task id: " + pair.Key + " Task status: " + pair.Value.ToString()); + } + } + else + { + sb.Append("No task is running yet"); + } + + return sb.ToString(); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloStartHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloStartHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloStartHandler.cs new file mode 100644 index 0000000..edd1737 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloStartHandler.cs @@ -0,0 +1,64 @@ +/** + * 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.io; +using Org.Apache.Reef.Driver; +using Org.Apache.Reef.Driver.bridge; +using Org.Apache.Reef.Driver.Bridge; +using Org.Apache.Reef.IO.Network.Naming; +using Org.Apache.Reef.Tasks; +using Org.Apache.Reef.Utilities.Logging; +using Org.Apache.Reef.Tang.Annotations; + +namespace Org.Apache.Reef.Examples.HelloCLRBridge +{ + public class HelloStartHandler : IStartHandler + { + private static readonly Logger LOGGER = Logger.GetLogger(typeof(HelloStartHandler)); + + [Inject] + public HelloStartHandler(HttpServerPort httpServerPort) + { + CreateClassHierarchy(); + Identifier = "HelloStartHandler"; + LOGGER.Log(Level.Info, "HttpPort received in HelloStartHandler: " + httpServerPort.PortNumber); + } + + public HelloStartHandler(string id) + { + Identifier = id; + CreateClassHierarchy(); + } + + public string Identifier { get; set; } + + private void CreateClassHierarchy() + { + HashSet<string> clrDlls = new HashSet<string>(); + clrDlls.Add(typeof(IDriver).Assembly.GetName().Name); + clrDlls.Add(typeof(ITask).Assembly.GetName().Name); + clrDlls.Add(typeof(HelloTask).Assembly.GetName().Name); + clrDlls.Add(typeof(INameClient).Assembly.GetName().Name); + clrDlls.Add(typeof(NameClient).Assembly.GetName().Name); + + ClrHandlerHelper.GenerateClassHierarchy(clrDlls); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloTaskMessageHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloTaskMessageHandler.cs b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloTaskMessageHandler.cs new file mode 100644 index 0000000..8cee6ef --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/HelloCLRBridge/handlers/HelloTaskMessageHandler.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 System; +using System.Globalization; +using System.Text; +using Org.Apache.Reef.Driver.Task; +using Org.Apache.Reef.Tang.Annotations; + +namespace Org.Apache.Reef.Examples.HelloCLRBridge +{ + public class HelloTaskMessageHandler : IObserver<ITaskMessage> + { + [Inject] + public HelloTaskMessageHandler() + { + } + + public void OnNext(ITaskMessage taskMessage) + { + Console.WriteLine(string.Format( + CultureInfo.InvariantCulture, + "CLR HelloTaskMessageHandler received following message from Task: {0}, Message: {1}.", + taskMessage.TaskId, + Encoding.UTF8.GetString(taskMessage.Message))); + } + + 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/RetainedEvalCLRBridge/Properties/AssemblyInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/Properties/AssemblyInfo.cs b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..726f304 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/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("RetainedEvalCLRBridge")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RetainedEvalCLRBridge")] +[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("636170aa-ea18-45bf-b345-83dae7fb6a03")] + +// 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/RetainedEvalCLRBridge/RetainedEvalCLRBridge.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/RetainedEvalCLRBridge.csproj b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/RetainedEvalCLRBridge.csproj new file mode 100644 index 0000000..c463f84 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/RetainedEvalCLRBridge.csproj @@ -0,0 +1,98 @@ +<?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>{A33C20FB-A76E-494C-80C5-BCE4BAD876D3}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Org.Apache.Reef.Examples.RetainedEvalCLRBridge</RootNamespace> + <AssemblyName>Org.Apache.Reef.Examples.RetainedEvalCLRBridge</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.RetainedEvalCLRBridge\</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.RetainedEvalCLRBridge\</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="handler\RetainedEvalActiveContextHandler.cs" /> + <Compile Include="handler\RetainedEvalAllocatedEvaluatorHandler.cs" /> + <Compile Include="handler\RetainedEvalEvaluatorRequestorHandler.cs" /> + <Compile Include="handler\RetainedEvalStartHandler.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="..\..\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-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/RetainedEvalCLRBridge/handler/RetainedEvalActiveContextHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalActiveContextHandler.cs b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalActiveContextHandler.cs new file mode 100644 index 0000000..2647ff6 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalActiveContextHandler.cs @@ -0,0 +1,56 @@ +/** + * 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.Context; +using Org.Apache.Reef.Tasks; +using Org.Apache.Reef.Tang.Implementations; +using Org.Apache.Reef.Tang.Interface; +using Org.Apache.Reef.Tang.Util; +using System; + +namespace Org.Apache.Reef.Examples.RetainedEvalBridge +{ + public class RetainedEvalActiveContextHandler : IObserver<IActiveContext> + { + public void OnNext(IActiveContext activeContext) + { + ICsConfigurationBuilder cb = TangFactory.GetTang().NewConfigurationBuilder(); + cb.AddConfiguration(TaskConfiguration.ConfigurationModule + .Set(TaskConfiguration.Identifier, "bridgeCLRShellTask_" + DateTime.Now.Ticks) + .Set(TaskConfiguration.Task, GenericType<ShellTask>.Class) + .Build()); + cb.BindNamedParameter<ShellTask.Command, string>(GenericType<ShellTask.Command>.Class, "echo"); + + IConfiguration taskConfiguration = cb.Build(); + + activeContext.SubmitTask(taskConfiguration); + } + + 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/RetainedEvalCLRBridge/handler/RetainedEvalAllocatedEvaluatorHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalAllocatedEvaluatorHandler.cs b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalAllocatedEvaluatorHandler.cs new file mode 100644 index 0000000..c9b63c4 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalAllocatedEvaluatorHandler.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.Context; +using Org.Apache.Reef.Driver.Evaluator; +using Org.Apache.Reef.Tang.Interface; +using System; + +namespace Org.Apache.Reef.Examples.RetainedEvalBridge +{ + public class RetainedEvalAllocatedEvaluatorHandler : IObserver<IAllocatedEvaluator> + { + public void OnCompleted() + { + throw new NotImplementedException(); + } + + public void OnError(Exception error) + { + throw new NotImplementedException(); + } + + public void OnNext(IAllocatedEvaluator allocatedEvaluator) + { + IConfiguration contextConfiguration = ContextConfiguration.ConfigurationModule + .Set(ContextConfiguration.Identifier, "RetainedEvalCLRBridgeContextId") + .Build(); + + allocatedEvaluator.SubmitContext(contextConfiguration); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalEvaluatorRequestorHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalEvaluatorRequestorHandler.cs b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalEvaluatorRequestorHandler.cs new file mode 100644 index 0000000..884f304 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalEvaluatorRequestorHandler.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.Bridge; +using Org.Apache.Reef.Driver.Evaluator; +using System; + +namespace Org.Apache.Reef.Examples.RetainedEvalCLRBridge +{ + public class RetainedEvalEvaluatorRequestorHandler : IObserver<IEvaluatorRequestor> + { + public void OnNext(IEvaluatorRequestor requestor) + { + int evaluatorsNumber = 1; + int memory = 512; + string rack = "WonderlandRack"; + EvaluatorRequest request = new EvaluatorRequest(evaluatorsNumber, memory, rack); + + requestor.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/RetainedEvalCLRBridge/handler/RetainedEvalStartHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalStartHandler.cs b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalStartHandler.cs new file mode 100644 index 0000000..3ff3cd6 --- /dev/null +++ b/lang/cs/Source/REEF/reef-examples/RetainedEvalCLRBridge/handler/RetainedEvalStartHandler.cs @@ -0,0 +1,90 @@ +/** + * 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; +using Org.Apache.Reef.Driver.Bridge; +using Org.Apache.Reef.Driver.Context; +using Org.Apache.Reef.Driver.Evaluator; +using Org.Apache.Reef.Examples.RetainedEvalBridge; +using Org.Apache.Reef.Examples.RetainedEvalCLRBridge; +using Org.Apache.Reef.Tasks; +using Org.Apache.Reef.Tang.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Org.Apache.Reef.Interop.Examples.RetainedEval +{ + public class RetainedEvalStartHandler : IStartHandler + { + private static ClrSystemHandler<IEvaluatorRequestor> _evaluatorRequestorHandler; + private static ClrSystemHandler<IAllocatedEvaluator> _allocatedEvaluatorHandler; + private static ClrSystemHandler<IActiveContext> _activeContextHandler; + + [Inject] + public RetainedEvalStartHandler() + { + CreateClassHierarchy(); + Identifier = "RetainedEvalStartHandler"; + } + + public RetainedEvalStartHandler(string id) + { + Identifier = id; + CreateClassHierarchy(); + } + + public string Identifier { get; set; } + + public IList<ulong> GetHandlers() + { + ulong[] handlers = Enumerable.Repeat(Constants.NullHandler, Constants.HandlersNumber).ToArray(); + + // initiate Evaluator Requestor handler + _evaluatorRequestorHandler = new ClrSystemHandler<IEvaluatorRequestor>(); + handlers[Constants.Handlers[Constants.EvaluatorRequestorHandler]] = ClrHandlerHelper.CreateHandler(_evaluatorRequestorHandler); + Console.WriteLine("_evaluatorRequestorHandler initiated"); + _evaluatorRequestorHandler.Subscribe(new RetainedEvalEvaluatorRequestorHandler()); + + // initiate Allocated Evaluator handler + _allocatedEvaluatorHandler = new ClrSystemHandler<IAllocatedEvaluator>(); + handlers[Constants.Handlers[Constants.AllocatedEvaluatorHandler]] = ClrHandlerHelper.CreateHandler(_allocatedEvaluatorHandler); + Console.WriteLine("_allocatedEvaluatorHandler initiated"); + _allocatedEvaluatorHandler.Subscribe(new RetainedEvalAllocatedEvaluatorHandler()); + + // initiate Active Context handler + _activeContextHandler = new ClrSystemHandler<IActiveContext>(); + handlers[Constants.Handlers[Constants.ActiveContextHandler]] = ClrHandlerHelper.CreateHandler(_activeContextHandler); + Console.WriteLine("_activeContextHandler initiated"); + _activeContextHandler.Subscribe(new RetainedEvalActiveContextHandler()); + + return handlers; + } + + private void CreateClassHierarchy() + { + HashSet<string> clrDlls = new HashSet<string>(); + clrDlls.Add(typeof(IDriver).Assembly.GetName().Name); + clrDlls.Add(typeof(ITask).Assembly.GetName().Name); + clrDlls.Add(typeof(ShellTask).Assembly.GetName().Name); + + ClrHandlerHelper.GenerateClassHierarchy(clrDlls); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupRequestCodec.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupRequestCodec.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupRequestCodec.cs new file mode 100644 index 0000000..a518e2e --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupRequestCodec.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.IO.Network.Naming.Events; +using Org.Apache.Reef.Utilities; +using Org.Apache.Reef.Wake.Remote; +using org.apache.reef.io.network.naming.avro; + +namespace Org.Apache.Reef.IO.Network.Naming.Codec +{ + internal class NamingLookupRequestCodec : ICodec<NamingLookupRequest> + { + public byte[] Encode(NamingLookupRequest obj) + { + var request = new AvroNamingLookupRequest { ids = obj.Identifiers }; + return AvroUtils.AvroSerialize(request); + } + + public NamingLookupRequest Decode(byte[] data) + { + AvroNamingLookupRequest request = AvroUtils.AvroDeserialize<AvroNamingLookupRequest>(data); + return new NamingLookupRequest(request.ids); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupResponseCodec.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupResponseCodec.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupResponseCodec.cs new file mode 100644 index 0000000..e4c59df --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingLookupResponseCodec.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.io; +using Org.Apache.Reef.IO.Network.Naming.Events; +using Org.Apache.Reef.Utilities; +using Org.Apache.Reef.Wake.Remote; +using System.Collections.Generic; +using System.Linq; +using org.apache.reef.io.network.naming.avro; + +namespace Org.Apache.Reef.IO.Network.Naming.Codec +{ + internal class NamingLookupResponseCodec : ICodec<NamingLookupResponse> + { + public byte[] Encode(NamingLookupResponse obj) + { + List<AvroNamingAssignment> tuples = obj.NameAssignments + .Select(assignment => new AvroNamingAssignment() + { + id = assignment.Identifier, + host = assignment.Endpoint.Address.ToString(), + port = assignment.Endpoint.Port + }).ToList(); + + AvroNamingLookupResponse response = new AvroNamingLookupResponse { tuples = tuples }; + return AvroUtils.AvroSerialize(response); + } + + public NamingLookupResponse Decode(byte[] data) + { + AvroNamingLookupResponse response = AvroUtils.AvroDeserialize<AvroNamingLookupResponse>(data); + List<NameAssignment> assignments = + response.tuples.Select(x => new NameAssignment(x.id, x.host, x.port)).ToList(); + + return new NamingLookupResponse(assignments); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterRequestCodec.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterRequestCodec.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterRequestCodec.cs new file mode 100644 index 0000000..f75a8d5 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterRequestCodec.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 Org.Apache.Reef.Common.io; +using Org.Apache.Reef.IO.Network.Naming.Events; +using Org.Apache.Reef.Utilities; +using Org.Apache.Reef.Wake.Remote; +using org.apache.reef.io.network.naming.avro; + +namespace Org.Apache.Reef.IO.Network.Naming.Codec +{ + internal class NamingRegisterRequestCodec : ICodec<NamingRegisterRequest> + { + public byte[] Encode(NamingRegisterRequest obj) + { + AvroNamingRegisterRequest request = new AvroNamingRegisterRequest + { + id = obj.NameAssignment.Identifier, + host = obj.NameAssignment.Endpoint.Address.ToString(), + port = obj.NameAssignment.Endpoint.Port + }; + return AvroUtils.AvroSerialize(request); + } + + public NamingRegisterRequest Decode(byte[] data) + { + AvroNamingRegisterRequest request = AvroUtils.AvroDeserialize<AvroNamingRegisterRequest>(data); + return new NamingRegisterRequest(new NameAssignment(request.id, request.host, request.port)); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterResponseCodec.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterResponseCodec.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterResponseCodec.cs new file mode 100644 index 0000000..877abdd --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingRegisterResponseCodec.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.IO.Network.Naming.Events; +using Org.Apache.Reef.Wake.Remote; + +namespace Org.Apache.Reef.IO.Network.Naming.Codec +{ + internal class NamingRegisterResponseCodec : ICodec<NamingRegisterResponse> + { + private NamingRegisterRequestCodec _codec; + + public NamingRegisterResponseCodec(NamingRegisterRequestCodec codec) + { + _codec = codec; + } + + public byte[] Encode(NamingRegisterResponse obj) + { + return _codec.Encode(obj.Request); + } + + public NamingRegisterResponse Decode(byte[] data) + { + return new NamingRegisterResponse(_codec.Decode(data)); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingUnregisterRequestCodec.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingUnregisterRequestCodec.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingUnregisterRequestCodec.cs new file mode 100644 index 0000000..9512660 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Codec/NamingUnregisterRequestCodec.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.IO.Network.Naming.Events; +using Org.Apache.Reef.Utilities; +using Org.Apache.Reef.Wake.Remote; +using org.apache.reef.io.network.naming.avro; + +namespace Org.Apache.Reef.IO.Network.Naming.Codec +{ + internal class NamingUnregisterRequestCodec : ICodec<NamingUnregisterRequest> + { + public byte[] Encode(NamingUnregisterRequest obj) + { + AvroNamingUnRegisterRequest request = new AvroNamingUnRegisterRequest { id = obj.Identifier }; + return AvroUtils.AvroSerialize(request); + } + + public NamingUnregisterRequest Decode(byte[] data) + { + AvroNamingUnRegisterRequest request = AvroUtils.AvroDeserialize<AvroNamingUnRegisterRequest>(data); + return new NamingUnregisterRequest(request.id); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingAssignment.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingAssignment.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingAssignment.cs new file mode 100644 index 0000000..5cfd5ab --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingAssignment.cs @@ -0,0 +1,62 @@ +/** + * 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.Runtime.Serialization; + +//---------- Auto-generated ------------ +namespace org.apache.reef.io.network.naming.avro +{ + /// <summary> + /// Used to serialize and deserialize Avro record org.apache.reef.io.network.naming.avro.AvroNamingAssignment. + /// </summary> + [DataContract] + public class AvroNamingAssignment + { + private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.io.network.naming.avro.AvroNamingAssignment"",""fields"":[{""name"":""id"",""type"":""string""},{""name"":""host"",""type"":""string""},{""name"":""port"",""type"":""int""}]}"; + + /// <summary> + /// Gets the schema. + /// </summary> + public static string Schema + { + get + { + return JsonSchema; + } + } + + /// <summary> + /// Gets or sets the id field. + /// </summary> + [DataMember] + public string id { get; set; } + + /// <summary> + /// Gets or sets the host field. + /// </summary> + [DataMember] + public string host { get; set; } + + /// <summary> + /// Gets or sets the port field. + /// </summary> + [DataMember] + public int port { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupRequest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupRequest.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupRequest.cs new file mode 100644 index 0000000..0698fd6 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupRequest.cs @@ -0,0 +1,51 @@ +/** + * 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 System.Runtime.Serialization; + +//---------- Auto-generated ------------ +namespace org.apache.reef.io.network.naming.avro +{ + /// <summary> + /// Used to serialize and deserialize Avro record org.apache.reef.io.network.naming.avro.AvroNamingLookupRequest. + /// </summary> + [DataContract] + public class AvroNamingLookupRequest + { + private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.io.network.naming.avro.AvroNamingLookupRequest"",""fields"":[{""name"":""ids"",""type"":{""type"":""array"",""items"":""string""}}]}"; + + /// <summary> + /// Gets the schema. + /// </summary> + public static string Schema + { + get + { + return JsonSchema; + } + } + + /// <summary> + /// Gets or sets the ids field. + /// </summary> + [DataMember] + public List<string> ids { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupResponse.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupResponse.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupResponse.cs new file mode 100644 index 0000000..4599faa --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingLookupResponse.cs @@ -0,0 +1,51 @@ +/** + * 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 System.Runtime.Serialization; + +//---------- Auto-generated ------------ +namespace org.apache.reef.io.network.naming.avro +{ + /// <summary> + /// Used to serialize and deserialize Avro record org.apache.reef.io.network.naming.avro.AvroNamingLookupResponse. + /// </summary> + [DataContract] + public class AvroNamingLookupResponse + { + private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.io.network.naming.avro.AvroNamingLookupResponse"",""fields"":[{""name"":""tuples"",""type"":{""type"":""array"",""items"":{""type"":""record"",""name"":""org.apache.reef.io.network.naming.avro.AvroNamingAssignment"",""fields"":[{""name"":""id"",""type"":""string""},{""name"":""host"",""type"":""string""},{""name"":""port"",""type"":""int""}]}}}]}"; + + /// <summary> + /// Gets the schema. + /// </summary> + public static string Schema + { + get + { + return JsonSchema; + } + } + + /// <summary> + /// Gets or sets the tuples field. + /// </summary> + [DataMember] + public List<AvroNamingAssignment> tuples { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingRegisterRequest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingRegisterRequest.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingRegisterRequest.cs new file mode 100644 index 0000000..76f14be --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingRegisterRequest.cs @@ -0,0 +1,62 @@ +/** + * 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.Runtime.Serialization; + +//---------- Auto-generated ------------ +namespace org.apache.reef.io.network.naming.avro +{ + /// <summary> + /// Used to serialize and deserialize Avro record org.apache.reef.io.network.naming.avro.AvroNamingRegisterRequest. + /// </summary> + [DataContract] + public class AvroNamingRegisterRequest + { + private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.io.network.naming.avro.AvroNamingRegisterRequest"",""fields"":[{""name"":""id"",""type"":""string""},{""name"":""host"",""type"":""string""},{""name"":""port"",""type"":""int""}]}"; + + /// <summary> + /// Gets the schema. + /// </summary> + public static string Schema + { + get + { + return JsonSchema; + } + } + + /// <summary> + /// Gets or sets the id field. + /// </summary> + [DataMember] + public string id { get; set; } + + /// <summary> + /// Gets or sets the host field. + /// </summary> + [DataMember] + public string host { get; set; } + + /// <summary> + /// Gets or sets the port field. + /// </summary> + [DataMember] + public int port { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingUnRegisterRequest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingUnRegisterRequest.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingUnRegisterRequest.cs new file mode 100644 index 0000000..299e940 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Contracts/AvroNamingUnRegisterRequest.cs @@ -0,0 +1,50 @@ +/** + * 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.Runtime.Serialization; + +//---------- Auto-generated ------------ +namespace org.apache.reef.io.network.naming.avro +{ + /// <summary> + /// Used to serialize and deserialize Avro record org.apache.reef.io.network.naming.avro.AvroNamingUnRegisterRequest. + /// </summary> + [DataContract] + public class AvroNamingUnRegisterRequest + { + private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.io.network.naming.avro.AvroNamingUnRegisterRequest"",""fields"":[{""name"":""id"",""type"":""string""}]}"; + + /// <summary> + /// Gets the schema. + /// </summary> + public static string Schema + { + get + { + return JsonSchema; + } + } + + /// <summary> + /// Gets or sets the id field. + /// </summary> + [DataMember] + public string id { get; set; } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingEvent.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingEvent.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingEvent.cs new file mode 100644 index 0000000..5c992f2 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingEvent.cs @@ -0,0 +1,35 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +using Org.Apache.Reef.Wake.Remote; + +namespace Org.Apache.Reef.IO.Network.Naming.Events +{ + /// <summary> + /// Event representing a lookup, registering, or unregistering of + /// an identifier with the Name Service. + /// </summary> + internal class NamingEvent + { + /// <summary> + /// The link for communication between the NameClient and NameServer + /// </summary> + public ILink<NamingEvent> Link { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllRequest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllRequest.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllRequest.cs new file mode 100644 index 0000000..d680810 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllRequest.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. + */ + +namespace Org.Apache.Reef.IO.Network.Naming.Events +{ + /// <summary> + /// Event to request all registered identifiers and their mapped + /// IPEndpoints + /// </summary> + internal class NamingGetAllRequest : NamingEvent + { + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllResponse.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllResponse.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllResponse.cs new file mode 100644 index 0000000..08e608e --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingGetAllResponse.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.Collections.Generic; +using Org.Apache.Reef.Common.io; + +namespace Org.Apache.Reef.IO.Network.Naming.Events +{ + /// <summary> + /// Response event for looking up all registered identifiers and their + /// mapped IPEndpoints + /// </summary> + internal class NamingGetAllResponse : NamingEvent + { + public NamingGetAllResponse(List<NameAssignment> assignments) + { + Assignments = assignments; + } + + public List<NameAssignment> Assignments { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupRequest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupRequest.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupRequest.cs new file mode 100644 index 0000000..9f9e184 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupRequest.cs @@ -0,0 +1,36 @@ +/** + * 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; + +namespace Org.Apache.Reef.IO.Network.Naming.Events +{ + /// <summary> + /// Event to request look up of IPEndpoints in the Name Service + /// </summary> + internal class NamingLookupRequest : NamingEvent + { + public NamingLookupRequest(List<string> ids) + { + Identifiers = ids; + } + + public List<string> Identifiers { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupResponse.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupResponse.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupResponse.cs new file mode 100644 index 0000000..872c8c7 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingLookupResponse.cs @@ -0,0 +1,39 @@ +/** + * 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 Microsoft.Hadoop.Avro; +using Org.Apache.Reef.Common.io; + +namespace Org.Apache.Reef.IO.Network.Naming.Events +{ + /// <summary> + /// Event for lookup response in Name Service. + /// </summary> + internal class NamingLookupResponse : NamingEvent + { + public NamingLookupResponse(List<NameAssignment> nameAssignments) + { + NameAssignments = nameAssignments; + } + + [NullableSchema] + public List<NameAssignment> NameAssignments { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterRequest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterRequest.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterRequest.cs new file mode 100644 index 0000000..3da980b --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterRequest.cs @@ -0,0 +1,36 @@ +/** + * 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; + +namespace Org.Apache.Reef.IO.Network.Naming.Events +{ + /// <summary> + /// Event to request registering an identifier and endpoint with the Name Service + /// </summary> + internal class NamingRegisterRequest : NamingEvent + { + public NamingRegisterRequest(NameAssignment nameAssignment) + { + NameAssignment = nameAssignment; + } + + public NameAssignment NameAssignment { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterResponse.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterResponse.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterResponse.cs new file mode 100644 index 0000000..d879d35 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingRegisterResponse.cs @@ -0,0 +1,34 @@ +/** + * 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.IO.Network.Naming.Events +{ + /// <summary> + /// Response event for registering an IPEndpoint with the Name Service + /// </summary> + internal class NamingRegisterResponse : NamingEvent + { + public NamingRegisterResponse(NamingRegisterRequest request) + { + Request = request; + } + + public NamingRegisterRequest Request { get; set; } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingUnregisterRequest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingUnregisterRequest.cs b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingUnregisterRequest.cs new file mode 100644 index 0000000..966e533 --- /dev/null +++ b/lang/cs/Source/REEF/reef-io/Network/Naming/Events/NamingUnregisterRequest.cs @@ -0,0 +1,34 @@ +/** + * 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.IO.Network.Naming.Events +{ + /// <summary> + /// Event to request unregistering of an IPEndpoint with the Name Service + /// </summary> + internal class NamingUnregisterRequest : NamingEvent + { + public NamingUnregisterRequest(string identifier) + { + Identifier = identifier; + } + + public string Identifier { get; set; } + } +}
