use of com.alipay.sofa.jraft.util.Endpoint in project sofa-jraft by sofastack.
the class NodeTest method testBootStrapWithSnapshot.
@Test
public void testBootStrapWithSnapshot() throws Exception {
final Endpoint addr = JRaftUtils.getEndPoint("127.0.0.1:5006");
final MockStateMachine fsm = new MockStateMachine(addr);
for (char ch = 'a'; ch <= 'z'; ch++) {
fsm.getLogs().add(ByteBuffer.wrap(new byte[] { (byte) ch }));
}
final BootstrapOptions opts = new BootstrapOptions();
opts.setLastLogIndex(fsm.getLogs().size());
opts.setRaftMetaUri(this.dataPath + File.separator + "meta");
opts.setLogUri(this.dataPath + File.separator + "log");
opts.setSnapshotUri(this.dataPath + File.separator + "snapshot");
opts.setGroupConf(JRaftUtils.getConfiguration("127.0.0.1:5006"));
opts.setFsm(fsm);
NodeManager.getInstance().addAddress(addr);
assertTrue(JRaftUtils.bootstrap(opts));
final NodeOptions nodeOpts = createNodeOptionsWithSharedTimer();
nodeOpts.setRaftMetaUri(this.dataPath + File.separator + "meta");
nodeOpts.setLogUri(this.dataPath + File.separator + "log");
nodeOpts.setSnapshotUri(this.dataPath + File.separator + "snapshot");
nodeOpts.setFsm(fsm);
final NodeImpl node = new NodeImpl("test", new PeerId(addr, 0));
assertTrue(node.init(nodeOpts));
assertEquals(26, fsm.getLogs().size());
for (int i = 0; i < 26; i++) {
assertEquals('a' + i, fsm.getLogs().get(i).get());
}
while (!node.isLeader()) {
Thread.sleep(20);
}
this.sendTestTaskAndWait(node);
assertEquals(36, fsm.getLogs().size());
node.shutdown();
node.join();
}
use of com.alipay.sofa.jraft.util.Endpoint in project sofa-jraft by sofastack.
the class NodeTest method testBootStrapWithoutSnapshot.
@Test
public void testBootStrapWithoutSnapshot() throws Exception {
final Endpoint addr = JRaftUtils.getEndPoint("127.0.0.1:5006");
final MockStateMachine fsm = new MockStateMachine(addr);
final BootstrapOptions opts = new BootstrapOptions();
opts.setLastLogIndex(0);
opts.setRaftMetaUri(this.dataPath + File.separator + "meta");
opts.setLogUri(this.dataPath + File.separator + "log");
opts.setSnapshotUri(this.dataPath + File.separator + "snapshot");
opts.setGroupConf(JRaftUtils.getConfiguration("127.0.0.1:5006"));
opts.setFsm(fsm);
NodeManager.getInstance().addAddress(addr);
assertTrue(JRaftUtils.bootstrap(opts));
final NodeOptions nodeOpts = createNodeOptionsWithSharedTimer();
nodeOpts.setRaftMetaUri(this.dataPath + File.separator + "meta");
nodeOpts.setLogUri(this.dataPath + File.separator + "log");
nodeOpts.setSnapshotUri(this.dataPath + File.separator + "snapshot");
nodeOpts.setFsm(fsm);
final NodeImpl node = new NodeImpl("test", new PeerId(addr, 0));
assertTrue(node.init(nodeOpts));
while (!node.isLeader()) {
Thread.sleep(20);
}
this.sendTestTaskAndWait(node);
assertEquals(10, fsm.getLogs().size());
node.shutdown();
node.join();
}
use of com.alipay.sofa.jraft.util.Endpoint in project sofa-jraft by sofastack.
the class NodeTest method testShutdownAndJoinWorkAfterInitFails.
@Test
public void testShutdownAndJoinWorkAfterInitFails() throws Exception {
final Endpoint addr = new Endpoint(TestUtils.getMyIp(), TestUtils.INIT_PORT);
NodeManager.getInstance().addAddress(addr);
{
final NodeOptions nodeOptions = createNodeOptionsWithSharedTimer();
final MockStateMachine fsm = new MockStateMachine(addr);
nodeOptions.setFsm(fsm);
nodeOptions.setLogUri(this.dataPath + File.separator + "log");
nodeOptions.setSnapshotUri(this.dataPath + File.separator + "snapshot");
nodeOptions.setRaftMetaUri(this.dataPath + File.separator + "meta");
nodeOptions.setSnapshotIntervalSecs(10);
nodeOptions.setInitialConf(new Configuration(Collections.singletonList(new PeerId(addr, 0))));
final Node node = new NodeImpl("unittest", new PeerId(addr, 0));
assertTrue(node.init(nodeOptions));
Thread.sleep(1000);
this.sendTestTaskAndWait(node);
// save snapshot
final CountDownLatch latch = new CountDownLatch(1);
node.snapshot(new ExpectClosure(latch));
waitLatch(latch);
node.shutdown();
node.join();
}
{
final NodeOptions nodeOptions = createNodeOptionsWithSharedTimer();
final MockStateMachine fsm = new MockFSM1(addr);
nodeOptions.setFsm(fsm);
nodeOptions.setLogUri(this.dataPath + File.separator + "log");
nodeOptions.setSnapshotUri(this.dataPath + File.separator + "snapshot");
nodeOptions.setRaftMetaUri(this.dataPath + File.separator + "meta");
nodeOptions.setSnapshotIntervalSecs(10);
nodeOptions.setInitialConf(new Configuration(Collections.singletonList(new PeerId(addr, 0))));
final Node node = new NodeImpl("unittest", new PeerId(addr, 0));
assertFalse(node.init(nodeOptions));
node.shutdown();
node.join();
}
}
use of com.alipay.sofa.jraft.util.Endpoint in project sofa-jraft by sofastack.
the class NodeTest method testAutoSnapshot.
@Test
public void testAutoSnapshot() throws Exception {
final Endpoint addr = new Endpoint(TestUtils.getMyIp(), TestUtils.INIT_PORT);
NodeManager.getInstance().addAddress(addr);
final NodeOptions nodeOptions = createNodeOptionsWithSharedTimer();
final MockStateMachine fsm = new MockStateMachine(addr);
nodeOptions.setFsm(fsm);
nodeOptions.setLogUri(this.dataPath + File.separator + "log");
nodeOptions.setSnapshotUri(this.dataPath + File.separator + "snapshot");
nodeOptions.setRaftMetaUri(this.dataPath + File.separator + "meta");
nodeOptions.setSnapshotIntervalSecs(10);
nodeOptions.setInitialConf(new Configuration(Collections.singletonList(new PeerId(addr, 0))));
final Node node = new NodeImpl("unittest", new PeerId(addr, 0));
assertTrue(node.init(nodeOptions));
// wait node elect self as leader
Thread.sleep(2000);
sendTestTaskAndWait(node);
// wait for auto snapshot
Thread.sleep(10000);
// first snapshot will be triggered randomly
final int times = fsm.getSaveSnapshotTimes();
assertTrue("snapshotTimes=" + times, times >= 1);
assertTrue(fsm.getSnapshotIndex() > 0);
final CountDownLatch latch = new CountDownLatch(1);
node.shutdown(new ExpectClosure(latch));
node.join();
waitLatch(latch);
}
use of com.alipay.sofa.jraft.util.Endpoint in project sofa-jraft by sofastack.
the class NodeTest method testFollowerStartStopFollowing.
@Test
public void testFollowerStartStopFollowing() throws Exception {
// start five nodes
final List<PeerId> peers = TestUtils.generatePeers(5);
final TestCluster cluster = new TestCluster("unitest", this.dataPath, peers, 1000);
for (final PeerId peer : peers) {
assertTrue(cluster.start(peer.getEndpoint()));
}
cluster.waitLeader();
final Node firstLeader = cluster.getLeader();
assertNotNull(firstLeader);
// apply something
this.sendTestTaskAndWait(firstLeader);
// assert follow times
final List<Node> firstFollowers = cluster.getFollowers();
assertEquals(4, firstFollowers.size());
for (final Node node : firstFollowers) {
assertEquals(1, ((MockStateMachine) node.getOptions().getFsm()).getOnStartFollowingTimes());
assertEquals(0, ((MockStateMachine) node.getOptions().getFsm()).getOnStopFollowingTimes());
}
// stop leader and elect new one
final Endpoint fstLeaderAddr = firstLeader.getNodeId().getPeerId().getEndpoint();
assertTrue(cluster.stop(fstLeaderAddr));
cluster.waitLeader();
final Node secondLeader = cluster.getLeader();
assertNotNull(secondLeader);
this.sendTestTaskAndWait(secondLeader, 10, RaftError.SUCCESS);
// ensure start/stop following times
final List<Node> secondFollowers = cluster.getFollowers();
assertEquals(3, secondFollowers.size());
for (final Node node : secondFollowers) {
assertEquals(2, ((MockStateMachine) node.getOptions().getFsm()).getOnStartFollowingTimes());
assertEquals(1, ((MockStateMachine) node.getOptions().getFsm()).getOnStopFollowingTimes());
}
// transfer leadership to a follower
final PeerId targetPeer = secondFollowers.get(0).getNodeId().getPeerId().copy();
assertTrue(secondLeader.transferLeadershipTo(targetPeer).isOk());
Thread.sleep(100);
cluster.waitLeader();
final Node thirdLeader = cluster.getLeader();
Assert.assertEquals(targetPeer, thirdLeader.getNodeId().getPeerId());
this.sendTestTaskAndWait(thirdLeader, 20, RaftError.SUCCESS);
final List<Node> thirdFollowers = cluster.getFollowers();
assertEquals(3, thirdFollowers.size());
for (int i = 0; i < 3; i++) {
if (thirdFollowers.get(i).getNodeId().getPeerId().equals(secondLeader.getNodeId().getPeerId())) {
assertEquals(2, ((MockStateMachine) thirdFollowers.get(i).getOptions().getFsm()).getOnStartFollowingTimes());
assertEquals(1, ((MockStateMachine) thirdFollowers.get(i).getOptions().getFsm()).getOnStopFollowingTimes());
continue;
}
assertEquals(3, ((MockStateMachine) thirdFollowers.get(i).getOptions().getFsm()).getOnStartFollowingTimes());
assertEquals(2, ((MockStateMachine) thirdFollowers.get(i).getOptions().getFsm()).getOnStopFollowingTimes());
}
cluster.ensureSame();
cluster.stopAll();
}
Aggregations