[REEF-486] Refactor Org.Apache.REEF.Examples.AllHandlers This PR is to move handlers in `Org.Apache.REEF.Examples.HelloCLRBridge.Handlers` to corresponding example and test folders and rename, update the coresponding test code to use ClientAPI.
* Renamed Org.Apache.REEF.Examples.HelloCLRBridge project to Org.Apache.REEF.Examples.AllHandlers * Renamed the class Org.Apache.REEF.Examples.HelloCLRBridge.ClrBridgeClient.cs to Org.Apache.REEF.Examples.AllHandlers.AllHandler.cs * And moved handlers in Org.Apache.REEF.Examples.HelloCLRBridge.Handlers to Org.Apache.REEF.Examples.HelloCLRBridge project so that they all stay in the same project as a complete example. * Removed TestHelloBridgeHandlers.cs as the test has been covered by TestBridgeClient.cs * Moved Org.Apache.REEF.Examples/HelloCLRBridge/Handlers/HelloSimpleEventHandlers.cs to test folder and updated it * Updated test case Org.Apache.REEF.Tests/Functional/Bridge/TestSimpleEventHandlers.cs to use ClientAPI * Removed the code in Org.Apache.REEF.Client/CLRBridgeClient.cs, preparing for REEF-473 JIRA: [REEF-486](https://issues.apache.org/jira/browse/REEF-486) Pull Request: This closes #306 Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/7824be83 Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/7824be83 Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/7824be83 Branch: refs/heads/master Commit: 7824be835cdacf21512df355d6d79a8dc5a6d11b Parents: d077974 Author: Julia Wang <[email protected]> Authored: Mon Jul 20 19:35:10 2015 -0700 Committer: Markus Weimer <[email protected]> Committed: Tue Jul 21 21:50:12 2015 -0700 ---------------------------------------------------------------------- .../Org.Apache.REEF.Client/CLRBridgeClient.cs | 119 +----- .../AllHandlers.cs | 132 ++++++ .../AnotherHelloAllocatedEvaluatorHandler.cs | 52 +++ .../HelloActiveContextHandler.cs | 90 ++++ .../HelloAllocatedEvaluatorHandler.cs | 139 ++++++ .../HelloCompletedEvaluatorHandler.cs | 60 +++ .../HelloDriverRestartActiveContextHandler.cs | 76 ++++ .../HelloDriverRestartRunningTaskHandler.cs | 71 ++++ .../HelloDriverStartHandler.cs | 79 ++++ .../HelloFailedEvaluatorHandler.cs | 74 ++++ .../HelloFailedTaskHandler.cs | 74 ++++ .../HelloHttpHandler.cs | 59 +++ .../HelloRestartHandler.cs | 55 +++ .../HelloRunningTaskHandler.cs | 69 +++ .../HelloTaskMessageHandler.cs | 61 +++ .../HelloTraceListener.cs | 48 +++ .../Org.Apache.REEF.Examples.AllHandlers.csproj | 122 ++++++ .../Properties/AssemblyInfo.cs | 54 +++ .../Readme.md | 17 + .../ClrBridgeClient.cs | 122 ------ ...g.Apache.REEF.Examples.HelloCLRBridge.csproj | 105 ----- .../Properties/AssemblyInfo.cs | 54 --- .../AnotherHelloAllocatedEvaluatorHandler.cs | 48 --- .../Handlers/HelloActiveContextHandler.cs | 82 ---- .../Handlers/HelloAllocatedEvaluatorHandler.cs | 132 ------ .../Handlers/HelloCompletedEvaluatorHandler.cs | 56 --- .../HelloDriverRestartActiveContextHandler.cs | 69 --- .../HelloDriverRestartRunningTaskHandler.cs | 67 --- .../Handlers/HelloDriverStartHandler.cs | 75 ---- .../Handlers/HelloEvaluatorRequestorHandler.cs | 63 --- .../Handlers/HelloFailedEvaluatorHandler.cs | 67 --- .../Handlers/HelloFailedTaskHandler.cs | 67 --- .../HelloCLRBridge/Handlers/HelloHttpHandler.cs | 51 --- .../Handlers/HelloRestartHandler.cs | 48 --- .../Handlers/HelloRunningTaskHandler.cs | 65 --- .../Handlers/HelloSimpleEventHandlers.cs | 421 ------------------- .../Handlers/HelloStartHandler.cs | 64 --- .../Handlers/HelloTaskMessageHandler.cs | 54 --- .../HelloCLRBridge/HelloTraceListener.cs | 48 --- .../Org.Apache.REEF.Examples.csproj | 20 +- .../Bridge/HelloSimpleEventHandlers.cs | 421 +++++++++++++++++++ .../Functional/Bridge/TestBridgeClient.cs | 4 +- .../Bridge/TestHelloBridgeHandlers.cs | 100 ----- .../Bridge/TestSimpleEventHandlers.cs | 80 ++-- .../Functional/ReefFunctionalTest.cs | 39 ++ .../Org.Apache.REEF.Tests.csproj | 6 +- lang/cs/Org.Apache.REEF.sln | Bin 29022 -> 29004 bytes 47 files changed, 1834 insertions(+), 2045 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Client/CLRBridgeClient.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Client/CLRBridgeClient.cs b/lang/cs/Org.Apache.REEF.Client/CLRBridgeClient.cs index f6d8f82..0c2cc80 100644 --- a/lang/cs/Org.Apache.REEF.Client/CLRBridgeClient.cs +++ b/lang/cs/Org.Apache.REEF.Client/CLRBridgeClient.cs @@ -18,129 +18,14 @@ */ using System; -using System.Collections.Generic; -using System.IO; -using Org.Apache.REEF.Common.Evaluator; -using Org.Apache.REEF.Driver; -using Org.Apache.REEF.Driver.Bridge; -using Org.Apache.REEF.Driver.Defaults; -using Org.Apache.REEF.Examples.HelloCLRBridge.Handlers; -using Org.Apache.REEF.Examples.Tasks.HelloTask; -using Org.Apache.REEF.Network.Naming; -using Org.Apache.REEF.Tang.Interface; -using Org.Apache.REEF.Tang.Util; -using Org.Apache.REEF.Utilities.Logging; namespace Org.Apache.REEF.Client { public class CLRBridgeClient - { - public const string ReefHome = "REEF_HOME"; - public const string DefaultClrFolder = "."; - public const string DefaultReefJar = Constants.JavaBridgeJarFileName; - public const string DefaultRunCommand = "run.cmd"; - - private static string _clrFolder = null; - private static string _reefJar = null; - private static string _className = Constants.BridgeLaunchClass; - private static string _runCommand = DefaultRunCommand; - private static readonly string _submitControlForAllocatedEvaluator = "submitContextAndTask"; // submitContext, submitContextAndTask, submitContextAndServiceAndTask - - public static HashSet<string> AppDll - { - get - { - HashSet<string> appDlls = new HashSet<string>(); - appDlls.Add(typeof(HelloStartHandler).Assembly.GetName().Name); - appDlls.Add(typeof(HelloTask).Assembly.GetName().Name); - appDlls.Add(typeof(INameServer).Assembly.GetName().Name); - return appDlls; - } - } - - public static IConfiguration ClrConfigurations - { - get - { - return DriverBridgeConfiguration.ConfigurationModule - .Set(DriverBridgeConfiguration.OnDriverStarted, GenericType<HelloStartHandler>.Class) - .Set(DriverBridgeConfiguration.OnEvaluatorAllocated, GenericType<HelloAllocatedEvaluatorHandler>.Class) - .Set(DriverBridgeConfiguration.OnEvaluatorAllocated, GenericType<AnotherHelloAllocatedEvaluatorHandler>.Class) - .Set(DriverBridgeConfiguration.OnContextActive, GenericType<HelloActiveContextHandler>.Class) - .Set(DriverBridgeConfiguration.OnTaskMessage, GenericType<HelloTaskMessageHandler>.Class) - .Set(DriverBridgeConfiguration.OnEvaluatorFailed, GenericType<HelloFailedEvaluatorHandler>.Class) - .Set(DriverBridgeConfiguration.OnTaskFailed, GenericType<HelloFailedTaskHandler>.Class) - .Set(DriverBridgeConfiguration.OnTaskRunning, GenericType<HelloRunningTaskHandler>.Class) - .Set(DriverBridgeConfiguration.OnEvaluatorRequested, GenericType<HelloEvaluatorRequestorHandler>.Class) - .Set(DriverBridgeConfiguration.OnHttpEvent, GenericType<HelloHttpHandler>.Class) - .Set(DriverBridgeConfiguration.OnEvaluatorCompleted, GenericType<HelloCompletedEvaluatorHandler>.Class) - .Set(DriverBridgeConfiguration.CustomTraceListeners, GenericType<DefaultCustomTraceListener>.Class) - .Set(DriverBridgeConfiguration.CustomTraceLevel, Level.Info.ToString()) - .Set(DriverBridgeConfiguration.CommandLineArguments, _submitControlForAllocatedEvaluator) // this is for testing purpose only - .Set(DriverBridgeConfiguration.OnDriverRestarted, GenericType<HelloRestartHandler>.Class) - .Set(DriverBridgeConfiguration.OnDriverReconnect, GenericType<DefaultLocalHttpDriverConnection>.Class) - .Set(DriverBridgeConfiguration.OnDirverRestartContextActive, GenericType<HelloDriverRestartActiveContextHandler>.Class) - .Set(DriverBridgeConfiguration.OnDriverRestartTaskRunning, GenericType<HelloDriverRestartRunningTaskHandler>.Class) - .Build(); - } - } - + { public static void Main(string[] args) { - Console.WriteLine("start running client: " + DateTime.Now); - bool runOnYarn = false; - if (args != null) - { - if (args.Length > 0) - { - runOnYarn = bool.Parse(args[0]); - } - - if (args.Length > 1) - { - _className = args[1]; - } - if (args.Length > 2) - { - _clrFolder = args[2]; - } - if (args.Length > 3) - { - _reefJar = args[3]; - } - if (args.Length > 4) - { - _runCommand = args[4]; - } - } - - if (string.IsNullOrWhiteSpace(_reefJar)) - { - _reefJar = DefaultReefJar; - } - - if (string.IsNullOrWhiteSpace(_clrFolder)) - { - _clrFolder = DefaultClrFolder; - } - - // Configurable driver submission settings: - // DriverMemory, default to 512 - // DriverIdentifer, default to "ReefClrBridge" - // Submit, default to True. Setting it to false and Java client will construct the driver.config and write to to FS without submitting the job - // ClientWaitTime, default to -1 which means client will wait till Driver is done - // SubmissionDirectory, default to a tmp folder on (H)DFS according to the YARN assigned application id, if user sets it, it must be guaranteed to be unique across multiple jobs - // RunOnYarn, default to false to run on local runtime. - // UpdateJarBeforeSubmission, default to true. Setting it to false can reduce startup time, but only if the jar file already contains all application dlls. - // JavaLogLevel, default to INFO. - DriverSubmissionSettings driverSubmissionSettings = new DriverSubmissionSettings() - { - RunOnYarn = runOnYarn, - SubmissionDirectory = "reefClrBridgeTmp/job_" + Guid.NewGuid().ToString("N").Substring(0, 8) - }; - - Console.WriteLine("start calling Run: " + DateTime.Now); - ClrClientHelper.Run(AppDll, ClrConfigurations, driverSubmissionSettings, _reefJar, _runCommand, _clrFolder, _className); + Console.WriteLine("This is a skeleton for the console application. It will be removed after the project is converted to assembly."); } } } http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AllHandlers.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AllHandlers.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AllHandlers.cs new file mode 100644 index 0000000..dd99e98 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AllHandlers.cs @@ -0,0 +1,132 @@ +/** + * 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.IO; +using Org.Apache.REEF.Client.API; +using Org.Apache.REEF.Client.Local; +using Org.Apache.REEF.Client.YARN; +using Org.Apache.REEF.Common.Evaluator; +using Org.Apache.REEF.Driver; +using Org.Apache.REEF.Driver.Bridge; +using Org.Apache.REEF.Driver.Defaults; +using Org.Apache.REEF.Examples.Tasks.HelloTask; +using Org.Apache.REEF.Network.Naming; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Tang.Implementations.Tang; +using Org.Apache.REEF.Tang.Interface; +using Org.Apache.REEF.Tang.Util; +using Org.Apache.REEF.Utilities.Logging; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + public sealed class AllHandlers + { + private const string Local = "local"; + private const string YARN = "yarn"; + private readonly IREEFClient _reefClient; + private readonly JobSubmissionBuilderFactory _jobSubmissionBuilderFactory; + + [Inject] + private AllHandlers(IREEFClient reefClient, JobSubmissionBuilderFactory jobSubmissionBuilderFactory) + { + _reefClient = reefClient; + _jobSubmissionBuilderFactory = jobSubmissionBuilderFactory; + } + + private void Run() + { + var helloDriverConfiguration = DriverConfiguration.ConfigurationModule + .Set(DriverConfiguration.OnEvaluatorAllocated, GenericType<HelloAllocatedEvaluatorHandler>.Class) + .Set(DriverConfiguration.OnEvaluatorAllocated, GenericType<AnotherHelloAllocatedEvaluatorHandler>.Class) + .Set(DriverConfiguration.OnContextActive, GenericType<HelloActiveContextHandler>.Class) + .Set(DriverConfiguration.OnTaskMessage, GenericType<HelloTaskMessageHandler>.Class) + .Set(DriverConfiguration.OnEvaluatorFailed, GenericType<HelloFailedEvaluatorHandler>.Class) + .Set(DriverConfiguration.OnTaskFailed, GenericType<HelloFailedTaskHandler>.Class) + .Set(DriverConfiguration.OnTaskRunning, GenericType<HelloRunningTaskHandler>.Class) + .Set(DriverConfiguration.OnDriverStarted, GenericType<HelloDriverStartHandler>.Class) + .Set(DriverConfiguration.OnHttpEvent, GenericType<HelloHttpHandler>.Class) + .Set(DriverConfiguration.OnEvaluatorCompleted, GenericType<HelloCompletedEvaluatorHandler>.Class) + .Set(DriverConfiguration.CustomTraceListeners, GenericType<DefaultCustomTraceListener>.Class) + .Set(DriverConfiguration.CustomTraceLevel, Level.Info.ToString()) + .Set(DriverConfiguration.OnDriverRestarted, GenericType<HelloRestartHandler>.Class) + .Set(DriverConfiguration.OnDriverReconnect, GenericType<DefaultLocalHttpDriverConnection>.Class) + .Set(DriverConfiguration.OnDirverRestartContextActive, GenericType<HelloDriverRestartActiveContextHandler>.Class) + .Set(DriverConfiguration.OnDriverRestartTaskRunning, GenericType<HelloDriverRestartRunningTaskHandler>.Class) + .Build(); + + var driverCondig = TangFactory.GetTang().NewConfigurationBuilder(helloDriverConfiguration) + .BindSetEntry<DriverBridgeConfigurationOptions.SetOfAssemblies, string>(typeof(HelloTask).Assembly.GetName().Name) + .BindSetEntry<DriverBridgeConfigurationOptions.SetOfAssemblies, string>(typeof(NameClient).Assembly.GetName().Name) + .Build(); + + var helloJobSubmission = _jobSubmissionBuilderFactory.GetJobSubmissionBuilder() + .AddDriverConfiguration(driverCondig) + .AddGlobalAssemblyForType(typeof(HelloDriverStartHandler)) + .SetJobIdentifier("HelloDriver") + .Build(); + + _reefClient.Submit(helloJobSubmission); + } + + /// <summary></summary> + /// <param name="runOnYarn"></param> + /// <param name="runtimeFolder"></param> + /// <returns></returns> + private static IConfiguration GetRuntimeConfiguration(string runOnYarn, string runtimeFolder) + { + switch (runOnYarn) + { + case Local: + var dir = Path.Combine(".", runtimeFolder); + return LocalRuntimeClientConfiguration.ConfigurationModule + .Set(LocalRuntimeClientConfiguration.NumberOfEvaluators, "2") + .Set(LocalRuntimeClientConfiguration.RuntimeFolder, dir) + .Build(); + case YARN: + return YARNClientConfiguration.ConfigurationModule.Build(); + default: + throw new Exception("Unknown runtime: " + runOnYarn); + } + } + + /// <summary> + /// console application for driver with most of sample handlers + /// </summary> + /// <param name="args"></param> + public static void Main(string[] args) + { + Run(args); + } + + /// <summary> + /// </summary> + /// <param name="args"></param> + /// <remarks> + /// args[0] specify either running local or YARN. Default is local + /// args[1] specify running folder. Default is REEF_LOCAL_RUNTIME + /// </remarks> + public static void Run(string[] args) + { + string runOnYarn = args.Length > 0 ? args[0] : Local; + string runtimeFolder = args.Length > 1 ? args[1] : "REEF_LOCAL_RUNTIME"; + TangFactory.GetTang().NewInjector(GetRuntimeConfiguration(runOnYarn, runtimeFolder)).GetInstance<AllHandlers>().Run(); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AnotherHelloAllocatedEvaluatorHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AnotherHelloAllocatedEvaluatorHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AnotherHelloAllocatedEvaluatorHandler.cs new file mode 100644 index 0000000..2fab61d --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/AnotherHelloAllocatedEvaluatorHandler.cs @@ -0,0 +1,52 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +using System; +using Org.Apache.REEF.Driver.Evaluator; +using Org.Apache.REEF.Tang.Annotations; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of Another AllocatedEvaluator Handler + /// User can register multiple handlers + /// </summary> + public class AnotherHelloAllocatedEvaluatorHandler : IObserver<IAllocatedEvaluator> + { + [Inject] + private 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloActiveContextHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloActiveContextHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloActiveContextHandler.cs new file mode 100644 index 0000000..7bfa55a --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloActiveContextHandler.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 System; +using System.Globalization; +using Org.Apache.REEF.Common.Tasks; +using Org.Apache.REEF.Driver.Context; +using Org.Apache.REEF.Driver.Evaluator; +using Org.Apache.REEF.Examples.Tasks.HelloTask; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Tang.Interface; +using Org.Apache.REEF.Tang.Util; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of ActiveContext handler + /// </summary> + public class HelloActiveContextHandler : IObserver<IActiveContext> + { + [Inject] + private HelloActiveContextHandler() + { + } + + /// <summary> + /// This method prepare a Task Configuration and submit the task to the active context + /// + /// </summary> + /// <param name="activeContext"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloAllocatedEvaluatorHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloAllocatedEvaluatorHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloAllocatedEvaluatorHandler.cs new file mode 100644 index 0000000..b65a4b3 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloAllocatedEvaluatorHandler.cs @@ -0,0 +1,139 @@ +/** + * 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 Org.Apache.REEF.Common.Io; +using Org.Apache.REEF.Common.Services; +using Org.Apache.REEF.Common.Tasks; +using Org.Apache.REEF.Driver.Bridge; +using Org.Apache.REEF.Driver.Context; +using Org.Apache.REEF.Driver.Evaluator; +using Org.Apache.REEF.Examples.Tasks.HelloTask; +using Org.Apache.REEF.Network.Naming; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Tang.Implementations.Configuration; +using Org.Apache.REEF.Tang.Implementations.Tang; +using Org.Apache.REEF.Tang.Interface; +using Org.Apache.REEF.Tang.Util; +using Org.Apache.REEF.Utilities; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of allocatedEvaluator handler + /// </summary> + public class HelloAllocatedEvaluatorHandler : IObserver<IAllocatedEvaluator> + { + [Inject] + private HelloAllocatedEvaluatorHandler() + { + } + + /// <summary> + /// This method create Service/context/task configuration and submit them to the allocatedEvaluator + /// </summary> + /// <param name="allocatedEvaluator"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloCompletedEvaluatorHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloCompletedEvaluatorHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloCompletedEvaluatorHandler.cs new file mode 100644 index 0000000..3b9e2fc --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloCompletedEvaluatorHandler.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 System; +using System.Globalization; +using Org.Apache.REEF.Driver.Evaluator; +using Org.Apache.REEF.Tang.Annotations; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// Sample implementation of RunningTaskHandler + /// </summary> + public class HelloCompletedEvaluatorHandler : IObserver<ICompletedEvaluator> + { + [Inject] + private HelloCompletedEvaluatorHandler() + { + } + + /// <summary> + /// It is called when evaluator is completed. + /// </summary> + /// <param name="completedEvaluator"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartActiveContextHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartActiveContextHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartActiveContextHandler.cs new file mode 100644 index 0000000..69385c7 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartActiveContextHandler.cs @@ -0,0 +1,76 @@ +/** + * 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.Evaluator; +using Org.Apache.REEF.Tang.Annotations; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of DriverRestartActiveContextHandler + /// </summary> + public class HelloDriverRestartActiveContextHandler : IObserver<IActiveContext> + { + [Inject] + private HelloDriverRestartActiveContextHandler() + { + } + + /// <summary> + /// It is called when receiving an active context + /// </summary> + /// <param name="activeContext"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartRunningTaskHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartRunningTaskHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartRunningTaskHandler.cs new file mode 100644 index 0000000..8fb7871 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverRestartRunningTaskHandler.cs @@ -0,0 +1,71 @@ +/** + * 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.Tang.Annotations; +using Org.Apache.REEF.Utilities; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// Sample implementation of RunningTaskHandler when driver is restarted + /// </summary> + public class HelloDriverRestartRunningTaskHandler : IObserver<IRunningTask> + { + [Inject] + private HelloDriverRestartRunningTaskHandler() + { + } + + /// <summary> + /// Sending message to running task + /// </summary> + /// <param name="runningTask"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverStartHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverStartHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverStartHandler.cs new file mode 100644 index 0000000..fd29e9d --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloDriverStartHandler.cs @@ -0,0 +1,79 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +using System; + +using Org.Apache.REEF.Driver; +using Org.Apache.REEF.Driver.Evaluator; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Utilities.Logging; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of driver start handler + /// </summary> + public sealed class HelloDriverStartHandler : IObserver<IDriverStarted> + { + private static readonly Logger Logger = Logger.GetLogger(typeof(HelloDriverStartHandler)); + private readonly IEvaluatorRequestor _evaluatorRequestor; + + [Inject] + private HelloDriverStartHandler(IEvaluatorRequestor evaluatorRequestor) + { + _evaluatorRequestor = evaluatorRequestor; + } + + public void OnError(Exception error) + { + throw error; + } + + public void OnCompleted() + { + } + + /// <summary> + /// Called to start the user mode driver + /// Sample code to create EvaluatorRequest and submit it + /// </summary> + /// <param name="driverStarted"></param> + public void OnNext(IDriverStarted driverStarted) + { + Logger.Log(Level.Info, string.Format("HelloDriver started at {0}", driverStarted.StartTime)); + + int evaluatorsNumber = 1; + int memory = 512; + int core = 2; + string rack = "WonderlandRack"; + string evaluatorBatchId = "evaluatorThatRequires512MBofMemory"; + EvaluatorRequest request = new EvaluatorRequest(evaluatorsNumber, memory, core, rack, evaluatorBatchId); + + _evaluatorRequestor.Submit(request); + + evaluatorsNumber = 1; + memory = 1999; + core = 2; + rack = "WonderlandRack"; + evaluatorBatchId = "evaluatorThatRequires1999MBofMemory"; + request = new EvaluatorRequest(evaluatorsNumber, memory, core, rack, evaluatorBatchId); + _evaluatorRequestor.Submit(request); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedEvaluatorHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedEvaluatorHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedEvaluatorHandler.cs new file mode 100644 index 0000000..542fd3e --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedEvaluatorHandler.cs @@ -0,0 +1,74 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +using System; +using Org.Apache.REEF.Driver.Evaluator; +using Org.Apache.REEF.Tang.Annotations; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of FailedEvaluatorHandler + /// </summary> + public class HelloFailedEvaluatorHandler : IObserver<IFailedEvaluator> + { + private static int _failureCount = 0; + + private static readonly int _maxTrial = 2; + + [Inject] + private HelloFailedEvaluatorHandler() + { + } + + /// <summary> + /// Sample code to resubmit a request + /// </summary> + /// <param name="failedEvaluator"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedTaskHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedTaskHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedTaskHandler.cs new file mode 100644 index 0000000..4b19bea --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloFailedTaskHandler.cs @@ -0,0 +1,74 @@ +/** + * 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.Task; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Utilities; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of FailedTask Handler + /// </summary> + public class HelloFailedTaskHandler : IObserver<IFailedTask> + { + [Inject] + private HelloFailedTaskHandler() + { + } + + /// <summary> + /// Sample code close the active context when task is failed + /// </summary> + /// <param name="failedTask"></param> + 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(); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloHttpHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloHttpHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloHttpHandler.cs new file mode 100644 index 0000000..3c4899c --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloHttpHandler.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 System.Globalization; +using System.Net; +using Org.Apache.REEF.Driver.Bridge; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Utilities; +using Org.Apache.REEF.Utilities.Logging; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of HttpHandler + /// </summary> + public class HelloHttpHandler : IHttpHandler + { + private static readonly Logger Logger = Logger.GetLogger(typeof(HttpServerHandler)); + + [Inject] + private HelloHttpHandler() + { + } + + public string GetSpecification() + { + return "NRT"; //Client Example + } + + /// <summary> + /// Sample code after receiving http request and send back the http response + /// </summary> + /// <param name="requet"></param> + /// <param name="response"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRestartHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRestartHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRestartHandler.cs new file mode 100644 index 0000000..547aa08 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRestartHandler.cs @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +using System; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Wake.Time.Event; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// A sample implementation of driver restart handler + /// </summary> + public class HelloRestartHandler : IObserver<StartTime> + { + [Inject] + private HelloRestartHandler() + { + } + + /// <summary> + /// It is called when the driver is restarted + /// </summary> + /// <param name="value"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRunningTaskHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRunningTaskHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRunningTaskHandler.cs new file mode 100644 index 0000000..cc0c725 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloRunningTaskHandler.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 System; +using System.Globalization; +using Org.Apache.REEF.Driver.Context; +using Org.Apache.REEF.Driver.Task; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Utilities; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// Sample implementation of RunningTaskHandler + /// </summary> + public class HelloRunningTaskHandler : IObserver<IRunningTask> + { + [Inject] + private HelloRunningTaskHandler() + { + } + + /// <summary> + /// Sample code to send message to running task + /// </summary> + /// <param name="runningTask"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloTaskMessageHandler.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloTaskMessageHandler.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloTaskMessageHandler.cs new file mode 100644 index 0000000..18b798e --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloTaskMessageHandler.cs @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +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.AllHandlers +{ + /// <summary> + /// A sample implementation of TaskMessage Handler + /// </summary> + public class HelloTaskMessageHandler : IObserver<ITaskMessage> + { + [Inject] + private HelloTaskMessageHandler() + { + } + + /// <summary> + /// It is called when receiving a task message + /// </summary> + /// <param name="taskMessage"></param> + 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloTraceListener.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloTraceListener.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/HelloTraceListener.cs new file mode 100644 index 0000000..bd97549 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/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 System.Diagnostics; +using Org.Apache.REEF.Tang.Annotations; + +namespace Org.Apache.REEF.Examples.AllHandlers +{ + /// <summary> + /// This is a sample implementation on how custom trace listener can be implemented + /// </summary> + public class HelloTraceListener : TraceListener + { + private readonly TraceListener _listener; + + [Inject] + private 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/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Org.Apache.REEF.Examples.AllHandlers.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Org.Apache.REEF.Examples.AllHandlers.csproj b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Org.Apache.REEF.Examples.AllHandlers.csproj new file mode 100644 index 0000000..3a69437 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Org.Apache.REEF.Examples.AllHandlers.csproj @@ -0,0 +1,122 @@ +<?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>{159F7D70-8ACC-4D97-9F6D-2FC4CA0D8682}</ProjectGuid> + <OutputType>Exe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Org.Apache.REEF.Examples.AllHandlers</RootNamespace> + <AssemblyName>Org.Apache.REEF.Examples.AllHandlers</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <RestorePackages>true</RestorePackages> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..</SolutionDir> + </PropertyGroup> + <PropertyGroup> + <StartupObject /> + </PropertyGroup> + <Import Project="$(SolutionDir)\build.props" /> + <PropertyGroup> + <UseVSHostingProcess>false</UseVSHostingProcess> + </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="AllHandlers.cs" /> + <Compile Include="AnotherHelloAllocatedEvaluatorHandler.cs" /> + <Compile Include="HelloActiveContextHandler.cs" /> + <Compile Include="HelloAllocatedEvaluatorHandler.cs" /> + <Compile Include="HelloCompletedEvaluatorHandler.cs" /> + <Compile Include="HelloDriverRestartActiveContextHandler.cs" /> + <Compile Include="HelloDriverRestartRunningTaskHandler.cs" /> + <Compile Include="HelloDriverStartHandler.cs" /> + <Compile Include="HelloFailedEvaluatorHandler.cs" /> + <Compile Include="HelloFailedTaskHandler.cs" /> + <Compile Include="HelloHttpHandler.cs" /> + <Compile Include="HelloRestartHandler.cs" /> + <Compile Include="HelloRunningTaskHandler.cs" /> + <Compile Include="HelloTaskMessageHandler.cs" /> + <Compile Include="HelloTraceListener.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Bridge\Org.Apache.REEF.Bridge.vcxproj"> + <Project>{4e69d40a-26d6-4d4a-b96d-729946c07fe1}</Project> + <Name>Org.Apache.REEF.Bridge</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Client\Org.Apache.REEF.Client.csproj"> + <Project>{5094c35b-4fdb-4322-ac05-45d684501cbf}</Project> + <Name>Org.Apache.REEF.Client</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Common\Org.Apache.REEF.Common.csproj"> + <Project>{545a0582-4105-44ce-b99c-b1379514a630}</Project> + <Name>Org.Apache.REEF.Common</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Driver\Org.Apache.REEF.Driver.csproj"> + <Project>{a6baa2a7-f52f-4329-884e-1bcf711d6805}</Project> + <Name>Org.Apache.REEF.Driver</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Evaluator\Org.Apache.REEF.Evaluator.csproj"> + <Project>{1b983182-9c30-464c-948d-f87eb93a8240}</Project> + <Name>Org.Apache.REEF.Evaluator</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Examples\Org.Apache.REEF.Examples.csproj"> + <Project>{75503f90-7b82-4762-9997-94b5c68f15db}</Project> + <Name>Org.Apache.REEF.Examples</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Network\Org.Apache.REEF.Network.csproj"> + <Project>{883ce800-6a6a-4e0a-b7fe-c054f4f2c1dc}</Project> + <Name>Org.Apache.REEF.Network</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Tang\Org.Apache.REEF.Tang.csproj"> + <Project>{97dbb573-3994-417a-9f69-ffa25f00d2a6}</Project> + <Name>Org.Apache.REEF.Tang</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Utilities\Org.Apache.REEF.Utilities.csproj"> + <Project>{79e7f89a-1dfb-45e1-8d43-d71a954aeb98}</Project> + <Name>Org.Apache.REEF.Utilities</Name> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Wake\Org.Apache.REEF.Wake.csproj"> + <Project>{cdfb3464-4041-42b1-9271-83af24cd5008}</Project> + <Name>Org.Apache.REEF.Wake</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <None Include="Readme.md" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!--begin jar reference--> + <PropertyGroup> + <AfterBuildDependsOn> + $(AfterBuildDependsOn); + CopyJarFiles; + </AfterBuildDependsOn> + </PropertyGroup> + <Target Name="AfterBuild" DependsOnTargets="$(AfterBuildDependsOn);" /> + <!--end jar reference--> +</Project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Properties/AssemblyInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Properties/AssemblyInfo.cs b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..185f822 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Properties/AssemblyInfo.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.Reflection; +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("Org.Apache.REEF.Examples.AllHandlers")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Org.Apache.REEF.Examples.AllHandlers")] +[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("2c286656-9b3f-42f9-a29f-3307ebfc8022")] + +// 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("0.12.0.0")] +[assembly: AssemblyFileVersion("0.12.0.0")] http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Readme.md ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Readme.md b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Readme.md new file mode 100644 index 0000000..671c991 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Examples.AllHandlers/Readme.md @@ -0,0 +1,17 @@ +# AllHandlers +This project contains an example of a REEF Program. It contains the following classes: + + * `AllHandlers`: This is the program that submits the driver to the local runtime. + * `HelloDriverStartHandler`: The Driver requests 2 Evaluators. + * `HelloAllocatedEvaluatorHandler` : The handler that submit Context and Tasks + * `HelloActiveContextHandler` : The handler that submit Tasks to Context + * `HelloHttpHandler` : The handler that handles http requests + * `HelloRunningTaskHandler` : The handler that send messages to Running Task + * `HelloTaskMessageHandler` : The handler that receives task messages + * Other handler samples + * `HelloTask`: This Task prints a greeting to STDOUT of the Evaluator. + +## Running it +Just run the main class, `AllHandlers`, followed by the runtime you want, e.g. `local` and the run time folder e.g. 'REEF_LOCAL_RUNTIME'. If you don't specify the run time parameters, default will be used. +e.g. AllHandlers.exe local REEF_LOCAL_RUNTIME +or AllHandler.exe \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs b/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs deleted file mode 100644 index d05503d..0000000 --- a/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/ClrBridgeClient.cs +++ /dev/null @@ -1,122 +0,0 @@ -/** - * 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.IO; -using Org.Apache.REEF.Client.API; -using Org.Apache.REEF.Client.Local; -using Org.Apache.REEF.Client.YARN; -using Org.Apache.REEF.Common.Evaluator; -using Org.Apache.REEF.Driver; -using Org.Apache.REEF.Driver.Bridge; -using Org.Apache.REEF.Driver.Defaults; -using Org.Apache.REEF.Examples.HelloCLRBridge.Handlers; -using Org.Apache.REEF.Examples.Tasks.HelloTask; -using Org.Apache.REEF.Network.Naming; -using Org.Apache.REEF.Tang.Annotations; -using Org.Apache.REEF.Tang.Implementations.Tang; -using Org.Apache.REEF.Tang.Interface; -using Org.Apache.REEF.Tang.Util; -using Org.Apache.REEF.Utilities.Logging; - -namespace Org.Apache.REEF.Examples.HelloCLRBridge -{ - public sealed class ClrBridgeClient - { - private const string Local = "local"; - private const string YARN = "yarn"; - private readonly IREEFClient _reefClient; - private readonly JobSubmissionBuilderFactory _jobSubmissionBuilderFactory; - - [Inject] - private ClrBridgeClient(IREEFClient reefClient, JobSubmissionBuilderFactory jobSubmissionBuilderFactory) - { - _reefClient = reefClient; - _jobSubmissionBuilderFactory = jobSubmissionBuilderFactory; - } - - private void Run() - { - var helloDriverConfiguration = DriverConfiguration.ConfigurationModule - .Set(DriverConfiguration.OnEvaluatorAllocated, GenericType<HelloAllocatedEvaluatorHandler>.Class) - .Set(DriverConfiguration.OnEvaluatorAllocated, GenericType<AnotherHelloAllocatedEvaluatorHandler>.Class) - .Set(DriverConfiguration.OnContextActive, GenericType<HelloActiveContextHandler>.Class) - .Set(DriverConfiguration.OnTaskMessage, GenericType<HelloTaskMessageHandler>.Class) - .Set(DriverConfiguration.OnEvaluatorFailed, GenericType<HelloFailedEvaluatorHandler>.Class) - .Set(DriverConfiguration.OnTaskFailed, GenericType<HelloFailedTaskHandler>.Class) - .Set(DriverConfiguration.OnTaskRunning, GenericType<HelloRunningTaskHandler>.Class) - .Set(DriverConfiguration.OnDriverStarted, GenericType<HelloDriverStartHandler>.Class) - .Set(DriverConfiguration.OnHttpEvent, GenericType<HelloHttpHandler>.Class) - .Set(DriverConfiguration.OnEvaluatorCompleted, GenericType<HelloCompletedEvaluatorHandler>.Class) - .Set(DriverConfiguration.CustomTraceListeners, GenericType<DefaultCustomTraceListener>.Class) - .Set(DriverConfiguration.CustomTraceLevel, Level.Info.ToString()) - .Set(DriverConfiguration.OnDriverRestarted, GenericType<HelloRestartHandler>.Class) - .Set(DriverConfiguration.OnDriverReconnect, GenericType<DefaultLocalHttpDriverConnection>.Class) - .Set(DriverConfiguration.OnDirverRestartContextActive, GenericType<HelloDriverRestartActiveContextHandler>.Class) - .Set(DriverConfiguration.OnDriverRestartTaskRunning, GenericType<HelloDriverRestartRunningTaskHandler>.Class) - .Build(); - - var driverCondig = TangFactory.GetTang().NewConfigurationBuilder(helloDriverConfiguration) - .BindSetEntry<DriverBridgeConfigurationOptions.SetOfAssemblies, string>(typeof(HelloTask).Assembly.GetName().Name) - .BindSetEntry<DriverBridgeConfigurationOptions.SetOfAssemblies, string>(typeof(NameClient).Assembly.GetName().Name) - .Build(); - - var helloJobSubmission = _jobSubmissionBuilderFactory.GetJobSubmissionBuilder() - .AddDriverConfiguration(driverCondig) - .AddGlobalAssemblyForType(typeof(HelloDriverStartHandler)) - .SetJobIdentifier("HelloDriver") - .Build(); - - _reefClient.Submit(helloJobSubmission); - } - - /// <summary> - /// <param name="runOnYarn"></param> - /// <param name="runtimeFolder"></param> - /// <returns></returns> - private static IConfiguration GetRuntimeConfiguration(string runOnYarn, string runtimeFolder) - { - switch (runOnYarn) - { - case Local: - var dir = Path.Combine(".", runtimeFolder); - return LocalRuntimeClientConfiguration.ConfigurationModule - .Set(LocalRuntimeClientConfiguration.NumberOfEvaluators, "2") - .Set(LocalRuntimeClientConfiguration.RuntimeFolder, dir) - .Build(); - case YARN: - return YARNClientConfiguration.ConfigurationModule.Build(); - default: - throw new Exception("Unknown runtime: " + runOnYarn); - } - } - - public static void Main(string[] args) - { - Run(args); - } - - public static void Run(string[] args) - { - string runOnYarn = args.Length > 0 ? args[0] : Local; - string runtimeFolder = args.Length > 1 ? args[1] : "REEF_LOCAL_RUNTIME"; - TangFactory.GetTang().NewInjector(GetRuntimeConfiguration(runOnYarn, runtimeFolder)).GetInstance<ClrBridgeClient>().Run(); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/7824be83/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/Org.Apache.REEF.Examples.HelloCLRBridge.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/Org.Apache.REEF.Examples.HelloCLRBridge.csproj b/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/Org.Apache.REEF.Examples.HelloCLRBridge.csproj deleted file mode 100644 index 08702d7..0000000 --- a/lang/cs/Org.Apache.REEF.Examples.HelloCLRBridge/Org.Apache.REEF.Examples.HelloCLRBridge.csproj +++ /dev/null @@ -1,105 +0,0 @@ -<?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>{159F7D70-8ACC-4D97-9F6D-2FC4CA0D8682}</ProjectGuid> - <OutputType>Exe</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> - <RestorePackages>true</RestorePackages> - <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..</SolutionDir> - </PropertyGroup> - <PropertyGroup> - <StartupObject /> - </PropertyGroup> - <Import Project="$(SolutionDir)\build.props" /> - <PropertyGroup> - <UseVSHostingProcess>false</UseVSHostingProcess> - </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="ClrBridgeClient.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Bridge\Org.Apache.REEF.Bridge.vcxproj"> - <Project>{4e69d40a-26d6-4d4a-b96d-729946c07fe1}</Project> - <Name>Org.Apache.REEF.Bridge</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Client\Org.Apache.REEF.Client.csproj"> - <Project>{5094c35b-4fdb-4322-ac05-45d684501cbf}</Project> - <Name>Org.Apache.REEF.Client</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Common\Org.Apache.REEF.Common.csproj"> - <Project>{545a0582-4105-44ce-b99c-b1379514a630}</Project> - <Name>Org.Apache.REEF.Common</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Driver\Org.Apache.REEF.Driver.csproj"> - <Project>{a6baa2a7-f52f-4329-884e-1bcf711d6805}</Project> - <Name>Org.Apache.REEF.Driver</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Evaluator\Org.Apache.REEF.Evaluator.csproj"> - <Project>{1b983182-9c30-464c-948d-f87eb93a8240}</Project> - <Name>Org.Apache.REEF.Evaluator</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Examples\Org.Apache.REEF.Examples.csproj"> - <Project>{75503f90-7b82-4762-9997-94b5c68f15db}</Project> - <Name>Org.Apache.REEF.Examples</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Network\Org.Apache.REEF.Network.csproj"> - <Project>{883ce800-6a6a-4e0a-b7fe-c054f4f2c1dc}</Project> - <Name>Org.Apache.REEF.Network</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Tang\Org.Apache.REEF.Tang.csproj"> - <Project>{97dbb573-3994-417a-9f69-ffa25f00d2a6}</Project> - <Name>Org.Apache.REEF.Tang</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Utilities\Org.Apache.REEF.Utilities.csproj"> - <Project>{79e7f89a-1dfb-45e1-8d43-d71a954aeb98}</Project> - <Name>Org.Apache.REEF.Utilities</Name> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\Org.Apache.REEF.Wake\Org.Apache.REEF.Wake.csproj"> - <Project>{cdfb3464-4041-42b1-9271-83af24cd5008}</Project> - <Name>Org.Apache.REEF.Wake</Name> - </ProjectReference> - </ItemGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <!--begin jar reference--> - <PropertyGroup> - <AfterBuildDependsOn> - $(AfterBuildDependsOn); - CopyJarFiles; - </AfterBuildDependsOn> - </PropertyGroup> - <Target Name="AfterBuild" DependsOnTargets="$(AfterBuildDependsOn);" /> - <!--end jar reference--> -</Project> \ No newline at end of file
