HBASE-7352 clone operation from HBaseAdmin can hang forever (Matteo Bertozzi)

git-svn-id: https://svn.apache.org/repos/asf/hbase/branches/hbase-7290@1445824 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Hsieh 2013-02-13 18:41:28 +00:00
parent 1727ddc6c3
commit 9bc5d78e3a
1 changed files with 18 additions and 6 deletions

View File

@ -689,7 +689,21 @@ public class HBaseAdmin implements Abortable, Closeable {
enableTableAsync(tableName); enableTableAsync(tableName);
// Wait until all regions are enabled // Wait until all regions are enabled
waitUntilTableIsEnabled(tableName);
LOG.info("Enabled table " + Bytes.toString(tableName));
}
/**
* Wait for the table to be enabled.
* If enabling the table exceeds the retry period, an exception is thrown.
* @param tableName name of the table
* @throws IOException if a remote or network exception occurs or
* table is not enabled after the retries period.
*/
private void waitUntilTableIsEnabled(final byte[] tableName) throws IOException {
boolean enabled = false; boolean enabled = false;
long start = EnvironmentEdgeManager.currentTimeMillis();
for (int tries = 0; tries < (this.numRetries * this.retryLongerMultiplier); tries++) { for (int tries = 0; tries < (this.numRetries * this.retryLongerMultiplier); tries++) {
enabled = isTableEnabled(tableName); enabled = isTableEnabled(tableName);
if (enabled) { if (enabled) {
@ -710,10 +724,10 @@ public class HBaseAdmin implements Abortable, Closeable {
} }
} }
if (!enabled) { if (!enabled) {
throw new IOException("Unable to enable table " + long msec = EnvironmentEdgeManager.currentTimeMillis() - start;
Bytes.toString(tableName)); throw new IOException("Table '" + Bytes.toString(tableName) +
"' not yet enabled, after " + msec + "ms.");
} }
LOG.info("Enabled table " + Bytes.toString(tableName));
} }
public void enableTableAsync(final String tableName) public void enableTableAsync(final String tableName)
@ -2409,9 +2423,7 @@ public class HBaseAdmin implements Abortable, Closeable {
throw new TableExistsException("Table '" + tableName + " already exists"); throw new TableExistsException("Table '" + tableName + " already exists");
} }
internalRestoreSnapshot(snapshotName, tableName); internalRestoreSnapshot(snapshotName, tableName);
for (int tries = 0; !isTableEnabled(tableName); ++tries) { waitUntilTableIsEnabled(Bytes.toBytes(tableName));
Thread.sleep(this.pause);
}
} }
/** /**