use of org.apache.ratis.protocol.RaftGroupMemberId in project incubator-ratis by apache.
the class MemoryRaftLogTest method testEntryDoNotPerformTruncation.
@Test
public void testEntryDoNotPerformTruncation() throws Exception {
final RaftProperties prop = new RaftProperties();
prop.setClass(MiniRaftCluster.STATEMACHINE_CLASS_KEY, SimpleStateMachine4Testing.class, StateMachine.class);
final RaftPeerId peerId = RaftPeerId.valueOf("s0");
final RaftGroupId groupId = RaftGroupId.randomId();
final RaftGroupMemberId memberId = RaftGroupMemberId.valueOf(peerId, groupId);
MemoryRaftLog raftLog = new MemoryRaftLog(memberId, () -> -1, prop);
raftLog.open(RaftLog.INVALID_LOG_INDEX, null);
LogEntryProto[] entries1 = new LogEntryProto[2];
entries1[0] = LogEntryProto.newBuilder().setIndex(0).setTerm(0).build();
entries1[1] = LogEntryProto.newBuilder().setIndex(1).setTerm(0).build();
raftLog.append(entries1).forEach(CompletableFuture::join);
LogEntryProto[] entries2 = new LogEntryProto[1];
entries2[0] = LogEntryProto.newBuilder().setIndex(0).setTerm(0).build();
raftLog.append(entries2).forEach(CompletableFuture::join);
final LogEntryHeader[] termIndices = raftLog.getEntries(0, 10);
assertEquals(2, termIndices.length);
for (int i = 0; i < 2; i++) {
assertEquals(entries1[i].getIndex(), termIndices[i].getIndex());
assertEquals(entries1[i].getTerm(), termIndices[i].getTerm());
}
}
use of org.apache.ratis.protocol.RaftGroupMemberId in project incubator-ratis by apache.
the class TestCacheEviction method testEvictionInSegmentedLog.
@Test
public void testEvictionInSegmentedLog() throws Exception {
final RaftProperties prop = new RaftProperties();
prop.setClass(MiniRaftCluster.STATEMACHINE_CLASS_KEY, SimpleStateMachine4Testing.class, StateMachine.class);
RaftServerConfigKeys.Log.setSegmentSizeMax(prop, SizeInBytes.valueOf("8KB"));
RaftServerConfigKeys.Log.setPreallocatedSize(prop, SizeInBytes.valueOf("8KB"));
final RaftPeerId peerId = RaftPeerId.valueOf("s0");
final RaftGroupId groupId = RaftGroupId.randomId();
final RaftGroupMemberId memberId = RaftGroupMemberId.valueOf(peerId, groupId);
final int maxCachedNum = RaftServerConfigKeys.Log.segmentCacheNumMax(prop);
File storageDir = getTestDir();
RaftServerConfigKeys.setStorageDir(prop, Collections.singletonList(storageDir));
RaftStorage storage = RaftStorageTestUtils.newRaftStorage(storageDir);
final DivisionInfo info = Mockito.mock(DivisionInfo.class);
Mockito.when(info.getLastAppliedIndex()).thenReturn(0L);
Mockito.when(info.getFollowerNextIndices()).thenReturn(new long[] {});
final SegmentedRaftLog raftLog = RaftServerTestUtil.newSegmentedRaftLog(memberId, info, storage, prop);
raftLog.open(RaftLog.INVALID_LOG_INDEX, null);
List<SegmentRange> slist = TestSegmentedRaftLog.prepareRanges(0, maxCachedNum, 7, 0);
LogEntryProto[] entries = generateEntries(slist);
raftLog.append(entries).forEach(CompletableFuture::join);
// check the current cached segment number: the last segment is still open
Assert.assertEquals(maxCachedNum - 1, raftLog.getRaftLogCache().getCachedSegmentNum());
Mockito.when(info.getLastAppliedIndex()).thenReturn(35L);
Mockito.when(info.getFollowerNextIndices()).thenReturn(new long[] { 21, 40, 40 });
slist = TestSegmentedRaftLog.prepareRanges(maxCachedNum, maxCachedNum + 2, 7, 7 * maxCachedNum);
entries = generateEntries(slist);
raftLog.append(entries).forEach(CompletableFuture::join);
// check the cached segment number again. since the slowest follower is on
// index 21, the eviction should happen and evict 3 segments
Assert.assertEquals(maxCachedNum + 1 - 3, raftLog.getRaftLogCache().getCachedSegmentNum());
}
use of org.apache.ratis.protocol.RaftGroupMemberId in project incubator-ratis by apache.
the class TestGrpcServerMetrics method setUp.
@BeforeClass
public static void setUp() throws Exception {
raftGroupId = RaftGroupId.randomId();
raftPeerId = RaftPeerId.valueOf("TestId");
followerId = RaftPeerId.valueOf("FollowerId");
RaftGroupMemberId raftGroupMemberId = RaftGroupMemberId.valueOf(raftPeerId, raftGroupId);
grpcServerMetrics = new GrpcServerMetrics(raftGroupMemberId.toString());
ratisMetricRegistry = grpcServerMetrics.getRegistry();
}
use of org.apache.ratis.protocol.RaftGroupMemberId in project incubator-ratis by apache.
the class RaftBasicTests method checkFollowerCommitLagsLeader.
private static void checkFollowerCommitLagsLeader(MiniRaftCluster cluster) {
final List<RaftServer.Division> followers = cluster.getFollowers();
final RaftGroupMemberId leader = cluster.getLeader().getMemberId();
Gauge leaderCommitGauge = RaftServerMetricsImpl.getPeerCommitIndexGauge(leader, leader.getPeerId());
for (RaftServer.Division f : followers) {
final RaftGroupMemberId follower = f.getMemberId();
Gauge followerCommitGauge = RaftServerMetricsImpl.getPeerCommitIndexGauge(leader, follower.getPeerId());
Assert.assertTrue((Long) leaderCommitGauge.getValue() >= (Long) followerCommitGauge.getValue());
Gauge followerMetric = RaftServerMetricsImpl.getPeerCommitIndexGauge(follower, follower.getPeerId());
System.out.println(followerCommitGauge.getValue());
System.out.println(followerMetric.getValue());
Assert.assertTrue((Long) followerCommitGauge.getValue() <= (Long) followerMetric.getValue());
}
}
Aggregations