Пример #1
0
        private void StartTask(
            string taskId,
            IConfiguration userPartialTaskConf,
            IActiveContext activeContext)
        {
            IConfiguration groupCommTaskConfiguration = _groupCommDriver.GetGroupCommTaskConfiguration(taskId);
            IConfiguration mergedTaskConf             = Configurations.Merge(userPartialTaskConf, groupCommTaskConfiguration);

            activeContext.SubmitTask(mergedTaskConf);
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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();
        }