HDFS-5999. Do not create rollback fsimage when it already exists. Contributed by Jing Zhao.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-5535@1571096 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e804c924fe
commit
8e7a2b8d5d
@ -73,3 +73,5 @@ HDFS-5535 subtasks:
|
|||||||
TestOfflineEditsViewer. (szetszwo)
|
TestOfflineEditsViewer. (szetszwo)
|
||||||
|
|
||||||
HDFS-5994. Fix TestDataNodeRollingUpgrade. (Arpit Agarwal via szetszwo)
|
HDFS-5994. Fix TestDataNodeRollingUpgrade. (Arpit Agarwal via szetszwo)
|
||||||
|
|
||||||
|
HDFS-5999. Do not create rollback fsimage when it already exists. (jing9)
|
||||||
|
@ -728,11 +728,9 @@ public class FSEditLogLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// save namespace if this is not the second edit transaction
|
// save namespace if there is no rollback image existing
|
||||||
// (the first must be OP_START_LOG_SEGMENT)
|
|
||||||
final boolean saveNamespace = totalEdits > 1;
|
|
||||||
final long startTime = ((RollingUpgradeOp) op).getTime();
|
final long startTime = ((RollingUpgradeOp) op).getTime();
|
||||||
fsNamesys.startRollingUpgradeInternal(startTime, saveNamespace);
|
fsNamesys.startRollingUpgradeInternal(startTime, op.txid - 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OP_ROLLING_UPGRADE_FINALIZE: {
|
case OP_ROLLING_UPGRADE_FINALIZE: {
|
||||||
|
@ -327,6 +327,21 @@ public class FSImage implements Closeable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if there is rollback fsimage (for rolling upgrade) for the
|
||||||
|
* given txid in storage.
|
||||||
|
*/
|
||||||
|
boolean hasRollbackFSImage(long txid) {
|
||||||
|
for (StorageDirectory sd : storage.dirIterable(NameNodeDirType.IMAGE)) {
|
||||||
|
final File rollbackImageFile = NNStorage.getStorageFile(sd,
|
||||||
|
NameNodeFile.IMAGE_ROLLBACK, txid);
|
||||||
|
if (rollbackImageFile.exists()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void doUpgrade(FSNamesystem target) throws IOException {
|
void doUpgrade(FSNamesystem target) throws IOException {
|
||||||
checkUpgrade(target);
|
checkUpgrade(target);
|
||||||
|
|
||||||
@ -1071,7 +1086,7 @@ public class FSImage implements Closeable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renames new image
|
* Rename FSImage
|
||||||
*/
|
*/
|
||||||
private void renameCheckpoint(long txid, NameNodeFile fromNnf,
|
private void renameCheckpoint(long txid, NameNodeFile fromNnf,
|
||||||
NameNodeFile toNnf, boolean renameMD5) throws IOException {
|
NameNodeFile toNnf, boolean renameMD5) throws IOException {
|
||||||
|
@ -7147,7 +7147,7 @@ public class FSNamesystem implements Namesystem, FSClusterStats,
|
|||||||
try {
|
try {
|
||||||
checkOperation(OperationCategory.WRITE);
|
checkOperation(OperationCategory.WRITE);
|
||||||
checkNameNodeSafeMode("Failed to start rolling upgrade");
|
checkNameNodeSafeMode("Failed to start rolling upgrade");
|
||||||
startRollingUpgradeInternal(now(), true);
|
startRollingUpgradeInternal(now(), -1);
|
||||||
getEditLog().logStartRollingUpgrade(rollingUpgradeInfo.getStartTime());
|
getEditLog().logStartRollingUpgrade(rollingUpgradeInfo.getStartTime());
|
||||||
} finally {
|
} finally {
|
||||||
writeUnlock();
|
writeUnlock();
|
||||||
@ -7165,15 +7165,14 @@ public class FSNamesystem implements Namesystem, FSClusterStats,
|
|||||||
* Update internal state to indicate that a rolling upgrade is in progress.
|
* Update internal state to indicate that a rolling upgrade is in progress.
|
||||||
* Ootionally create a checkpoint before starting the RU.
|
* Ootionally create a checkpoint before starting the RU.
|
||||||
* @param startTime
|
* @param startTime
|
||||||
* @param saveNamespace If true then a checkpoint is created before initiating
|
|
||||||
* the rolling upgrade.
|
|
||||||
*/
|
*/
|
||||||
void startRollingUpgradeInternal(long startTime, boolean saveNamespace)
|
void startRollingUpgradeInternal(long startTime, long txid)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
checkRollingUpgrade("start rolling upgrade");
|
checkRollingUpgrade("start rolling upgrade");
|
||||||
getFSImage().checkUpgrade(this);
|
getFSImage().checkUpgrade(this);
|
||||||
|
|
||||||
if (saveNamespace) {
|
// if we have not made a rollback image, do it
|
||||||
|
if (txid < 0 || !getFSImage().hasRollbackFSImage(txid)) {
|
||||||
getFSImage().saveNamespace(this, NameNodeFile.IMAGE_ROLLBACK, null);
|
getFSImage().saveNamespace(this, NameNodeFile.IMAGE_ROLLBACK, null);
|
||||||
LOG.info("Successfully saved namespace for preparing rolling upgrade.");
|
LOG.info("Successfully saved namespace for preparing rolling upgrade.");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user