Example #1
0
        public void SetState(TaskStateInfo newStateInfo)
        {
            lock (this.StateLock)
            {
                if (_stateInfo != null && _stateInfo.IsFinished())
                {
                    Log.Warn(String.Format("Tried to change state of finished task {0} to {1} ('{2}')",
                                           this.Context.TaskId, newStateInfo.State, newStateInfo.StateComment
                                           ));

                    // ignoring changes for finished tasks
                }
                else
                {
                    this._stateInfo = new TaskStateInfo(newStateInfo);
                    this.Save();

                    if (newStateInfo.IsFinished()) // completed on this iteration
                    {
                        var resource = ResourceCache.GetByName(this.Context.Resource.ResourceName);
                        resource.Release(this.Context.NodesConfig);

                        // todo : import to Storage
                    }
                }
            }
        }
        public void Run(TaskRunContext task)
        {
            _resourcesLock.EnterReadLock();

            try
            {
                Log.Info("Running task " + task.ToString());

                string resourceName  = task.NodesConfig.First().ResourceName;
                var    resourceCache =
                    ResourceCache.GetByName(resourceName);

                lock (resourceCache.StateLock)
                {
                    CheckNodeConfigConsistency(task.TaskId, task.NodesConfig, resourceCache.Resource);

                    task.Resource   = resourceCache.Resource;
                    task.Controller = resourceCache.Controller;
                }

                try
                {
                    resourceCache.Acquire(task.NodesConfig);  // todo : m.b. move under resourceCache.StateLock?

                    Log.Info(String.Format("Trying to run task {0} on resource {1}", task.TaskId, task.Resource.ResourceName));

                    task.LocalId = task.Controller.Run(task);

                    Log.Info(String.Format("Task {0} ({1}) started on resource {2} with localId = {3}",
                                           task.TaskId, task.PackageName, task.Resource.ResourceName, task.LocalId
                                           ));

                    var state = new TaskStateInfo(TaskState.Started, task.LocalId.ToString());
                    TaskCache.AddTask(task, state);
                }
                catch (Exception e)
                {
                    resourceCache.Release(task.NodesConfig);

                    Log.Error(String.Format("Unable to run task {0}: {1}", task.TaskId, e));
                    throw;
                }
            }
            catch (Exception e)
            {
                Log.Error(String.Format("Exception on Farm.Run(task {0}): {1}", task.TaskId, e));
                throw;
            }
            finally
            {
                _resourcesLock.ExitReadLock();
            }


            //todo for mock
            if (CacheCollectorFactory.CheckMockMode())
            {
                CacheCollectorFactory.GetInstance().SendTask(task);
            }
        }
        public TaskStateInfo GetTaskStateInfo(ulong taskId)
        {
            _resourcesLock.EnterReadLock();

            try
            {
                var task = TaskCache.GetById(taskId);
                task.UpdateStateAsync();

                lock (task.StateInfo)
                {
                    var taskState = new TaskStateInfo(task.StateInfo);
                    return(taskState);
                }
            }
            catch (Exception e)
            {
                Log.Error(String.Format("Error on getting task {0} state info: {1}", taskId, e));
                throw;
            }
            finally
            {
                _resourcesLock.ExitReadLock();
            }
        }
Example #4
0
        public TaskStateInfo GetTaskStateInfo(TaskRunContext task)
        {
            var node   = GetNode(task);
            var taskId = task.TaskId;

            string        result;
            TaskStateInfo info = null;

            if (GetFromResourceTaskStateInfo(task, out result))
            {
                info = new TaskStateInfo(TaskState.Started, result);
            }

            // esle if (Aborted, Failed)
            else
            {
                CopyOutputsToExchange(task);

                info = new TaskStateInfo(TaskState.Completed, result);
            }

            //todo nbutakov change
            info.ProcessInfo = GetCurrentTaskInfo(task);
            info.NodeName    = GetNode(task).NodeName;
            return(info);
        }
Example #5
0
        public TaskStateInfo GetTaskStateInfo(TaskRunContext task)
        {
            var node = GetNode(task);
            var taskId = task.TaskId;

            string result;
            TaskStateInfo info = null;

            if (GetFromResourceTaskStateInfo(task, out result))
            {

                info = new TaskStateInfo(TaskState.Started, result);

            }

            // esle if (Aborted, Failed)
            else
            {
                CopyOutputsToExchange(task);

                info = new TaskStateInfo(TaskState.Completed, result);
            }

            //todo nbutakov change
            info.ProcessInfo = GetCurrentTaskInfo(task);
            info.NodeName = GetNode(task).NodeName;
            return info;
        }
