Author: jdcryans
Date: Thu Sep 15 23:51:00 2011
New Revision: 1171331
URL: http://svn.apache.org/viewvc?rev=1171331&view=rev
Log:
HBASE-4395 EnableTableHandler races with itself
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java
Modified: hbase/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1171331&r1=1171330&r2=1171331&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Thu Sep 15 23:51:00 2011
@@ -270,6 +270,7 @@ Release 0.91.0 - Unreleased
to contact the sink (JD and Lars Hofhansl)
HBASE-4390 [replication] ReplicationSource's UncaughtExceptionHandler
shouldn't join
+ HBASE-4395 EnableTableHandler races with itself
IMPROVEMENTS
HBASE-3290 Max Compaction Size (Nicolas Spiegelberg via Stack)
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java
URL:
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java?rev=1171331&r1=1171330&r2=1171331&view=diff
==============================================================================
---
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java
(original)
+++
hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java
Thu Sep 15 23:51:00 2011
@@ -109,32 +109,28 @@ public class EnableTableHandler extends
// Set table enabling flag up in zk.
this.assignmentManager.getZKTable().setEnablingTable(this.tableNameStr);
boolean done = false;
- while (true) {
- // Get the regions of this table. We're done when all listed
- // tables are onlined.
- List<HRegionInfo> regionsInMeta =
- MetaReader.getTableRegions(this.ct, tableName, true);
- int countOfRegionsInTable = regionsInMeta.size();
- List<HRegionInfo> regions = regionsToAssign(regionsInMeta);
- if (regions.size() == 0) {
+ // Get the regions of this table. We're done when all listed
+ // tables are onlined.
+ List<HRegionInfo> regionsInMeta =
+ MetaReader.getTableRegions(this.ct, tableName, true);
+ int countOfRegionsInTable = regionsInMeta.size();
+ List<HRegionInfo> regions = regionsToAssign(regionsInMeta);
+ int regionsCount = regions.size();
+ if (regionsCount == 0) {
+ done = true;
+ }
+ LOG.info("Table has " + countOfRegionsInTable + " regions of which " +
+ regionsCount + " are offline.");
+ BulkEnabler bd = new BulkEnabler(this.server, regions,
+ countOfRegionsInTable);
+ try {
+ if (bd.bulkAssign()) {
done = true;
- break;
- }
- LOG.info("Table has " + countOfRegionsInTable + " regions of which " +
- regions.size() + " are offline.");
- BulkEnabler bd = new BulkEnabler(this.server, regions,
- countOfRegionsInTable);
- try {
- if (bd.bulkAssign()) {
- done = true;
- break;
- }
- } catch (InterruptedException e) {
- LOG.warn("Enable was interrupted");
- // Preserve the interrupt.
- Thread.currentThread().interrupt();
- break;
}
+ } catch (InterruptedException e) {
+ LOG.warn("Enable was interrupted");
+ // Preserve the interrupt.
+ Thread.currentThread().interrupt();
}
// Flip the table to enabled.
if (done) this.assignmentManager.getZKTable().setEnabledTable(
@@ -191,10 +187,17 @@ public class EnableTableHandler extends
long startTime = System.currentTimeMillis();
long remaining = timeout;
List<HRegionInfo> regions = null;
+ int lastNumberOfRegions = this.countOfRegionsInTable;
while (!server.isStopped() && remaining > 0) {
Thread.sleep(waitingTimeForEvents);
regions = assignmentManager.getRegionsOfTable(tableName);
if (isDone(regions)) break;
+
+ // Punt on the timeout as long we make progress
+ if (regions.size() > lastNumberOfRegions) {
+ lastNumberOfRegions = regions.size();
+ timeout += waitingTimeForEvents;
+ }
remaining = timeout - (System.currentTimeMillis() - startTime);
}
return isDone(regions);