private void ProcessInput(QueuedBlockMsg dataMsg) { dataMsg.GetMessageSize(); if (this.m_newestMessage != null) { this.m_newestMessage.NextMsg = dataMsg; this.m_newestMessage = dataMsg; } else { this.m_newestMessage = dataMsg; this.m_oldestMessage = dataMsg; } bool flag = BitMasker.IsOn((int)dataMsg.EmitContext.grbitOperationalFlags, 16); if (PassiveBlockMode.IsDebugTraceEnabled) { long num = StopwatchStamp.TicksToMicroSeconds(dataMsg.ReadDurationInTics); PassiveBlockMode.Tracer.TraceDebug((long)this.GetHashCode(), "MessageArrived({0}) Gen=0x{1:X} Sector=0x{2:X} JBits=0x{3:X} EmitSeq=0x{4:X} LogDataLen=0x{5:X} ReadUSec={6}", new object[] { this.DatabaseName, dataMsg.EmitContext.lgposLogData.lGeneration, dataMsg.EmitContext.lgposLogData.isec, (int)dataMsg.EmitContext.grbitOperationalFlags, dataMsg.EmitContext.qwSequenceNum, dataMsg.LogDataLength, num }); } this.Copier.PerfmonCounters.RecordGranularBytesReceived((long)dataMsg.LogDataLength, flag); ExchangeNetworkPerfmonCounters perfCounters = this.m_netChannel.PerfCounters; if (perfCounters != null) { perfCounters.RecordLogCopyThruputReceived((long)dataMsg.LogDataLength); if (dataMsg.CompressedLogDataLength > 0) { perfCounters.RecordCompressedDataReceived(dataMsg.CompressedLogDataLength, dataMsg.LogDataLength, NetworkPath.ConnectionPurpose.LogCopy); } } this.TriggerConsumer(); if (flag || DateTime.UtcNow >= this.m_nextPingDue) { uint lGeneration = (uint)dataMsg.EmitContext.lgposLogData.lGeneration; if (flag) { this.Copier.TrackKnownEndOfLog((long)((ulong)lGeneration), dataMsg.EmitContext.logtimeEmit); } NetworkTransportException ex; bool flag2; this.TrySendStatusMessageToActive(flag ? PassiveStatusMsg.Flags.AckEndOfGeneration : PassiveStatusMsg.Flags.None, dataMsg.RequestAckCounter, out ex, out flag2); if (ex != null) { throw ex; } } }
public void Write(JET_EMITDATACTX emitCtx, byte[] databuf, int startOffset) { if (!this.m_jetConsumerInitialized) { throw new GranularReplicationTerminatedException("Already terminated"); } try { StopwatchStamp stamp = StopwatchStamp.GetStamp(); long num = (long)emitCtx.lgposLogData.lGeneration; int grbitOperationalFlags = (int)emitCtx.grbitOperationalFlags; bool flag = false; if (BitMasker.IsOn(grbitOperationalFlags, 16)) { flag = true; } UnpublishedApi.JetConsumeLogData(this.m_jetConsumer, emitCtx, databuf, startOffset, (int)emitCtx.cbLogData, ShadowLogConsumeGrbit.FlushData); if (flag) { GranularWriter.Tracer.TraceDebug <string, long>((long)this.GetHashCode(), "WriteGranular({0}): 0x{1:X} is complete", this.DatabaseName, num); if (this.m_lowestClosedGeneration == 0L) { this.m_lowestClosedGeneration = num; } string text = this.FormFullGranuleName(num); FileInfo fileInfo = new FileInfo(text); fileInfo.LastWriteTimeUtc = emitCtx.logtimeEmit; if (this.m_granularCompletionsDisabled) { string destFileName = this.FormInspectorLogfileName(num); File.Move(text, destFileName); this.TrackInspectorGeneration(num, emitCtx.logtimeEmit); this.m_lowestClosedGeneration = num + 1L; } this.m_currentGenerationState = GranularWriter.GranularLogState.Expected; this.m_currentGeneration = num + 1L; } else if (BitMasker.IsOn(grbitOperationalFlags, 8)) { this.m_currentGenerationState = GranularWriter.GranularLogState.Open; this.m_currentGeneration = num; this.m_lastTimeFromServer = new DateTime?(emitCtx.logtimeEmit); } long elapsedTicks = stamp.ElapsedTicks; this.m_perfmonCounters.RecordBlockModeConsumerWriteLatency(elapsedTicks); GranularWriter.Tracer.TracePerformance((long)this.GetHashCode(), "WriteGranular({0},0x{1:X}.0x{2:X}) EmitSeq=0x{3:X} took {4} uSec", new object[] { this.DatabaseName, emitCtx.lgposLogData.lGeneration, emitCtx.lgposLogData.isec, emitCtx.qwSequenceNum, StopwatchStamp.TicksToMicroSeconds(elapsedTicks) }); } catch (EsentErrorException ex) { GranularWriter.Tracer.TraceError <EsentErrorException>((long)this.GetHashCode(), "JetConsumeLogData threw {0}", ex); this.m_jetConsumerHealthy = false; throw new GranularReplicationTerminatedException(ex.Message, ex); } catch (IOException ex2) { GranularWriter.Tracer.TraceError <IOException>((long)this.GetHashCode(), "IOException: {0}", ex2); this.m_jetConsumerHealthy = false; throw new GranularReplicationTerminatedException(ex2.Message, ex2); } }