com.sleepycat.je.tree
Class DIN

java.lang.Object
  extended by com.sleepycat.je.tree.Node
      extended by com.sleepycat.je.tree.IN
          extended by com.sleepycat.je.tree.DIN
All Implemented Interfaces:
Loggable, java.lang.Comparable<IN>

public final class DIN
extends IN

An DIN represents an Duplicate Internal Node in the JE tree.


Field Summary
 
Fields inherited from class com.sleepycat.je.tree.IN
ACCUMULATED_LIMIT, BIN_LEVEL, DBMAP_LEVEL, EXACT_MATCH, INSERT_SUCCESS, latch, LEVEL_MASK, MAIN_LEVEL, MAX_LEVEL, MAY_EVICT_LNS, MAY_EVICT_NODE, MAY_NOT_EVICT, MIN_LEVEL
 
Constructor Summary
DIN()
          Create an empty DIN, with no node id, to be filled in from the log.
DIN(DatabaseImpl db, byte[] identifierKey, int capacity, byte[] dupKey, ChildReference dupCountLNRef, int level)
          Create a new DIN.
 
Method Summary
 void beforeLog(LogManager logManager, INLogItem item, INLogContext context)
          Handles lazy migration of DupCountLNs prior to logging a DIN.
 java.lang.String beginTag()
           
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 DIN.
protected  void dumpLogAdditional(java.lang.StringBuffer sb)
          DINS need to dump their dup key
 java.lang.String dumpString(int nSpaces, boolean dumpTags)
          For unit test support:
 java.lang.String endTag()
           
protected  int generateLevel(DatabaseId dbId, int newLevel)
           
 byte[] getChildKey(IN child)
          Get the key (dupe or identifier) in child that is used to locate it in 'this' node.
 DupCountLN getDupCountLN()
           
 ChildReference getDupCountLNRef()
           
 byte[] getDupKey()
          Return the key for this duplicate set.
 byte[] getDupTreeKey()
          Return the key for navigating through the duplicate tree.
 java.util.Comparator<byte[]> getKeyComparator()
          Return the comparator function to be used for DINs.
 int getLogSize()
           
 LogEntryType getLogType()
           
 byte[] getMainTreeKey()
          Return the key for navigating through the main tree.
protected  long getMemoryOverhead(MemoryBudget mb)
           
 void incrementDuplicateCount(LockResult lockResult, byte[] key, Locker locker, boolean increment)
          Increment or decrement the DupCountLN, log the updated LN, and update the lock result.
 boolean isDbRoot()
           
 void readFromLog(java.nio.ByteBuffer itemBuffer, byte entryVersion)
          Initialize this object from the data in itemBuf.
 byte[] selectKey(byte[] mainTreeKey, byte[] dupTreeKey)
           
 java.lang.String shortClassName()
           
 java.lang.String toString()
          Default toString method at the root of the tree.
 void updateDupCountLN(Node target)
          Assign the Dup Count LN node.
 void updateDupCountLNRef(long newLsn)
          Update dup count LSN.
 void updateDupCountLNRefAndNullTarget(long newLsn)
          Update Dup Count LN.
 void writeToLog(java.nio.ByteBuffer logBuffer)
          Serialize this object into the buffer.
 
