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; import de.ovgu.cide.jakutil.*; /** * 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(); } public long getDeletedNodeId(){ return deletedNodeId; } public byte[] getDeletedMainKey(){ return deletedMainKey; } public byte[] getDeletedDupKey(){ return deletedDupKey; } public DatabaseId getDatabaseId(){ return dbId; } /** * @see LoggableObject#getLogType */ public LogEntryType getLogType(){ return LogEntryType.LOG_IN_DUPDELETE_INFO; } /** * @see LoggableObject#marshallOutsideWriteLatchCan 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; } }