private void moveToHead(Node n) {
      if (head == n) {
        // no-op -- it's already the head.
        return;
      }
      // At this point we definitely have prev, since it's not the head.
      assert n.prev != null;
      // Unlink prev.
      n.prev.next = n.next;

      // Unlink next
      if (n.next != null) {
        n.next.prev = n.prev;
      } else {
        assert n == tail;
        tail = n.prev;
      }
      // Node is now removed from the list. Re-add it at the head.
      setHead(n);
    }
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:
<code>(2 ^ 15) * 5 (Regionname, Row key, CF, Column qual, table) * 100 bytes
(these are some big names) = ~16MB</code>. If you want to get silly, even at 1kb entries, it
maxes out at 160 megabytes.
hbase-common/src/main/java/org/apache/hadoop/hbase/io/util/LRUDictionary.java