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 cn...@apache.org on 2013/08/15 22:43:46 UTC
svn commit: r1514481 - in
/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs: CHANGES.txt
src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
Author: cnauroth
Date: Thu Aug 15 20:43:46 2013
New Revision: 1514481
URL: http://svn.apache.org/r1514481
Log:
HDFS-5099. Namenode#copyEditLogSegmentsToSharedDir should close EditLogInputStreams upon finishing. Contributed by Chuan Liu.
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1514481&r1=1514480&r2=1514481&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Thu Aug 15 20:43:46 2013
@@ -339,6 +339,9 @@ Release 2.1.1-beta - UNRELEASED
HDFS-5080. BootstrapStandby not working with QJM when the existing NN is
active. (jing9)
+ HDFS-5099. Namenode#copyEditLogSegmentsToSharedDir should close
+ EditLogInputStreams upon finishing. (Chuan Liu via cnauroth)
+
Release 2.1.0-beta - 2013-08-22
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java?rev=1514481&r1=1514480&r2=1514481&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java Thu Aug 15 20:43:46 2013
@@ -956,41 +956,49 @@ public class NameNode implements NameNod
FSEditLog sourceEditLog = fsns.getFSImage().editLog;
long fromTxId = fsns.getFSImage().getMostRecentCheckpointTxId();
- Collection<EditLogInputStream> streams = sourceEditLog.selectInputStreams(
- fromTxId+1, 0);
-
- // Set the nextTxid to the CheckpointTxId+1
- newSharedEditLog.setNextTxId(fromTxId + 1);
- // Copy all edits after last CheckpointTxId to shared edits dir
- for (EditLogInputStream stream : streams) {
- LOG.debug("Beginning to copy stream " + stream + " to shared edits");
- FSEditLogOp op;
- boolean segmentOpen = false;
- while ((op = stream.readOp()) != null) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("copying op: " + op);
- }
- if (!segmentOpen) {
- newSharedEditLog.startLogSegment(op.txid, false);
- segmentOpen = true;
+ Collection<EditLogInputStream> streams = null;
+ try {
+ streams = sourceEditLog.selectInputStreams(fromTxId + 1, 0);
+
+ // Set the nextTxid to the CheckpointTxId+1
+ newSharedEditLog.setNextTxId(fromTxId + 1);
+
+ // Copy all edits after last CheckpointTxId to shared edits dir
+ for (EditLogInputStream stream : streams) {
+ LOG.debug("Beginning to copy stream " + stream + " to shared edits");
+ FSEditLogOp op;
+ boolean segmentOpen = false;
+ while ((op = stream.readOp()) != null) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("copying op: " + op);
+ }
+ if (!segmentOpen) {
+ newSharedEditLog.startLogSegment(op.txid, false);
+ segmentOpen = true;
+ }
+
+ newSharedEditLog.logEdit(op);
+
+ if (op.opCode == FSEditLogOpCodes.OP_END_LOG_SEGMENT) {
+ newSharedEditLog.logSync();
+ newSharedEditLog.endCurrentLogSegment(false);
+ LOG.debug("ending log segment because of END_LOG_SEGMENT op in "
+ + stream);
+ segmentOpen = false;
+ }
}
-
- newSharedEditLog.logEdit(op);
- if (op.opCode == FSEditLogOpCodes.OP_END_LOG_SEGMENT) {
+ if (segmentOpen) {
+ LOG.debug("ending log segment because of end of stream in " + stream);
newSharedEditLog.logSync();
newSharedEditLog.endCurrentLogSegment(false);
- LOG.debug("ending log segment because of END_LOG_SEGMENT op in " + stream);
segmentOpen = false;
}
}
-
- if (segmentOpen) {
- LOG.debug("ending log segment because of end of stream in " + stream);
- newSharedEditLog.logSync();
- newSharedEditLog.endCurrentLogSegment(false);
- segmentOpen = false;
+ } finally {
+ if (streams != null) {
+ FSEditLog.closeAllStreams(streams);
}
}
}