use of com.alipay.sofa.jraft.option.NodeOptions 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.option.NodeOptions 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.option.NodeOptions 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.option.NodeOptions 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.option.NodeOptions in project sofa-jraft by sofastack.
the class NodeTest method testInitShutdown.
@Test
public void testInitShutdown() throws Exception {
final Endpoint addr = new Endpoint(TestUtils.getMyIp(), TestUtils.INIT_PORT);
NodeManager.getInstance().addAddress(addr);
final NodeOptions nodeOptions = new NodeOptions();
nodeOptions.setFsm(new MockStateMachine(addr));
nodeOptions.setLogUri(this.dataPath + File.separator + "log");
nodeOptions.setRaftMetaUri(this.dataPath + File.separator + "meta");
nodeOptions.setSnapshotUri(this.dataPath + File.separator + "snapshot");
final Node node = new NodeImpl("unittest", new PeerId(addr, 0));
assertTrue(node.init(nodeOptions));
node.shutdown();
node.join();
}
Aggregations