[ 
https://issues.apache.org/jira/browse/HDFS-17876?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18053730#comment-18053730
 ] 

ASF GitHub Bot commented on HDFS-17876:
---------------------------------------

teamconfx opened a new pull request, #8200:
URL: https://github.com/apache/hadoop/pull/8200

   <!--
     Thanks for sending a pull request!
       1. If this is your first time, please read our contributor guidelines: 
https://cwiki.apache.org/confluence/display/HADOOP/How+To+Contribute
       2. Make sure your PR title starts with JIRA issue id, e.g., 
'HADOOP-17799. Your PR title ...'.
   -->
   
   ### Description of PR
   This PR fix [HDFS-17876](https://issues.apache.org/jira/browse/HDFS-17876)
   
   ### Summary of the change:
   
     - File: 
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java:1260
     - Issue: tracer.close() was called without a null check, inconsistent with 
all other resources in the stop() method
     - Fix: Added a defensive null check: if (tracer != null) { tracer.close(); 
}
   
     This prevents a NullPointerException during shutdown if:
     1. An exception occurs in the parent constructor before tracer is 
initialized
     2. The stopAtException() method calls stop() early during initialization 
failures
     3. Any future refactoring introduces paths where tracer isn't set before 
stop() is called
   
   
   ### For code changes:
   
   - [x] Does the title or this PR starts with the corresponding JIRA issue id 
(e.g. 'HADOOP-17799. Your PR title ...')?
   - [ ] Object storage: have the integration tests been executed and the 
endpoint declared according to the connector-specific documentation?
   - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)?
   - [ ] If applicable, have you updated the `LICENSE`, `LICENSE-binary`, 
`NOTICE-binary` files?
   
   ### AI Tooling
   
   If an AI tool was used:
   
   - [ ] The PR includes the phrase "Contains content generated by <tool>"
         where <tool> is the name of the AI tool used.
   - [ ] My use of AI contributions follows the ASF legal policy
         https://www.apache.org/legal/generative-tooling.html




> NameNode.stop() missing null check for tracer.close() can cause NPE during 
> shutdown
> -----------------------------------------------------------------------------------
>
>                 Key: HDFS-17876
>                 URL: https://issues.apache.org/jira/browse/HDFS-17876
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: namenode
>    Affects Versions: 3.3.5, 3.3.6
>            Reporter: rstest
>            Priority: Major
>
> The NameNode.stop() method acks a null check for the tracer field before 
> calling tracer.close().
> This is inconsistent with how all other resources are handled in the same 
> method and can lead to a NPE during shutdown if the NameNode is stopped 
> before fully initializing.                
>  
> {code:java}
>   public void stop() {                               
>       synchronized(this) {                           
>         if (stopRequested)                           
>           return;                                    
>         stopRequested = true;                        
>       }                                              
>       try {                                          
>         if (state != null) {                    // NULL CHECK
>           state.exitState(haContext);                
>         }                                            
>       } catch (ServiceFailedException e) {           
>         LOG.warn("Encountered exception while exiting state", e);
>       } finally {
>         stopMetricsLogger();                         
>         stopCommonServices();
>         if (metrics != null) {                  // NULL CHECK
>           metrics.shutdown();                        
>         }                                            
>         if (namesystem != null) {               // NULL CHECK
>           namesystem.shutdown();                     
>         }                                            
>         if (nameNodeStatusBeanName != null) {   // NULL CHECK                 
>           MBeans.unregister(nameNodeStatusBeanName); 
>           nameNodeStatusBeanName = null;
>         }                                            
>         if (levelDBAliasMapServer != null) {    // NULL CHECK
>           levelDBAliasMapServer.close();             
>         }                                            
>       }                                              
>       tracer.close();                           // NO NULL CHECK
>   }  {code}
> h2. How tracer Can Be Null                             
>   1. Exception in parent constructor: If super(conf) at line 1007 throws 
> before tracer is initialized at line 1008, tracer remains null.               
>                                                                
>   2. Early shutdown during initialization: The stopAtException() method (line 
> 1048) calls this.stop() when exceptions occur during initialization. If 
> initialization fails early, tracer may not be set.              
>   3. Subclass or future refactoring: A subclass could override initialization 
> behavior or future code changes could introduce paths where tracer isn't 
> initialized before stop() is called.                           
> {code:java}
> java.lang.NullPointerException                     
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.stop(NameNode.java:1116)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.stopAtException(NameNode.java:1050)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:1036){code}
> h2. Proposed Fix                                        
> Add a null check for tracer consistent with the other resources in the 
> method:          
> {code:java}
>   if (tracer != null) {                              
>       tracer.close();                                
>   }  {code}
>  



--
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