HDFS-14048. DFSOutputStream close() throws exception on subsequent call after DataNode restart. Contributed by Erik Krogen.

(cherry picked from commit 887244de4a)
This commit is contained in:
Inigo Goiri 2018-11-06 11:18:15 -08:00
parent 7335d940de
commit f65324aa47
2 changed files with 3 additions and 0 deletions

View File

@ -1781,6 +1781,7 @@ class DataStreamer extends Daemon {
blockStream = out;
result = true; // success
errorState.resetInternalError();
lastException.clear();
// remove all restarting nodes from failed nodes list
failed.removeAll(restartingNodes);
restartingNodes.clear();

View File

@ -436,6 +436,8 @@ public class TestClientProtocolForPipelineRecovery {
0, out.getStreamer().getPipelineRecoveryCount());
out.write(1);
out.close();
// Ensure that subsequent closes are idempotent and do not throw errors
out.close();
} finally {
if (cluster != null) {
cluster.shutdown();