Methods inherited from class com.sleepycat.je.tree.IN
afterLog, canBeAncestor, clearLsn, clearPendingDeleted, compareTo, compress, computeArraysOverhead, deleteEntry, descendOnParentSearch, dumpLog, equals, fetchTarget, findEntry, getBudgetedMemorySize, getDatabase, getDatabaseId, getDirty, getEntryInMemorySize, getEvictionType, getGeneration, getIdentifierKey, getInListResident, getInMemorySize, getKey, getLastFullVersion, getLevel, getLsn, getMigrate, getNEntries, getRecalcToggle, getState, getTarget, getTreeAdminMemorySize, hashCode, init, initMemorySize, insertEntry, insertEntry1, isCompressible, isEntryKnownDeleted, isEntryPendingDeleted, isEvictable, isKeyInBounds, isLatchOwnerForRead, isLatchOwnerForWrite, isRoot, isSoughtNode, latch, latch, latchNoWait, latchNoWait, latchShared, latchShared, log, log, log, logDirtyChildren, logicalEquals, needsSplitting, optionalLog, optionalLogProvisional, postFetchInit, postRecoveryInit, releaseLatch, releaseLatchIfOwner, setDatabase, setDirty, setEntry, setGeneration, setGeneration, setInListResident, setMigrate, setPendingDeleted, setProhibitNextDelta, setRecalcToggle, splitInternal, updateEntry, updateEntry, updateEntry, updateMemorySize, updateMemorySize, updateNode, updateNode, updateNode, verify, verifyMemorySize
 
Methods inherited from class com.sleepycat.je.tree.Node
dump, getMemorySizeIncludedByParent, getNodeId, getTransactionId, getType, shortDescription
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface com.sleepycat.je.log.Loggable
getTransactionId
 

Constructor Detail

DIN

public DIN()
Create an empty DIN, with no node id, to be filled in from the log.


DIN

public DIN(DatabaseImpl db,
           byte[] identifierKey,
           int capacity,
           byte[] dupKey,
           ChildReference dupCountLNRef,
           int level)
Create a new DIN.

Method Detail

generateLevel

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

createNewInstance

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

Overrides:
createNewInstance in class IN

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 IN
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

getDupCountLNRef

public ChildReference getDupCountLNRef()

getDupCountLN

public DupCountLN getDupCountLN()
                         throws DatabaseException
Throws:
DatabaseException

updateDupCountLN

public void updateDupCountLN(Node target)
Assign the Dup Count LN node. Does not dirty the DIN.


updateDupCountLNRefAndNullTarget

public void updateDupCountLNRefAndNullTarget(long newLsn)
Update Dup Count LN.


updateDupCountLNRef

public void updateDupCountLNRef(long newLsn)
Update dup count LSN.


containsDuplicates

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

isDbRoot

public boolean isDbRoot()
Overrides:
isDbRoot in class IN

getKeyComparator

public final java.util.Comparator<byte[]> getKeyComparator()
Return the comparator function to be used for DINs. This is the user defined duplicate comparison function, if defined.

Overrides:
getKeyComparator in class IN

incrementDuplicateCount

public void incrementDuplicateCount(LockResult lockResult,
                                    byte[] key,
                                    Locker locker,
                                    boolean increment)
                             throws DatabaseException
Increment or decrement the DupCountLN, log the updated LN, and update the lock result. Preconditions: This DIN is latched and the DupCountLN is write locked. Postconditions: Same as preconditions.

Throws:
DatabaseException

computeMemorySize

protected long computeMemorySize()
Count up the memory usage attributable to this node alone. LNs children are counted by their BIN/DIN parents, but INs are not counted by their parents because they are resident on the IN list.

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 IN

getLogType

public LogEntryType getLogType()
Overrides:
getLogType in class IN
See Also:
Node.getLogType()

beforeLog

public void beforeLog(LogManager logManager,
                      INLogItem item,
                      INLogContext context)
               throws DatabaseException
Handles lazy migration of DupCountLNs prior to logging a DIN.

Overrides:
beforeLog in class IN
Throws:
DatabaseException

getLogSize

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

writeToLog

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

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

readFromLog

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

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

dumpLogAdditional

protected void dumpLogAdditional(java.lang.StringBuffer sb)
DINS need to dump their dup key

Overrides:
dumpLogAdditional in class IN

beginTag

public java.lang.String beginTag()
Overrides:
beginTag in class IN

endTag

public java.lang.String endTag()
Overrides:
endTag in class IN

dumpString

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

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

toString

public java.lang.String toString()
Description copied from class: Node
Default toString method at the root of the tree.

Overrides:
toString in class IN

shortClassName

public java.lang.String shortClassName()
Overrides:
shortClassName in class IN