com.sleepycat.je.tree
Class LN

java.lang.Object
  extended by com.sleepycat.je.tree.Node
      extended by com.sleepycat.je.tree.LN
All Implemented Interfaces:
Loggable
Direct Known Subclasses:
DupCountLN, FileSummaryLN, MapLN, NameLN

public class LN
extends Node
implements Loggable

An LN represents a Leaf Node in the JE tree.


Nested Class Summary
(package private) static class LN.LNWriteFailureException
           
 
Field Summary
 
Fields inherited from class com.sleepycat.je.tree.Node
NULL_NODE_ID
 
Constructor Summary
LN()
          Create an empty LN, to be filled in from the log.
LN(byte[] data, EnvironmentImpl envImpl, boolean replicated)
          Create a new LN from a byte array.
LN(DatabaseEntry dbt, EnvironmentImpl envImpl, boolean replicated)
          Create a new LN from a DatabaseEntry.
 
Method Summary
(package private)  void accountForSubtreeRemoval(INList inList, LocalUtilizationTracker localTracker)
          No need to do anything, stop the search.
 String beginTag()
           
protected  boolean canBeAncestor(boolean targetContainsDuplicates)
          A LN can never be the ancestor of another node.
 byte[] copyData()
           
(package private)  LNLogEntry createLogEntry(LogEntryType entryType, DatabaseImpl dbImpl, byte[] key, byte[] delDupKey, long logAbortLsn, boolean logAbortKnownDeleted, Txn logTxn, ReplicationContext repContext)
           
 long delete(DatabaseImpl database, byte[] lnKey, byte[] dupKey, long oldLsn, Locker locker, ReplicationContext repContext)
          Delete this LN's data and log the new version.
 void dumpKey(StringBuilder sb, byte[] key)
           
 void dumpLog(StringBuilder sb, boolean verbose)
          Write the object into the string buffer for log dumping.
protected  void dumpLogAdditional(StringBuilder sb, boolean verbose)
           
 String dumpString(int nSpaces, boolean dumpTags)
           
 String endTag()
           
 byte[] getData()
           
 int getLastLoggedSize()
          Returns the total last logged log size, including the LNLogEntry overhead of this LN when it was last logged and the log entry header.
 int getLogSize()
           
 LogEntryType getLogType()
           
 long getMemorySizeIncludedByParent()
          Compute the approximate size of this node in memory for evictor invocation purposes.
protected  LogEntryType getTransactionalLogType()
          Log type for transactional entries
 void incFetchStats(EnvironmentImpl envImpl, boolean isMiss)
          We categorize fetch stats by the type of node, so node subclasses update different stats.
 boolean isDeleted()
           
 boolean isDirty()
           
(package private)  boolean isEvictable()
          Returns true by default, but is overridden by MapLN to prevent eviction of open databases.
(package private)  boolean isEvictableInexact()
          Returns true by default, but is overridden by MapLN to prevent eviction of open databases.
protected  boolean isSoughtNode(long nid, CacheMode cacheMode, boolean ignore)
          A LN can never be a child in the search chain.
(package private)  boolean isValidForDelete()
           
(package private)  long log(EnvironmentImpl env, DatabaseImpl dbImpl, byte[] key, byte[] delDupKey, long oldLsn, Locker locker, boolean backgroundIO, boolean isProvisional, ReplicationContext repContext)
          Log this LN.
 long log(EnvironmentImpl env, DatabaseImpl databaseImpl, byte[] key, long oldLsn, Locker locker, boolean backgroundIO, ReplicationContext repContext)
          Log this LN and clear the dirty flag.
 boolean logicalEquals(Loggable other)
           
(package private)  void makeDeleted()
           
 long modify(byte[] newData, DatabaseImpl database, byte[] lnKey, long oldLsn, Locker locker, ReplicationContext repContext)
          Modify the LN's data and log the new version.
 long optionalLog(EnvironmentImpl env, DatabaseImpl databaseImpl, byte[] key, long oldLsn, Locker locker, ReplicationContext repContext)
          Log this LN if it's not part of a deferred-write db.
 long optionalLogProvisional(EnvironmentImpl env, DatabaseImpl databaseImpl, byte[] key, long oldLsn, ReplicationContext repContext)
          Log a provisional, non-txnal version of an LN.
 void readFromLog(ByteBuffer itemBuffer, int entryVersion)
          Initialize this object from the data in itemBuf.
(package private)  void rebuildINList(INList inList)
          Add yourself to the in memory list if you're a type of node that should belong.
 void releaseMemoryBudget()
          Release the memory budget for any objects referenced by this LN.
 void setDirty()
           
 void setLastLoggedSize(int size)
          Saves the last logged size.
 void writeToLog(ByteBuffer logBuffer)
          Serialize this object into the buffer.
 
