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; }