Neal Young created HBASE-16876: ---------------------------------- Summary: RatioBasedCompactionPolicy ignores mayBeStuck Key: HBASE-16876 URL: https://issues.apache.org/jira/browse/HBASE-16876 Project: HBase Issue Type: Bug Components: Compaction Reporter: Neal Young
I'm a newbie so may not be reporting this bug correctly. The bug currently shows in lines 181 - 190 here : http://hbase.apache.org/xref/org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.html#181 . {code:title=Bar.java|borderStyle=solid} 176 while (countOfFiles - start >= comConf.getMinFilesToCompact() && 177 fileSizes[start] > Math.max(comConf.getMinCompactSize(), 178 (long) (sumSize[start + 1] * ratio))) { 179 ++start; 180 } 181 if (start < countOfFiles) { 182 LOG.info("Default compaction algorithm has selected " + (countOfFiles - start) 183 + " files from " + countOfFiles + " candidates"); 184 } else if (mayBeStuck) { 185 // We may be stuck. Compact the latest files if we can. 186 int filesToLeave = candidates.size() - comConf.getMinFilesToCompact(); 187 if (filesToLeave >= 0) { 188 start = filesToLeave; 189 } 190 } {code} On reaching line 176, start = 0. When comConf.getMinFilesToCompact() is at least 2 (as occurs in the default), the while loop is guaranteed to terminate with start < countOfFiles. Hence, the else clause starting at line 184 never executes, regardless of the value of mayBeStuck. Perhaps the following code would be better, but I'm not sure: {code:title=Bar.java|borderStyle=solid} while (start < countOfFiles && fileSizes[start] > Math.max(comConf.getMinCompactSize(), (long) (sumSize[start + 1] * ratio))) { ++start; } if (start < countOfFiles) { if (countOfFiles - start >= comConf.getMinFilesToCompact()) { LOG.info("Default compaction algorithm has selected " + (countOfFiles - start) + " files from " + countOfFiles + " candidates"); } else { start = countOfFiles; } } else if (mayBeStuck) { // We may be stuck. Compact the latest files if we can. int filesToLeave = candidates.size() - comConf.getMinFilesToCompact(); if (filesToLeave >= 0) { start = filesToLeave; } } {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)