public T TryReadAt <T>(long position, Func <byte[], T> readRecordFunc, bool autoCache = true) where T : class, ILogRecord { var lastChunk = _chunkWriter.CurrentChunk; var maxPosition = lastChunk.GlobalDataPosition; if (position >= maxPosition) { return(null); } var chunkNum = _chunkManager.GetChunkNum(position); var chunk = _chunkManager.GetChunk(chunkNum); if (chunk == null) { throw new ChunkNotExistException(position, chunkNum); } var localPosition = chunk.ChunkHeader.GetLocalDataPosition(position); return(chunk.TryReadAt(localPosition, readRecordFunc, autoCache)); }
public T TryReadAt <T>(long position, Func <byte[], T> readRecordFunc, bool autoCache = true) where T : class, ILogRecord { var lastChunk = _chunkWriter.CurrentChunk; var maxPosition = lastChunk.GlobalDataPosition; if (position >= maxPosition) { throw new ChunkReadException( string.Format("Cannot read record after the max global data position, data position: {0}, max global data position: {1}, chunk: {2}.", position, maxPosition, lastChunk)); } var chunkNum = _chunkManager.GetChunkNum(position); var chunk = _chunkManager.GetChunk(chunkNum); if (chunk == null) { throw new ChunkNotExistException(position, chunkNum); } var localPosition = chunk.ChunkHeader.GetLocalDataPosition(position); return(chunk.TryReadAt(localPosition, readRecordFunc, autoCache)); }