HADOOP-7770. ViewFS getFileChecksum throws FileNotFoundException for files in /tmp and /user. Contributed by Ravi Prakash.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1190532 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c1e333f32f
commit
dbe1e4de77
@ -82,6 +82,9 @@ Trunk (unreleased changes)
|
|||||||
|
|
||||||
HADOOP-7769. TestJMXJsonServlet is failing. (tomwhite)
|
HADOOP-7769. TestJMXJsonServlet is failing. (tomwhite)
|
||||||
|
|
||||||
|
HADOOP-7770. ViewFS getFileChecksum throws FileNotFoundException for files in
|
||||||
|
/tmp and /user. (Ravi Prakash via jitendra)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HADOOP-7761. Improve the performance of raw comparisons. (todd)
|
HADOOP-7761. Improve the performance of raw comparisons. (todd)
|
||||||
|
@ -318,7 +318,7 @@ public FileChecksum getFileChecksum(final Path f)
|
|||||||
IOException {
|
IOException {
|
||||||
InodeTree.ResolveResult<FileSystem> res =
|
InodeTree.ResolveResult<FileSystem> res =
|
||||||
fsState.resolve(getUriPath(f), true);
|
fsState.resolve(getUriPath(f), true);
|
||||||
return res.targetFileSystem.getFileChecksum(f);
|
return res.targetFileSystem.getFileChecksum(res.remainingPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -316,7 +316,7 @@ public FileChecksum getFileChecksum(final Path f)
|
|||||||
UnresolvedLinkException, IOException {
|
UnresolvedLinkException, IOException {
|
||||||
InodeTree.ResolveResult<AbstractFileSystem> res =
|
InodeTree.ResolveResult<AbstractFileSystem> res =
|
||||||
fsState.resolve(getUriPath(f), true);
|
fsState.resolve(getUriPath(f), true);
|
||||||
return res.targetFileSystem.getFileChecksum(f);
|
return res.targetFileSystem.getFileChecksum(res.remainingPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.fs.FileChecksum;
|
||||||
import org.apache.hadoop.fs.FileStatus;
|
import org.apache.hadoop.fs.FileStatus;
|
||||||
import org.apache.hadoop.fs.FileSystem;
|
import org.apache.hadoop.fs.FileSystem;
|
||||||
import org.apache.hadoop.fs.FileUtil;
|
import org.apache.hadoop.fs.FileUtil;
|
||||||
@ -33,6 +34,8 @@
|
|||||||
|
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,6 +84,27 @@ public void testFileStatusSerialziation()
|
|||||||
assertEquals(content.length, deSer.getLen());
|
assertEquals(content.length, deSer.getLen());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tests that ViewFileSystem.getFileChecksum calls res.targetFileSystem
|
||||||
|
// .getFileChecksum with res.remainingPath and not with f
|
||||||
|
@Test
|
||||||
|
public void testGetFileChecksum() throws IOException {
|
||||||
|
FileSystem mockFS = Mockito.mock(FileSystem.class);
|
||||||
|
InodeTree.ResolveResult<FileSystem> res =
|
||||||
|
new InodeTree.ResolveResult<FileSystem>(null, mockFS , null,
|
||||||
|
new Path("someFile"));
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
InodeTree<FileSystem> fsState = Mockito.mock(InodeTree.class);
|
||||||
|
Mockito.when(fsState.resolve("/tmp/someFile", true)).thenReturn(res);
|
||||||
|
ViewFileSystem vfs = Mockito.mock(ViewFileSystem.class);
|
||||||
|
vfs.fsState = fsState;
|
||||||
|
|
||||||
|
Mockito.when(vfs.getFileChecksum(new Path("/tmp/someFile")))
|
||||||
|
.thenCallRealMethod();
|
||||||
|
vfs.getFileChecksum(new Path("/tmp/someFile"));
|
||||||
|
|
||||||
|
Mockito.verify(mockFS).getFileChecksum(new Path("someFile"));
|
||||||
|
}
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public static void cleanup() throws IOException {
|
public static void cleanup() throws IOException {
|
||||||
FileUtil.fullyDelete(TEST_DIR);
|
FileUtil.fullyDelete(TEST_DIR);
|
||||||
|
@ -29,13 +29,15 @@
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.fs.AbstractFileSystem;
|
||||||
import org.apache.hadoop.fs.BlockLocation;
|
import org.apache.hadoop.fs.BlockLocation;
|
||||||
import org.apache.hadoop.fs.FileContext;
|
import org.apache.hadoop.fs.FileContext;
|
||||||
import org.apache.hadoop.fs.FileContextTestHelper;
|
import org.apache.hadoop.fs.FileContextTestHelper;
|
||||||
|
import org.apache.hadoop.fs.FileContextTestHelper.fileType;
|
||||||
import org.apache.hadoop.fs.FileStatus;
|
import org.apache.hadoop.fs.FileStatus;
|
||||||
import org.apache.hadoop.fs.FsConstants;
|
import org.apache.hadoop.fs.FsConstants;
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.hadoop.fs.FileContextTestHelper.fileType;
|
import org.apache.hadoop.fs.UnresolvedLinkException;
|
||||||
import org.apache.hadoop.fs.viewfs.ViewFs.MountPoint;
|
import org.apache.hadoop.fs.viewfs.ViewFs.MountPoint;
|
||||||
import org.apache.hadoop.security.AccessControlException;
|
import org.apache.hadoop.security.AccessControlException;
|
||||||
import org.apache.hadoop.security.token.Token;
|
import org.apache.hadoop.security.token.Token;
|
||||||
@ -43,6 +45,7 @@
|
|||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -408,6 +411,27 @@ public void testFileStatusOnMountLink() throws IOException {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetFileChecksum() throws AccessControlException
|
||||||
|
, UnresolvedLinkException, IOException {
|
||||||
|
AbstractFileSystem mockAFS = Mockito.mock(AbstractFileSystem.class);
|
||||||
|
InodeTree.ResolveResult<AbstractFileSystem> res =
|
||||||
|
new InodeTree.ResolveResult<AbstractFileSystem>(null, mockAFS , null,
|
||||||
|
new Path("someFile"));
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
InodeTree<AbstractFileSystem> fsState = Mockito.mock(InodeTree.class);
|
||||||
|
Mockito.when(fsState.resolve(Mockito.anyString()
|
||||||
|
, Mockito.anyBoolean())).thenReturn(res);
|
||||||
|
ViewFs vfs = Mockito.mock(ViewFs.class);
|
||||||
|
vfs.fsState = fsState;
|
||||||
|
|
||||||
|
Mockito.when(vfs.getFileChecksum(new Path("/tmp/someFile")))
|
||||||
|
.thenCallRealMethod();
|
||||||
|
vfs.getFileChecksum(new Path("/tmp/someFile"));
|
||||||
|
|
||||||
|
Mockito.verify(mockAFS).getFileChecksum(new Path("someFile"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test(expected=FileNotFoundException.class)
|
@Test(expected=FileNotFoundException.class)
|
||||||
public void testgetFSonDanglingLink() throws IOException {
|
public void testgetFSonDanglingLink() throws IOException {
|
||||||
fcView.getFileStatus(new Path("/danglingLink"));
|
fcView.getFileStatus(new Path("/danglingLink"));
|
||||||
|
Loading…
Reference in New Issue
Block a user