Exemple #1
0
        public static string ToString(EnumTaskStatus eStatus)
        {
            switch (eStatus)
            {
            case EnumTaskStatus.Process:
                return("Process");

            case EnumTaskStatus.Wait:
                return("Wait");

            case EnumTaskStatus.Rollback:
                return("Rollback");

            case EnumTaskStatus.Delay:
                return("Delay");

            case EnumTaskStatus.Abort:
                return("Abort");

            case EnumTaskStatus.Completed:
                return("Completed");

            default:
                return("Unknown");
            }
        }
Exemple #2
0
        /// <summary>
        /// 更新任务状态
        /// </summary>
        /// <param name="status"></param>
        public void UpdateTaskStatus(EnumTaskStatus status, CancellationToken cancellationToken = default(CancellationToken))
        {
            var result = Job.Cluster.ConfigCenter.TryUpdateTaskStatus(this, status, out int errCode, out JobBase latestJob, cancellationToken);

            if (errCode == 0 || errCode == 2)
            {
                Status = status;
            }
        }
Exemple #3
0
        /// <summary>
        /// 更新任务状态
        /// </summary>
        /// <param name="status"></param>
        public void UpdateTaskStatus(EnumTaskStatus status, CancellationToken cancellationToken = default(CancellationToken))
        {
            var result = Job.Cluster.ConfigCenter.TryUpdateTaskStatus(this, status, out int errCode, out JobBase latestJob, cancellationToken);

            LogWriter.Write(string.Format("更新任务状态结果:{0}", errCode));
            if (errCode == 0 || errCode == 2)
            {
                Status = status;
            }
        }
        /// <summary>
        /// 同步UI状态
        /// </summary>
        /// <param name="status"></param>
        private void SyncUI(EnumTaskStatus status)
        {
            switch (status)
            {
            case EnumTaskStatus.Default:
                CanStart  = false;
                CanStop   = false;
                CanClear  = false;
                IsRecords = Visibility.Collapsed;
                break;

            case EnumTaskStatus.Init:
                CanStart = true;
                CanStop  = false;
                break;

            case EnumTaskStatus.Started:
                CanStart = false;
                CanStop  = true;
                break;

            case EnumTaskStatus.Stoped:
                CanStart = true;
                CanStop  = false;
                break;

            case EnumTaskStatus.Clear:
                CanClear  = false;
                IsRecords = Visibility.Collapsed;
                Records   = new ObservableCollection <RecordObservable>();
                break;

            case EnumTaskStatus.Loading:
                if (Records.Count > 0 && IsRecords != Visibility.Visible)
                {
                    IsRecords = Visibility.Visible;
                    CanClear  = true;
                }
                if (Records.Count == 0 && IsRecords != Visibility.Collapsed)
                {
                    IsRecords = Visibility.Collapsed;
                    CanClear  = false;
                }
                if (Records.Count > 100)
                {
                    //TODO:RECORDS.COUNT > 100
                }
                break;
            }
        }
Exemple #5
0
 public EnumTaskStatus Update(object obj, float elapsedTime)
 {
     if (m_status != EnumTaskStatus.Running)
     {
         return(m_status);
     }
     m_status = m_task.Update(obj, elapsedTime);
     if (m_status == EnumTaskStatus.Success ||
         m_status == EnumTaskStatus.Failure)
     {
         m_task.Leave(obj);
     }
     return(m_status);
 }
Exemple #6
0
 public void Stop(object obj)
 {
     if (m_node == null)
     {
         return;
     }
     if (m_status == EnumTaskStatus.Running)
     {
         m_task.Leave(obj);
     }
     XBTClassFactory.Free(m_task);
     m_task   = null;
     m_node   = null;
     m_status = EnumTaskStatus.None;
 }
Exemple #7
0
 public void Start(XBTNode node, object obj)
 {
     if (m_status == EnumTaskStatus.Running)
     {
         m_task.Leave(obj);
     }
     if (m_node == null || m_node != node)
     {
         if (m_task != null)
         {
             XBTClassFactory.Free(m_task);
             m_task = null;
         }
         m_task = XBTClassFactory.Alloc <IXBTTask>(node.taskClassName);
         m_task.SetNode(node);
         m_node = node;
     }
     m_task.Enter(obj);
     m_status = EnumTaskStatus.Running;
 }
 /// <summary>
 /// Converts the task status enum to a string value
 /// </summary>
 /// <param name="StatusEnum">An IStatusFile.EnumTaskStatus object</param>
 /// <returns>String representation of input object</returns>
 private string ConvertTaskStatusToString(EnumTaskStatus StatusEnum)
 {
     return StatusEnum.ToString("G");
 }
        /// <summary>
        /// Sets status file to show mahager not running
        /// </summary>
        /// <param name="MgrError">TRUE if manager not running due to error; FALSE otherwise</param>
        public void UpdateStopped(bool MgrError)
        {
            ClearCachedInfo();

            if (MgrError)
            {
                m_MgrStatus = EnumMgrStatus.Stopped_Error;
            }
            else
            {
                m_MgrStatus = EnumMgrStatus.Stopped;
            }

            m_TaskStatus = EnumTaskStatus.No_Task;
            m_TaskStatusDetail = EnumTaskStatusDetail.No_Task;

            WriteStatusFile();
        }
        /// <summary>
        /// Updates status file to show manager in idle state
        /// </summary>
        public void UpdateIdle()
        {
            ClearCachedInfo();

            m_MgrStatus = EnumMgrStatus.Running;
            m_TaskStatus = EnumTaskStatus.No_Task;
            m_TaskStatusDetail = EnumTaskStatusDetail.No_Task;

            WriteStatusFile();
        }
        /// <summary>
        /// Updates status file to show manager disabled
        /// </summary>
        /// <param name="Local">TRUE if manager disabled locally, otherwise FALSE</param>
        public void UpdateDisabled(bool Local)
        {
            ClearCachedInfo();

            if (Local)
            {
                m_MgrStatus = EnumMgrStatus.Disabled_Local;
            }
            else
            {
                m_MgrStatus = EnumMgrStatus.Disabled_MC;
            }

            m_TaskStatus = EnumTaskStatus.No_Task;
            m_TaskStatusDetail = EnumTaskStatusDetail.No_Task;

            this.WriteStatusFile();
        }
