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-7770. ViewFS getFileChecksum throws FileNotFoundException for files in
|
||||
/tmp and /user. (Ravi Prakash via jitendra)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
HADOOP-7761. Improve the performance of raw comparisons. (todd)
|
||||
|
|
|
@ -318,7 +318,7 @@ public class ViewFileSystem extends FileSystem {
|
|||
IOException {
|
||||
InodeTree.ResolveResult<FileSystem> res =
|
||||
fsState.resolve(getUriPath(f), true);
|
||||
return res.targetFileSystem.getFileChecksum(f);
|
||||
return res.targetFileSystem.getFileChecksum(res.remainingPath);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -316,7 +316,7 @@ public class ViewFs extends AbstractFileSystem {
|
|||
UnresolvedLinkException, IOException {
|
||||
InodeTree.ResolveResult<AbstractFileSystem> res =
|
||||
fsState.resolve(getUriPath(f), true);
|
||||
return res.targetFileSystem.getFileChecksum(f);
|
||||
return res.targetFileSystem.getFileChecksum(res.remainingPath);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.io.IOException;
|
|||
import java.net.URISyntaxException;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.fs.FileChecksum;
|
||||
import org.apache.hadoop.fs.FileStatus;
|
||||
import org.apache.hadoop.fs.FileSystem;
|
||||
import org.apache.hadoop.fs.FileUtil;
|
||||
|
@ -33,6 +34,8 @@ import org.apache.hadoop.io.DataOutputBuffer;
|
|||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
|
@ -81,6 +84,27 @@ public class TestViewfsFileStatus {
|
|||
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
|
||||
public static void cleanup() throws IOException {
|
||||
FileUtil.fullyDelete(TEST_DIR);
|
||||
|
|
|
@ -29,13 +29,15 @@ import java.net.URI;
|
|||
import java.util.List;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.fs.AbstractFileSystem;
|
||||
import org.apache.hadoop.fs.BlockLocation;
|
||||
import org.apache.hadoop.fs.FileContext;
|
||||
import org.apache.hadoop.fs.FileContextTestHelper;
|
||||
import org.apache.hadoop.fs.FileContextTestHelper.fileType;
|
||||
import org.apache.hadoop.fs.FileStatus;
|
||||
import org.apache.hadoop.fs.FsConstants;
|
||||
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.security.AccessControlException;
|
||||
import org.apache.hadoop.security.token.Token;
|
||||
|
@ -43,6 +45,7 @@ import org.junit.After;
|
|||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -408,6 +411,27 @@ public class ViewFsBaseTest {
|
|||
}
|
||||
}
|
||||
|
||||
@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)
|
||||
public void testgetFSonDanglingLink() throws IOException {
|
||||
fcView.getFileStatus(new Path("/danglingLink"));
|
||||
|
|
Loading…
Reference in New Issue