public void OnNext(IAllocatedEvaluator allocatedEvaluator)
        {
            IConfiguration contextConfiguration = _groupCommDriver.GetContextConfiguration();

            int partitionNum;

            if (_groupCommDriver.IsMasterContextConfiguration(contextConfiguration))
            {
                partitionNum = -1;
            }
            else
            {
                lock (_lockObj)
                {
                    partitionNum = _partitionInex;
                    _partitionInex++;
                }
            }

            IConfiguration gcServiceConfiguration = _groupCommDriver.GetServiceConfiguration();

            gcServiceConfiguration = Configurations.Merge(gcServiceConfiguration, _centroidCodecConf, _controlMessageCodecConf, _processedResultsCodecConf);
            IConfiguration commonServiceConfiguration = TangFactory.GetTang().NewConfigurationBuilder(gcServiceConfiguration)
                                                        .BindNamedParameter <DataPartitionCache.PartitionIndex, int>(GenericType <DataPartitionCache.PartitionIndex> .Class, partitionNum.ToString(CultureInfo.InvariantCulture))
                                                        .BindNamedParameter <KMeansConfiguratioinOptions.ExecutionDirectory, string>(GenericType <KMeansConfiguratioinOptions.ExecutionDirectory> .Class, _executionDirectory)
                                                        .BindNamedParameter <KMeansConfiguratioinOptions.TotalNumEvaluators, int>(GenericType <KMeansConfiguratioinOptions.TotalNumEvaluators> .Class, _totalEvaluators.ToString(CultureInfo.InvariantCulture))
                                                        .BindNamedParameter <KMeansConfiguratioinOptions.K, int>(GenericType <KMeansConfiguratioinOptions.K> .Class, _clustersNumber.ToString(CultureInfo.InvariantCulture))
                                                        .Build();

            IConfiguration dataCacheServiceConfiguration = ServiceConfiguration.ConfigurationModule
                                                           .Set(ServiceConfiguration.Services, GenericType <DataPartitionCache> .Class)
                                                           .Build();

            allocatedEvaluator.SubmitContextAndService(contextConfiguration, Configurations.Merge(commonServiceConfiguration, dataCacheServiceConfiguration));
        }
        private ContextAndServiceConfiguration GetMapTaskContextAndServiceConfiguration(IPartitionDescriptor partitionDescriptor)
        {
            var codecConfig =
                TangFactory.GetTang()
                .NewConfigurationBuilder(
                    StreamingCodecConfiguration <MapInputWithControlMessage <TMapInput> > .Conf.Set(
                        StreamingCodecConfiguration <MapInputWithControlMessage <TMapInput> > .Codec,
                        GenericType <MapInputWithControlMessageCodec <TMapInput> > .Class).Build(),
                    StreamingCodecConfigurationMinusMessage <TMapOutput> .Conf.Build(),
                    _configurationManager.MapInputCodecConfiguration)
                .Build();

            var contextConf = _groupCommDriver.GetContextConfiguration();
            var serviceConf = Configurations.Merge(_groupCommDriver.GetServiceConfiguration(), codecConfig, partitionDescriptor.GetPartitionConfiguration());

            return(new ContextAndServiceConfiguration(contextConf, serviceConf));
        }
Esempio n. 3
0
        /// <summary>
        /// Creates the group communication configuration to be added to the tasks
        /// </summary>
        /// <returns>The group communication configuration</returns>
        private IConfiguration GetGroupCommConfiguration()
        {
            var codecConfig =
                TangFactory.GetTang()
                .NewConfigurationBuilder(
                    StreamingCodecConfiguration <MapInputWithControlMessage <TMapInput> > .Conf.Set(
                        StreamingCodecConfiguration <MapInputWithControlMessage <TMapInput> > .Codec,
                        GenericType <MapInputWithControlMessageCodec <TMapInput> > .Class).Build(),
                    StreamingCodecConfigurationMinusMessage <TMapOutput> .Conf.Build(),
                    _configurationManager.UpdateFunctionCodecsConfiguration)
                .Build();

            return(Configurations.Merge(_groupCommDriver.GetServiceConfiguration(), codecConfig));
        }
Esempio n. 4
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);
        }