[ https://issues.apache.org/jira/browse/HBASE-12454?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Purtell updated HBASE-12454: ----------------------------------- Priority: Trivial (was: Minor) > Setting didPerformCompaction early in HRegion#compact > ----------------------------------------------------- > > Key: HBASE-12454 > URL: https://issues.apache.org/jira/browse/HBASE-12454 > Project: HBase > Issue Type: Bug > Affects Versions: 0.98.8 > Reporter: Andrew Purtell > Assignee: Andrew Purtell > Priority: Trivial > Fix For: 1.0.0, 2.0.0, 0.98.9 > > Attachments: HBASE-12454-0.98.patch, HBASE-12454-v2.patch, > HBASE-12454.patch, HBASE-12454.patch, HBASE-12454.patch > > > It appears we are setting 'didPerformCompaction' to "true" before attempting > the compaction in HRegion#compact. If Store#compact throws an exception or is > interrupted, we won't call Store#cancelRequestedCompaction in the last > finally block of the method as it looks like we should. > {code} > --- > 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 > @@ -1540,58 +1540,58 @@ public class HRegion implements HeapSize, > PropagatingConfigurationObserver { > return false; > } > > status = TaskMonitor.get().createStatus("Compacting " + store + " in " > + this); > if (this.closed.get()) { > String msg = "Skipping compaction on " + this + " because closed"; > LOG.debug(msg); > status.abort(msg); > return false; > } > boolean wasStateSet = false; > try { > synchronized (writestate) { > if (writestate.writesEnabled) { > wasStateSet = true; > ++writestate.compacting; > } else { > String msg = "NOT compacting region " + this + ". Writes > disabled."; > LOG.info(msg); > status.abort(msg); > return false; > } > } > LOG.info("Starting compaction on " + store + " in region " + this > + (compaction.getRequest().isOffPeak()?" as an off-peak > compaction":"")); > doRegionCompactionPrep(); > try { > status.setStatus("Compacting store " + store); > - didPerformCompaction = true; > store.compact(compaction); > + didPerformCompaction = true; > } catch (InterruptedIOException iioe) { > String msg = "compaction interrupted"; > LOG.info(msg, iioe); > status.abort(msg); > return false; > } > } finally { > if (wasStateSet) { > synchronized (writestate) { > --writestate.compacting; > if (writestate.compacting <= 0) { > writestate.notifyAll(); > } > } > } > } > status.markComplete("Compaction complete"); > return true; > } finally { > try { > if (!didPerformCompaction) > store.cancelRequestedCompaction(compaction); <----- > if (status != null) status.cleanup(); > } finally { > lock.readLock().unlock(); > } > } > }{code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)