internal RecordEnumerable(LogRecordSequence recordSequence, CLFS_CONTEXT_MODE mode, ulong startLsn) { this.recordSequence = recordSequence; this.mode = mode; this.startLsn = startLsn; }
internal LogLogRecordEnumerator(LogRecordSequence recordSequence, CLFS_CONTEXT_MODE mode, ulong startLsn) { this.recordSequence = recordSequence; this.mode = mode; this.startLsn = startLsn; this.syncRoot = new object(); this.state = State.BeforeFirst; }
public static bool ReadLogRecordSync(SafeMarshalContext pvMarshal, [In] ref ulong plsnFirst, CLFS_CONTEXT_MODE ecxMode, out byte* ppvReadBuffer, out int pcbReadBuffer, out byte peRecordType, out ulong plsnUndoNext, out ulong plsnPrevious, out SafeReadContext ppvReadContext) { if (!_ReadLogRecord(pvMarshal, ref plsnFirst, ecxMode, out ppvReadBuffer, out pcbReadBuffer, out peRecordType, out plsnUndoNext, out plsnPrevious, out ppvReadContext, null)) { uint errorCode = (uint)Marshal.GetLastWin32Error(); Utility.CloseInvalidOutSafeHandle(ppvReadContext); ppvReadContext = null; if (errorCode == Error.ERROR_IO_PENDING) { // The CLFS API was called with a NULL overlapped, so the operation should not be asynchronous. // This means that CLFS has a bug, so it is not safe to continue processing. DiagnosticUtility.FailFast("No async in ReadLogRecordSync"); } switch (errorCode) { case Error.ERROR_HANDLE_EOF: return false; case Error.ERROR_NOT_FOUND: case Error.ERROR_LOG_START_OF_LOG: case Error.ERROR_LOG_BLOCK_INVALID: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentInvalid(SR.Argument_InvalidStartSequenceNumber)); case Error.ERROR_LOG_BLOCK_INCOMPLETE: case Error.ERROR_INVALID_HANDLE: case Error.ERROR_ACCESS_DENIED: case Error.ERROR_INVALID_PARAMETER: case Error.ERROR_IO_DEVICE: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ExceptionForKnownCode(errorCode)); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ExceptionForUnknownCode(errorCode)); } } return true; }
extern static bool _ReadLogRecord( SafeMarshalContext pvMarshal, [In] ref ulong plsnFirst, CLFS_CONTEXT_MODE ecxMode, out byte* ppvReadBuffer, out int pcbReadBuffer, out byte peRecordType, out ulong plsnUndoNext, out ulong plsnPrevious, out SafeReadContext ppvReadContext, NativeOverlapped* pOverlapped);