HADOOP-16785. followup to abfs close() fix.
Adds one extra test to the ABFS close logic, to explicitly verify that the close sequence of FilterOutputStream is not going to fail. This is just a due-diligence patch, but it helps ensure that no regressions creep in in future. Contributed by Steve Loughran. Change-Id: Ifd33a8c322d32513411405b15f50a1aebcfa6e48
This commit is contained in:
parent
581072a8f0
commit
6a859d33aa
@ -19,6 +19,7 @@
|
||||
package org.apache.hadoop.fs.azurebfs;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FilterOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.EnumSet;
|
||||
|
||||
@ -155,4 +156,32 @@ public void testTryWithResources() throws Throwable {
|
||||
GenericTestUtils.assertExceptionContains(fnfe.getMessage(), inner);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to write to the azure stream after it is closed will raise
|
||||
* an IOException.
|
||||
*/
|
||||
@Test
|
||||
public void testFilterFSWriteAfterClose() throws Throwable {
|
||||
final AzureBlobFileSystem fs = getFileSystem();
|
||||
Path testPath = new Path(TEST_FOLDER_PATH, TEST_CHILD_FILE);
|
||||
FSDataOutputStream out = fs.create(testPath);
|
||||
intercept(FileNotFoundException.class,
|
||||
() -> {
|
||||
try (FilterOutputStream fos = new FilterOutputStream(out)) {
|
||||
fos.write('a');
|
||||
fos.flush();
|
||||
out.hsync();
|
||||
fs.delete(testPath, false);
|
||||
// trigger the first failure
|
||||
throw intercept(FileNotFoundException.class,
|
||||
() -> {
|
||||
fos.write('b');
|
||||
out.hsync();
|
||||
return "hsync didn't raise an IOE";
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user