blob: c9eb6ff537c51741087d7151937120babb292d25 [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.log.entry;
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.Collections;
import com.sleepycat.je.log.LogEntryType;
import com.sleepycat.je.log.VersionedWriteLoggable;
/**
* A basic implementation of a replicable log entry that has a single loggable
* item and provides for writing in a single format by default. Starting with
* log version 9, entry classes whose log format has changed since the previous
* log version will need to override the {@link #getSize(int, boolean)} and
* {@link #writeEntry(ByteBuffer, int, boolean)} methods to support writing the
* entry in earlier log formats.
*
* @param <T> the type of the loggable items in this entry
*/
abstract class SingleItemReplicableEntry<T extends VersionedWriteLoggable>
extends SingleItemEntry<T> implements ReplicableLogEntry {
/**
* Creates an instance of this class for reading a log entry.
*
* @param logClass the class of the contained loggable item
*/
SingleItemReplicableEntry(final Class<T> logClass) {
super(logClass);
}
/**
* Creates an instance of this class for writing a log entry.
*
* @param entryType the associated log entry type
* @param item the contained loggable item
*/
SingleItemReplicableEntry(final LogEntryType entryType, final T item) {
super(entryType, item);
}
@Override
public Collection<VersionedWriteLoggable> getEmbeddedLoggables() {
/* The cast is needed due to quirks of Java generics. */
return Collections.singleton(
(VersionedWriteLoggable) newInstanceOfType());
}
@Override
public int getSize(final int logVersion, final boolean forReplication) {
return getMainItem().getLogSize(logVersion, forReplication);
}
@Override
public void writeEntry(final ByteBuffer logBuffer,
final int logVersion,
final boolean forReplication) {
getMainItem().writeToLog(logBuffer, logVersion,forReplication);
}
@Override
public boolean hasReplicationFormat() {
return getMainItem().hasReplicationFormat();
}
@Override
public boolean isReplicationFormatWorthwhile(final ByteBuffer logBuffer,
final int srcVersion,
final int destVersion) {
return newInstanceOfType().isReplicationFormatWorthwhile(
logBuffer, srcVersion, destVersion);
}
}