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(); } }
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); }
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; }
private TaskCache(TaskRunContext context, TaskStateInfo state) { Context = context; StateInfo = state; _isUpdating = false; _lastUpdateTime = DateTime.Now; }
public TaskStateInfo(TaskStateInfo otherTask) { State = otherTask.State; StateComment = otherTask.StateComment; ActionsDuration = new Dictionary <string, TimeSpan>(otherTask.ActionsDuration); ResourceConsuption = new Dictionary <string, double>(otherTask.ResourceConsuption); }
} // 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); }
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; } }
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; }
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; }
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); } }
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); }
//, 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; } }
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; }
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(); } }