You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/10/11 04:12:11 UTC
svn commit: r1181480 - in /hbase/branches/0.89/src:
main/java/org/apache/hadoop/hbase/util/FSUtils.java
test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java
Author: nspiegelberg
Date: Tue Oct 11 02:12:10 2011
New Revision: 1181480
URL: http://svn.apache.org/viewvc?rev=1181480&view=rev
Log:
Make sure that HLog's lease is recovered before splitting
Summary:
FSUtils#recoverFileLease make sure that lease recovery completes
Test Plan:
unit test
DiffCamp Revision: 200660
Reviewed By: nspiegelberg
CC: nspiegelberg, hkuang, hbase@lists
Revert Plan:
OK
Modified:
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java
hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java?rev=1181480&r1=1181479&r2=1181480&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java Tue Oct 11 02:12:10 2011
@@ -612,35 +612,14 @@ public class FSUtils {
}
DistributedFileSystem dfs = (DistributedFileSystem)fs;
LOG.info("Recovering file" + p);
- long startWaiting = System.currentTimeMillis();
// Trying recovery
- boolean recovered = false;
- while (!recovered) {
+ while (!dfs.recoverLease(p)) {
try {
- dfs.recoverLease(p);
- recovered = true;
- } catch (IOException e) {
- e = RemoteExceptionHandler.checkIOException(e);
- if (e instanceof AlreadyBeingCreatedException) {
- // We expect that we'll get this message while the lease is still
- // within its soft limit, but if we get it past that, it means
- // that the RS is holding onto the file even though it lost its
- // znode. We could potentially abort after some time here.
- long waitedFor = System.currentTimeMillis() - startWaiting;
- if (waitedFor > FSConstants.LEASE_SOFTLIMIT_PERIOD) {
- LOG.warn("Waited " + waitedFor + "ms for lease recovery on " + p +
- ":" + e.getMessage());
- }
- try {
- Thread.sleep(1000);
- } catch (InterruptedException ex) {
- throw (InterruptedIOException)
- new InterruptedIOException().initCause(ex);
- }
- } else {
- throw new IOException("Failed to open " + p + " for append", e);
- }
+ Thread.sleep(1000);
+ } catch (InterruptedException ex) {
+ throw (InterruptedIOException)
+ new InterruptedIOException().initCause(ex);
}
}
LOG.info("Finished lease recover attempt for " + p);
Modified: hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java?rev=1181480&r1=1181479&r2=1181480&view=diff
==============================================================================
--- hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java (original)
+++ hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java Tue Oct 11 02:12:10 2011
@@ -46,6 +46,7 @@ import org.apache.hadoop.hbase.regionser
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.FSUtils;
import org.apache.hadoop.hdfs.DFSClient;
+import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.protocol.FSConstants.SafeModeAction;
import org.apache.hadoop.hdfs.server.datanode.DataNode;
@@ -380,7 +381,7 @@ public class TestHLog {
}
// Now try recovering the log, like the HMaster would do
- final FileSystem recoveredFs = fs;
+ final DistributedFileSystem recoveredFs = (DistributedFileSystem)fs;
final Configuration rlConf = conf;
class RecoverLogThread extends Thread {
@@ -388,6 +389,7 @@ public class TestHLog {
public void run() {
try {
FSUtils.recoverFileLease(recoveredFs, walPath, rlConf);
+ assertTrue(recoveredFs.recoverLease(walPath));
} catch (IOException e) {
exception = e;
}