Exemple #1
0
        public void OnPromotedMessageHandler(StoreDriverEventSource source, StoreDriverDeliveryEventArgs args)
        {
            WorkingSetAgent.tracer.TraceDebug((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: entering");
            StoreDriverDeliveryEventArgsImpl storeDriverDeliveryEventArgsImpl = args as StoreDriverDeliveryEventArgsImpl;

            if (storeDriverDeliveryEventArgsImpl == null)
            {
                WorkingSetAgent.tracer.TraceError((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: args is null or not a StoreDriverDeliveryEventArgsImpl; exiting");
                return;
            }
            if (!this.Validate(storeDriverDeliveryEventArgsImpl))
            {
                return;
            }
            string arg = storeDriverDeliveryEventArgsImpl.MailboxSession.MdbGuid.ToString();

            WorkingSetAgent.tracer.TraceDebug <string>((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: mdbGuid is {0}", arg);
            WorkingSetAgentPerfLogging logger = new WorkingSetAgentPerfLogging();
            DateTime utcNow = DateTime.UtcNow;
            bool     workingSetSignalMailProcessed = false;

            try
            {
                WorkingSet.ProcessingAccepted.Increment();
                using (new StopwatchPerformanceTracker("OnPromotedMessageHandler", logger))
                {
                    using (new CpuPerformanceTracker("OnPromotedMessageHandler", logger))
                    {
                        using (new StorePerformanceTracker("OnPromotedMessageHandler", logger))
                        {
                            this.Process(storeDriverDeliveryEventArgsImpl);
                            workingSetSignalMailProcessed = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex is OutOfMemoryException || ex is StackOverflowException || ex is ThreadAbortException)
                {
                    throw;
                }
                if (ex is SmtpResponseException)
                {
                    workingSetSignalMailProcessed = true;
                    throw;
                }
                WorkingSetAgent.tracer.TraceError <Exception>((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler encountered an exception: {0}", ex);
                StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_WorkingSetAgentException, ex.Message, new object[]
                {
                    ex
                });
                storeDriverDeliveryEventArgsImpl.MailRecipient.DsnRequested = DsnRequestedFlags.Never;
                throw new SmtpResponseException(WorkingSetAgent.UnprocessedSignalMailResponse, base.Name);
            }
            finally
            {
                this.UpdatePerfCounters(utcNow, workingSetSignalMailProcessed, logger);
                WorkingSetAgent.tracer.TraceDebug((long)this.traceId, "WorkingSetAgent.OnPromotedMessageHandler: exiting");
            }
        }
Exemple #2
0
        private void UpdatePerfCounters(DateTime startTime, bool workingSetSignalMailProcessed, WorkingSetAgentPerfLogging logger)
        {
            WorkingSetAgent.tracer.TraceDebug((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: entering");
            TimeSpan timeSpan = DateTime.UtcNow.Subtract(startTime);

            WorkingSet.LastSignalProcessingTime.RawValue = (long)timeSpan.TotalMilliseconds;
            WorkingSet.AverageSignalProcessingTime.IncrementBy((long)timeSpan.TotalMilliseconds);
            WorkingSet.AverageSignalProcessingTimeBase.Increment();
            if (workingSetSignalMailProcessed)
            {
                WorkingSet.ProcessingSuccess.Increment();
            }
            else
            {
                WorkingSet.ProcessingFailed.Increment();
            }
            WorkingSetAgent.tracer.TraceDebug <TimeSpan>((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: StopwatchTime = {0}", logger.StopwatchTime);
            WorkingSetAgent.tracer.TraceDebug <TimeSpan>((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: CpuTime = {0}", logger.CpuTime);
            WorkingSetAgent.tracer.TraceDebug <uint>((long)this.traceId, "WorkingSetAgent.UpdatePerfCounters: StoreRPCs = {0}", logger.StoreRPCs);
            WorkingSet.AverageStopWatchTime.IncrementBy(logger.StopwatchTime.Ticks);
            WorkingSet.AverageStopWatchTimeBase.Increment();
            WorkingSet.AverageCpuTime.IncrementBy(logger.CpuTime.Ticks);
            WorkingSet.AverageCpuTimeBase.Increment();
            WorkingSet.AverageStoreRPCs.IncrementBy((long)((ulong)logger.StoreRPCs));
            WorkingSet.AverageStoreRPCsBase.Increment();
        }