Example #6
0
            private TaskCache(TaskRunContext context, TaskStateInfo state)
            {
                Context   = context;
                StateInfo = state;

                _isUpdating     = false;
                _lastUpdateTime = DateTime.Now;
            }
Example #7
0
        public TaskStateInfo(TaskStateInfo otherTask)
        {
            State        = otherTask.State;
            StateComment = otherTask.StateComment;

            ActionsDuration    = new Dictionary <string, TimeSpan>(otherTask.ActionsDuration);
            ResourceConsuption = new Dictionary <string, double>(otherTask.ResourceConsuption);
        }
Example #8
0
            }                                                          // mutable

            private TaskCache(TaskRunContext context, TaskState state = TaskState.Started, string stateComment = "")
            {
                Context   = context;
                StateInfo = new TaskStateInfo(state, stateComment);

                _isUpdating     = false;
                _lastUpdateTime = DateTime.Now - UPDATE_INTERVAL - TimeSpan.FromMilliseconds(50);
            }
Example #9
0
        public static void AddTask(TaskRunContext context, TaskStateInfo state)                                         //, TaskState state = TaskState.Started, string stateComment = "")
        {
            var taskCache = new TaskCache(context, state, CacheCollectorFactory.GetInstance().GetTaskCacheCollector()); // autosaves

            lock (_globalLock)
            {
                _cache[context.TaskId] = taskCache;
            }
        }
Example #10
0
        private TaskCache(TaskRunContext context, TaskStateInfo state, ITaskGlobalCacheCollector collector = null)
        {
            lock (_globalLock)
            {
                StateLock = new object(); // needs to be explicitly before SetState, which triggers Save (i.e. makes object publicly available in memory)

                _isUpdating     = false;
                _lastUpdateTime = DateTime.Now - UPDATE_INTERVAL - TimeSpan.FromMilliseconds(50);

                Context = context;
            }

            SetState(state);
            gcCollector = collector;
        }
Example #11
0
        private TaskStateInfo _stateInfo; //todo : BsonElement("StateInfo")

        #endregion Fields

        #region Constructors

        private TaskCache(TaskRunContext context, TaskStateInfo state, ITaskGlobalCacheCollector collector = null)
        {
            lock (_globalLock)
            {
                StateLock = new object(); // needs to be explicitly before SetState, which triggers Save (i.e. makes object publicly available in memory)

                _isUpdating = false;
                _lastUpdateTime = DateTime.Now - UPDATE_INTERVAL - TimeSpan.FromMilliseconds(50);

                Context = context;
            }

            SetState(state);
            gcCollector = collector;
        }
Example #12
0
        public void push(TaskRunContext context, ulong taskId, TaskStateInfo info)
        {
            Common.Utility.LogInfo("TaskCacheCollector.push taskId=" + taskId + " info=" + info.ProcessInfo.TimeSnapshot);

            if (!IsServicedController(context.Controller)){ return;}

            var resName = context.Resource.ResourceName;

            lock (_lock)
            {
                if (!bufferTaskInfo.ContainsKey(taskId))
                {
                    bufferTaskInfo.Add(taskId, new TaskStatInfo(new Dictionary<string, List<ProcessStatInfo>>(),resName));
                }

                if (!bufferTaskInfo[taskId].ProcessInfoCollection.ContainsKey(info.NodeName))
                {
                    bufferTaskInfo[taskId].ProcessInfoCollection.Add(info.NodeName,new List<ProcessStatInfo>());
                }

                bufferTaskInfo[taskId].ProcessInfoCollection[info.NodeName].Add(info.ProcessInfo);
            }
        }
Example #13
0
            private TaskCache(TaskRunContext context, TaskState state = TaskState.Started, string stateComment = "")
            {
                Context = context;
                StateInfo = new TaskStateInfo(state, stateComment);

                _isUpdating = false;
                _lastUpdateTime = DateTime.Now - UPDATE_INTERVAL - TimeSpan.FromMilliseconds(50);
            }
        public TaskStateInfo(TaskStateInfo otherTask)
        {
            State = otherTask.State;
            StateComment = otherTask.StateComment;

            ActionsDuration = new Dictionary<string, TimeSpan>(otherTask.ActionsDuration);
            ResourceConsuption = new Dictionary<string, double>(otherTask.ResourceConsuption);
        }
Example #15
0
        //, TaskState state = TaskState.Started, string stateComment = "")
        public static void AddTask(TaskRunContext context, TaskStateInfo state)
        {
            var taskCache = new TaskCache(context, state, CacheCollectorFactory.GetInstance().GetTaskCacheCollector()); // autosaves

            lock (_globalLock)
            {
                _cache[context.TaskId] = taskCache;
            }
        }
