private static void PerformLightJobAction(MapiStore systemMailbox, RequestStatisticsBase requestJobStats) { CommonUtils.CatchKnownExceptions(delegate { bool flag = false; LightJobBase lightJobBase; if (QuarantinedJobs.Contains(requestJobStats.IdentifyingGuid)) { lightJobBase = new QuarantineJob(requestJobStats.IdentifyingGuid, requestJobStats.WorkItemQueueMdb.ObjectGuid, systemMailbox, requestJobStats.MessageId); } else if (requestJobStats.ShouldRehomeRequest) { lightJobBase = new RehomeJob(requestJobStats.IdentifyingGuid, requestJobStats.RequestQueue, requestJobStats.OptimalRequestQueue, systemMailbox, requestJobStats.MessageId); } else if (requestJobStats.ShouldClearRehomeRequest) { lightJobBase = new ClearRehomeJob(requestJobStats.IdentifyingGuid, requestJobStats.WorkItemQueueMdb.ObjectGuid, systemMailbox, requestJobStats.MessageId); } else if (requestJobStats.ShouldSuspendRequest) { lightJobBase = new SuspendJob(requestJobStats.IdentifyingGuid, requestJobStats.WorkItemQueueMdb.ObjectGuid, systemMailbox, requestJobStats.MessageId); } else { lightJobBase = new ResumeJob(requestJobStats.IdentifyingGuid, requestJobStats.WorkItemQueueMdb.ObjectGuid, systemMailbox, requestJobStats.MessageId); flag = true; } using (lightJobBase) { lightJobBase.Run(); if (flag) { MRSService.Tickle(requestJobStats.IdentifyingGuid, requestJobStats.WorkItemQueueMdb.ObjectGuid, MoveRequestNotification.Created); } } }, delegate(Exception failure) { LocalizedString localizedString = CommonUtils.FullExceptionMessage(failure); MrsTracer.Service.Debug("Unexpected failure occurred trying to perform a light pipe action on MoveJob '{0}' from queue '{1}', skipping it. {2}", new object[] { requestJobStats.RequestGuid, requestJobStats.RequestQueue, localizedString }); MailboxReplicationService.LogEvent(MRSEventLogConstants.Tuple_UnableToProcessRequest, new object[] { requestJobStats.RequestGuid.ToString(), requestJobStats.WorkItemQueueMdb.ObjectGuid.ToString(), localizedString }); }); }
protected override RequestState RelinquishAction(TransactionalRequestJob requestJob, ReportData report) { FailureRec failureRec = QuarantinedJobs.Get(base.RequestGuid); if (failureRec == null) { return(RequestState.Relinquished); } report.Append(MrsStrings.JobIsQuarantined, failureRec, ReportEntryFlags.Fatal); requestJob.Suspend = true; requestJob.Status = RequestStatus.Failed; requestJob.TimeTracker.SetTimestamp(RequestJobTimestamp.Failure, new DateTime?(DateTime.UtcNow)); QuarantinedJobs.Remove(base.RequestGuid); RequestJobLog.Write(requestJob); return(RequestState.Failed); }