示例#1
0
        private void AddChild(string taskId)
        {
            TaskNode node = new TaskNode(_groupName, _operatorName, taskId, _driverId, false);

            if (_logicalRoot != null)
            {
                AddTaskNode(node);
            }
            _nodes[taskId] = node;
        }
示例#2
0
 private void AddTaskNode(TaskNode node)
 {
     if (_logicalRoot.GetNumberOfChildren() >= _fanOut)
     {
         _logicalRoot = _logicalRoot.Successor;
     }
     node.Parent = _logicalRoot;
     _logicalRoot.AddChild(node);
     _prev.Successor = node;
     _prev           = node;
 }
示例#3
0
        private void AddChild(string childId)
        {
            TaskNode childNode = new TaskNode(_groupName, _operatorName, childId, _driverId, false);

            _nodes[childId] = childNode;

            if (_root != null)
            {
                _root.AddChild(childNode);
                childNode.Parent = _root;
            }
        }
示例#4
0
        private void SetRootNode(string rootId)
        {
            TaskNode rootNode = new TaskNode(_groupName, _operatorName, rootId, _driverId, true);

            _root = rootNode;

            foreach (TaskNode childNode in _nodes.Values)
            {
                rootNode.AddChild(childNode);
                childNode.Parent = rootNode;
            }
        }
示例#5
0
        private void SetRootNode(string rootId)
        {
            _root        = new TaskNode(_groupName, _operatorName, rootId, _driverId, true);
            _logicalRoot = _root;
            _prev        = _root;

            foreach (TaskNode n in _nodes.Values)
            {
                AddTaskNode(n);
            }
            _nodes[rootId] = _root;
        }
示例#6
0
 public void AddChild(TaskNode child)
 {
     _children.Add(child);
 }
示例#7
0
        /// <summary>
        /// Gets the task configuration for the operator topology.
        /// </summary>
        /// <param name="taskId">The task identifier</param>
        /// <returns>The task configuration</returns>
        public IConfiguration GetTaskConfiguration(string taskId)
        {
            if (taskId == null)
            {
                throw new ArgumentException("TaskId is null when GetTaskConfiguration");
            }

            TaskNode selfTaskNode = GetTaskNode(taskId);

            if (selfTaskNode == null)
            {
                throw new ArgumentException("Task has not been added to the topology");
            }

            string   parentId;
            TaskNode parent = selfTaskNode.Parent;

            if (parent == null)
            {
                parentId = selfTaskNode.TaskId;
            }
            else
            {
                parentId = parent.TaskId;
            }

            //add parentid, if no parent, add itself
            ICsConfigurationBuilder confBuilder = TangFactory.GetTang().NewConfigurationBuilder()
                                                  .BindNamedParameter <GroupCommConfigurationOptions.TopologyRootTaskId, string>(
                GenericType <GroupCommConfigurationOptions.TopologyRootTaskId> .Class,
                parentId);

            //add all its children
            foreach (TaskNode childNode in selfTaskNode.GetChildren())
            {
                confBuilder.BindSetEntry <GroupCommConfigurationOptions.TopologyChildTaskIds, string>(
                    GenericType <GroupCommConfigurationOptions.TopologyChildTaskIds> .Class,
                    childNode.TaskId);
            }

            if (OperatorSpec is BroadcastOperatorSpec)
            {
                var broadcastSpec = OperatorSpec as BroadcastOperatorSpec;
                if (taskId.Equals(broadcastSpec.SenderId))
                {
                    confBuilder.BindImplementation(GenericType <IGroupCommOperator <T> > .Class, GenericType <BroadcastSender <T> > .Class);
                    SetMessageType(typeof(BroadcastSender <T>), confBuilder);
                }
                else
                {
                    confBuilder.BindImplementation(GenericType <IGroupCommOperator <T> > .Class, GenericType <BroadcastReceiver <T> > .Class);
                    SetMessageType(typeof(BroadcastReceiver <T>), confBuilder);
                }
            }
            else if (OperatorSpec is ReduceOperatorSpec)
            {
                var reduceSpec = OperatorSpec as ReduceOperatorSpec;
                if (taskId.Equals(reduceSpec.ReceiverId))
                {
                    confBuilder.BindImplementation(GenericType <IGroupCommOperator <T> > .Class, GenericType <ReduceReceiver <T> > .Class);
                    SetMessageType(typeof(ReduceReceiver <T>), confBuilder);
                }
                else
                {
                    confBuilder.BindImplementation(GenericType <IGroupCommOperator <T> > .Class, GenericType <ReduceSender <T> > .Class);
                    SetMessageType(typeof(ReduceSender <T>), confBuilder);
                }
            }
            else if (OperatorSpec is ScatterOperatorSpec)
            {
                ScatterOperatorSpec scatterSpec = OperatorSpec as ScatterOperatorSpec;
                if (taskId.Equals(scatterSpec.SenderId))
                {
                    confBuilder.BindImplementation(GenericType <IGroupCommOperator <T> > .Class, GenericType <ScatterSender <T> > .Class);
                    SetMessageType(typeof(ScatterSender <T>), confBuilder);
                }
                else
                {
                    confBuilder.BindImplementation(GenericType <IGroupCommOperator <T> > .Class, GenericType <ScatterReceiver <T> > .Class);
                    SetMessageType(typeof(ScatterReceiver <T>), confBuilder);
                }
            }
            else
            {
                throw new NotSupportedException("Spec type not supported");
            }

            return(Configurations.Merge(confBuilder.Build(), OperatorSpec.Configiration));
        }
示例#8
0
 public void AddChild(TaskNode child)
 {
     _children.Add(child);
 }