Guangxu Cheng created HBASE-17674:
-------------------------------------
Summary: Major compaction may be canceled in CompactionChecker
Key: HBASE-17674
URL: https://issues.apache.org/jira/browse/HBASE-17674
Project: HBase
Issue Type: Bug
Components: Compaction
Affects Versions: 0.98.24, 1.2.4, 1.3.0, 2.0.0
Reporter: Guangxu Cheng
CompactionChecker will periodically check whether a region should perform a
major compaction.
If a region should perform a major compact, a request is submitted. But before
the request is submitted, the variable forceMajor is not set to true by calling
triggerMajorCompaction.
When filtering a storefile, the large storefile may cause the request to be
canceled or became minor compact.
{code:title=HRegionServer.java|borderStyle=solid}
@Override
protected void chore() {
for (Region r : this.instance.onlineRegions.values()) {
if (r == null)
continue;
for (Store s : r.getStores()) {
try {
long multiplier = s.getCompactionCheckMultiplier();
assert multiplier > 0;
if (iteration % multiplier != 0) continue;
if (s.needsCompaction()) {
// Queue a compaction. Will recognize if major is needed.
this.instance.compactSplitThread.requestSystemCompaction(r, s,
getName()
+ " requests compaction");
} else if (s.isMajorCompaction()) {
if (majorCompactPriority == DEFAULT_PRIORITY
|| majorCompactPriority > ((HRegion)r).getCompactPriority()) {
this.instance.compactSplitThread.requestCompaction(r, s,
getName()
+ " requests major compaction; use default priority", null);
} else {
this.instance.compactSplitThread.requestCompaction(r, s,
getName()
+ " requests major compaction; use configured priority",
this.majorCompactPriority, null, null);
}
}
} catch (IOException e) {
LOG.warn("Failed major compaction check on " + r, e);
}
}
}
iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)