### Question:
ReadAheadEntryReader implements
        AsyncCloseable,
        LogSegmentListener,
        LogSegmentEntryReader.StateChangeListener,
        FutureEventListener<List<Entry.Reader>> { public void start(final List<LogSegmentMetadata> segmentList) { logger.info("Starting the readahead entry reader for {} : segments = {}", readHandler.getFullyQualifiedName(), segmentList); started.set(true); processLogSegments(segmentList); } ReadAheadEntryReader(String streamName,
                                DLSN fromDLSN,
                                DistributedLogConfiguration conf,
                                BKLogReadHandler readHandler,
                                LogSegmentEntryStore entryStore,
                                OrderedScheduler scheduler,
                                Ticker ticker,
                                AlertStatsLogger alertStatsLogger); void start(final List<LogSegmentMetadata> segmentList); @Override CompletableFuture<Void> asyncClose(); boolean isReadAheadCaughtUp(); @Override void onCaughtupOnInprogress(); @Override void onSuccess(List<Entry.Reader> entries); @Override void onFailure(Throwable cause); Entry.Reader getNextReadAheadEntry(long waitTime, TimeUnit waitTimeUnit); int getNumCachedEntries(); boolean isCacheFull(); @VisibleForTesting boolean isCacheEmpty(); boolean isReaderIdle(int idleReaderErrorThreshold, TimeUnit timeUnit); @Override void onSegmentsUpdated(List<LogSegmentMetadata> segments); @Override void onLogStreamDeleted();  }### Answer:
@Test(timeout = 60000) public void testPositioningIgnoreTruncationStatus() throws Exception { DistributedLogConfiguration confLocal = new DistributedLogConfiguration(); confLocal.addConfiguration(baseConf); confLocal.setIgnoreTruncationStatus(true); String streamName = runtime.getMethodName(); BKDistributedLogManager dlm = createNewDLM(confLocal, streamName); generateCompletedLogSegments(dlm, 3, 2); AsyncLogWriter writer = Utils.ioResult(dlm.openAsyncLogWriter()); Utils.ioResult(writer.truncate(new DLSN(2L, 1L, 0L))); List<LogSegmentMetadata> segments = dlm.getLogSegments(); ReadAheadEntryReader readAheadEntryReader = createEntryReader(streamName, DLSN.InitialDLSN, dlm, confLocal); readAheadEntryReader.start(segments); ensureOrderSchedulerEmpty(streamName); expectNoException(readAheadEntryReader); Utils.close(readAheadEntryReader); readAheadEntryReader = createEntryReader(streamName, new DLSN(2L, 0L, 0L), dlm, confLocal); readAheadEntryReader.start(segments); ensureOrderSchedulerEmpty(streamName); expectNoException(readAheadEntryReader); Utils.close(readAheadEntryReader); readAheadEntryReader = createEntryReader(streamName, new DLSN(2L, 1L, 0L), dlm, confLocal); readAheadEntryReader.start(segments); ensureOrderSchedulerEmpty(streamName); expectNoException(readAheadEntryReader); Utils.close(readAheadEntryReader); Utils.close(writer); dlm.close(); }