HDFS-4495. Allow client-side lease renewal to be retried beyond soft-limit. Contributed by Kihwal Lee
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1445965 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6bcbf492a2
commit
a9974c791a
@ -2296,6 +2296,9 @@ Release 0.23.7 - UNRELEASED
|
||||
|
||||
HDFS-4288. NN accepts incremental BR as IBR in safemode (daryn via kihwal)
|
||||
|
||||
HDFS-4495. Allow client-side lease renewal to be retried beyond soft-limit
|
||||
(kihwal)
|
||||
|
||||
Release 0.23.6 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
@ -620,10 +620,10 @@ boolean renewLease() throws IOException {
|
||||
} catch (IOException e) {
|
||||
// Abort if the lease has already expired.
|
||||
final long elapsed = Time.now() - getLastLeaseRenewal();
|
||||
if (elapsed > HdfsConstants.LEASE_SOFTLIMIT_PERIOD) {
|
||||
if (elapsed > HdfsConstants.LEASE_HARDLIMIT_PERIOD) {
|
||||
LOG.warn("Failed to renew lease for " + clientName + " for "
|
||||
+ (elapsed/1000) + " seconds (>= soft-limit ="
|
||||
+ (HdfsConstants.LEASE_SOFTLIMIT_PERIOD/1000) + " seconds.) "
|
||||
+ (HdfsConstants.LEASE_HARDLIMIT_PERIOD/1000) + " seconds.) "
|
||||
+ "Closing all files being written ...", e);
|
||||
closeAllFilesBeingWritten(true);
|
||||
} else {
|
||||
|
@ -41,6 +41,7 @@
|
||||
import org.apache.hadoop.fs.Path;
|
||||
import org.apache.hadoop.fs.permission.FsPermission;
|
||||
import org.apache.hadoop.hdfs.protocol.ClientProtocol;
|
||||
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
||||
import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;
|
||||
import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter;
|
||||
import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocols;
|
||||
@ -93,9 +94,26 @@ public void testLeaseAbort() throws Exception {
|
||||
|
||||
// We don't need to wait the lease renewer thread to act.
|
||||
// call renewLease() manually.
|
||||
// make it look like lease has already expired.
|
||||
// make it look like the soft limit has been exceeded.
|
||||
LeaseRenewer originalRenewer = dfs.getLeaseRenewer();
|
||||
dfs.lastLeaseRenewal = Time.now() - 300000;
|
||||
dfs.lastLeaseRenewal = Time.now()
|
||||
- HdfsConstants.LEASE_SOFTLIMIT_PERIOD - 1000;
|
||||
try {
|
||||
dfs.renewLease();
|
||||
} catch (IOException e) {}
|
||||
|
||||
// Things should continue to work it passes hard limit without
|
||||
// renewing.
|
||||
try {
|
||||
d_out.write(buf, 0, 1024);
|
||||
LOG.info("Write worked beyond the soft limit as expected.");
|
||||
} catch (IOException e) {
|
||||
Assert.fail("Write failed.");
|
||||
}
|
||||
|
||||
// make it look like the hard limit has been exceeded.
|
||||
dfs.lastLeaseRenewal = Time.now()
|
||||
- HdfsConstants.LEASE_HARDLIMIT_PERIOD - 1000;
|
||||
dfs.renewLease();
|
||||
|
||||
// this should not work.
|
||||
|
Loading…
Reference in New Issue
Block a user