HADOOP-16685: FileSystem#listStatusIterator does not check if given path exists (#1695)

(cherry picked from commit 3161813482)
This commit is contained in:
Sahil Takiar 2019-11-26 11:11:26 -08:00 committed by Wei-Chiu Chuang
parent 298cda22a3
commit c47d4d9c3f
2 changed files with 11 additions and 8 deletions

View File

@ -2103,24 +2103,19 @@ public abstract class FileSystem extends Configured
private DirectoryEntries entries;
private int i = 0;
DirListingIterator(Path path) {
DirListingIterator(Path path) throws IOException {
this.path = path;
this.entries = listStatusBatch(path, null);
}
@Override
public boolean hasNext() throws IOException {
if (entries == null) {
fetchMore();
}
return i < entries.getEntries().length ||
entries.hasMore();
}
private void fetchMore() throws IOException {
byte[] token = null;
if (entries != null) {
token = entries.getToken();
}
byte[] token = entries.getToken();
entries = listStatusBatch(path, token);
i = 0;
}

View File

@ -273,6 +273,14 @@ public abstract class AbstractContractGetFileStatusTest extends
}
}
@Test
public void testListStatusIteratorNoDir() throws Throwable {
describe("test the listStatusIterator call on a path which is not " +
"present");
intercept(FileNotFoundException.class,
() -> getFileSystem().listStatusIterator(path("missing")));
}
@Test
public void testLocatedStatusNoDir() throws Throwable {
describe("test the LocatedStatus call on a path which is not present");