[
https://issues.apache.org/jira/browse/HADOOP-13191?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
John Zhuge updated HADOOP-13191:
--------------------------------
Description:
This came out of discussion in HADOOP-12718. The {{FileSystem#listStatus}}
contract does not indicate {{null}} is a valid return and some callers do not
test {{null}} before use:
AbstractContractGetFileStatusTest#testListStatusEmptyDirectory:
{code}
assertEquals("ls on an empty directory not of length 0", 0,
fs.listStatus(subfolder).length);
{code}
ChecksumFileSystem#copyToLocalFile:
{code}
FileStatus[] srcs = listStatus(src);
for (FileStatus srcFile : srcs) {
{code}
SimpleCopyLIsting#getFileStatus:
{code}
FileStatus[] fileStatuses = fileSystem.listStatus(path);
if (excludeList != null && excludeList.size() > 0) {
ArrayList<FileStatus> fileStatusList = new ArrayList<>();
for(FileStatus status : fileStatuses) {
{code}
IMHO, there is no good reason for {{listStatus}} to return {{null}}. It should
throw IOExceptions upon errors or return empty list.
To enforce the contract that null is an invalid return, update javadoc and
leverage @Nullable/@NotNull/@Nonnull annotations.
So far, I am only aware of the following functions that can return null:
* RawLocalFileSystem#listStatus
was:
This came out of discussion in HADOOP-12718. The {{FileSystem#listStatus}}
contract does not indicate {{null}} is a valid return and some callers do not
test {{null}} before use:
AbstractContractGetFileStatusTest#testListStatusEmptyDirectory:
{code}
assertEquals("ls on an empty directory not of length 0", 0,
fs.listStatus(subfolder).length);
{code}
ChecksumFileSystem#copyToLocalFile:
{code}
FileStatus[] srcs = listStatus(src);
for (FileStatus srcFile : srcs) {
{code}
SimpleCopyLIsting#getFileStatus:
{code}
FileStatus[] fileStatuses = fileSystem.listStatus(path);
if (excludeList != null && excludeList.size() > 0) {
ArrayList<FileStatus> fileStatusList = new ArrayList<>();
for(FileStatus status : fileStatuses) {
{code}
IMHO, there is no good reason for {{listStatus}} to return {{null}}. It should
return empty list instead.
To enforce the contract that null is an invalid return, update javadoc and
consider Intellij IDEA's @Nullable and @NotNull annotations.
So far, I am only aware of the following functions that can return null:
* RawLocalFileSystem#listStatus
> FileSystem#listStatus should not return null
> --------------------------------------------
>
> Key: HADOOP-13191
> URL: https://issues.apache.org/jira/browse/HADOOP-13191
> Project: Hadoop Common
> Issue Type: Bug
> Components: fs
> Affects Versions: 2.6.0
> Reporter: John Zhuge
> Assignee: John Zhuge
> Priority: Minor
>
> This came out of discussion in HADOOP-12718. The {{FileSystem#listStatus}}
> contract does not indicate {{null}} is a valid return and some callers do not
> test {{null}} before use:
> AbstractContractGetFileStatusTest#testListStatusEmptyDirectory:
> {code}
> assertEquals("ls on an empty directory not of length 0", 0,
> fs.listStatus(subfolder).length);
> {code}
> ChecksumFileSystem#copyToLocalFile:
> {code}
> FileStatus[] srcs = listStatus(src);
> for (FileStatus srcFile : srcs) {
> {code}
> SimpleCopyLIsting#getFileStatus:
> {code}
> FileStatus[] fileStatuses = fileSystem.listStatus(path);
> if (excludeList != null && excludeList.size() > 0) {
> ArrayList<FileStatus> fileStatusList = new ArrayList<>();
> for(FileStatus status : fileStatuses) {
> {code}
> IMHO, there is no good reason for {{listStatus}} to return {{null}}. It
> should throw IOExceptions upon errors or return empty list.
> To enforce the contract that null is an invalid return, update javadoc and
> leverage @Nullable/@NotNull/@Nonnull annotations.
> So far, I am only aware of the following functions that can return null:
> * RawLocalFileSystem#listStatus
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]