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

RatioBasedCompactionPolicy#shouldPerformMajorCompaction() always return true when only one file needs to compact

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 3.0.0-alpha-1, 1.3.1, 1.4.1, 1.5.0, 2.0.0-beta-1
    • 2.0.0-beta-1, 2.0.0
    • None
    • None
    • Reviewed

    Description

      RatioBasedCompactionPolicy.java
        public boolean shouldPerformMajorCompaction(Collection<HStoreFile> filesToCompact)
          throws IOException {
          boolean result = false;
          long mcTime = getNextMajorCompactTime(filesToCompact);
          if (filesToCompact == null || filesToCompact.isEmpty() || mcTime == 0) {
            return result;
          }
          // TODO: Use better method for determining stamp of last major (HBASE-2990)
          long lowTimestamp = StoreUtils.getLowestTimestamp(filesToCompact);
          long now = EnvironmentEdgeManager.currentTime();
          if (lowTimestamp > 0L && lowTimestamp < (now - mcTime)) {
            String regionInfo;
            if (this.storeConfigInfo != null && this.storeConfigInfo instanceof HStore) {
              regionInfo = ((HStore)this.storeConfigInfo).getRegionInfo().getRegionNameAsString();
            } else {
              regionInfo = this.toString();
            }
            // Major compaction time has elapsed.
            long cfTTL = HConstants.FOREVER;
            if (this.storeConfigInfo != null) {
               cfTTL = this.storeConfigInfo.getStoreFileTtl();
            }
            if (filesToCompact.size() == 1) {
              // Single file
              HStoreFile sf = filesToCompact.iterator().next();
              OptionalLong minTimestamp = sf.getMinimumTimestamp();
              long oldest = minTimestamp.isPresent() ? now - minTimestamp.getAsLong() : Long.MIN_VALUE;
              if (sf.isMajorCompactionResult() && (cfTTL == Long.MAX_VALUE || oldest < cfTTL)) {
                float blockLocalityIndex =
                  sf.getHDFSBlockDistribution().getBlockLocalityIndex(
                  RSRpcServices.getHostname(comConf.conf, false));
                if (blockLocalityIndex < comConf.getMinLocalityToForceCompact()) {
                  LOG.debug("Major compaction triggered on only store " + regionInfo
                    + "; to make hdfs blocks local, current blockLocalityIndex is "
                    + blockLocalityIndex + " (min " + comConf.getMinLocalityToForceCompact() + ")");
                  result = true;
                } else {
                  LOG.debug("Skipping major compaction of " + regionInfo
                    + " because one (major) compacted file only, oldestTime " + oldest
                    + "ms is < TTL=" + cfTTL + " and blockLocalityIndex is " + blockLocalityIndex
                    + " (min " + comConf.getMinLocalityToForceCompact() + ")");
                }
              } else if (cfTTL != HConstants.FOREVER && oldest > cfTTL) {
                LOG.debug("Major compaction triggered on store " + regionInfo
                  + ", because keyvalues outdated; time since last major compaction "
                  + (now - lowTimestamp) + "ms");
                result = true;
              }
            } else {
              LOG.debug("Major compaction triggered on store " + regionInfo
                + "; time since last major compaction " + (now - lowTimestamp) + "ms");
            }
            result = true;
          }
          return result;
        }
      
        
         } else {
              LOG.debug("Major compaction triggered on store " + regionInfo
                + "; time since last major compaction " + (now - lowTimestamp) + "ms");
            }
            result = true;
      

      if (lowTimestamp > 0L && lowTimestamp < (now - mcTime)), the result always equal true.

      Attachments

        1. HBASE-19199.patch
          1 kB
          Guangxu Cheng
        2. HBASE-19199.patch
          1 kB
          Guangxu Cheng
        3. HBASE-19199.patch
          1 kB
          Guangxu Cheng

        Issue Links

          Activity

            People

              gxcheng Guangxu Cheng
              gxcheng Guangxu Cheng
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: