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

Brandon Li commented on HDFS-3415:
----------------------------------

I reproduce this problem with the following configuration:
1. set two storage directories, say dirA and dirB
2. start and then shutdown namenode 
3. change only dirB's layout version from -40 to 123.
4. start namenode and it should fail with the above NullPointerException

The problem here is:

Two storage inspectors are used in namenode, 
FSImagePreTransactionalStorageInspector for layout version before -38, and 
FSImageTransactionalStorageInspector for -38 or anything later.

In this case, the modified storage directory happens to be the last one 
inspected by the namenode in order to load image/edits. Even though it sees two 
layout version, it saves the last one ("123" in this case) as the storage 
layout version. However, it uses FSImageTransactionalStorageInspector to get 
image path because dirA still has -40 and then uses 
FSImagePreTransactionalStorageInspector to get edit stream. Because 
FSImagePreTransactionalStorageInspector can't recognize
 the file in a storage directory whose real version is newer, some references 
are not initialized which eventually cause the exception.


                
> NameNode is getting shutdown by throwing nullpointer exception when one of 
> the layout version is different with others(Multiple storage dirs are 
> configured)
> ------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HDFS-3415
>                 URL: https://issues.apache.org/jira/browse/HDFS-3415
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: name-node
>    Affects Versions: 2.0.0, 3.0.0
>         Environment: Suse linux + jdk 1.6
>            Reporter: Brahma Reddy Battula
>            Assignee: Brandon Li
>
> Scenario:
> =========
> start Namenode and datanode by configuring three storage dir's for namenode
> write 10 files
> edit version file of one of the storage dir and give layout version as 123 
> which different with default(-40).
> Stop namenode
> start Namenode.
> Then I am getting follwong exception...
> {noformat}
> 2012-05-13 19:01:41,483 ERROR 
> org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join
> java.lang.NullPointerException
>       at 
> org.apache.hadoop.hdfs.server.namenode.NNStorage.getStorageFile(NNStorage.java:686)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSImagePreTransactionalStorageInspector.getEditsInStorageDir(FSImagePreTransactionalStorageInspector.java:243)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSImagePreTransactionalStorageInspector.getLatestEditsFiles(FSImagePreTransactionalStorageInspector.java:261)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSImagePreTransactionalStorageInspector.getEditLogStreams(FSImagePreTransactionalStorageInspector.java:276)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:596)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:247)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:498)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:390)
>       at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:354)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:368)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:402)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:564)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:545)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1093)
>       at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1151)
> 2012-05-13 19:01:41,485 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: 
> SHUTDOWN_MSG: 
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to