Exemple #12
0
 /// <summary>
 /// Converts the task status enum to a string value
 /// </summary>
 /// <param name="statusEnum">An IStatusFile.EnumTaskStatus object</param>
 /// <returns>String representation of input object</returns>
 private string ConvertTaskStatusToString(EnumTaskStatus statusEnum)
 {
     return(statusEnum.ToString("G"));
 }
Exemple #13
0
        /// <summary>
        /// 尝试更新任务状态
        /// </summary>
        /// <returns><c>true</c>, if update task status was tryed, <c>false</c> otherwise.</returns>
        /// <param name="task">Task.</param>
        /// <param name="status">Status.</param>
        /// <param name="errCode">错误代码:0无错误 1不能设置为这个状态 2无需重复设置状态 3作业或任务不存在</param>
        /// <param name="latestJob">Latest job.</param>
        /// <param name="cancellationToken">Cancellation token.</param>
        public bool TryUpdateTaskStatus(JobTask task, EnumTaskStatus status, out int errCode, out JobBase latestJob, CancellationToken cancellationToken = default(CancellationToken))
        {
            errCode   = 0;
            latestJob = null;
            cancellationToken.ThrowIfCancellationRequested();

            var    jobRecordKey = GetJobRecordFullKey(task.Job.Cluster.Name, task.Job.Name, task.Job.Id);
            KVPair jobRecordKV;
            int    updateIndex = 0;

            do
            {
                updateIndex++;
                Log.LogWriter.Write(string.Format("UpdateTaskStatus Execute Times: {0},{1}", jobRecordKey + ":" + task.Id, updateIndex), Log.LogLevel.Debug);

                if (updateIndex > 1)
                {
                    Thread.Sleep(200);
                }

                jobRecordKV = ConsulKV.Get(jobRecordKey, cancellationToken);
                if (jobRecordKV == null)
                {
                    errCode = 3;
                    Log.LogWriter.Write(string.Format("the job missing: {0}", jobRecordKey), Log.LogLevel.Error);
                    return(false);
                }

                var jobRecordJson = Encoding.UTF8.GetString(jobRecordKV.Value);
                Log.LogWriter.Write("UpdateTaskStatus Get Value[" + jobRecordKV.ModifyIndex + "]" + jobRecordJson, Log.LogLevel.Trace);
                var jobRecord = JobBase.Deserialize(jobRecordJson, task.Job.Cluster);
                jobRecord.ModifyIndex = jobRecordKV.ModifyIndex;

                // 从作业任务计划中查找出任务:Synced和SyncFailed是Manager更改的状态,其它情况下是任务所属的Worker来更改
                var consulTask = jobRecord.TaskPlan.Where(d => d.Key == task.Job.Cluster.CurrentMember.Id).SelectMany(d => d.Value.Where(t => t.Id == task.Id)).FirstOrDefault();
                if (status == EnumTaskStatus.Synced || status == EnumTaskStatus.SyncFailed)
                {
                    consulTask = jobRecord.TaskPlan.SelectMany(d => d.Value.Where(t => t.Id == task.Id)).FirstOrDefault();
                }
                if (consulTask == null)
                {
                    errCode = 3;
                    Log.LogWriter.Write(string.Format("the job task missing: {0}", jobRecordKey), Log.LogLevel.Error);
                    return(false);
                }

                // 取消状态只能更新为 已取消或者取消失败
                if (consulTask.Status == EnumTaskStatus.Canceling &&
                    status != EnumTaskStatus.Canceled && status != EnumTaskStatus.CancelFailed)
                {
                    LogWriter.Write(string.Format("{0} can not change to {1}", jobRecord.Status, status));
                    errCode = 1;
                    return(false);
                }

                if ((consulTask.Status == EnumTaskStatus.Completed ||
                     consulTask.Status == EnumTaskStatus.Synced) &&
                    status == EnumTaskStatus.Executing)
                {
                    LogWriter.Write(string.Format("{0} can not change to {1}", jobRecord.Status, status));
                    errCode = 1;
                    return(false);
                }

                if (status == EnumTaskStatus.Executing)
                {
                    consulTask.StartTime = DateTime.Now;
                }
                if (status == EnumTaskStatus.Completed)
                {
                    consulTask.FinishedTime = DateTime.Now;
                }

                consulTask.Status     = status;
                jobRecord.ModifyIndex = jobRecordKV.ModifyIndex;
                latestJob             = jobRecord;

                jobRecordJson = JsonConvert.SerializeObject(jobRecord);
                Log.LogWriter.Write("UpdateTaskStatus CAS Value[" + jobRecordKV.ModifyIndex + "]" + jobRecordJson, Log.LogLevel.Trace);
                jobRecordKV.Value = Encoding.UTF8.GetBytes(jobRecordJson);
            } while (!ConsulKV.CAS(jobRecordKV, cancellationToken));

            return(true);
        }
Exemple #14
0
 public XBTBehavior()
 {
     m_node   = null;
     m_task   = null;
     m_status = EnumTaskStatus.None;
 }