org.apache.hadoop.hbase.regionserver.wal
Class LRUDictionary

java.lang.Object
  extended by org.apache.hadoop.hbase.regionserver.wal.LRUDictionary

public class LRUDictionary
extends Object

WALDictionary using an LRU eviction algorithm. Uses a linked list running through a hashtable. Currently has max of 2^15 entries. Will start evicting if exceeds this number The maximum memory we expect this dictionary to take in the worst case is about: (2 ^ 15) * 5 (Regionname, Row key, CF, Column qual, table) * 100 bytes (these are some big names) = ~16MB. If you want to get silly, even at 1kb entries, it maxes out at 160 megabytes.


Field Summary
static byte NOT_IN_DICTIONARY
           
 
Constructor Summary
LRUDictionary()
           
 
Method Summary
 short addEntry(byte[] data, int offset, int length)
          Adds an entry to the dictionary.
 void clear()
          Flushes the dictionary, empties all values.
 short findEntry(byte[] data, int offset, int length)
          Finds the index of an entry.
 byte[] getEntry(short idx)
          Gets an entry from the dictionary.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NOT_IN_DICTIONARY

public static final byte NOT_IN_DICTIONARY
See Also:
Constant Field Values
Constructor Detail

LRUDictionary

public LRUDictionary()
Method Detail

getEntry

public byte[] getEntry(short idx)
Gets an entry from the dictionary.

Parameters:
idx - index of the entry
Returns:
the entry, or null if non existent

findEntry

public short findEntry(byte[] data,
                       int offset,
                       int length)
Finds the index of an entry. If no entry found, we add it.

Parameters:
data - the byte array that we're looking up
offset - Offset into data to add to Dictionary.
length - Length beyond offset that comprises entry; must be > 0.
Returns:
the index of the entry, or NOT_IN_DICTIONARY if not found

addEntry

public short addEntry(byte[] data,
                      int offset,
                      int length)
Adds an entry to the dictionary. Be careful using this method. It will add an entry to the dictionary even if it already has an entry for the same data. Call {findEntry(byte[], int, int)} to add without duplicating dictionary entries.

Parameters:
data - the entry to add
offset - Offset into data to add to Dictionary.
length - Length beyond offset that comprises entry; must be > 0.
Returns:
the index of the entry

clear

public void clear()
Flushes the dictionary, empties all values.



Copyright © 2013 The Apache Software Foundation. All Rights Reserved.