HDFS-15558: ViewDistributedFileSystem#recoverLease should call super.recoverLease when there are no mounts configured (#2275) Contributed by Uma Maheswara Rao G.

This commit is contained in:
Uma Maheswara Rao G 2020-09-07 11:36:13 -07:00 committed by Ayush Saxena
parent 2d9c5395ef
commit 1fc1b34633
3 changed files with 45 additions and 1 deletions

View File

@ -266,6 +266,10 @@ public void setVerifyChecksum(final boolean verifyChecksum) {
@Override
public boolean recoverLease(final Path f) throws IOException {
if (this.vfs == null) {
return super.recoverLease(f);
}
ViewFileSystemOverloadScheme.MountPathInfo<FileSystem> mountPathInfo =
this.vfs.getMountPathInfo(f, getConf());
checkDFS(mountPathInfo.getTargetFs(), "recoverLease");
@ -286,6 +290,9 @@ public FSDataInputStream open(final Path f, final int bufferSize)
@Override
public FSDataInputStream open(PathHandle fd, int bufferSize)
throws IOException {
if (this.vfs == null) {
return super.open(fd, bufferSize);
}
return this.vfs.open(fd, bufferSize);
}

View File

@ -280,8 +280,22 @@ public void testBlockRecoveryRetryAfterFailedRecovery() throws Exception {
*/
@Test
public void testLeaseRecoveryAndAppend() throws Exception {
testLeaseRecoveryAndAppend(new Configuration());
}
/**
* Recover the lease on a file and append file from another client with
* ViewDFS enabled.
*/
@Test
public void testLeaseRecoveryAndAppendWithViewDFS() throws Exception {
Configuration conf = new Configuration();
try{
conf.set("fs.hdfs.impl", ViewDistributedFileSystem.class.getName());
testLeaseRecoveryAndAppend(conf);
}
private void testLeaseRecoveryAndAppend(Configuration conf) throws Exception {
try {
cluster = new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
Path file = new Path("/testLeaseRecovery");
DistributedFileSystem dfs = cluster.getFileSystem();

View File

@ -17,9 +17,13 @@
*/
package org.apache.hadoop.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathHandle;
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
import org.apache.hadoop.test.Whitebox;
import org.junit.Test;
import java.io.IOException;
@ -44,4 +48,23 @@ public void testStatistics() throws IOException {
data.set(null);
super.testStatistics();
}
@Test
public void testOpenWithPathHandle() throws Exception {
Configuration conf = getTestConfiguration();
MiniDFSCluster cluster = null;
try {
cluster = new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
FileSystem fileSys = cluster.getFileSystem();
Path openTestPath = new Path("/testOpen");
fileSys.create(openTestPath).close();
PathHandle pathHandle =
fileSys.getPathHandle(fileSys.getFileStatus(openTestPath));
fileSys.open(pathHandle, 1024).close();
} finally {
if (cluster != null) {
cluster.shutdown();
}
}
}
}