/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: INDupDeleteInfo.java,v 1.1 2006/05/06 09:00:19 ckaestne Exp $
*/
package com.sleepycat.je.tree;
import java.nio.ByteBuffer;
import com.sleepycat.je.dbi.DatabaseId;
import com.sleepycat.je.log.LogEntryType;
import com.sleepycat.je.log.LogException;
import com.sleepycat.je.log.LogReadable;
import com.sleepycat.je.log.LogUtils;
import com.sleepycat.je.log.LogWritable;
import com.sleepycat.je.log.LoggableObject;
/**
* INDupDeleteInfo encapsulates the information logged about the removal of a
* child from a duplicate IN during IN compression.
*/
public class INDupDeleteInfo
implements LoggableObject, LogReadable, LogWritable {
private long deletedNodeId;
private byte[] deletedMainKey;
private byte[] deletedDupKey;
private DatabaseId dbId;
/**
* Create a new delete info entry.
*/
public INDupDeleteInfo(long deletedNodeId,
byte[] deletedMainKey,
byte[] deletedDupKey,
DatabaseId dbId) {
this.deletedNodeId = deletedNodeId;
this.deletedMainKey = deletedMainKey;
this.deletedDupKey = deletedDupKey;
this.dbId = dbId;
}
/**
* Used by logging system only.
*/
public INDupDeleteInfo() {
dbId = new DatabaseId();
}
/*
* Accessors.
*/
public long getDeletedNodeId() {
return deletedNodeId;
}
public byte[] getDeletedMainKey() {
return deletedMainKey;
}
public byte[] getDeletedDupKey() {
return deletedDupKey;
}
public DatabaseId getDatabaseId() {
return dbId;
}
/*
* Logging support for writing.
*/
/**
* @see LoggableObject#getLogType
*/
public LogEntryType getLogType() {
return LogEntryType.LOG_IN_DUPDELETE_INFO;
}
/**
* @see LoggableObject#marshallOutsideWriteLatch
* Can be marshalled outside the log write latch.
*/
public boolean marshallOutsideWriteLatch() {
return true;
}
/**
* @see LoggableObject#countAsObsoleteWhenLogged
*/
public boolean countAsObsoleteWhenLogged() {
return false;
}
/**
* @see LoggableObject#postLogWork
*/
public void postLogWork(long justLoggedLsn) {
}
/**
* @see LoggableObject#getLogSize
*/
public int getLogSize() {
return LogUtils.LONG_BYTES +
LogUtils.getByteArrayLogSize(deletedMainKey) +
LogUtils.getByteArrayLogSize(deletedDupKey) +
dbId.getLogSize();
}
/**
* @see LogWritable#writeToLog
*/
public void writeToLog(ByteBuffer logBuffer) {
LogUtils.writeLong(logBuffer, deletedNodeId);
LogUtils.writeByteArray(logBuffer, deletedMainKey);
LogUtils.writeByteArray(logBuffer, deletedDupKey);
dbId.writeToLog(logBuffer);
}
/**
* @see LogReadable#readFromLog
*/
public void readFromLog(ByteBuffer itemBuffer, byte entryTypeVersion)
throws LogException {
deletedNodeId = LogUtils.readLong(itemBuffer);
deletedMainKey = LogUtils.readByteArray(itemBuffer);
deletedDupKey = LogUtils.readByteArray(itemBuffer);
dbId.readFromLog(itemBuffer, entryTypeVersion);
}
/**
* @see LogReadable#dumpLog
*/
public void dumpLog(StringBuffer sb, boolean verbose) {
sb.append("<INDupDeleteEntry node=\"").append(deletedNodeId);
sb.append("\">");
sb.append(Key.dumpString(deletedMainKey, 0));
sb.append(Key.dumpString(deletedDupKey, 0));
dbId.dumpLog(sb, verbose);
sb.append("</INDupDeleteEntry>");
}
/**
* @see LogReadable#logEntryIsTransactional
*/
public boolean logEntryIsTransactional() {
return false;
}
/**
* @see LogReadable#getTransactionId
*/
public long getTransactionId() {
return 0;
}
}