You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Neal Young (JIRA)" <ji...@apache.org> on 2016/10/18 22:16:58 UTC
[jira] [Created] (HBASE-16876) RatioBasedCompactionPolicy ignores
mayBeStuck
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)