static void checkLogEntries(RaftLog log, SimpleMessage[] expectedMessages, Predicate<LogEntryProto> predicate) { TermIndex[] termIndices = log.getEntries(0, Long.MAX_VALUE); for (int i = 0; i < termIndices.length; i++) { for (int j = 0; j < expectedMessages.length; j++) { final LogEntryProto e; try { e = log.get(termIndices[i].getIndex()); if (Arrays.equals(expectedMessages[j].getContent().toByteArray(), e.getSmLogEntry().getData().toByteArray())) { Assert.assertTrue(predicate.test(e)); } } catch (IOException exception) { exception.printStackTrace(); } } } }
static void checkLogEntries(RaftLog log, SimpleMessage[] expectedMessages, Predicate<LogEntryProto> predicate) { TermIndex[] termIndices = log.getEntries(0, Long.MAX_VALUE); for (int i = 0; i < termIndices.length; i++) { for (int j = 0; j < expectedMessages.length; j++) { final LogEntryProto e; try { e = log.get(termIndices[i].getIndex()); if (Arrays.equals(expectedMessages[j].getContent().toByteArray(), e.getStateMachineLogEntry().getLogData().toByteArray())) { Assert.assertTrue(predicate.test(e)); } } catch (IOException exception) { exception.printStackTrace(); } } } }
static boolean logEntriesContains(RaftLog log, long startIndex, long endIndex, SimpleMessage... expectedMessages) { int idxEntries = 0; int idxExpected = 0; TermIndex[] termIndices = log.getEntries(startIndex, endIndex); while (idxEntries < termIndices.length && idxExpected < expectedMessages.length) { try { if (Arrays.equals(expectedMessages[idxExpected].getContent().toByteArray(), log.get(termIndices[idxEntries].getIndex()).getStateMachineLogEntry().getLogData().toByteArray())) { ++idxExpected; } } catch (IOException e) { throw new RuntimeException(e); } ++idxEntries; } return idxExpected == expectedMessages.length; }
static boolean logEntriesContains(RaftLog log, SimpleMessage... expectedMessages) { int idxEntries = 0; int idxExpected = 0; TermIndex[] termIndices = log.getEntries(0, Long.MAX_VALUE); while (idxEntries < termIndices.length && idxExpected < expectedMessages.length) { try { if (Arrays.equals(expectedMessages[idxExpected].getContent().toByteArray(), log.get(termIndices[idxEntries].getIndex()).getSmLogEntry().getData().toByteArray())) { ++idxExpected; } } catch (IOException e) { throw new RuntimeException(e); } ++idxEntries; } return idxExpected == expectedMessages.length; }
static void assertLeaderContent(MiniRaftCluster cluster) throws Exception { final RaftServerImpl leader = RaftTestUtil.waitForLeader(cluster); final RaftLog leaderLog = leader.getState().getLog(); final long lastIndex = leaderLog.getLastEntryTermIndex().getIndex(); final LogEntryProto e = leaderLog.get(lastIndex); Assert.assertTrue(e.hasMetadataEntry()); Assert.assertEquals(leaderLog.getLastCommittedIndex() - 1, e.getMetadataEntry().getCommitIndex()); final LogEntryProto[] entries = SimpleStateMachine4Testing.get(leader).getContent(); long message = 0; for (int i = 0; i < entries.length; i++) { LOG.info("{}) {} {}", i, message, entries[i]); if (entries[i].hasStateMachineLogEntry()) { final SimpleMessage m = new SimpleMessage("m" + message++); Assert.assertArrayEquals(m.getContent().toByteArray(), entries[i].getStateMachineLogEntry().getLogData().toByteArray()); } } }
static void assertLogEntries(List<LogEntryProto> entries, long expectedTerm, SimpleMessage... expectedMessages) { 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.assertTrue(e.getIndex() > logIndex); logIndex = e.getIndex(); Assert.assertArrayEquals(expectedMessages[i].getContent().toByteArray(), e.getStateMachineLogEntry().getLogData().toByteArray()); } }
static void assertLogEntries(List<LogEntryProto> entries, long expectedTerm, SimpleMessage... expectedMessages) { 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.assertTrue(e.getIndex() > logIndex); logIndex = e.getIndex(); Assert.assertArrayEquals(expectedMessages[i].getContent().toByteArray(), e.getSmLogEntry().getData().toByteArray()); } }
static void assertLeaderContent(MiniRaftCluster cluster) throws InterruptedException { final RaftServerImpl leader = RaftTestUtil.waitForLeader(cluster); Assert.assertEquals(SNAPSHOT_TRIGGER_THRESHOLD * 2, leader.getState().getLog().getLastCommittedIndex()); final LogEntryProto[] entries = SimpleStateMachine4Testing.get(leader).getContent(); for (int i = 1; i < SNAPSHOT_TRIGGER_THRESHOLD * 2 - 1; i++) { Assert.assertEquals(i+1, entries[i].getIndex()); Assert.assertArrayEquals( new SimpleMessage("m" + i).getContent().toByteArray(), entries[i].getSmLogEntry().getData().toByteArray()); } }