From 2088584864d829d59d8352b88dead8eafa6922e4 Mon Sep 17 00:00:00 2001 From: Tsz-wo Sze Date: Thu, 20 Feb 2014 03:57:59 +0000 Subject: [PATCH] HDFS-5980. Rollback does not need to load edits. Contributed by jing9 git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-5535@1570078 13f79535-47bb-0310-9956-ffa450edef68 --- .../hadoop-hdfs/CHANGES_HDFS-5535.txt | 1 + .../hadoop/hdfs/server/namenode/FSImage.java | 20 ++++++++----------- .../hadoop/hdfs/TestRollingUpgrade.java | 2 +- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt index ed3e041ff84..33e5fc65626 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt @@ -59,3 +59,4 @@ HDFS-5535 subtasks: HDFS-5976. Create unit tests for downgrade and finalize rolling upgrade. (Haohui Mai via Arpit Agarwal) + HDFS-5980. Rollback does not need to load edits. (jing9 via szetszwo) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java index e76294a5e0f..a865a24a66e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java @@ -624,16 +624,15 @@ LayoutVersion.Feature.TXID_BASED_LAYOUT, getLayoutVersion())) { prog.endPhase(Phase.LOADING_FSIMAGE); long txnsAdvanced = 0; - loadEdits(editStreams, target, startOpt, recovery); - if (rollingRollback) { - // Trigger the rollback for rolling upgrade. - // Here lastAppliedTxId == (markerTxId - 1), and we should decrease 1 from - // lastAppliedTxId for the start-segment transaction. - rollingRollback(lastAppliedTxId--, imageFiles.get(0).getCheckpointTxId()); - needToSave = false; - } else { + if (!rollingRollback) { + loadEdits(editStreams, target, startOpt, recovery); needToSave |= needsResaveBasedOnStaleCheckpoint(imageFile.getFile(), txnsAdvanced); + } else { + // Trigger the rollback for rolling upgrade. Here lastAppliedTxId equals + // to the last txid in rollback fsimage. + rollingRollback(lastAppliedTxId + 1, imageFiles.get(0).getCheckpointTxId()); + needToSave = false; } editLog.setNextTxId(lastAppliedTxId + 1); return needToSave; @@ -768,11 +767,8 @@ private long loadEdits(Iterable editStreams, // have been successfully applied before the error. lastAppliedTxId = loader.getLastAppliedTxId(); } - boolean rollingRollback = StartupOption - .isRollingUpgradeRollback(startOpt); // If we are in recovery mode, we may have skipped over some txids. - if (editIn.getLastTxId() != HdfsConstants.INVALID_TXID - && !rollingRollback) { + if (editIn.getLastTxId() != HdfsConstants.INVALID_TXID) { lastAppliedTxId = editIn.getLastTxId(); } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java index 018b8421176..1230fdd8d6e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java @@ -268,7 +268,7 @@ public void testRollback() throws IOException { } // Restart should succeed! -// cluster.restartNameNode(); + cluster.restartNameNode(); cluster.restartNameNode("-rollingUpgrade", "rollback"); {