[ https://issues.apache.org/jira/browse/HBASE-16876?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15587347#comment-15587347 ]
Allan Yang commented on HBASE-16876: ------------------------------------ It seems like you are right. But we use the derived class {{ExploringCompactionPolicy}} for default, so no one has found out that. > 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 > Labels: newbie > > 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 (countOfFiles - start < comConf.getMinFilesToCompact()) { > if (mayBeStuck && countOfFiles >= comConf.getMinFilesToCompact()) { > start = countOfFiles - comConf.getMinFilesToCompact(); > } else { > start = countOfFiles; > } > } > if (countOfFiles - start > 0) { > LOG.info("Default compaction algorithm has selected " + (countOfFiles > - start) > + " files from " + countOfFiles + " candidates"); > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)