HDFS-12836. startTxId could be greater than endTxId when tailing in-progress edit log. Contributed by Chao Sun.
This commit is contained in:
parent
53bbef3802
commit
0faf506245
|
@ -498,6 +498,12 @@ public class QuorumJournalManager implements JournalManager {
|
|||
// than committedTxnId. This ensures the consistency.
|
||||
if (onlyDurableTxns && inProgressOk) {
|
||||
endTxId = Math.min(endTxId, committedTxnId);
|
||||
if (endTxId < remoteLog.getStartTxId()) {
|
||||
LOG.warn("Found endTxId (" + endTxId + ") that is less than " +
|
||||
"the startTxId (" + remoteLog.getStartTxId() +
|
||||
") - setting it to startTxId.");
|
||||
endTxId = remoteLog.getStartTxId();
|
||||
}
|
||||
}
|
||||
|
||||
EditLogInputStream elis = EditLogFileInputStream.fromUrl(
|
||||
|
|
|
@ -309,6 +309,25 @@ public class TestStandbyInProgressTail {
|
|||
assertNotNull(NameNodeAdapter.getFileInfo(nn1, "/test3", true));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNonUniformConfig() throws Exception {
|
||||
// Test case where some NNs (in this case the active NN) in the cluster
|
||||
// do not have in-progress tailing enabled.
|
||||
Configuration newConf = cluster.getNameNode(0).getConf();
|
||||
newConf.setBoolean(
|
||||
DFSConfigKeys.DFS_HA_TAILEDITS_INPROGRESS_KEY,
|
||||
false);
|
||||
cluster.restartNameNode(0);
|
||||
cluster.transitionToActive(0);
|
||||
|
||||
cluster.getNameNode(0).getRpcServer().mkdirs("/test",
|
||||
FsPermission.createImmutable((short) 0755), true);
|
||||
cluster.getNameNode(0).getRpcServer().rollEdits();
|
||||
|
||||
cluster.getNameNode(1).getNamesystem().getEditLogTailer().doTailEdits();
|
||||
assertNotNull(NameNodeAdapter.getFileInfo(nn1, "/test", true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that no edits files are present in the given storage dirs.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue