Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-16003 Compacting memstore related fixes
  3. HBASE-16164

Missing close of new compacted segments in few occasions which might leak MSLAB chunks from pool

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 2.0.0
    • 2.0.0
    • None
    • None
    • Reviewed

    Description

      An in memory compaction of N segments in progress. Inn between snapshot() call comes. We will stop the in progress compaction then. This just sets an AtomicBoolean. We check this boolean state in the compaction loop (while loop reading the cells from the segments) and before swapping the segments. But if this scenario comes, we are just ignoring the new newly compacted Segment. This is a problem maker when we work with MSLAB pool. The new segment would have acquired some chunks but when will they get released? As we dont close the segment this will leak them.

      Also in swap we have

      public boolean swap(VersionedSegmentsList versionedList, ImmutableSegment segment) {
          if(versionedList.getVersion() != version) {
            return false;
          }
          LinkedList<ImmutableSegment> suffix;
          synchronized (pipeline){
            if(versionedList.getVersion() != version) {
              return false;
            }
      

      I dont see any possibility for this code flow to happen. Still for correctness, we should close the segment here too.

      Attachments

        1. HBASE-16164.patch
          3 kB
          Anoop Sam John

        Activity

          People

            anoop.hbase Anoop Sam John
            anoop.hbase Anoop Sam John
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: