private void StartTask( string taskId, IConfiguration userPartialTaskConf, IActiveContext activeContext) { IConfiguration groupCommTaskConfiguration = _groupCommDriver.GetGroupCommTaskConfiguration(taskId); IConfiguration mergedTaskConf = Configurations.Merge(userPartialTaskConf, groupCommTaskConfiguration); activeContext.SubmitTask(mergedTaskConf); }
public static List <ICommunicationGroupClient> CommGroupClients(string groupName, int numTasks, IGroupCommDriver groupCommDriver, ICommunicationGroupDriver commGroupDriver, IConfiguration userServiceConfig) { List <ICommunicationGroupClient> commGroups = new List <ICommunicationGroupClient>(); IConfiguration serviceConfig = groupCommDriver.GetServiceConfiguration(); serviceConfig = Configurations.Merge(serviceConfig, userServiceConfig); List <IConfiguration> partialConfigs = new List <IConfiguration>(); for (int i = 0; i < numTasks; i++) { string taskId = "task" + i; IConfiguration partialTaskConfig = TangFactory.GetTang().NewConfigurationBuilder( TaskConfiguration.ConfigurationModule .Set(TaskConfiguration.Identifier, taskId) .Set(TaskConfiguration.Task, GenericType <MyTask> .Class) .Build()) .Build(); commGroupDriver.AddTask(taskId); partialConfigs.Add(partialTaskConfig); } for (int i = 0; i < numTasks; i++) { // get task configuration at driver side string taskId = "task" + i; IConfiguration groupCommTaskConfig = groupCommDriver.GetGroupCommTaskConfiguration(taskId); IConfiguration mergedConf = Configurations.Merge(groupCommTaskConfig, partialConfigs[i], serviceConfig); var conf = TangFactory.GetTang() .NewConfigurationBuilder(mergedConf) .BindNamedParameter(typeof(GroupCommConfigurationOptions.Initialize), "false") .Build(); IInjector injector = TangFactory.GetTang().NewInjector(conf); // simulate injection at evaluator side IGroupCommClient groupCommClient = injector.GetInstance <IGroupCommClient>(); commGroups.Add(groupCommClient.GetCommunicationGroup(groupName)); } return(commGroups); }
/// <summary> /// This method is responsible to prepare for the task submission then call SubmitTasks in TaskManager. /// It is called in both first time and recovery scenarios. /// Creates a new Communication Group and adds Group Communication Operators /// For each context, adds a task to the communication group. /// After all the tasks are added to the group, for each task, gets GroupCommTaskConfiguration from IGroupCommDriver /// and merges it with the task configuration. /// When all the tasks are added, calls TaskManager to SubmitTasks(). /// </summary> private void SubmitTasks(IEnumerable <IActiveContext> activeContexts) { Logger.Log(Level.Info, "SubmitTasks with system state : {0} at time: {1}.", _systemState.CurrentState, DateTime.Now); using (Logger.LogFunction("IMRUDriver::SubmitTasksConfiguration")) { if (!_isFirstTry) { _groupCommDriver.RemoveCommunicationGroup(IMRUConstants.CommunicationGroupName); } UpdateMaterTaskId(); _taskManager = new TaskManager(_totalMappers + 1, _groupCommDriver.MasterTaskId); var commGroup = AddCommunicationGroupWithOperators(); _perMapperConfigurationStack = ConstructPerMapperConfigStack(_totalMappers); var taskIdAndContextMapping = new Dictionary <string, IActiveContext>(); foreach (var activeContext in activeContexts) { var taskId = _evaluatorManager.IsMasterEvaluatorId(activeContext.EvaluatorId) ? _groupCommDriver.MasterTaskId : GetMapperTaskIdByEvaluatorId(activeContext.EvaluatorId); commGroup.AddTask(taskId); taskIdAndContextMapping.Add(taskId, activeContext); } foreach (var mapping in taskIdAndContextMapping) { var taskConfig = _evaluatorManager.IsMasterEvaluatorId(mapping.Value.EvaluatorId) ? GetMasterTaskConfiguration(mapping.Key) : GetMapperTaskConfiguration(mapping.Value, mapping.Key); var groupCommTaskConfiguration = _groupCommDriver.GetGroupCommTaskConfiguration(mapping.Key); var mergedTaskConf = Configurations.Merge(taskConfig, groupCommTaskConfiguration); _taskManager.AddTask(mapping.Key, mergedTaskConf, mapping.Value); } } _taskManager.SubmitTasks(); }