[ https://issues.apache.org/jira/browse/HDFS-6137?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13948153#comment-13948153 ]
Tsz Wo Nicholas Sze commented on HDFS-6137: ------------------------------------------- I think it probably first called doRollback(..) and then readProperties(..) as shown below. {code} // BlockPoolSliceStorage.doTransition(..) if (startOpt == StartupOption.ROLLBACK) { doRollback(sd, nsInfo); // rollback if applicable } else { // Restore all the files in the trash. The restored files are retained // during rolling upgrade rollback. They are deleted during rolling // upgrade downgrade. int restored = restoreBlockFilesFromTrash(getTrashRootDir(sd)); LOG.info("Restored " + restored + " block files from trash."); } readProperties(sd); {code} > Datanode cannot rollback because LayoutVersion incorrect > -------------------------------------------------------- > > Key: HDFS-6137 > URL: https://issues.apache.org/jira/browse/HDFS-6137 > Project: Hadoop HDFS > Issue Type: Bug > Components: datanode > Affects Versions: 2.4.0 > Reporter: Fengdong Yu > > upgrade from hadoop-2.0.5-alpha(QJM HA enabled) to the lastest trunk(HA > disabled), which is successful. then stop the cluster, and rollback, then it > throw exception: > {code} > 2014-03-21 18:33:19,384 FATAL > org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for > block pool Block pool BP-1123524590-10.204.8.135-1395397158134 (storage id > DS-1123524590-10.204.8.135-50010-1395397185148) service to > 10-204-8-135/10.204.8.135:9000 > org.apache.hadoop.hdfs.server.common.IncorrectVersionException: Unexpected > version of storage directory > /data/hdfs/data/current/BP-1123524590-10.204.8.135-1395397158134. Reported: > -55. Expecting = -40. > at > org.apache.hadoop.hdfs.server.common.Storage.setLayoutVersion(Storage.java:1083) > at > org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.setFieldsFromProperties(BlockPoolSliceStorage.java:217) > at > org.apache.hadoop.hdfs.server.common.Storage.readProperties(Storage.java:922) > at > org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.doTransition(BlockPoolSliceStorage.java:244) > at > org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.recoverTransitionRead(BlockPoolSliceStorage.java:145) > at > org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:234) > at > org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:913) > at > org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:884) > at > org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:280) > at > org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:222) > at > org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:664) > at java.lang.Thread.run(Thread.java:744) > {code} > > I looked at the datanode dir, $datanode.dir/VERSION is always new, when we > upgrade, this file was overwrited, so it MUST fail during rollback. -- This message was sent by Atlassian JIRA (v6.2#6252)