|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.sleepycat.je.tree.Node
com.sleepycat.je.tree.IN
An IN represents an Internal Node in the JE tree.
Field Summary | |
static int |
DBMAP_LEVEL
|
protected boolean |
evictionProhibited
|
static int |
EXACT_MATCH
|
static int |
INSERT_SUCCESS
|
static int |
MAIN_LEVEL
|
static int |
MAX_LEVEL
|
static int |
MIN_LEVEL
|
Constructor Summary | |
IN()
Create an empty IN, with no node id, to be filled in from the log. |
|
IN(DatabaseImpl db,
Key identifierKey,
int capacity,
int level)
Create a new IN. |
Method Summary | |
(package private) void |
accountForSubtreeRemoval(INList inList,
Set modifiedFileSummaries)
Remove self and children from the in-memory IN list. |
(package private) void |
accumulateStats(TreeWalkerStatsAccumulator acc)
|
(package private) void |
adjustCursors(IN newSibling,
int newSiblingLow,
int newSiblingHigh)
|
(package private) void |
adjustCursorsForInsert(int insertIndex)
|
String |
beginTag()
|
protected boolean |
canBeAncestor(boolean targetContainsDuplicates)
|
(package private) void |
clearKnownDeleted(int idx)
Set knownDeleted to false. |
void |
clearTarget(int idx)
Clear the idx'th target. |
int |
compareTo(Object o)
Sort based on node id. |
boolean |
compress(BINReference binRef)
|
protected long |
computeMemorySize()
Count up the memory usage attributable to this node alone. |
static long |
computeOverhead(DbConfigManager configManager)
|
protected IN |
createNewInstance(Key identifierKey,
int maxEntries,
int level)
Create a new IN. |
boolean |
deleteEntry(int index,
boolean maybeValidate)
Deletes the ChildReference at index from this IN. |
(package private) boolean |
deleteEntry(Key key,
boolean maybeValidate)
Deletes the ChildReference with the key arg from this IN. |
protected void |
descendOnParentSearch(SearchResult result,
boolean targetContainsDuplicates,
boolean targetIsRoot,
long targetNodeId,
Node child,
boolean requireExactMatch)
|
(package private) void |
dumpKeys()
|
void |
dumpLog(StringBuffer sb,
boolean verbose)
Write the object into the string buffer for log dumping. |
protected void |
dumpLogAdditional(StringBuffer sb)
Allows subclasses to add additional fields before the end tag. |
String |
dumpString(int nSpaces,
boolean dumpTags)
For unit test support: |
String |
endTag()
|
(package private) boolean |
entryZeroKeyComparesLow()
Indicates whether whether entry 0's key is "special" in that it always compares less than any other key. |
boolean |
equals(Object obj)
|
Node |
fetchTarget(int idx)
|
(package private) Node |
fetchTargetIgnoreKnownDeleted(int idx)
|
int |
findEntry(Key key,
boolean indicateIfDuplicate,
boolean exact)
Find the entry in this IN for which key arg is >= the key. |
(package private) void |
findParent(Tree.SearchType searchType,
long targetNodeId,
boolean targetContainsDuplicates,
boolean targetIsRoot,
Key targetMainTreeKey,
Key targetDupTreeKey,
SearchResult result,
boolean requireExactMatch,
List trackingList,
boolean doFetch)
See if you are the parent of this child. |
protected int |
generateLevel(DatabaseId dbId,
int newLevel)
|
Key |
getChildKey(IN child)
Get the key (dupe or identifier) in child that is used to locate it in 'this' node. |
DatabaseImpl |
getDatabase()
Get the database for this IN. |
DatabaseId |
getDatabaseId()
|
boolean |
getDirty()
|
Key |
getDupKey()
Return the key for this duplicate set. |
Key |
getDupTreeKey()
Return the key for navigating through the duplicate tree. |
long |
getGeneration()
|
Key |
getIdentifierKey()
|
long |
getInMemorySize()
Return the number of bytes used by this IN. |
(package private) long |
getInMemorySize(int idx)
|
(package private) static long |
getInMemorySize(Key key,
Node target)
|
Key |
getKey(int idx)
Return the idx'th key. |
Comparator |
getKeyComparator()
Return the relevant user defined comparison function for this type of node. |
long |
getLastFullVersion()
Returns the last logged LSN, or null if never logged. |
Latch |
getLatch()
|
int |
getLevel()
Cover for LN's and just return 0 since they'll always be at the bottom of the tree. |
int |
getLogSize()
|
LogEntryType |
getLogType()
All objects that are reponsible for a generating a type of log entry must implement this. |
long |
getLsn(int idx)
Return the idx'th LSN for this entry. |
Key |
getMainTreeKey()
Return the key for navigating through the main tree. |
(package private) int |
getMaxEntries()
|
protected long |
getMemoryOverhead(MemoryBudget mb)
|
int |
getNEntries()
|
byte |
getState(int idx)
|
Node |
getTarget(int idx)
Return the idx'th target. |
long |
getTransactionId()
|
int |
hashCode()
|
protected void |
init(DatabaseImpl db,
Key identifierKey,
int initialCapacity,
int level)
Initialize IN object. |
protected void |
initMemorySize()
Initialize the per-node memory count by computing its memory usage. |
boolean |
insertEntry(ChildReference entry)
Inserts the argument ChildReference into this IN. |
int |
insertEntry1(ChildReference entry)
Same as insertEntry except that it returns the index where the dup was found instead of false. |
boolean |
isDbRoot()
|
(package private) boolean |
isDirty(int idx)
|
boolean |
isEntryKnownDeleted(int idx)
|
boolean |
isEvictable()
|
boolean |
isKeyInBounds(Key key)
Returns whether the given key is greater than or equal to the first key in the IN and less than or equal to the last key in the IN. |
boolean |
isRoot()
|
protected boolean |
isSoughtNode(long nid)
|
(package private) boolean |
isValidForDelete()
Check if this node fits the qualifications for being part of a deletable subtree. |
void |
latch()
Latch this node. |
long |
log(LogManager logManager)
Log this IN and clear the dirty flag. |
long |
log(LogManager logManager,
boolean isProvisional)
Log this IN and clear the dirty flag. |
long |
logAllowDeltas(LogManager logManager,
boolean isProvisional)
Log this IN. |
boolean |
logEntryIsTransactional()
|
protected long |
logInternal(LogManager logManager,
boolean allowDeltas,
boolean isProvisional)
Decide how to log this node. |
long |
logProvisional(LogManager logManager)
Log this node provisionally and clear the dirty flag. |
(package private) String |
makeFetchErrorMsg(Exception e,
long lsn,
byte state)
|
(package private) Key |
makePrefixKey(Key wholeKey)
Makes a prefix key suitable for this IN by taking the argument key, comparing it to other existing keys in the node and finding the minimal prefix of the argument that will distinguish it in this IN. |
boolean |
needsSplitting()
Return true if this node needs splitting. |
void |
postFetchInit(DatabaseImpl db,
long sourceLsn)
Initialize a node that has been read in from the log. |
void |
postRecoveryInit(DatabaseImpl db,
long sourceLsn)
Initialize a node read in during recovery. |
void |
readFromLog(ByteBuffer itemBuffer)
Initialize this object from the data in itemBuf. |
(package private) void |
rebuildINList(INList inList)
Add self and children to this in-memory IN list. |
void |
releaseLatch()
Release the latch on this node. |
Key |
selectKey(Key mainTreeKey,
Key dupTreeKey)
|
void |
setCleanedSinceLastLog()
Do nothing since INs don't support deltas. |
protected void |
setCompressedSinceLastLog()
Do nothing since INs don't support deltas. |
void |
setDatabase(DatabaseImpl db)
Set the database reference for this node. |
void |
setDirty(boolean dirty)
|
void |
setEntry(int idx,
Node target,
Key key,
long lsn,
byte state)
Set the idx'th entry of this node. |
void |
setEvictionProhibited(boolean pinned)
|
void |
setGeneration()
|
void |
setGeneration(long newGeneration)
|
(package private) void |
setIdentifierKey(Key key)
Set the identifier key for this node. |
void |
setInListResident(boolean resident)
|
(package private) void |
setIsRoot(boolean isRoot)
|
(package private) void |
setKnownDeleted(int idx)
Set knownDeleted to true. |
(package private) void |
setLastFullLsn(long lsn)
Sets the last logged LSN. |
void |
setLsn(int idx,
long lsn)
Sets the idx'th target LSN. |
void |
setTarget(int idx,
Node target)
Sets the idx'th target. |
String |
shortClassName()
|
(package private) void |
split(IN parent,
int childIndex,
int maxEntries)
Split this into two nodes. |
protected void |
splitInternal(IN parent,
int childIndex,
int maxEntries,
int splitIndex)
|
(package private) void |
splitSpecial(IN parent,
int parentIndex,
int maxEntriesPerNode,
Key key,
boolean leftSide)
Called when we know we are about to split on behalf of a key that is the minimum (leftSide) or maximum (!leftSide) of this node. |
String |
toString()
Default toString method at the root of the tree. |
(package private) void |
traceSplit(Level level,
IN parent,
IN newSibling,
long parentLsn,
long myNewLsn,
long newSiblingLsn,
int splitIndex,
int idKeyIndex,
int childIndex)
Send trace messages to the java.util.logger. |
void |
updateEntry(int idx,
long lsn)
Update the idx'th entry of this node. |
void |
updateEntry(int idx,
long lsn,
long oldLNSize,
long newLNSize)
Update the idx'th entry of this node. |
void |
updateEntry(int idx,
Node node)
Update the idx'th entry of this node. |
void |
updateEntry(int idx,
Node node,
long lsn)
Update the idx'th entry of this node. |
void |
updateEntry(int idx,
Node node,
long lsn,
Key key)
Update the idx'th entry of this node. |
protected void |
updateMemorySize(ChildReference oldRef,
ChildReference newRef)
|
protected void |
updateMemorySize(long oldSize,
long newSize)
|
(package private) void |
updateMemorySize(Node oldNode,
Node newNode)
|
(package private) boolean |
validateSubtreeBeforeDelete(int index)
|
void |
verify(Key maxKey)
Check that the IN is in a valid state. |
boolean |
verifyMemorySize()
|
void |
writeToLog(ByteBuffer logBuffer)
Serialize this object into the buffer. |
Methods inherited from class com.sleepycat.je.tree.Node |
containsDuplicates, dump, getLastId, getMemorySizeIncludedByParent, getNextNodeId, getNodeId, getType, marshallOutsideWriteLatch, matchLNByNodeId, 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 |
marshallOutsideWriteLatch, postLogWork |
Field Detail |
public static final int DBMAP_LEVEL
public static final int MAIN_LEVEL
public static final int MIN_LEVEL
public static final int MAX_LEVEL
protected boolean evictionProhibited
public static final int EXACT_MATCH
public static final int INSERT_SUCCESS
Constructor Detail |
public IN()
public IN(DatabaseImpl db, Key identifierKey, int capacity, int level)
Method Detail |
protected void init(DatabaseImpl db, Key identifierKey, int initialCapacity, int level)
protected void initMemorySize()
public boolean equals(Object obj)
public int hashCode()
public int compareTo(Object o)
compareTo
in interface Comparable
protected IN createNewInstance(Key identifierKey, int maxEntries, int level)
public void postFetchInit(DatabaseImpl db, long sourceLsn) throws DatabaseException
postFetchInit
in class Node
DatabaseException
public void postRecoveryInit(DatabaseImpl db, long sourceLsn)
void setLastFullLsn(long lsn)
public long getLastFullVersion()
public void latch() throws DatabaseException
DatabaseException
public void releaseLatch() throws LatchNotHeldException
LatchNotHeldException
public Latch getLatch()
public long getGeneration()
public void setGeneration()
public void setGeneration(long newGeneration)
public int getLevel()
Node
getLevel
in class Node
protected int generateLevel(DatabaseId dbId, int newLevel)
public boolean getDirty()
public void setDirty(boolean dirty)
public boolean isRoot()
public boolean isDbRoot()
void setIsRoot(boolean isRoot)
public Key getIdentifierKey()
void setIdentifierKey(Key key)
key
- - the new identifier key for this node.public Key getChildKey(IN child) throws DatabaseException
DatabaseException
public Key selectKey(Key mainTreeKey, Key dupTreeKey)
public Key getDupKey() throws DatabaseException
DatabaseException
public Key getDupTreeKey()
public Key getMainTreeKey()
public DatabaseImpl getDatabase()
public void setDatabase(DatabaseImpl db)
public DatabaseId getDatabaseId()
public Key getKey(int idx)
public byte getState(int idx)
public Node getTarget(int idx)
public void setTarget(int idx, Node target)
public void clearTarget(int idx)
public long getLsn(int idx)
public void setLsn(int idx, long lsn)
public boolean isEntryKnownDeleted(int idx)
void setKnownDeleted(int idx)
void clearKnownDeleted(int idx)
boolean isDirty(int idx)
public int getNEntries()
int getMaxEntries()
public Node fetchTarget(int idx) throws DatabaseException
DatabaseException
Node fetchTargetIgnoreKnownDeleted(int idx) throws DatabaseException
DatabaseException
String makeFetchErrorMsg(Exception e, long lsn, byte state)
public void setEntry(int idx, Node target, Key key, long lsn, byte state)
public void updateEntry(int idx, Node node)
public void updateEntry(int idx, Node node, long lsn)
public void updateEntry(int idx, Node node, long lsn, Key key)
public void updateEntry(int idx, long lsn)
public void updateEntry(int idx, long lsn, long oldLNSize, long newLNSize)
public boolean verifyMemorySize()
public long getInMemorySize()
long getInMemorySize(int idx)
static long getInMemorySize(Key key, Node target)
protected long computeMemorySize()
public static long computeOverhead(DbConfigManager configManager) throws DatabaseException
DatabaseException
protected long getMemoryOverhead(MemoryBudget mb)
protected void updateMemorySize(ChildReference oldRef, ChildReference newRef)
protected void updateMemorySize(long oldSize, long newSize)
void updateMemorySize(Node oldNode, Node newNode)
public void setInListResident(boolean resident)
public boolean isKeyInBounds(Key key)
public int findEntry(Key key, boolean indicateIfDuplicate, boolean exact)
key
- - the key to search for.indicateIfDuplicate
- - true if EXACT_MATCH should
be or'd onto the return value if key is already present in this node.exact
- - true if an exact match must be found.
public boolean insertEntry(ChildReference entry) throws DatabaseException
entry
- The ChildReference to insert into the IN.
InconsistentNodeException
- if the node is full
(it should have been split earlier).
DatabaseException
public int insertEntry1(ChildReference entry) throws DatabaseException
entry
- The ChildReference to insert into the IN.
InconsistentNodeException
- if the node is full (it should have
been split earlier).
DatabaseException
boolean deleteEntry(Key key, boolean maybeValidate) throws DatabaseException
key
- The key of the reference to delete from the IN.maybeValidate
- true if assert validation should occur prior to
delete. Set this to false during recovery.
DatabaseException
public boolean deleteEntry(int index, boolean maybeValidate) throws DatabaseException
index
- The index of the entry to delete from the IN.maybeValidate
- true if asserts are enabled.
DatabaseException
protected void setCompressedSinceLastLog()
public void setCleanedSinceLastLog()
public boolean compress(BINReference binRef) throws DatabaseException
DatabaseException
boolean validateSubtreeBeforeDelete(int index) throws DatabaseException
DatabaseException
Key makePrefixKey(Key wholeKey)
public boolean needsSplitting()
boolean entryZeroKeyComparesLow()
void split(IN parent, int childIndex, int maxEntries) throws DatabaseException
DatabaseException
protected void splitInternal(IN parent, int childIndex, int maxEntries, int splitIndex) throws DatabaseException
DatabaseException
void splitSpecial(IN parent, int parentIndex, int maxEntriesPerNode, Key key, boolean leftSide) throws DatabaseException
DatabaseException
void adjustCursors(IN newSibling, int newSiblingLow, int newSiblingHigh)
void adjustCursorsForInsert(int insertIndex)
public Comparator getKeyComparator()
public void verify(Key maxKey) throws DatabaseException
verify
in class Node
DatabaseException
void rebuildINList(INList inList) throws DatabaseException
rebuildINList
in class Node
DatabaseException
void accountForSubtreeRemoval(INList inList, Set modifiedFileSummaries) throws DatabaseException
accountForSubtreeRemoval
in class Node
DatabaseException
boolean isValidForDelete() throws DatabaseException
isValidForDelete
in class Node
DatabaseException
void findParent(Tree.SearchType searchType, long targetNodeId, boolean targetContainsDuplicates, boolean targetIsRoot, Key targetMainTreeKey, Key targetDupTreeKey, SearchResult result, boolean requireExactMatch, List trackingList, boolean doFetch) throws DatabaseException
doFetch
- If true, fetch the child in the pursuit of this search.
If false, give up if the child is not resident. In that case, we have
a potential ancestor, but are not sure if this is the parent.
DatabaseException
protected void descendOnParentSearch(SearchResult result, boolean targetContainsDuplicates, boolean targetIsRoot, long targetNodeId, Node child, boolean requireExactMatch) throws DatabaseException
DatabaseException
protected boolean isSoughtNode(long nid) throws DatabaseException
isSoughtNode
in class Node
DatabaseException
protected boolean canBeAncestor(boolean targetContainsDuplicates)
canBeAncestor
in class Node
public boolean isEvictable()
public void setEvictionProhibited(boolean pinned)
void accumulateStats(TreeWalkerStatsAccumulator acc)
public long log(LogManager logManager) throws DatabaseException
DatabaseException
public long log(LogManager logManager, boolean isProvisional) throws DatabaseException
DatabaseException
public long logProvisional(LogManager logManager) throws DatabaseException
DatabaseException
public long logAllowDeltas(LogManager logManager, boolean isProvisional) throws DatabaseException
DatabaseException
protected long logInternal(LogManager logManager, boolean allowDeltas, boolean isProvisional) throws DatabaseException
DatabaseException
public LogEntryType getLogType()
LoggableObject
getLogType
in interface LoggableObject
getLogType
in class Node
LoggableObject.getLogType()
public int getLogSize()
getLogSize
in interface LogWritable
getLogSize
in class Node
LogWritable.getLogSize()
public void writeToLog(ByteBuffer logBuffer)
LogWritable
writeToLog
in interface LogWritable
writeToLog
in class Node
LogWritable.writeToLog(java.nio.ByteBuffer)
public void readFromLog(ByteBuffer itemBuffer) throws LogException
LogReadable
readFromLog
in interface LogReadable
readFromLog
in class Node
LogException
LogReadable.readFromLog(java.nio.ByteBuffer)
public void dumpLog(StringBuffer sb, boolean verbose)
LogReadable
dumpLog
in interface LogReadable
dumpLog
in class Node
LogReadable.dumpLog(java.lang.StringBuffer, boolean)
public boolean logEntryIsTransactional()
logEntryIsTransactional
in interface LogReadable
LogReadable#logEntryIsTransactional.
public long getTransactionId()
getTransactionId
in interface LogReadable
LogReadable.getTransactionId()
protected void dumpLogAdditional(StringBuffer sb)
public String beginTag()
public String endTag()
void dumpKeys() throws DatabaseException
DatabaseException
public String dumpString(int nSpaces, boolean dumpTags)
dumpString
in class Node
public String toString()
Node
toString
in class Node
public String shortClassName()
void traceSplit(Level level, IN parent, IN newSibling, long parentLsn, long myNewLsn, long newSiblingLsn, int splitIndex, int idKeyIndex, int childIndex)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |