Colm Dougan created HADOOP-18615: ------------------------------------ Summary: CryptoOutputStream::close leak when encrypted zones + quota exceptions Key: HADOOP-18615 URL: https://issues.apache.org/jira/browse/HADOOP-18615 Project: Hadoop Common Issue Type: Bug Components: common Affects Versions: 3.3.4, 3.3.3, 3.3.2, 3.3.1 Reporter: Colm Dougan Attachments: hadoop_cryto_stream_close_try_finally.diff
{color:#172b4d}I would like to report an issue with a resource leak ({color}DFSOutputStream objects) when using the (java) hadoop-hdfs-client And specifically (at least in my case) when there is a combination of: * encrypted zones * quota space exceptions (DSQuotaExceededException) As you know, when encrypted zones are in play, when calling fs.create(path) in the hadoop-hdfs-client it will return a HdfsDataOutputStream stream object which wraps a CryptoOutputStream object which then wraps a DFSOutputStream object. Even though my code is correctly calling stream.close() on the above I can see from debugging that the underlying DFSOutputStream objects are being leaked. Specifically I see the DFSOutputStream objects being leaked in the filesBeingWritten map in DFSClient. (i.e. the DFSOutputStream objects remain in the map even though I've called close() on the stream object). I suspect this is due to a bug in CryptoOutputStream::close {code:java} @Override public synchronized void close() throws IOException { if (closed) { return; } try { flush(); if (closeOutputStream) { super.close(); codec.close(); } freeBuffers(); } finally { closed = true; } }{code} ... whereby if flush() throws (observed in my case when a DSQuotaExceededException exception is thrown due to quota exceeded) then the super.close() on the underlying DFSOutputStream is skipped. In my case I had a space quota set up on a given directory which is also in an encrypted zone and so each attempt to create and write to a file failed and leaked as above. Thanks. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: common-dev-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-dev-h...@hadoop.apache.org