You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by to...@apache.org on 2014/01/25 21:21:58 UTC
svn commit: r1561389 - in
/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/java/org/apache/hadoop/hdfs/server/namenode/
src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/
Author: todd
Date: Sat Jan 25 20:21:58 2014
New Revision: 1561389
URL: http://svn.apache.org/r1561389
Log:
HDFS-5721. sharedEditsImage in Namenode#initializeSharedEdits() should be closed before method returns. Contributed by Ted Yu.
Modified:
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/BootstrapStandby.java
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1561389&r1=1561388&r2=1561389&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Sat Jan 25 20:21:58 2014
@@ -310,6 +310,9 @@ Release 2.4.0 - UNRELEASED
HDFS-5719. FSImage#doRollback() should close prevState before return
(Ted Yu via todd)
+ HDFS-5721. sharedEditsImage in Namenode#initializeSharedEdits() should be
+ closed before method returns (Ted Yu via todd)
+
BREAKDOWN OF HDFS-2832 SUBTASKS AND RELATED JIRAS
HDFS-4985. Add storage type to the protocol and expose it in block report
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1561389&r1=1561388&r2=1561389&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Sat Jan 25 20:21:58 2014
@@ -604,8 +604,14 @@ public class FSNamesystem implements Nam
long loadStart = now();
String nameserviceId = DFSUtil.getNamenodeNameServiceId(conf);
- namesystem.loadFSImage(startOpt, fsImage,
- HAUtil.isHAEnabled(conf, nameserviceId));
+ try {
+ namesystem.loadFSImage(startOpt, fsImage,
+ HAUtil.isHAEnabled(conf, nameserviceId));
+ } catch (IOException ioe) {
+ LOG.warn("Encountered exception loading fsimage", ioe);
+ fsImage.close();
+ throw ioe;
+ }
long timeTakenToLoadFSImage = now() - loadStart;
LOG.info("Finished loading FSImage in " + timeTakenToLoadFSImage + " msecs");
NameNodeMetrics nnMetrics = NameNode.getNameNodeMetrics();
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java?rev=1561389&r1=1561388&r2=1561389&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java Sat Jan 25 20:21:58 2014
@@ -818,14 +818,20 @@ public class NameNode implements NameNod
System.out.println("Formatting using clusterid: " + clusterId);
FSImage fsImage = new FSImage(conf, nameDirsToFormat, editDirsToFormat);
- FSNamesystem fsn = new FSNamesystem(conf, fsImage);
- fsImage.getEditLog().initJournalsForWrite();
-
- if (!fsImage.confirmFormat(force, isInteractive)) {
- return true; // aborted
+ try {
+ FSNamesystem fsn = new FSNamesystem(conf, fsImage);
+ fsImage.getEditLog().initJournalsForWrite();
+
+ if (!fsImage.confirmFormat(force, isInteractive)) {
+ return true; // aborted
+ }
+
+ fsImage.format(fsn, clusterId);
+ } catch (IOException ioe) {
+ LOG.warn("Encountered exception during format: ", ioe);
+ fsImage.close();
+ throw ioe;
}
-
- fsImage.format(fsn, clusterId);
return false;
}
@@ -899,6 +905,7 @@ public class NameNode implements NameNod
}
NNStorage existingStorage = null;
+ FSImage sharedEditsImage = null;
try {
FSNamesystem fsns =
FSNamesystem.loadFromDisk(getConfigurationWithoutSharedEdits(conf));
@@ -908,7 +915,7 @@ public class NameNode implements NameNod
List<URI> sharedEditsDirs = FSNamesystem.getSharedEditsDirs(conf);
- FSImage sharedEditsImage = new FSImage(conf,
+ sharedEditsImage = new FSImage(conf,
Lists.<URI>newArrayList(),
sharedEditsDirs);
sharedEditsImage.getEditLog().initJournalsForWrite();
@@ -936,6 +943,13 @@ public class NameNode implements NameNod
LOG.error("Could not initialize shared edits dir", ioe);
return true; // aborted
} finally {
+ if (sharedEditsImage != null) {
+ try {
+ sharedEditsImage.close();
+ } catch (IOException ioe) {
+ LOG.warn("Could not close sharedEditsImage", ioe);
+ }
+ }
// Have to unlock storage explicitly for the case when we're running in a
// unit test, which runs in the same JVM as NNs.
if (existingStorage != null) {
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/BootstrapStandby.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/BootstrapStandby.java?rev=1561389&r1=1561388&r2=1561389&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/BootstrapStandby.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/BootstrapStandby.java Sat Jan 25 20:21:58 2014
@@ -190,24 +190,29 @@ public class BootstrapStandby implements
// Load the newly formatted image, using all of the directories (including shared
// edits)
FSImage image = new FSImage(conf);
- image.getStorage().setStorageInfo(storage);
- image.initEditLog();
- assert image.getEditLog().isOpenForRead() :
+ try {
+ image.getStorage().setStorageInfo(storage);
+ image.initEditLog();
+ assert image.getEditLog().isOpenForRead() :
"Expected edit log to be open for read";
-
- // Ensure that we have enough edits already in the shared directory to
- // start up from the last checkpoint on the active.
- if (!checkLogsAvailableForRead(image, imageTxId, curTxId)) {
- return ERR_CODE_LOGS_UNAVAILABLE;
- }
-
- image.getStorage().writeTransactionIdFileToStorage(curTxId);
- // Download that checkpoint into our storage directories.
- MD5Hash hash = TransferFsImage.downloadImageToStorage(
+ // Ensure that we have enough edits already in the shared directory to
+ // start up from the last checkpoint on the active.
+ if (!checkLogsAvailableForRead(image, imageTxId, curTxId)) {
+ return ERR_CODE_LOGS_UNAVAILABLE;
+ }
+
+ image.getStorage().writeTransactionIdFileToStorage(curTxId);
+
+ // Download that checkpoint into our storage directories.
+ MD5Hash hash = TransferFsImage.downloadImageToStorage(
otherHttpAddr, imageTxId,
storage, true);
- image.saveDigestAndRenameCheckpointImage(imageTxId, hash);
+ image.saveDigestAndRenameCheckpointImage(imageTxId, hash);
+ } catch (IOException ioe) {
+ image.close();
+ throw ioe;
+ }
return 0;
}