blob: ec9cb19063ff0a49c969543004e1193ff1bf7aae [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je.tree;
import com.sleepycat.je.CacheMode;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.dbi.DatabaseImpl;
import com.sleepycat.je.dbi.EnvironmentImpl;
import com.sleepycat.je.dbi.INList;
import com.sleepycat.je.log.LogEntryType;
import com.sleepycat.je.log.Loggable;
/**
* A Node contains all the common base information for any JE B-Tree node.
*/
public abstract class Node implements Loggable {
/* Used to mean null or none. See NodeSequence. */
public static final long NULL_NODE_ID = -1L;
protected Node() {
}
/**
* Initialize a node that has been faulted in from the log.
*/
public void postFetchInit(DatabaseImpl db, long sourceLsn)
throws DatabaseException {
/* Nothing to do. */
}
public void latch() {
}
public void latchShared()
throws DatabaseException {
}
public void latchShared(CacheMode ignore)
throws DatabaseException {
}
public void releaseLatch() {
}
/**
* Since DIN/DBIN/DupCountLN are no longer used in the Btree, this method
* should normally only be used by dup conversion or entities that do not
* access records via the Btree.
*
* @return true if this node is a duplicate-bearing node type, false
* if otherwise.
*/
public boolean containsDuplicates() {
return false;
}
/**
* Cover for LN's and just return 0 since they'll always be at the bottom
* of the tree.
*/
public int getLevel() {
return 0;
}
/**
* Add yourself to the in memory list if you're a type of node that
* should belong.
*/
abstract void rebuildINList(INList inList)
throws DatabaseException;
/**
* @return true if you're part of a deletable subtree.
*/
abstract boolean isValidForDelete()
throws DatabaseException;
public boolean isLN() {
return false;
}
public boolean isIN() {
return false;
}
public boolean isUpperIN() {
return false;
}
public boolean isBIN() {
return false;
}
public boolean isBINDelta() {
return false;
}
public boolean isBINDelta(boolean checkLatched) {
return false;
}
public boolean isDIN() {
return false;
}
public boolean isDBIN() {
return false;
}
/**
* Return the approximate size of this node in memory, if this size should
* be included in its parents memory accounting. For example, all INs
* return 0, because they are accounted for individually. LNs must return a
* count, they're not counted on the INList.
*/
public long getMemorySizeIncludedByParent() {
return 0;
}
/**
* Default toString method at the root of the tree.
*/
@Override
public String toString() {
return this.dumpString(0, true);
}
public void dump(int nSpaces) {
System.out.print(dumpString(nSpaces, true));
}
String dumpString(int nSpaces, boolean dumpTags) {
return "";
}
public String getType() {
return getClass().getName();
}
/**
* We categorize fetch stats by the type of node, so node subclasses
* update different stats.
*/
abstract void incFetchStats(EnvironmentImpl envImpl, boolean isMiss);
/**
* Returns the generic LogEntryType for this node. Returning the actual
* type used to log the node is not always possible. Specifically, for LN
* nodes the generic type is less specific than the actual type used to log
* the node:
* + A non-transactional type is always returned.
* + LOG_INS_LN is returned rather than LOG_UPD_LN.
* + LOG_DEL_LN is returned rather than LOG_DEL_DUPLN.
*/
public abstract LogEntryType getGenericLogType();
public long getTransactionId() {
return 0;
}
}