YUBI LEE created HDFS-17965:
-------------------------------

             Summary: DFSInputStream.close() leaks the block reader socket when 
the DFSClient is already closed
                 Key: HDFS-17965
                 URL: https://issues.apache.org/jira/browse/HDFS-17965
             Project: Hadoop HDFS
          Issue Type: Bug
          Components: hdfs-client
         Environment: DFSInputStream.close() calls dfsClient.checkOpen() before
closeCurrentBlockReaders():


{code:java}
  public synchronized void close() throws IOException {
    try {
      if (!closed.compareAndSet(false, true)) { ... return; }
      dfsClient.checkOpen();            // throws if the client is closed
      ...
      closeCurrentBlockReaders();       // never reached in that case
      super.close();
{code}


If the DFSClient has already been closed (for example via
FileSystem.closeAllForUGI() during shutdown/cleanup), checkOpen() throws
"Filesystem closed" and the current block reader is never closed. Because
the closed flag has already been CAS-ed(Compare-And-Set) to true, any further 
close() call
is a no-op, so the block reader's socket to the DataNode can never be
released for the lifetime of the client JVM.

Production impact we observed: with DefaultContainerExecutor, the YARN
NodeManager runs ContainerLocalizer inside the NM JVM. When a container is
killed while localizing (YARN-11856), runLocalization()'s finally block
closes the UGI filesystems while the download thread still holds an open
DFSInputStream. The subsequent stream close() aborts at checkOpen() and
leaks the socket inside the long-lived NM process. On the DataNode side the
connection is stuck in FIN_WAIT1 with a send queue that never drains; on a
~600-node cluster this accumulated continuously until DataNodes carried
large numbers of FIN_WAIT1 connections and NodeManagers leaked fds.

Fix: release the block reader in a finally block so close() always frees
the socket, while preserving the existing "Filesystem closed" exception
behavior.
            Reporter: YUBI LEE






--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to