コード例 #1
0
        private Task GetTask()
        {
            Session session = _action.Session;

            try
            {
                return((Task)_action.DoWithSessionRetry(ref session, (Task.TaskGetRecordOp)Task.get_record, _action.RelatedTask.opaque_ref));
            }
            finally
            {
                _action.Session = session;
            }
        }
コード例 #2
0
ファイル: TaskPoller.cs プロジェクト: ywscr/xenadmin
        private void Poll()
        {
            Session session = _action.Session;
            Task    task;

            try
            {
                task = (Task)_action.DoWithSessionRetry(ref session, (Task.TaskGetRecordOp)Task.get_record, _action.RelatedTask.opaque_ref);
            }
            catch (Failure exn)
            {
                if (exn.ErrorDescription.Count > 1 &&
                    exn.ErrorDescription[0] == Failure.HANDLE_INVALID &&
                    exn.ErrorDescription[1] == "task")
                {
                    GotInvalidHandle();
                    return;
                }
                else
                {
                    throw;
                }
            }
            finally
            {
                _action.Session = session;
            }

            _action.Tick((int)(task.progress * _scale + _lo),
                         task.Description() == "" ? _action.Description : task.Description());

            switch (task.status)
            {
            case task_status_type.failure:
                if (task.error_info.Length > 1 &&
                    task.error_info[0] == Failure.HANDLE_INVALID &&
                    task.error_info[1] == "task")
                {
                    GotInvalidHandle();
                    break;
                }
                else
                {
                    log.WarnFormat("Task {0} failed: {1}", _action.RelatedTask.opaque_ref,
                                   task.error_info.Length > 0 ? task.error_info[0] : "Unknown failure");
                    throw new Failure(new List <string>(task.error_info));
                }

            case task_status_type.success:
                log.InfoFormat("Task {0} finished successfully", _action.RelatedTask.opaque_ref);
                taskCompleted  = true;
                _action.Result = task.result;
                // Work around CA-6597.
                if (_action.Result != "")
                {
                    Match m = Regex.Match(_action.Result, "<value>(.*)</value>");
                    if (m.Success)
                    {
                        _action.Result = m.Groups[1].Value;
                    }
                }

                break;

            case task_status_type.cancelled:
                log.InfoFormat("Task {0} was cancelled", _action.RelatedTask.opaque_ref);
                throw new CancelledException();

            case task_status_type.cancelling:
            case task_status_type.pending:
                break;
            }
        }