[
https://issues.apache.org/jira/browse/HDFS-16645?focusedWorklogId=795406&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-795406
]
ASF GitHub Bot logged work on HDFS-16645:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 26/Jul/22 19:49
Start Date: 26/Jul/22 19:49
Worklog Time Spent: 10m
Work Description: jojochuang commented on code in PR #4518:
URL: https://github.com/apache/hadoop/pull/4518#discussion_r930353295
##########
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/server/TestJournal.java:
##########
@@ -535,4 +538,43 @@ public void
testFormatNonEmptyStorageDirectoriesWhenforceOptionIsTrue()
fail("Format should be success with force option.");
}
}
+
+ @Test
+ public void testMultiInProgressSegment() throws Exception {
+ journal.newEpoch(FAKE_NSINFO, 1);
+
+ // Start a segment at txid 1, and write a batch of 3 txns.
+ journal.startLogSegment(makeRI(1), 1,
+ NameNodeLayoutVersion.CURRENT_LAYOUT_VERSION);
+ journal.journal(makeRI(2), 1, 1, 3,
+ QJMTestUtil.createTxnData(1, 3));
+
+ GenericTestUtils.assertExists(
+ journal.getStorage().getInProgressEditLog(1));
+
+ // Try to start new segment at txid 6, this should abort old segment and
+ // then succeed, allowing us to write txid 6-9.
+ journal.startLogSegment(makeRI(3), 6,
+ NameNodeLayoutVersion.CURRENT_LAYOUT_VERSION);
+ journal.journal(makeRI(4), 6, 6, 3,
+ QJMTestUtil.createTxnData(6, 3));
+
+ // The old segment should *not* be finalized.
+ GenericTestUtils.assertExists(
+ journal.getStorage().getInProgressEditLog(1));
+ GenericTestUtils.assertExists(
+ journal.getStorage().getInProgressEditLog(6));
+
+ try {
+ RemoteEditLogManifest remoteEditLogManifest =
+ journal.getEditLogManifest(1, true);
+ assertNotNull(remoteEditLogManifest);
+ assertEquals(1, remoteEditLogManifest.getLogs().size());
+ RemoteEditLog remoteEditLog = remoteEditLogManifest.getLogs().get(0);
+ assertTrue(remoteEditLog.isInProgress());
+ assertEquals(6, remoteEditLog.getStartTxId());
+ } catch (IOException e) {
+ fail();
+ }
Review Comment:
No need to catch IOException and throw. Just let it throw.
```suggestion
RemoteEditLogManifest remoteEditLogManifest =
journal.getEditLogManifest(1, true);
assertNotNull(remoteEditLogManifest);
assertEquals(1, remoteEditLogManifest.getLogs().size());
RemoteEditLog remoteEditLog = remoteEditLogManifest.getLogs().get(0);
assertTrue(remoteEditLog.isInProgress());
assertEquals(6, remoteEditLog.getStartTxId());
```
Issue Time Tracking
-------------------
Worklog Id: (was: 795406)
Time Spent: 1h 10m (was: 1h)
> Multi inProgress segments caused "Invalid log manifest"
> -------------------------------------------------------
>
> Key: HDFS-16645
> URL: https://issues.apache.org/jira/browse/HDFS-16645
> Project: Hadoop HDFS
> Issue Type: Bug
> Reporter: ZanderXu
> Assignee: ZanderXu
> Priority: Major
> Labels: pull-request-available
> Time Spent: 1h 10m
> Remaining Estimate: 0h
>
> {code:java}
> java.lang.IllegalStateException: Invalid log manifest (log [1-?
> (in-progress)] overlaps [6-? (in-progress)])[[6-? (in-progress)], [1-?
> (in-progress)]] CommittedTxId: 0
> at
> org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest.checkState(RemoteEditLogManifest.java:62)
> at
> org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest.<init>(RemoteEditLogManifest.java:46)
> at
> org.apache.hadoop.hdfs.qjournal.server.Journal.getEditLogManifest(Journal.java:740)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]