Repository: incubator-ratis Updated Branches: refs/heads/master 42273af45 -> daee0b361
RATIS-137. RaftBasicTests.testBasicAppendEntries may fail. Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/daee0b36 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/daee0b36 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/daee0b36 Branch: refs/heads/master Commit: daee0b3615d4e583c3b0db4edfb00ebc8811b0ae Parents: 42273af Author: Tsz-Wo Nicholas Sze <[email protected]> Authored: Sat Nov 11 13:46:34 2017 -0800 Committer: Tsz-Wo Nicholas Sze <[email protected]> Committed: Sat Nov 11 13:46:34 2017 -0800 ---------------------------------------------------------------------- .../java/org/apache/ratis/RaftBasicTests.java | 12 ++---- .../java/org/apache/ratis/RaftTestUtil.java | 42 +++++++++++++++----- 2 files changed, 35 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/daee0b36/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java index 0cd9222..2647d8f 100644 --- a/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java +++ b/ratis-server/src/test/java/org/apache/ratis/RaftBasicTests.java @@ -130,10 +130,8 @@ public abstract class RaftBasicTests extends BaseTest { Thread.sleep(cluster.getMaxTimeout() + 100); LOG.info(cluster.printAllLogs()); - cluster.getServerAliveStream() - .map(s -> s.getState().getLog()) - .forEach(log -> RaftTestUtil.assertLogEntries(log, - log.getEntries(1, Long.MAX_VALUE), 1, term, messages)); + cluster.getServerAliveStream().map(s -> s.getState().getLog()) + .forEach(log -> RaftTestUtil.assertLogEntries(log, term, messages)); } @Test @@ -172,10 +170,8 @@ public abstract class RaftBasicTests extends BaseTest { final RaftPeerId newLeaderId = waitForLeader(cluster).getId(); Assert.assertEquals(followerToSendLog.getId(), newLeaderId); - cluster.getServerAliveStream() - .map(s -> s.getState().getLog()) - .forEach(log -> RaftTestUtil.assertLogEntries(log, - log.getEntries(1, 2), 1, term, messages)); + cluster.getServerAliveStream().map(s -> s.getState().getLog()) + .forEach(log -> RaftTestUtil.assertLogEntries(log, term, messages)); LOG.info("terminating testOldLeaderCommit test"); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/daee0b36/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java b/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java index 62545fe..d1e614c 100644 --- a/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java +++ b/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java @@ -40,9 +40,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import java.util.Objects; +import java.util.*; import java.util.function.BooleanSupplier; import java.util.function.IntSupplier; import java.util.function.Predicate; @@ -167,18 +165,40 @@ public interface RaftTestUtil { } } - static void assertLogEntries(RaftLog log, TermIndex[] entries, - long startIndex, long expectedTerm, SimpleMessage... expectedMessages) { - Assert.assertEquals(expectedMessages.length, entries.length); - for(int i = 0; i < entries.length; i++) { + static void assertLogEntries(RaftLog log, long expectedTerm, + SimpleMessage... expectedMessages) { + + final TermIndex[] termIndices = log.getEntries(1, Long.MAX_VALUE); + final List<LogEntryProto> entries = new ArrayList<>(expectedMessages.length); + for (TermIndex ti : termIndices) { final LogEntryProto e; try { - e = log.get(entries[i].getIndex()); + e = log.get(ti.getIndex()); } catch (IOException exception) { - throw new RuntimeException(exception); + throw new AssertionError("Failed to get log at " + ti, exception); + } + + if (e.getLogEntryBodyCase() == LogEntryProto.LogEntryBodyCase.SMLOGENTRY) { + entries.add(e); + } else if (e.getLogEntryBodyCase() == LogEntryProto.LogEntryBodyCase.NOOP) { + LOG.info("Found " + LogEntryProto.LogEntryBodyCase.NOOP + " at " + ti + + ", ignoring it."); + } else { + throw new AssertionError( + "Unexpected LogEntryBodyCase " + e.getLogEntryBodyCase() + " at " + ti); + } + } + + long logIndex = 0; + Assert.assertEquals(expectedMessages.length, entries.size()); + for (int i = 0; i < expectedMessages.length; i++) { + final LogEntryProto e = entries.get(i); + Assert.assertTrue(e.getTerm() >= expectedTerm); + if (e.getTerm() > expectedTerm) { + expectedTerm = e.getTerm(); } - Assert.assertEquals(expectedTerm, e.getTerm()); - Assert.assertEquals(startIndex + i, e.getIndex()); + Assert.assertTrue(e.getIndex() > logIndex); + logIndex = e.getIndex(); Assert.assertArrayEquals(expectedMessages[i].getContent().toByteArray(), e.getSmLogEntry().getData().toByteArray()); }
