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 99f5c35..f0dbf09 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 @@ -1768,11 +1768,11 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi } } - /** Wait for all current flushes of the region to complete - */ - // TODO HBASE-18906. Check the usage (if any) in Phoenix and expose this or give alternate way for - // Phoenix needs. public void waitForFlushes() { + waitForFlushes(0);// Unbound wait + } + + public void waitForFlushes(long timeout) { synchronized (writestate) { if (this.writestate.readOnly) { // we should not wait for replayed flushed if we are read only (for example in case the @@ -1786,7 +1786,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi while (writestate.flushing) { LOG.debug("waiting for cache flush to complete for region " + this); try { - writestate.wait(); + writestate.wait(timeout); } catch (InterruptedException iex) { // essentially ignore and propagate the interrupt back up LOG.warn("Interrupted while waiting"); @@ -1803,6 +1803,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi LOG.debug("Waited " + duration + " ms for flush to complete"); } } + protected ThreadPoolExecutor getStoreOpenAndCloseThreadPool( final String threadNamePrefix) { int numStores = Math.max(1, this.htableDescriptor.getColumnFamilyCount()); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java index 0c93ed1..820a55e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java @@ -468,4 +468,11 @@ public interface Region extends ConfigurationObserver { */ void requestCompaction(byte[] family, String why, int priority, boolean major, CompactionLifeCycleTracker tracker) throws IOException; + + /** + * Wait for all current flushes of the region to complete + * + * @param timeout The maximum time to wait in milliseconds. + */ + void waitForFlushes(long timeout); }