blob: 1d7515f45be5508aa55e8ee66428b82fc71e30c7 [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je.rep.stream;
import java.nio.ByteBuffer;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.EnvironmentFailureException;
import com.sleepycat.je.dbi.EnvironmentImpl;
import com.sleepycat.je.log.LogEntryHeader;
import com.sleepycat.je.log.LogEntryType;
import com.sleepycat.je.log.entry.LogEntry;
/**
* Format for log entries sent across the wire for replication. Instead of
* sending a direct copy of the log entry as it is stored on the JE log files
* (LogEntryHeader + LogEntry), select parts of the header are sent.
*
* @see InputWireRecord
* @see OutputWireRecord
*/
abstract class WireRecord {
final LogEntryHeader header;
WireRecord(final LogEntryHeader header) {
this.header = header;
}
/**
* Returns the log entry type for this record.
*/
LogEntryType getLogEntryType()
throws DatabaseException {
final LogEntryType type = LogEntryType.findType(header.getType());
if (type == null) {
throw EnvironmentFailureException.unexpectedState(
"Unknown header type:" + header.getType());
}
return type;
}
/**
* Instantiates the log entry for this wire record using the specified
* environment and data.
*/
LogEntry instantiateEntry(final EnvironmentImpl envImpl,
final ByteBuffer buffer)
throws DatabaseException {
final LogEntry entry = getLogEntryType().getNewLogEntry();
buffer.mark();
entry.readEntry(envImpl, header, buffer);
buffer.reset();
return entry;
}
}