Author: todd
Date: Wed Sep 5 04:27:49 2012
New Revision: 1380979
URL: http://svn.apache.org/viewvc?rev=1380979&view=rev
Log:
HDFS-3884. Journal format() should reset cached values. Contributed by Todd
Lipcon.
Modified:
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournal.java
Modified:
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt?rev=1380979&r1=1380978&r2=1380979&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt
(original)
+++
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt
Wed Sep 5 04:27:49 2012
@@ -40,3 +40,5 @@ HDFS-3877. QJM: Provide defaults for dfs
HDFS-3863. Track last "committed" txid in QJM (todd)
HDFS-3869. Expose non-file journal manager details in web UI (todd)
+
+HDFS-3884. Journal format() should reset cached values (todd)
Modified:
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java?rev=1380979&r1=1380978&r2=1380979&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java
(original)
+++
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/Journal.java
Wed Sep 5 04:27:49 2012
@@ -105,6 +105,19 @@ class Journal implements Closeable {
Journal(File logDir, StorageErrorReporter errorReporter) throws IOException {
storage = new JNStorage(logDir, errorReporter);
+ refreshCachedData();
+
+ this.fjm = storage.getJournalManager();
+ }
+
+ /**
+ * Reload any data that may have been cached. This is necessary
+ * when we first load the Journal, but also after any formatting
+ * operation, since the cached data is no longer relevant.
+ */
+ private synchronized void refreshCachedData() {
+ IOUtils.closeStream(committedTxnId);
+
File currentDir = storage.getSingularStorageDir().getCurrentDir();
this.lastPromisedEpoch = new PersistentLongFile(
new File(currentDir, LAST_PROMISED_FILENAME), 0);
@@ -113,8 +126,6 @@ class Journal implements Closeable {
this.committedTxnId = new BestEffortLongFile(
new File(currentDir, COMMITTED_TXID_FILENAME),
HdfsConstants.INVALID_TXID);
-
- this.fjm = storage.getJournalManager();
}
/**
@@ -156,6 +167,7 @@ class Journal implements Closeable {
LOG.info("Formatting " + this + " with namespace info: " +
nsInfo);
storage.format(nsInfo);
+ refreshCachedData();
}
/**
@@ -180,6 +192,11 @@ class Journal implements Closeable {
checkFormatted();
return lastPromisedEpoch.get();
}
+
+ synchronized public long getLastWriterEpoch() throws IOException {
+ checkFormatted();
+ return lastWriterEpoch.get();
+ }
synchronized long getCommittedTxnIdForTests() throws IOException {
return committedTxnId.get();
Modified:
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournal.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournal.java?rev=1380979&r1=1380978&r2=1380979&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournal.java
(original)
+++
hadoop/common/branches/HDFS-3077/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournal.java
Wed Sep 5 04:27:49 2012
@@ -148,6 +148,19 @@ public class TestJournal {
assertEquals(1, newEpoch.getLastSegmentTxId());
}
+ @Test
+ public void testFormatResetsCachedValues() throws Exception {
+ journal.newEpoch(FAKE_NSINFO, 12345L);
+ journal.startLogSegment(new RequestInfo(JID, 12345L, 1L, 0L), 1L);
+
+ assertEquals(12345L, journal.getLastPromisedEpoch());
+ assertEquals(12345L, journal.getLastWriterEpoch());
+
+ journal.format(FAKE_NSINFO_2);
+ assertEquals(0, journal.getLastPromisedEpoch());
+ assertEquals(0, journal.getLastWriterEpoch());
+ }
+
/**
* Test that, if the writer crashes at the very beginning of a segment,
* before any transactions are written, that the next newEpoch() call