Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 75853103E6 for ; Wed, 10 Dec 2014 01:29:09 +0000 (UTC) Received: (qmail 88258 invoked by uid 500); 10 Dec 2014 01:29:09 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 88098 invoked by uid 500); 10 Dec 2014 01:29:09 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 88005 invoked by uid 99); 10 Dec 2014 01:29:09 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 10 Dec 2014 01:29:09 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id DC0A5A2256D; Wed, 10 Dec 2014 01:29:08 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: apurtell@apache.org To: commits@hbase.apache.org Date: Wed, 10 Dec 2014 01:29:10 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [3/3] hbase git commit: HBASE-12454 Setting didPerformCompaction early in HRegion#compact HBASE-12454 Setting didPerformCompaction early in HRegion#compact Conflicts: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/06c4d8a8 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/06c4d8a8 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/06c4d8a8 Branch: refs/heads/0.98 Commit: 06c4d8a8e14db8f01cce7d6e1f027df3e8f30a92 Parents: b9e6595 Author: Andrew Purtell Authored: Tue Dec 9 17:06:04 2014 -0800 Committer: Andrew Purtell Committed: Tue Dec 9 17:10:30 2014 -0800 ---------------------------------------------------------------------- .../hadoop/hbase/regionserver/HRegion.java | 8 ++-- .../hadoop/hbase/regionserver/HStore.java | 43 +++++++++++--------- 2 files changed, 29 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/06c4d8a8/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 76198bc..75e26e1 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -1463,7 +1463,7 @@ public class HRegion implements HeapSize { // , Writable{ return false; } MonitoredTask status = null; - boolean didPerformCompaction = false; + boolean requestNeedsCancellation = true; // block waiting for the lock for compaction lock.readLock().lock(); try { @@ -1500,7 +1500,9 @@ public class HRegion implements HeapSize { // , Writable{ 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"; @@ -1522,7 +1524,7 @@ public class HRegion implements HeapSize { // , Writable{ return true; } finally { try { - if (!didPerformCompaction) store.cancelRequestedCompaction(compaction); + if (requestNeedsCancellation) store.cancelRequestedCompaction(compaction); if (status != null) status.cleanup(); } finally { lock.readLock().unlock(); http://git-wip-us.apache.org/repos/asf/hbase/blob/06c4d8a8/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java index 5ea1a9c..79942d4 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java @@ -1079,25 +1079,29 @@ public class HStore implements Store { */ @Override public List compact(CompactionContext compaction) throws IOException { - assert compaction != null && compaction.hasSelection(); - CompactionRequest cr = compaction.getRequest(); - Collection 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.currentTimeMillis(); + assert compaction != null; List 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.currentTimeMillis(); + assert compaction.hasSelection(); + Collection 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 newFiles = compaction.compact(); @@ -1126,11 +1130,12 @@ public class HStore implements Store { } // At this point the store will use new files for all new scanners. completeCompaction(filesToCompact); // Archive old files & update store size. + + logCompactionEndMessage(cr, sfs, compactionStartTime); + return sfs; } finally { finishCompactionRequest(cr); } - logCompactionEndMessage(cr, sfs, compactionStartTime); - return sfs; } private List moveCompatedFilesIntoPlace(