Modifier and Type | Field and Description |
---|---|
static int |
ACCUMULATED_LIMIT |
static int |
BIN_LEVEL |
static int |
DBMAP_LEVEL |
static int |
EXACT_MATCH |
static int |
INSERT_SUCCESS |
protected SharedLatch |
latch |
static int |
LEVEL_MASK |
static int |
MAIN_LEVEL |
static int |
MAX_LEVEL |
static int |
MAY_EVICT_LNS |
static int |
MAY_EVICT_NODE |
static int |
MAY_NOT_EVICT |
static int |
MIN_LEVEL |
Constructor and Description |
---|
IN()
Create an empty IN, with no node id, to be filled in from the log.
|
IN(DatabaseImpl db,
byte[] identifierKey,
int capacity,
int level)
Create a new IN.
|
Modifier and Type | Method and Description |
---|---|
java.lang.String |
beginTag() |
protected boolean |
canBeAncestor(boolean targetContainsDuplicates) |
void |
clearPendingDeleted(int idx)
Set pendingDeleted to false.
|
int |
compareTo(java.lang.Object o)
Sort based on node id.
|
boolean |
compress(BINReference binRef,
boolean canFetch,
UtilizationTracker tracker) |
protected static long |
computeArraysOverhead(DbConfigManager configManager) |
protected long |
computeMemorySize()
Count up the memory usage attributable to this node alone.
|
static long |
computeOverhead(DbConfigManager configManager) |
protected IN |
createNewInstance(byte[] identifierKey,
int maxEntries,
int level)
Create a new IN.
|
boolean |
deleteEntry(int index,
boolean maybeValidate)
Deletes the ChildReference at index from this IN.
|
protected void |
descendOnParentSearch(SearchResult result,
boolean targetContainsDuplicates,
boolean targetIsRoot,
long targetNodeId,
Node child,
boolean requireExactMatch) |
void |
dumpLog(java.lang.StringBuffer sb,
boolean verbose)
Write the object into the string buffer for log dumping.
|
protected void |
dumpLogAdditional(java.lang.StringBuffer sb)
Allows subclasses to add additional fields before the end tag.
|
java.lang.String |
dumpString(int nSpaces,
boolean dumpTags)
For unit test support:
|
java.lang.String |
endTag() |
boolean |
equals(java.lang.Object obj) |
Node |
fetchTarget(int idx)
Returns the target of the idx'th entry or null if a pendingDeleted or
knownDeleted entry has been cleaned.
|
int |
findEntry(byte[] key,
boolean indicateIfDuplicate,
boolean exact)
Find the entry in this IN for which key arg is >= the key.
|
protected int |
generateLevel(DatabaseId dbId,
int newLevel) |
int |
getAccumulatedDelta() |
byte[] |
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() |
byte[] |
getDupKey()
Return the key for this duplicate set.
|
byte[] |
getDupTreeKey()
Return the key for navigating through the duplicate tree.
|
protected long |
getEntryInMemorySize(byte[] key,
Node target) |
int |
getEvictionType()
Returns the eviction type for this IN, for use by the evictor.
|
long |
getGeneration() |
byte[] |
getIdentifierKey() |
long |
getInMemorySize()
Return the number of bytes used by this IN.
|
byte[] |
getKey(int idx)
Return the idx'th key.
|
java.util.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.
|
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() |
long |
getLsn(int idx)
Return the idx'th LSN for this entry.
|
byte[] |
getMainTreeKey()
Return the key for navigating through the main tree.
|
protected long |
getMemoryOverhead(MemoryBudget mb) |
boolean |
getMigrate(int idx)
Get the idx'th migrate status.
|
int |
getNEntries() |
byte |
getState(int idx) |
Node |
getTarget(int idx)
Return the idx'th target.
|
int |
hashCode() |
protected void |
init(DatabaseImpl db,
byte[] 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 |
isCompressible() |
boolean |
isDbRoot() |
boolean |
isEntryKnownDeleted(int idx) |
boolean |
isEntryPendingDeleted(int idx) |
boolean |
isEvictable()
Returns whether this node can be evicted.
|
boolean |
isKeyInBounds(byte[] keyVal)
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 |
isLatchOwnerForRead() |
boolean |
isLatchOwnerForWrite() |
boolean |
isRoot() |
protected boolean |
isSoughtNode(long nid,
boolean updateGeneration) |
void |
latch()
Latch this node exclusive and set the generation.
|
void |
latch(boolean updateGeneration)
Latch this node exclusive, optionally setting the generation.
|
boolean |
latchNoWait()
Latch this node if it is not latched by another thread, and set the
generation if the latch succeeds.
|
boolean |
latchNoWait(boolean updateGeneration)
Latch this node if it is not latched by another thread, optionally
setting the generation if the latch succeeds.
|
void |
latchShared()
Latch this node shared and set the generation.
|
void |
latchShared(boolean updateGeneration)
Latch this node shared, optionally setting the generation.
|
long |
log(LogManager logManager)
Log this IN and clear the dirty flag.
|
long |
log(LogManager logManager,
boolean allowDeltas,
boolean isProvisional,
boolean proactiveMigration,
boolean backgroundIO,
IN parent)
Log this node with all available options.
|
void |
logDirtyChildren()
When splits and checkpoints intermingle in a deferred write databases,
a checkpoint target may appear which has a valid target but a null LSN.
|
protected long |
logInternal(LogManager logManager,
boolean allowDeltas,
boolean isProvisional,
boolean proactiveMigration,
boolean backgroundIO,
IN parent)
Decide how to log this node.
|
boolean |
needsSplitting()
Return true if this node needs splitting.
|
long |
optionalLog(LogManager logManager)
Log this IN and clear the dirty flag.
|
long |
optionalLogProvisional(LogManager logManager,
IN parent)
Log this node provisionally and clear the dirty flag.
|
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(java.nio.ByteBuffer itemBuffer,
byte entryTypeVersion)
Initialize this object from the data in itemBuf.
|
void |
releaseLatch()
Release the latch on this node.
|
void |
releaseLatchIfOwner()
Release the latch on this node.
|
byte[] |
selectKey(byte[] mainTreeKey,
byte[] dupTreeKey) |
void |
setDatabase(DatabaseImpl db)
Set the database reference for this node.
|
void |
setDirty(boolean dirty) |
void |
setEntry(int idx,
Node target,
byte[] keyVal,
long lsn,
byte state)
Set the idx'th entry of this node.
|
void |
setGeneration() |
void |
setGeneration(long newGeneration) |
void |
setInListResident(boolean resident) |
void |
setMigrate(int idx,
boolean migrate)
Set the idx'th migrate status.
|
void |
setPendingDeleted(int idx)
Set pendingDeleted to true.
|
void |
setProhibitNextDelta()
Do nothing since INs don't support deltas.
|
java.lang.String |
shortClassName() |
protected void |
splitInternal(IN parent,
int childIndex,
int maxEntries,
int splitIndex) |
java.lang.String |
toString()
Default toString method at the root of the tree.
|
void |
updateEntry(int idx,
long lsn)
Update the idx'th entry of this node.
|
void |
updateEntry(int idx,
long lsn,
byte state)
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,
byte[] key)
Update the idx'th entry of this node.
|
void |
updateKeyIfChanged(int idx,
byte[] newKey)
Updates the idx'th key of this node if it is not identical to the given
key.
|
protected void |
updateMemorySize(ChildReference oldRef,
ChildReference newRef) |
protected void |
updateMemorySize(long oldSize,
long newSize) |
void |
verify(byte[] maxKey)
Check that the IN is in a valid state.
|
boolean |
verifyMemorySize() |
void |
writeToLog(java.nio.ByteBuffer logBuffer)
Serialize this object into the buffer.
|
containsDuplicates, dump, getLastId, getMemorySizeIncludedByParent, getNextNodeId, getNodeId, getTransactionId, getType, setLastNodeId, shortDescription
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
getTransactionId
public static final int DBMAP_LEVEL
public static final int MAIN_LEVEL
public static final int LEVEL_MASK
public static final int MIN_LEVEL
public static final int MAX_LEVEL
public static final int BIN_LEVEL
public static final int MAY_NOT_EVICT
public static final int MAY_EVICT_LNS
public static final int MAY_EVICT_NODE
protected SharedLatch latch
public static final int EXACT_MATCH
public static final int INSERT_SUCCESS
public static int ACCUMULATED_LIMIT
public IN()
public IN(DatabaseImpl db, byte[] identifierKey, int capacity, int level)
protected void init(DatabaseImpl db, byte[] identifierKey, int initialCapacity, int level)
protected void initMemorySize()
public boolean equals(java.lang.Object obj)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public int compareTo(java.lang.Object o)
compareTo
in interface java.lang.Comparable
protected IN createNewInstance(byte[] 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)
public long getLastFullVersion()
public void latch(boolean updateGeneration) throws DatabaseException
DatabaseException
public void latchShared(boolean updateGeneration) throws DatabaseException
DatabaseException
public boolean latchNoWait(boolean updateGeneration) throws DatabaseException
DatabaseException
public void latch() throws DatabaseException
DatabaseException
public void latchShared() throws DatabaseException
latchShared
in class Node
DatabaseException
public boolean latchNoWait() throws DatabaseException
DatabaseException
public void releaseLatch() throws LatchNotHeldException
releaseLatch
in class Node
LatchNotHeldException
public void releaseLatchIfOwner() throws LatchNotHeldException
LatchNotHeldException
public boolean isLatchOwnerForRead()
public boolean isLatchOwnerForWrite()
public long getGeneration()
public void setGeneration()
public void setGeneration(long newGeneration)
public int getLevel()
Node
protected int generateLevel(DatabaseId dbId, int newLevel)
public boolean getDirty()
public void setDirty(boolean dirty)
public boolean isRoot()
public boolean isDbRoot()
public byte[] getIdentifierKey()
public byte[] getChildKey(IN child) throws DatabaseException
DatabaseException
public byte[] selectKey(byte[] mainTreeKey, byte[] dupTreeKey)
public byte[] getDupKey() throws DatabaseException
DatabaseException
public byte[] getDupTreeKey()
public byte[] getMainTreeKey()
public DatabaseImpl getDatabase()
public void setDatabase(DatabaseImpl db)
public DatabaseId getDatabaseId()
public byte[] getKey(int idx)
public boolean getMigrate(int idx)
public void setMigrate(int idx, boolean migrate)
public byte getState(int idx)
public Node getTarget(int idx)
public long getLsn(int idx)
public boolean isEntryPendingDeleted(int idx)
public void setPendingDeleted(int idx)
public void clearPendingDeleted(int idx)
public boolean isEntryKnownDeleted(int idx)
public int getNEntries()
public Node fetchTarget(int idx) throws DatabaseException
DatabaseException
public void setEntry(int idx, Node target, byte[] keyVal, 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, byte[] key)
public void updateKeyIfChanged(int idx, byte[] newKey)
public void updateEntry(int idx, long lsn)
public void updateEntry(int idx, long lsn, byte state)
public void updateEntry(int idx, long lsn, long oldLNSize, long newLNSize)
public boolean verifyMemorySize()
public long getInMemorySize()
protected long getEntryInMemorySize(byte[] key, Node target)
protected long computeMemorySize()
public static long computeOverhead(DbConfigManager configManager) throws DatabaseException
DatabaseException
protected static long computeArraysOverhead(DbConfigManager configManager) throws DatabaseException
DatabaseException
protected long getMemoryOverhead(MemoryBudget mb)
protected void updateMemorySize(ChildReference oldRef, ChildReference newRef)
protected void updateMemorySize(long oldSize, long newSize)
public int getAccumulatedDelta()
public void setInListResident(boolean resident)
public boolean isKeyInBounds(byte[] keyVal)
public int findEntry(byte[] 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
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
public void setProhibitNextDelta()
public boolean compress(BINReference binRef, boolean canFetch, UtilizationTracker tracker) throws DatabaseException
DatabaseException
public boolean isCompressible()
public boolean needsSplitting()
protected void splitInternal(IN parent, int childIndex, int maxEntries, int splitIndex) throws DatabaseException
DatabaseException
public java.util.Comparator getKeyComparator()
public void verify(byte[] maxKey) throws DatabaseException
verify
in class Node
DatabaseException
protected void descendOnParentSearch(SearchResult result, boolean targetContainsDuplicates, boolean targetIsRoot, long targetNodeId, Node child, boolean requireExactMatch) throws DatabaseException
DatabaseException
protected boolean isSoughtNode(long nid, boolean updateGeneration) throws DatabaseException
isSoughtNode
in class Node
DatabaseException
protected boolean canBeAncestor(boolean targetContainsDuplicates)
canBeAncestor
in class Node
public boolean isEvictable()
public int getEvictionType()
public void logDirtyChildren() throws DatabaseException
DatabaseException
public long log(LogManager logManager) throws DatabaseException
DatabaseException
public long log(LogManager logManager, boolean allowDeltas, boolean isProvisional, boolean proactiveMigration, boolean backgroundIO, IN parent) throws DatabaseException
DatabaseException
public long optionalLog(LogManager logManager) throws DatabaseException
DatabaseException
public long optionalLogProvisional(LogManager logManager, IN parent) throws DatabaseException
item
- object to be loggedDatabaseException
protected long logInternal(LogManager logManager, boolean allowDeltas, boolean isProvisional, boolean proactiveMigration, boolean backgroundIO, IN parent) throws DatabaseException
DatabaseException
public LogEntryType getLogType()
getLogType
in class Node
Node.getLogType()
public int getLogSize()
getLogSize
in interface Loggable
getLogSize
in class Node
Loggable.getLogSize()
public void writeToLog(java.nio.ByteBuffer logBuffer)
Loggable
writeToLog
in interface Loggable
writeToLog
in class Node
logBuffer
- is the destination bufferLoggable.writeToLog(java.nio.ByteBuffer)
public void readFromLog(java.nio.ByteBuffer itemBuffer, byte entryTypeVersion) throws LogException
Loggable
readFromLog
in interface Loggable
readFromLog
in class Node
LogException
Loggable.readFromLog(java.nio.ByteBuffer, byte)
public void dumpLog(java.lang.StringBuffer sb, boolean verbose)
Loggable
dumpLog
in interface Loggable
dumpLog
in class Node
sb
- destination string bufferverbose
- if true, dump the full, verbose versionLoggable.dumpLog(java.lang.StringBuffer, boolean)
protected void dumpLogAdditional(java.lang.StringBuffer sb)
public java.lang.String beginTag()
public java.lang.String endTag()
public java.lang.String dumpString(int nSpaces, boolean dumpTags)
public java.lang.String toString()
Node
public java.lang.String shortClassName()