com.sleepycat.je.tree
Class DBIN

java.lang.Object
  extended by com.sleepycat.je.tree.Node
      extended by com.sleepycat.je.tree.IN
          extended by com.sleepycat.je.tree.BIN
              extended by com.sleepycat.je.tree.DBIN
All Implemented Interfaces:
LoggableObject, LogReadable, LogWritable, Comparable

public final class DBIN
extends BIN
implements LoggableObject

A DBIN represents an Duplicate Bottom Internal Node in the JE tree.


Field Summary
 
Fields inherited from class com.sleepycat.je.tree.BIN
cursorSet
 
Fields inherited from class com.sleepycat.je.tree.IN
ACCUMULATED_LIMIT, DBMAP_LEVEL, EXACT_MATCH, INSERT_SUCCESS, LEVEL_MASK, MAIN_LEVEL, MAX_LEVEL, MAY_EVICT_LNS, MAY_EVICT_NODE, MAY_NOT_EVICT, MIN_LEVEL
 
Constructor Summary
DBIN()
           
DBIN(DatabaseImpl db, byte[] identifierKey, int maxEntriesPerNode, byte[] dupKey, int level)
           
 
Method Summary
(package private)  void accumulateStats(TreeWalkerStatsAccumulator acc)
           
 String beginTag()
           
protected  boolean canBeAncestor(boolean targetContainsDuplicates)
           
protected  long computeMemorySize()
          Count up the memory usage attributable to this node alone.
static long computeOverhead(DbConfigManager configManager)
           
 boolean containsDuplicates()
           
protected  IN createNewInstance(byte[] identifierKey, int maxEntries, int level)
          Create a new DBIN.
 BINReference createReference()
          Create a holder object that encapsulates information about this BIN for the INCompressor.
protected  void dumpLogAdditional(StringBuffer sb)
          DBINS need to dump their dup key
 String dumpString(int nSpaces, boolean dumpTags)
          For unit test support:
 String endTag()
           
protected  int generateLevel(DatabaseId dbId, int newLevel)
           
 LogEntryType getBINDeltaType()
           
 byte[] getChildKey(IN child)
          Get the key (dupe or identifier) in child that is used to locate it in 'this' node.
(package private)  BIN getCursorBIN(CursorImpl cursor)
          The following four methods access the correct fields in a cursor depending on whether "this" is a BIN or DBIN.
(package private)  BIN getCursorBINToBeRemoved(CursorImpl cursor)
           
(package private)  int getCursorIndex(CursorImpl cursor)
           
 byte[] getDupKey()
          Return the key for this duplicate set.
 byte[] getDupTreeKey()
          Return the key for navigating through the duplicate tree.
 Comparator getKeyComparator()
          Return the comparator function to be used for DBINs.
 int getLogSize()
           
 LogEntryType getLogType()
          All objects that are reponsible for a generating a type of log entry must implement this.
 byte[] getMainTreeKey()
          Return the key for navigating through the main tree.
protected  long getMemoryOverhead(MemoryBudget mb)
           
(package private)  boolean hasNonLNChildren()
          Returns whether any resident children are not LNs (are INs).
(package private)  boolean matchLNByNodeId(TreeLocation location, long nodeId)
           
 void readFromLog(ByteBuffer itemBuffer, byte entryTypeVersion)
          Initialize this object from the data in itemBuf.
 byte[] selectKey(byte[] mainTreeKey, byte[] dupTreeKey)
           
(package private)  void setCursorBIN(CursorImpl cursor, BIN bin)
           
(package private)  void setCursorIndex(CursorImpl cursor, int index)
           
 String shortClassName()
           
 void writeToLog(ByteBuffer logBuffer)
          Serialize this object into the buffer.
 
Methods inherited from class com.sleepycat.je.tree.BIN
addCursor, adjustCursors, adjustCursorsForInsert, adjustCursorsForMutation, clearKnownDeleted, compress, descendOnParentSearch, entryZeroKeyComparesLow, evictLN, evictLNs, getChildEvictionType, getCursorSet, getLastDeltaVersion, isCompressible, isEvictionProhibited, isValidForDelete, logInternal, nCursors, removeCursor, setCleanedSinceLastLog, setCompressedSinceLastLog, setKnownDeleted, setKnownDeletedLeaveTarget, splitSpecial, validateSubtreeBeforeDelete, verifyCursors
 
Methods inherited from class com.sleepycat.je.tree.IN
accountForSubtreeRemoval, clearPendingDeleted, compareTo, computeArraysOverhead, deleteEntry, deleteEntry, dumpDeletedState, dumpKeys, dumpLog, equals, fetchTarget, findEntry, findParent, flushProvisionalObsolete, getAccumulatedDelta, getDatabase, getDatabaseId, getDirty, getEntryInMemorySize, getEntryLsnByteArray, getEntryLsnLongArray, getEvictionType, getGeneration, getIdentifierKey, getInMemorySize, getKey, getLastFullVersion, getLevel, getLsn, getMaxEntries, getMigrate, getNEntries, getState, getTarget, getTransactionId, hashCode, init, initEntryLsn, initMemorySize, insertEntry, insertEntry1, isDbRoot, isDirty, isEntryKnownDeleted, isEntryPendingDeleted, isEvictable, isKeyInBounds, isLatchOwner, isRoot, isSoughtNode, isStateKnownDeleted, isStatePendingDeleted, latch, latch, latchNoWait, latchNoWait, log, log, log, logEntryIsTransactional, logProvisional, makeFetchErrorMsg, needsSplitting, postFetchInit, postRecoveryInit, rebuildINList, releaseLatch, releaseLatchIfOwner, setDatabase, setDirty, setEntry, setGeneration, setGeneration, setIdentifierKey, setInListResident, setIsRoot, setLastFullLsn, setLsn, setLsnElement, setMigrate, setPendingDeleted, setTarget, split, splitInternal, toString, trackProvisionalObsolete, updateEntry, updateEntry, updateEntry, updateEntry, updateEntry, updateEntry, updateMemorySize, updateMemorySize, updateMemorySize, verify, verifyMemorySize
 
Methods inherited from class com.sleepycat.je.tree.Node
countAsObsoleteWhenLogged, dump, getLastId, getMemorySizeIncludedByParent, getNextNodeId, getNodeId, getType, marshallOutsideWriteLatch, postLogWork, setLastNodeId, setNodeId, shortDescription
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface com.sleepycat.je.log.LoggableObject
countAsObsoleteWhenLogged, marshallOutsideWriteLatch, postLogWork
 

Constructor Detail

DBIN

public DBIN()

DBIN

public DBIN(DatabaseImpl db,
            byte[] identifierKey,
            int maxEntriesPerNode,
            byte[] dupKey,
            int level)
Method Detail

createNewInstance

protected IN createNewInstance(byte[] identifierKey,
                               int maxEntries,
                               int level)
Create a new DBIN. Need this because we can't call newInstance() without getting a 0 node.

Overrides:
createNewInstance in class BIN

generateLevel

protected int generateLevel(DatabaseId dbId,
                            int newLevel)
Overrides:
generateLevel in class IN

getKeyComparator

public final Comparator getKeyComparator()
Return the comparator function to be used for DBINs. This is the user defined duplicate comparison function, if defined.

Overrides:
getKeyComparator in class BIN

getDupKey

public byte[] getDupKey()
Return the key for this duplicate set.

Overrides:
getDupKey in class IN

getChildKey

public byte[] getChildKey(IN child)
                   throws DatabaseException
Get the key (dupe or identifier) in child that is used to locate it in 'this' node.

Overrides:
getChildKey in class BIN
Throws:
DatabaseException

selectKey

public byte[] selectKey(byte[] mainTreeKey,
                        byte[] dupTreeKey)
Overrides:
selectKey in class IN

getDupTreeKey

public byte[] getDupTreeKey()
Return the key for navigating through the duplicate tree.

Overrides:
getDupTreeKey in class IN

getMainTreeKey

public byte[] getMainTreeKey()
Return the key for navigating through the main tree.

Overrides:
getMainTreeKey in class IN

containsDuplicates

public boolean containsDuplicates()
Overrides:
containsDuplicates in class Node
Returns:
true if this node is a duplicate-bearing node type, false if otherwise.

getBINDeltaType

public LogEntryType getBINDeltaType()
Overrides:
getBINDeltaType in class BIN
Returns:
the log entry type to use for bin delta log entries.

createReference

public BINReference createReference()
Description copied from class: BIN
Create a holder object that encapsulates information about this BIN for the INCompressor.

Overrides:
createReference in class BIN

computeMemorySize

protected long computeMemorySize()
Count up the memory usage attributable to this node alone.

Overrides:
computeMemorySize in class IN

computeOverhead

public static long computeOverhead(DbConfigManager configManager)
                            throws DatabaseException
Throws:
DatabaseException

getMemoryOverhead

protected long getMemoryOverhead(MemoryBudget mb)
Overrides:
getMemoryOverhead in class BIN

canBeAncestor

protected boolean canBeAncestor(boolean targetContainsDuplicates)
Overrides:
canBeAncestor in class BIN
Returns:
true if you can be the ancestor of the target IN. Currently the determining factor is whether the target IN contains duplicates.

hasNonLNChildren

boolean hasNonLNChildren()
Description copied from class: IN
Returns whether any resident children are not LNs (are INs).

Overrides:
hasNonLNChildren in class BIN

getCursorBIN

BIN getCursorBIN(CursorImpl cursor)
The following four methods access the correct fields in a cursor depending on whether "this" is a BIN or DBIN. For BIN's, the CursorImpl.index and CursorImpl.bin fields should be used. For DBIN's, the CursorImpl.dupIndex and CursorImpl.dupBin fields should be used.

Overrides:
getCursorBIN in class BIN

getCursorBINToBeRemoved

BIN getCursorBINToBeRemoved(CursorImpl cursor)
Overrides:
getCursorBINToBeRemoved in class BIN

getCursorIndex

int getCursorIndex(CursorImpl cursor)
Overrides:
getCursorIndex in class BIN

setCursorBIN

void setCursorBIN(CursorImpl cursor,
                  BIN bin)
Overrides:
setCursorBIN in class BIN

setCursorIndex

void setCursorIndex(CursorImpl cursor,
                    int index)
Overrides:
setCursorIndex in class BIN

matchLNByNodeId

boolean matchLNByNodeId(TreeLocation location,
                        long nodeId)
                  throws DatabaseException
Overrides:
matchLNByNodeId in class Node
Throws:
DatabaseException

accumulateStats

void accumulateStats(TreeWalkerStatsAccumulator acc)
Overrides:
accumulateStats in class BIN

beginTag

public String beginTag()
Overrides:
beginTag in class BIN

endTag

public String endTag()
Overrides:
endTag in class BIN

dumpString

public String dumpString(int nSpaces,
                         boolean dumpTags)
For unit test support:

Overrides:
dumpString in class IN
Returns:
a string that dumps information about this IN, without

getLogType

public LogEntryType getLogType()
Description copied from interface: LoggableObject
All objects that are reponsible for a generating a type of log entry must implement this.

Specified by:
getLogType in interface LoggableObject
Overrides:
getLogType in class BIN
Returns:
the type of log entry
See Also:
LoggableObject.getLogType()

getLogSize

public int getLogSize()
Specified by:
getLogSize in interface LogWritable
Overrides:
getLogSize in class IN
Returns:
number of bytes used to store this object.
See Also:
LogWritable.getLogSize()

writeToLog

public void writeToLog(ByteBuffer logBuffer)
Description copied from interface: LogWritable
Serialize this object into the buffer.

Specified by:
writeToLog in interface LogWritable
Overrides:
writeToLog in class IN
Parameters:
logBuffer - is the destination buffer
See Also:
LogWritable.writeToLog(java.nio.ByteBuffer)

readFromLog

public void readFromLog(ByteBuffer itemBuffer,
                        byte entryTypeVersion)
                 throws LogException
Description copied from interface: LogReadable
Initialize this object from the data in itemBuf.

Specified by:
readFromLog in interface LogReadable
Overrides:
readFromLog in class IN
Throws:
LogException
See Also:
IN.readFromLog(java.nio.ByteBuffer, byte)

dumpLogAdditional

protected void dumpLogAdditional(StringBuffer sb)
DBINS need to dump their dup key

Overrides:
dumpLogAdditional in class IN

shortClassName

public String shortClassName()
Overrides:
shortClassName in class BIN


Copyright 2004-2005 Sleepycat, Inc. All Rights Reserved.