Example #16
0
        public void SetState(TaskStateInfo newStateInfo)
        {
            lock (this.StateLock)
            {
                if (_stateInfo != null && _stateInfo.IsFinished())
                {
                    Log.Warn(String.Format("Tried to change state of finished task {0} to {1} ('{2}')",
                        this.Context.TaskId, newStateInfo.State, newStateInfo.StateComment
                    ));

                    // ignoring changes for finished tasks
                }
                else
                {
                    this._stateInfo = new TaskStateInfo(newStateInfo);
                    this.Save();

                    if (newStateInfo.IsFinished()) // completed on this iteration
                    {
                        var resource = ResourceCache.GetByName(this.Context.Resource.ResourceName);
                        resource.Release(this.Context.NodesConfig);

                        // todo : import to Storage
                    }
                }
            }
        }
 public void push(TaskRunContext context, ulong taskId, TaskStateInfo info)
 {
 }
            private TaskStateInfo GenerateTaskMockData(string nodeName, int koeff)
            {
                //todo recode it in a proper way later.
                var info = new ProcessStatInfo();

                var k1 = koeff*koeff + koeff + 1;
                var k2 = koeff*koeff;
                var k3 = Math.Sqrt(koeff) + koeff*koeff;

                info.FileCount = "5";
                info.Net = 1000 * k1;
                info.PhysicalMem =5000 * k2 ;
                info.ProcUsage = (long)(3000 * k3);
                info.TotalProcTime = (long)(4000 * k3);
                info.WorkDirSize = 11000 * k1;
                info.TimeSnapshot = DateTime.Now;

                var taskStateInfo = new TaskStateInfo();
                taskStateInfo.NodeName = nodeName;
                taskStateInfo.ProcessInfo = info;

                return taskStateInfo;
            }
Example #19
0
            private TaskCache(TaskRunContext context, TaskStateInfo state)
            {
                Context = context;
                StateInfo = state;

                _isUpdating = false;
                _lastUpdateTime = DateTime.Now;
            }
        public void Run(TaskRunContext task)
        {
            _resourcesLock.EnterReadLock();

            try
            {
                Log.Info("Running task " + task.ToString());

                string resourceName = task.NodesConfig.First().ResourceName;
                var resourceCache =
                    ResourceCache.GetByName(resourceName);

                lock (resourceCache.StateLock)
                {
                    CheckNodeConfigConsistency(task.TaskId, task.NodesConfig, resourceCache.Resource);

                    task.Resource = resourceCache.Resource;
                    task.Controller = resourceCache.Controller;
                }

                try
                {
                    resourceCache.Acquire(task.NodesConfig);  // todo : m.b. move under resourceCache.StateLock?

                    Log.Info(String.Format("Trying to run task {0} on resource {1}", task.TaskId, task.Resource.ResourceName));

                    task.LocalId = task.Controller.Run(task);

                    Log.Info(String.Format("Task {0} ({1}) started on resource {2} with localId = {3}",
                        task.TaskId, task.PackageName, task.Resource.ResourceName, task.LocalId
                    ));

                    var state = new TaskStateInfo(TaskState.Started, task.LocalId.ToString());
                    TaskCache.AddTask(task, state);
                }
                catch (Exception e)
                {
                    resourceCache.Release(task.NodesConfig);

                    Log.Error(String.Format("Unable to run task {0}: {1}", task.TaskId, e));
                    throw;
                }
            }
            catch (Exception e)
            {
                Log.Error(String.Format("Exception on Farm.Run(task {0}): {1}", task.TaskId, e));
                throw;
            }
            finally
            {
                _resourcesLock.ExitReadLock();
            }

            //todo for mock
            if (CacheCollectorFactory.CheckMockMode())
            {
                CacheCollectorFactory.GetInstance().SendTask(task);
            }
        }
        public TaskStateInfo GetTaskStateInfo(ulong taskId)
        {
            _resourcesLock.EnterReadLock();

            try
            {
                var task = TaskCache.GetById(taskId);
                task.UpdateStateAsync();

                lock (task.StateInfo)
                {
                    var taskState = new TaskStateInfo(task.StateInfo);
                    return taskState;
                }
            }
            catch (Exception e)
            {
                Log.Error(String.Format("Error on getting task {0} state info: {1}", taskId, e));
                throw;
            }
            finally
            {
                _resourcesLock.ExitReadLock();
            }
        }