Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-2925

LRU of HConnectionManager.HBASE_INSTANCES breaks if HBaseConfiguration is changed

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.20.3, 0.90.0
    • 0.90.0
    • None
    • None
    • Reviewed
    • noob

    Description

      HConnectionManager.getConnection(config) caches the created TableServer in HBASE_INSTANCES (a LinkedHashMap ) which is keyed by the configuration instance itself.
      Given the current implementation of hashCode() (and equals()) of HBaseConfiguration, the hash code of the configuration is changed if any of its properties are changed, which will cause the keys of HBASE_INSTANCES to be inconsistent with the hashtable that contains them, making some entries unreachable.
      In this case, when the map's LRU strategy needs to remove the oldest entry, it tries to remove it based on the oldest key, which no longer gives the original hash code, therefore the lookup in HBASE_INSTANCES.remove(oldest) doesn't actually remove anything.

      This has been observed to lead to OOM errors in long running clients.

      Attachments

        1. 2925.txt
          17 kB
          Michael Stack
        2. 2925-v2.txt
          20 kB
          Michael Stack
        3. SimpleHConnectionManagerLeakReplicator.java
          3 kB
          Robert Mahfoud

        Issue Links

          Activity

            People

              Unassigned Unassigned
              rmahfoud Robert Mahfoud
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: