HBASE-12454 Setting didPerformCompaction early in HRegion#compact
This commit is contained in:
parent
cc8bdcb498
commit
011442edda
|
@ -1550,7 +1550,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { //
|
|||
return false;
|
||||
}
|
||||
MonitoredTask status = null;
|
||||
boolean didPerformCompaction = false;
|
||||
boolean requestNeedsCancellation = true;
|
||||
// block waiting for the lock for compaction
|
||||
lock.readLock().lock();
|
||||
try {
|
||||
|
@ -1587,7 +1587,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { //
|
|||
doRegionCompactionPrep();
|
||||
try {
|
||||
status.setStatus("Compacting store " + store);
|
||||
didPerformCompaction = true;
|
||||
// We no longer need to cancel the request on the way out of this
|
||||
// method because Store#compact will clean up unconditionally
|
||||
requestNeedsCancellation = false;
|
||||
store.compact(compaction);
|
||||
} catch (InterruptedIOException iioe) {
|
||||
String msg = "compaction interrupted";
|
||||
|
@ -1609,7 +1611,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { //
|
|||
return true;
|
||||
} finally {
|
||||
try {
|
||||
if (!didPerformCompaction) store.cancelRequestedCompaction(compaction);
|
||||
if (requestNeedsCancellation) store.cancelRequestedCompaction(compaction);
|
||||
if (status != null) status.cleanup();
|
||||
} finally {
|
||||
lock.readLock().unlock();
|
||||
|
|
|
@ -1134,25 +1134,29 @@ public class HStore implements Store {
|
|||
*/
|
||||
@Override
|
||||
public List<StoreFile> compact(CompactionContext compaction) throws IOException {
|
||||
assert compaction != null && compaction.hasSelection();
|
||||
CompactionRequest cr = compaction.getRequest();
|
||||
Collection<StoreFile> filesToCompact = cr.getFiles();
|
||||
assert !filesToCompact.isEmpty();
|
||||
synchronized (filesCompacting) {
|
||||
// sanity check: we're compacting files that this store knows about
|
||||
// TODO: change this to LOG.error() after more debugging
|
||||
Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));
|
||||
}
|
||||
|
||||
// Ready to go. Have list of files to compact.
|
||||
LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "
|
||||
+ this + " of " + this.getRegionInfo().getRegionNameAsString()
|
||||
+ " into tmpdir=" + fs.getTempDir() + ", totalSize="
|
||||
+ StringUtils.humanReadableInt(cr.getSize()));
|
||||
|
||||
long compactionStartTime = EnvironmentEdgeManager.currentTime();
|
||||
assert compaction != null;
|
||||
List<StoreFile> sfs = null;
|
||||
CompactionRequest cr = compaction.getRequest();;
|
||||
try {
|
||||
// Do all sanity checking in here if we have a valid CompactionRequest
|
||||
// because we need to clean up after it on the way out in a finally
|
||||
// block below
|
||||
long compactionStartTime = EnvironmentEdgeManager.currentTime();
|
||||
assert compaction.hasSelection();
|
||||
Collection<StoreFile> filesToCompact = cr.getFiles();
|
||||
assert !filesToCompact.isEmpty();
|
||||
synchronized (filesCompacting) {
|
||||
// sanity check: we're compacting files that this store knows about
|
||||
// TODO: change this to LOG.error() after more debugging
|
||||
Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));
|
||||
}
|
||||
|
||||
// Ready to go. Have list of files to compact.
|
||||
LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "
|
||||
+ this + " of " + this.getRegionInfo().getRegionNameAsString()
|
||||
+ " into tmpdir=" + fs.getTempDir() + ", totalSize="
|
||||
+ StringUtils.humanReadableInt(cr.getSize()));
|
||||
|
||||
// Commence the compaction.
|
||||
List<Path> newFiles = compaction.compact();
|
||||
|
||||
|
@ -1181,11 +1185,12 @@ public class HStore implements Store {
|
|||
}
|
||||
// At this point the store will use new files for all new scanners.
|
||||
completeCompaction(filesToCompact, true); // Archive old files & update store size.
|
||||
|
||||
logCompactionEndMessage(cr, sfs, compactionStartTime);
|
||||
return sfs;
|
||||
} finally {
|
||||
finishCompactionRequest(cr);
|
||||
}
|
||||
logCompactionEndMessage(cr, sfs, compactionStartTime);
|
||||
return sfs;
|
||||
}
|
||||
|
||||
private List<StoreFile> moveCompatedFilesIntoPlace(
|
||||
|
|
Loading…
Reference in New Issue