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 GitHub
parent 34fe74da0e
commit ac7d4623ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 1 deletions

View File

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

View File

@ -280,8 +280,22 @@ public class TestLeaseRecovery {
*/ */
@Test @Test
public void testLeaseRecoveryAndAppend() throws Exception { 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(); 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(); cluster = new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
Path file = new Path("/testLeaseRecovery"); Path file = new Path("/testLeaseRecovery");
DistributedFileSystem dfs = cluster.getFileSystem(); DistributedFileSystem dfs = cluster.getFileSystem();

View File

@ -17,9 +17,13 @@
*/ */
package org.apache.hadoop.hdfs; package org.apache.hadoop.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem; 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.hdfs.protocol.HdfsConstants;
import org.apache.hadoop.test.Whitebox; import org.apache.hadoop.test.Whitebox;
import org.junit.Test;
import java.io.IOException; import java.io.IOException;
@ -44,4 +48,23 @@ public class TestViewDistributedFileSystem extends TestDistributedFileSystem{
data.set(null); data.set(null);
super.testStatistics(); 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();
}
}
}
} }