public int dump(String filenameOrDirectory, PrintStream out, TimeZone timeZone) throws IOException { int logsFound = 0; for (String fileName : filenamesOf(filenameOrDirectory, getLogPrefix())) { logsFound++; out.println("=== " + fileName + " ==="); StoreChannel fileChannel = fileSystem.open(new File(fileName), "r"); ByteBuffer buffer = ByteBuffer.allocateDirect(9 + Xid.MAXGTRIDSIZE + Xid.MAXBQUALSIZE * 10); long logVersion, prevLastCommittedTx; try { long[] header = VersionAwareLogEntryReader.readLogHeader(buffer, fileChannel, false); logVersion = header[0]; prevLastCommittedTx = header[1]; } catch (IOException ex) { out.println("Unable to read timestamp information, no records in logical log."); out.println(ex.getMessage()); fileChannel.close(); throw ex; } out.println( "Logical log version: " + logVersion + " with prev committed tx[" + prevLastCommittedTx + "]"); LogDeserializer deserializer = new LogDeserializer(buffer, instantiateCommandReaderFactory()); PrintingConsumer consumer = new PrintingConsumer(out, timeZone); try (Cursor<LogEntry, IOException> cursor = deserializer.cursor(fileChannel)) { while (cursor.next(consumer)) ; } } return logsFound; }
@Override public void close() throws IOException { delegateChannel.close(); }