Methods inherited from class com.sleepycat.je.tree.Node
containsDuplicates, dump, getLevel, getNodeId, getTransactionId, getType, latchShared, latchShared, matchLNByNodeId, postFetchInit, releaseLatch, setNodeId, shortDescription, toString, verify
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface com.sleepycat.je.log.Loggable
getTransactionId
 

Constructor Detail

LN

public LN()
Create an empty LN, to be filled in from the log.


LN

public LN(byte[] data,
          EnvironmentImpl envImpl,
          boolean replicated)
Create a new LN from a byte array.


LN

public LN(DatabaseEntry dbt,
          EnvironmentImpl envImpl,
          boolean replicated)
Create a new LN from a DatabaseEntry.

Method Detail

getData

public byte[] getData()

copyData

public byte[] copyData()

isDeleted

public boolean isDeleted()

makeDeleted

void makeDeleted()

isDirty

public boolean isDirty()

setDirty

public void setDirty()

isValidForDelete

boolean isValidForDelete()
Specified by:
isValidForDelete in class Node
Returns:
true if you're part of a deletable subtree.

isEvictableInexact

boolean isEvictableInexact()
Returns true by default, but is overridden by MapLN to prevent eviction of open databases. This method is meant to be a fast but not guaranteed check and is used during selection of BINs for LN stripping. [#13415]


isEvictable

boolean isEvictable()
              throws DatabaseException
Returns true by default, but is overridden by MapLN to prevent eviction of open databases. This method is meant to be a guaranteed check and is used after a BIN has been selected for LN stripping but before actually stripping an LN. [#13415]

Throws:
DatabaseException - from subclasses.

isSoughtNode

protected boolean isSoughtNode(long nid,
                               CacheMode cacheMode,
                               boolean ignore)
A LN can never be a child in the search chain.

Specified by:
isSoughtNode in class Node
Returns:
true if you're an IN in the search path

canBeAncestor

protected boolean canBeAncestor(boolean targetContainsDuplicates)
A LN can never be the ancestor of another node.

Specified by:
canBeAncestor in class Node
Returns:
true if you can be the ancestor of the target IN. Currently the determining factor is whether the target IN contains duplicates.

delete

public long delete(DatabaseImpl database,
                   byte[] lnKey,
                   byte[] dupKey,
                   long oldLsn,
                   Locker locker,
                   ReplicationContext repContext)
            throws DatabaseException
Delete this LN's data and log the new version.

Parameters:
lnKey - is the key of the BIN/DBIN parent of the LN.
dupKey - is null if the LN parent is a BIN, or is the main tree key if the LN parent is a DBIN.
Throws:
DatabaseException

modify

public long modify(byte[] newData,
                   DatabaseImpl database,
                   byte[] lnKey,
                   long oldLsn,
                   Locker locker,
                   ReplicationContext repContext)
            throws DatabaseException
Modify the LN's data and log the new version.

Parameters:
repContext - indicates whether this LN is part of the replication stream. If this environment is a client node, repContext has the VLSN to be used when logging the LN. If this environment is a master, it indicates that the LN should be broadcast.
Throws:
DatabaseException

rebuildINList

void rebuildINList(INList inList)
Add yourself to the in memory list if you're a type of node that should belong.

Specified by:
rebuildINList in class Node

accountForSubtreeRemoval

void accountForSubtreeRemoval(INList inList,
                              LocalUtilizationTracker localTracker)
No need to do anything, stop the search.

Specified by:
accountForSubtreeRemoval in class Node

getMemorySizeIncludedByParent

public long getMemorySizeIncludedByParent()
Compute the approximate size of this node in memory for evictor invocation purposes.

Overrides:
getMemorySizeIncludedByParent in class Node

releaseMemoryBudget

public void releaseMemoryBudget()
Release the memory budget for any objects referenced by this LN. For now, only release treeAdmin memory, because treeMemory is handled in aggregate at the IN level. Over time, transition all of the LN's memory budget to this, so we update the memory budget counters more locally. Called when we are releasing a LN for garbage collection.


beginTag

public String beginTag()

endTag

public String endTag()

dumpString

public String dumpString(int nSpaces,
                         boolean dumpTags)
Overrides:
dumpString in class Node

log

public long log(EnvironmentImpl env,
                DatabaseImpl databaseImpl,
                byte[] key,
                long oldLsn,
                Locker locker,
                boolean backgroundIO,
                ReplicationContext repContext)
         throws DatabaseException
Log this LN and clear the dirty flag. Whether it's logged as a transactional entry or not depends on the type of locker.

Parameters:
env - the environment.
dbId - database id of this node. (Not stored in LN)
key - key of this node. (Not stored in LN)
oldLsn - is the LSN of the previous version or null.
locker - owning locker.
repContext - indicates whether this LN is part of the replication stream. If this environment is a client node, repContext has the VLSN to be used when logging the LN. If this environment is a master, it indicates that the LN should be broadcast.
Throws:
DatabaseException

optionalLog

public long optionalLog(EnvironmentImpl env,
                        DatabaseImpl databaseImpl,
                        byte[] key,
                        long oldLsn,
                        Locker locker,
                        ReplicationContext repContext)
                 throws DatabaseException
Log this LN if it's not part of a deferred-write db. Whether it's logged as a transactional entry or not depends on the type of locker.

Parameters:
env - the environment.
dbId - database id of this node. (Not stored in LN)
key - key of this node. (Not stored in LN)
oldLsn - is the LSN of the previous version or NULL_LSN.
locker - owning locker.
repContext - indicates whether this LN is part of the replication stream. If this environment is a client node, repContext has the VLSN to be used when logging the LN. If this environment is a master, it indicates that the LN should be broadcast.
Throws:
DatabaseException

optionalLogProvisional

public long optionalLogProvisional(EnvironmentImpl env,
                                   DatabaseImpl databaseImpl,
                                   byte[] key,
                                   long oldLsn,
                                   ReplicationContext repContext)
                            throws DatabaseException
Log a provisional, non-txnal version of an LN.

Parameters:
env - the environment.
dbId - database id of this node. (Not stored in LN)
key - key of this node. (Not stored in LN)
oldLsn - is the LSN of the previous version or NULL_LSN.
Throws:
DatabaseException

log

long log(EnvironmentImpl env,
         DatabaseImpl dbImpl,
         byte[] key,
         byte[] delDupKey,
         long oldLsn,
         Locker locker,
         boolean backgroundIO,
         boolean isProvisional,
         ReplicationContext repContext)
   throws DatabaseException
Log this LN. Clear dirty bit. Whether it's logged as a transactional entry or not depends on the type of locker.

Parameters:
env - the environment.
dbId - database id of this node. (Not stored in LN)
key - key of this node. (Not stored in LN)
delDupKey - if non-null, the dupKey for deleting the LN.
oldLsn - is the LSN of the previous version or NULL_LSN.
locker - owning locker.
Throws:
DatabaseException

createLogEntry

LNLogEntry createLogEntry(LogEntryType entryType,
                          DatabaseImpl dbImpl,
                          byte[] key,
                          byte[] delDupKey,
                          long logAbortLsn,
                          boolean logAbortKnownDeleted,
                          Txn logTxn,
                          ReplicationContext repContext)

incFetchStats

public void incFetchStats(EnvironmentImpl envImpl,
                          boolean isMiss)
Description copied from class: Node
We categorize fetch stats by the type of node, so node subclasses update different stats.

Specified by:
incFetchStats in class Node
See Also:
Node.incFetchStats(com.sleepycat.je.dbi.EnvironmentImpl, boolean)

getTransactionalLogType

protected LogEntryType getTransactionalLogType()
Log type for transactional entries


getLogType

public LogEntryType getLogType()
Specified by:
getLogType in class Node
See Also:
Node.getLogType()

getLastLoggedSize

public int getLastLoggedSize()
Returns the total last logged log size, including the LNLogEntry overhead of this LN when it was last logged and the log entry header. Used for computing obsolete size when an LNLogEntry is not in hand.


setLastLoggedSize

public void setLastLoggedSize(int size)
Saves the last logged size.


getLogSize

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

writeToLog

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

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

readFromLog

public void readFromLog(ByteBuffer itemBuffer,
                        int entryVersion)
Description copied from interface: Loggable
Initialize this object from the data in itemBuf.

Specified by:
readFromLog in interface Loggable
Overrides:
readFromLog in class Node
See Also:
Loggable.readFromLog(java.nio.ByteBuffer, int)

logicalEquals

public boolean logicalEquals(Loggable other)
Specified by:
logicalEquals in interface Loggable
Returns:
true if these two loggable items are logically the same. Used for replication testing.
See Also:
Loggable.logicalEquals(com.sleepycat.je.log.Loggable)

dumpLog

public void dumpLog(StringBuilder sb,
                    boolean verbose)
Description copied from interface: Loggable
Write the object into the string buffer for log dumping. Each object should be dumped without indentation or new lines and should be valid XML.

Specified by:
dumpLog in interface Loggable
Overrides:
dumpLog in class Node
Parameters:
sb - destination string buffer
verbose - if true, dump the full, verbose version
See Also:
Loggable.dumpLog(java.lang.StringBuilder, boolean)

dumpKey

public void dumpKey(StringBuilder sb,
                    byte[] key)

dumpLogAdditional

protected void dumpLogAdditional(StringBuilder sb,
                                 boolean verbose)


Copyright (c) 2004-2010 Oracle. All rights reserved.