// Token: 0x06001817 RID: 6167 RVA: 0x00063704 File Offset: 0x00061904 public void GatherReplies(int maxWaitInMs) { if (this.m_proberState != ProberState.Sent) { throw new ArgumentException("user must send befor gathering"); } try { this.m_proberState = ProberState.Gathering; this.m_probeCompleteEvent.WaitOne(maxWaitInMs, false); } finally { this.m_proberState = ProberState.Idle; PingRequest[] activeRequests = this.m_activeRequests; this.m_activeRequests = null; Win32StopWatch.GetSystemPerformanceCounter(); foreach (PingRequest pingRequest in activeRequests) { if (pingRequest.StopTimeStamp == 0L || pingRequest.StopTimeStamp < pingRequest.StartTimeStamp) { pingRequest.TimedOut = true; } else { pingRequest.LatencyInUSec = Win32StopWatch.ComputeElapsedTimeInUSec(pingRequest.StopTimeStamp, pingRequest.StartTimeStamp); } } } }
// Token: 0x06001816 RID: 6166 RVA: 0x0006361C File Offset: 0x0006181C public void SendPings(PingRequest[] targets) { if (this.m_proberState != ProberState.Idle) { throw new ArgumentException("user must gather between send intervals"); } try { this.m_proberState = ProberState.Sending; this.m_activeRequests = targets; foreach (PingRequest pingRequest in targets) { IPEndPoint ipendPoint = new IPEndPoint(pingRequest.IPAddress, 0); pingRequest.StartTimeStamp = Win32StopWatch.GetSystemPerformanceCounter(); if (this.m_pingPacket.Length != this.m_sourcePort.Socket.SendTo(this.m_pingPacket, ipendPoint)) { throw new SocketException(); } this.m_sendCount++; EndPoint endPoint = ipendPoint; this.m_sourcePort.Socket.BeginReceiveFrom(pingRequest.ReplyBuffer, 0, pingRequest.ReplyBuffer.Length, SocketFlags.None, ref endPoint, new AsyncCallback(this.CompletionCallback), null); } } finally { this.m_proberState = ProberState.Sent; } }
internal EnterBlockModeMsg(NetworkChannel channel, EnterBlockModeMsg.Flags flags, Guid dbGuid, long firstGenerationToExpect) : base(channel, NetworkChannelMessage.MessageType.EnterBlockMode) { this.FlagsUsed = flags; this.AckCounter = Win32StopWatch.GetSystemPerformanceCounter(); this.FirstGenerationToExpect = firstGenerationToExpect; this.DatabaseGuid = dbGuid; this.ActiveNodeName = Environment.MachineName; }
// Token: 0x06001815 RID: 6165 RVA: 0x000634CC File Offset: 0x000616CC private void CompletionCallback(IAsyncResult ar) { Exception ex = null; try { IPEndPoint ipendPoint = new IPEndPoint(IPAddress.Any, 0); EndPoint endPoint = ipendPoint; this.m_sourcePort.Socket.EndReceiveFrom(ar, ref endPoint); ipendPoint = (IPEndPoint)endPoint; PingRequest pingRequest = PingProber.FindRequest(this.m_activeRequests, ipendPoint.Address); if (pingRequest == null) { PingProber.Tracer.TraceError <IPEndPoint>((long)this.GetHashCode(), "Unexpected response from {0}", ipendPoint); } else { pingRequest.StopTimeStamp = Win32StopWatch.GetSystemPerformanceCounter(); PingProber.Tracer.TraceDebug <IPEndPoint>((long)this.GetHashCode(), "Response from {0}.", ipendPoint); pingRequest.Success = true; } } catch (SocketException ex2) { ex = ex2; } catch (ObjectDisposedException ex3) { ex = ex3; } finally { lock (this) { this.m_completionCount++; if (this.m_completionCount == this.m_sendCount && (this.m_proberState == ProberState.Sent || this.m_proberState == ProberState.Gathering)) { this.m_probeCompleteEvent.Set(); } } if (ex != null && this.m_proberState != ProberState.Disposed) { PingProber.Tracer.TraceError <Exception>((long)this.GetHashCode(), "Ping completion failure: {0}", ex); } } }
public static void SerializeToBuffer(int expectedTotalSize, GranularLogDataMsg.Flags msgFlags, JET_EMITDATACTX emitContext, byte[] logdata, int cblogdata, byte[] targetBuffer, int targetBufferOffsetToStart) { NetworkChannelPacket networkChannelPacket = new NetworkChannelPacket(targetBuffer, targetBufferOffsetToStart); networkChannelPacket.GrowthDisabled = true; networkChannelPacket.Append(1); int val = expectedTotalSize - 5; networkChannelPacket.Append(val); val = 1312903751; networkChannelPacket.Append(val); val = expectedTotalSize - 5; networkChannelPacket.Append(val); DateTime utcNow = DateTime.UtcNow; networkChannelPacket.Append(utcNow); networkChannelPacket.Append((long)msgFlags); long val2 = Win32StopWatch.GetSystemPerformanceCounter(); networkChannelPacket.Append(val2); networkChannelPacket.Append(cblogdata); val = emitContext.dwVersion; networkChannelPacket.Append(val); val2 = (long)emitContext.qwSequenceNum; networkChannelPacket.Append(val2); val = (int)emitContext.grbitOperationalFlags; networkChannelPacket.Append(val); DateTime time = DateTime.SpecifyKind(emitContext.logtimeEmit, DateTimeKind.Utc); networkChannelPacket.Append(time); val = emitContext.lgposLogData.lGeneration; networkChannelPacket.Append(val); ushort val3 = (ushort)emitContext.lgposLogData.isec; networkChannelPacket.Append(val3); val3 = (ushort)emitContext.lgposLogData.ib; networkChannelPacket.Append(val3); if (cblogdata > 0) { networkChannelPacket.Append(logdata, 0, cblogdata); } }
private QueuedBlockMsg ReadInputMessage(NetworkChannel netChan) { this.m_timeoutPending = false; byte[] networkReadWorkingBuf = this.m_networkReadWorkingBuf; StopwatchStamp stamp = StopwatchStamp.GetStamp(); NetworkChannelMessageHeader msgHdr = NetworkChannelMessage.ReadHeaderFromNet(netChan, networkReadWorkingBuf, 0); NetworkChannelMessage.MessageType messageType = msgHdr.MessageType; QueuedBlockMsg queuedBlockMsg; if (messageType != NetworkChannelMessage.MessageType.BlockModeCompressedData) { if (messageType == NetworkChannelMessage.MessageType.Ping) { PingMessage pingMessage = PingMessage.ReadFromNet(netChan, networkReadWorkingBuf, 0); long systemPerformanceCounter = Win32StopWatch.GetSystemPerformanceCounter(); long arg = Win32StopWatch.ComputeElapsedTimeInUSec(systemPerformanceCounter, pingMessage.ReplyAckCounter) / 1000L; this.Copier.TrackLastContactTime(msgHdr.MessageUtc); PassiveBlockMode.Tracer.TraceDebug <string, long>((long)this.GetHashCode(), "ProcessReadCallback({0}) received a ping after {1}ms, so channel is healthy", this.DatabaseName, arg); return(null); } if (messageType != NetworkChannelMessage.MessageType.GranularLogData) { throw new NetworkUnexpectedMessageException(netChan.PartnerNodeName, string.Format("Unknown Type {0}", msgHdr.MessageType)); } queuedBlockMsg = this.ReadUncompressedMsg(netChan); this.Copier.PerfmonCounters.CompressionEnabled = 0L; } else { queuedBlockMsg = this.ReadCompressedMsg(netChan, msgHdr); this.Copier.PerfmonCounters.CompressionEnabled = 1L; } queuedBlockMsg.ReadDurationInTics = stamp.ElapsedTicks; queuedBlockMsg.MessageUtc = msgHdr.MessageUtc; this.Copier.PerfmonCounters.RecordLogCopierNetworkReadLatency(queuedBlockMsg.ReadDurationInTics); return(queuedBlockMsg); }
public static int SerializeToBuffer(JET_EMITDATACTX emitContext, byte[] logdata, int cblogdata, byte[] targetBuffer, int targetBufferOffsetToStart, out int totalCompressedSize) { NetworkChannelPacket networkChannelPacket = new NetworkChannelPacket(targetBuffer, targetBufferOffsetToStart); networkChannelPacket.GrowthDisabled = true; int num = BlockModeCompressedDataMsg.CalculateBlockCount(cblogdata); int[] array = new int[num]; int num2 = 73 + 4 * num; int num3 = num2 + targetBufferOffsetToStart; int num4 = 0; totalCompressedSize = 0; int num5 = cblogdata; for (int i = 0; i < num; i++) { int num6 = Math.Min(num5, 65536); Xpress.Compress(logdata, num4, num6, targetBuffer, num3, num6, out array[i]); num4 += num6; num3 += array[i]; totalCompressedSize += array[i]; num5 -= num6; } networkChannelPacket.Append(1); int val = num2 - 5 + totalCompressedSize; networkChannelPacket.Append(val); val = 1145261378; networkChannelPacket.Append(val); val = num2 - 5; networkChannelPacket.Append(val); DateTime utcNow = DateTime.UtcNow; networkChannelPacket.Append(utcNow); long val2 = 0L; networkChannelPacket.Append(val2); val2 = Win32StopWatch.GetSystemPerformanceCounter(); networkChannelPacket.Append(val2); networkChannelPacket.Append(cblogdata); val = emitContext.dwVersion; networkChannelPacket.Append(val); val2 = (long)emitContext.qwSequenceNum; networkChannelPacket.Append(val2); val = (int)emitContext.grbitOperationalFlags; networkChannelPacket.Append(val); DateTime time = DateTime.SpecifyKind(emitContext.logtimeEmit, DateTimeKind.Utc); networkChannelPacket.Append(time); val = emitContext.lgposLogData.lGeneration; networkChannelPacket.Append(val); ushort val3 = (ushort)emitContext.lgposLogData.isec; networkChannelPacket.Append(val3); val3 = (ushort)emitContext.lgposLogData.ib; networkChannelPacket.Append(val3); for (int j = 0; j < num; j++) { networkChannelPacket.Append(array[j]); } return(num2 + totalCompressedSize); }
private void WakeUpCallback(object context) { PassiveBlockMode.Tracer.TraceFunction <string>((long)this.GetHashCode(), "WakeUpCallback({0})", this.DatabaseName); lock (this.m_workerLock) { if (!this.IsBlockModeActive) { PassiveBlockMode.Tracer.TraceError((long)this.GetHashCode(), "Timer fired after termination"); } else if (this.Copier.TestHungPassiveBlockMode) { PassiveBlockMode.Tracer.TraceError((long)this.GetHashCode(), "TestHungPassiveBlockMode is active. Timer ignored"); } else if (this.m_timeoutPending) { PassiveBlockMode.Tracer.TraceError <ExDateTime, ExDateTime>((long)this.GetHashCode(), "Active did not respond by {0}, cur time is {1}", this.m_timeoutLimit, ExDateTime.Now); this.Terminate(); } else { this.m_timeoutPending = true; this.m_timeoutLimit = ExDateTime.Now.AddMilliseconds((double)RegistryParameters.LogShipTimeoutInMsec); NetworkTransportException ex; bool flag2; this.TrySendStatusMessageToActive(PassiveStatusMsg.Flags.PassiveIsRequestingAck, Win32StopWatch.GetSystemPerformanceCounter(), out ex, out flag2); if (ex == null) { this.ScheduleTimer(); } else { PassiveBlockMode.Tracer.TraceError <NetworkTransportException>((long)this.GetHashCode(), "WakeUpCallback Failed to ping Active: {0}", ex); this.Terminate(); } } } }