HDDS-7132. GetFileStatus returns NULL for some paths. (#3687)
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
index 9ff481b..da86169 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
@@ -1724,6 +1724,18 @@
}
@Test
+ public void testGetFileStatus() throws Exception {
+ String volumeNameLocal = getRandomNonExistVolumeName();
+ String bucketNameLocal = RandomStringUtils.randomNumeric(5);
+ Path volume = new Path("/" + volumeNameLocal);
+ ofs.mkdirs(volume);
+ LambdaTestUtils.intercept(OMException.class,
+ () -> ofs.getFileStatus(new Path(volume, bucketNameLocal)));
+ // Cleanup
+ ofs.delete(volume, true);
+ }
+
+ @Test
public void testUnbuffer() throws IOException {
String testKeyName = "testKey2";
Path path = new Path(bucketPath, testKeyName);
diff --git a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
index 910ca45..2e756a5 100644
--- a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
+++ b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
@@ -755,10 +755,15 @@
try {
fileStatus = convertFileStatus(
adapter.getFileStatus(key, uri, qualifiedPath, getUsername()));
- } catch (OMException ex) {
- if (ex.getResult().equals(OMException.ResultCodes.KEY_NOT_FOUND)) {
- throw new FileNotFoundException("File not found. path:" + f);
+ } catch (IOException ex) {
+ if (ex instanceof OMException) {
+ if (((OMException) ex).getResult()
+ .equals(OMException.ResultCodes.KEY_NOT_FOUND)) {
+ throw new FileNotFoundException("File not found. path:" + f);
+ }
}
+ LOG.warn("GetFileStatus failed for path {}", f, ex);
+ throw ex;
}
return fileStatus;
}
diff --git a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
index b1f0193..fbd800f 100644
--- a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
+++ b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
@@ -577,10 +577,6 @@
return false;
}
- if (status == null) {
- return false;
- }
-
String key = pathToKey(f);
boolean result;
@@ -871,12 +867,17 @@
try {
fileStatus = convertFileStatus(
adapter.getFileStatus(key, uri, qualifiedPath, getUsername()));
- } catch (OMException ex) {
- if (ex.getResult().equals(OMException.ResultCodes.KEY_NOT_FOUND) ||
- ex.getResult().equals(OMException.ResultCodes.BUCKET_NOT_FOUND) ||
- ex.getResult().equals(OMException.ResultCodes.VOLUME_NOT_FOUND)) {
- throw new FileNotFoundException("File not found. path:" + f);
+ } catch (IOException e) {
+ if (e instanceof OMException) {
+ OMException ex = (OMException) e;
+ if (ex.getResult().equals(OMException.ResultCodes.KEY_NOT_FOUND) ||
+ ex.getResult().equals(OMException.ResultCodes.BUCKET_NOT_FOUND) ||
+ ex.getResult().equals(OMException.ResultCodes.VOLUME_NOT_FOUND)) {
+ throw new FileNotFoundException("File not found. path:" + f);
+ }
}
+ LOG.warn("GetFileStatus failed for path {}", f, e);
+ throw e;
}
return fileStatus;
}