001: /*-
002: * See the file LICENSE for redistribution information.
003: *
004: * Copyright (c) 2002,2008 Oracle. All rights reserved.
005: *
006: * $Id: INDeleteInfo.java,v 1.31.2.3 2008/01/07 15:14:16 cwl Exp $
007: */
008:
009: package com.sleepycat.je.tree;
010:
011: import java.nio.ByteBuffer;
012:
013: import com.sleepycat.je.DatabaseException;
014: import com.sleepycat.je.dbi.DatabaseId;
015: import com.sleepycat.je.dbi.DatabaseImpl;
016: import com.sleepycat.je.log.LogEntryType;
017: import com.sleepycat.je.log.LogException;
018: import com.sleepycat.je.log.LogManager;
019: import com.sleepycat.je.log.LogUtils;
020: import com.sleepycat.je.log.Loggable;
021: import com.sleepycat.je.log.entry.SingleItemEntry;
022:
023: /**
024: * INDeleteInfo encapsulates the information logged about the removal of a
025: * child from an IN during IN compression.
026: */
027: public class INDeleteInfo implements Loggable {
028:
029: private long deletedNodeId;
030: private byte[] deletedIdKey;
031: private DatabaseId dbId;
032:
033: /**
034: * Create a new delete info entry.
035: */
036: public INDeleteInfo(long deletedNodeId, byte[] deletedIdKey,
037: DatabaseId dbId) {
038: this .deletedNodeId = deletedNodeId;
039: this .deletedIdKey = deletedIdKey;
040: this .dbId = dbId;
041: }
042:
043: /**
044: * Used by logging system only.
045: */
046: public INDeleteInfo() {
047: dbId = new DatabaseId();
048: }
049:
050: /*
051: * Accessors.
052: */
053: public long getDeletedNodeId() {
054: return deletedNodeId;
055: }
056:
057: public byte[] getDeletedIdKey() {
058: return deletedIdKey;
059: }
060:
061: public DatabaseId getDatabaseId() {
062: return dbId;
063: }
064:
065: /*
066: * Logging support for writing.
067: */
068: public void optionalLog(LogManager logManager, DatabaseImpl dbImpl)
069: throws DatabaseException {
070:
071: if (!dbImpl.isDeferredWrite()) {
072: logManager.log(new SingleItemEntry(
073: LogEntryType.LOG_IN_DELETE_INFO, this ));
074: }
075: }
076:
077: /**
078: * @see Loggable#getLogSize
079: */
080: public int getLogSize() {
081: return LogUtils.LONG_BYTES
082: + LogUtils.getByteArrayLogSize(deletedIdKey)
083: + dbId.getLogSize();
084: }
085:
086: /**
087: * @see Loggable#writeToLog
088: */
089: public void writeToLog(ByteBuffer logBuffer) {
090:
091: LogUtils.writeLong(logBuffer, deletedNodeId);
092: LogUtils.writeByteArray(logBuffer, deletedIdKey);
093: dbId.writeToLog(logBuffer);
094: }
095:
096: /**
097: * @see Loggable#readFromLog
098: */
099: public void readFromLog(ByteBuffer itemBuffer, byte entryTypeVersion)
100: throws LogException {
101:
102: deletedNodeId = LogUtils.readLong(itemBuffer);
103: deletedIdKey = LogUtils.readByteArray(itemBuffer);
104: dbId.readFromLog(itemBuffer, entryTypeVersion);
105: }
106:
107: /**
108: * @see Loggable#dumpLog
109: */
110: public void dumpLog(StringBuffer sb, boolean verbose) {
111: sb.append("<INDeleteEntry node=\"").append(deletedNodeId);
112: sb.append("\">");
113: sb.append(Key.dumpString(deletedIdKey, 0));
114: dbId.dumpLog(sb, verbose);
115: sb.append("</INDeleteEntry>");
116: }
117:
118: /**
119: * @see Loggable#getTransactionId
120: */
121: public long getTransactionId() {
122: return 0;
123: }
124: }
|