Search in sources :

Example 31 with Status

use of com.alipay.sofa.jraft.Status in project sofa-jraft by sofastack.

the class DefaultRegionKVService method handleResetSequence.

@Override
public void handleResetSequence(final ResetSequenceRequest request, final RequestProcessClosure<BaseRequest, BaseResponse<?>> closure) {
    final ResetSequenceResponse response = new ResetSequenceResponse();
    response.setRegionId(getRegionId());
    response.setRegionEpoch(getRegionEpoch());
    try {
        KVParameterRequires.requireSameEpoch(request, getRegionEpoch());
        final byte[] seqKey = KVParameterRequires.requireNonNull(request.getSeqKey(), "sequence.seqKey");
        this.rawKVStore.resetSequence(seqKey, new BaseKVStoreClosure() {

            @Override
            public void run(final Status status) {
                if (status.isOk()) {
                    response.setValue((Boolean) getData());
                } else {
                    setFailure(request, response, status, getError());
                }
                closure.sendResponse(response);
            }
        });
    } catch (final Throwable t) {
        LOG.error("Failed to handle: {}, {}.", request, StackTraceUtil.stackTrace(t));
        response.setError(Errors.forException(t));
        closure.sendResponse(response);
    }
}
Also used : Status(com.alipay.sofa.jraft.Status) BaseKVStoreClosure(com.alipay.sofa.jraft.rhea.storage.BaseKVStoreClosure) ResetSequenceResponse(com.alipay.sofa.jraft.rhea.cmd.store.ResetSequenceResponse)

Example 32 with Status

use of com.alipay.sofa.jraft.Status in project sofa-jraft by sofastack.

the class NodeTest method testTripleNodes.

@Test
public void testTripleNodes() throws Exception {
    final List<PeerId> peers = TestUtils.generatePeers(3);
    final TestCluster cluster = new TestCluster("unittest", this.dataPath, peers);
    for (final PeerId peer : peers) {
        assertTrue(cluster.start(peer.getEndpoint()));
    }
    // elect leader
    cluster.waitLeader();
    // get leader
    final Node leader = cluster.getLeader();
    assertNotNull(leader);
    assertEquals(3, leader.listPeers().size());
    // apply tasks to leader
    this.sendTestTaskAndWait(leader);
    {
        final ByteBuffer data = ByteBuffer.wrap("no closure".getBytes());
        final Task task = new Task(data, null);
        leader.apply(task);
    }
    {
        // task with TaskClosure
        final ByteBuffer data = ByteBuffer.wrap("task closure".getBytes());
        final Vector<String> cbs = new Vector<>();
        final CountDownLatch latch = new CountDownLatch(1);
        final Task task = new Task(data, new TaskClosure() {

            @Override
            public void run(final Status status) {
                cbs.add("apply");
                latch.countDown();
            }

            @Override
            public void onCommitted() {
                cbs.add("commit");
            }
        });
        leader.apply(task);
        latch.await();
        assertEquals(2, cbs.size());
        assertEquals("commit", cbs.get(0));
        assertEquals("apply", cbs.get(1));
    }
    cluster.ensureSame(-1);
    assertEquals(2, cluster.getFollowers().size());
    cluster.stopAll();
}
Also used : Status(com.alipay.sofa.jraft.Status) Task(com.alipay.sofa.jraft.entity.Task) Node(com.alipay.sofa.jraft.Node) CountDownLatch(java.util.concurrent.CountDownLatch) ByteBuffer(java.nio.ByteBuffer) Vector(java.util.Vector) PeerId(com.alipay.sofa.jraft.entity.PeerId) TaskClosure(com.alipay.sofa.jraft.closure.TaskClosure) Test(org.junit.Test)

Example 33 with Status

use of com.alipay.sofa.jraft.Status in project sofa-jraft by sofastack.

the class NodeTest method testReadIndex.

@Test
public void testReadIndex() throws Exception {
    final List<PeerId> peers = TestUtils.generatePeers(3);
    final TestCluster cluster = new TestCluster("unittest", this.dataPath, peers);
    for (final PeerId peer : peers) {
        assertTrue(cluster.start(peer.getEndpoint(), false, 300, true));
    }
    // elect leader
    cluster.waitLeader();
    // get leader
    final Node leader = cluster.getLeader();
    assertNotNull(leader);
    assertEquals(3, leader.listPeers().size());
    // apply tasks to leader
    this.sendTestTaskAndWait(leader);
    // first call will fail-fast when no connection
    if (!assertReadIndex(leader, 11)) {
        assertTrue(assertReadIndex(leader, 11));
    }
    // read from follower
    for (final Node follower : cluster.getFollowers()) {
        assertNotNull(follower);
        assertReadIndex(follower, 11);
    }
    // read with null request context
    final CountDownLatch latch = new CountDownLatch(1);
    leader.readIndex(null, new ReadIndexClosure() {

        @Override
        public void run(final Status status, final long index, final byte[] reqCtx) {
            assertNull(reqCtx);
            assertTrue(status.isOk());
            latch.countDown();
        }
    });
    latch.await();
    cluster.stopAll();
}
Also used : Status(com.alipay.sofa.jraft.Status) ReadIndexClosure(com.alipay.sofa.jraft.closure.ReadIndexClosure) Node(com.alipay.sofa.jraft.Node) CountDownLatch(java.util.concurrent.CountDownLatch) PeerId(com.alipay.sofa.jraft.entity.PeerId) Test(org.junit.Test)

Example 34 with Status

use of com.alipay.sofa.jraft.Status in project sofa-jraft by sofastack.

the class NodeTest method testNodeTaskOverload.

@Test
public void testNodeTaskOverload() throws Exception {
    final Endpoint addr = new Endpoint(TestUtils.getMyIp(), TestUtils.INIT_PORT);
    final PeerId peer = new PeerId(addr, 0);
    NodeManager.getInstance().addAddress(addr);
    final NodeOptions nodeOptions = createNodeOptionsWithSharedTimer();
    final RaftOptions raftOptions = new RaftOptions();
    raftOptions.setDisruptorBufferSize(2);
    nodeOptions.setRaftOptions(raftOptions);
    final MockStateMachine fsm = new MockStateMachine(addr);
    nodeOptions.setFsm(fsm);
    nodeOptions.setLogUri(this.dataPath + File.separator + "log");
    nodeOptions.setRaftMetaUri(this.dataPath + File.separator + "meta");
    nodeOptions.setSnapshotUri(this.dataPath + File.separator + "snapshot");
    nodeOptions.setInitialConf(new Configuration(Collections.singletonList(peer)));
    final Node node = new NodeImpl("unittest", peer);
    assertTrue(node.init(nodeOptions));
    assertEquals(1, node.listPeers().size());
    assertTrue(node.listPeers().contains(peer));
    while (!node.isLeader()) {
        ;
    }
    final List<Task> tasks = new ArrayList<>();
    final AtomicInteger c = new AtomicInteger(0);
    for (int i = 0; i < 10; i++) {
        final ByteBuffer data = ByteBuffer.wrap(("hello" + i).getBytes());
        final Task task = new Task(data, new JoinableClosure(status -> {
            System.out.println(status);
            if (!status.isOk()) {
                assertTrue(status.getRaftError() == RaftError.EBUSY || status.getRaftError() == RaftError.EPERM);
            }
            c.incrementAndGet();
        }));
        node.apply(task);
        tasks.add(task);
    }
    try {
        Task.joinAll(tasks, TimeUnit.SECONDS.toMillis(30));
        assertEquals(10, c.get());
    } finally {
        node.shutdown();
        node.join();
    }
}
Also used : Arrays(java.util.Arrays) RaftOptions(com.alipay.sofa.jraft.option.RaftOptions) Assert.assertNotSame(org.junit.Assert.assertNotSame) LoggerFactory(org.slf4j.LoggerFactory) ByteBuffer(java.nio.ByteBuffer) Future(java.util.concurrent.Future) Vector(java.util.Vector) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) After(org.junit.After) TestUtils(com.alipay.sofa.jraft.test.TestUtils) Endpoint(com.alipay.sofa.jraft.util.Endpoint) Assert.fail(org.junit.Assert.fail) AfterClass(org.junit.AfterClass) PeerId(com.alipay.sofa.jraft.entity.PeerId) Configuration(com.alipay.sofa.jraft.conf.Configuration) StateMachine(com.alipay.sofa.jraft.StateMachine) SynchronizedClosure(com.alipay.sofa.jraft.closure.SynchronizedClosure) RpcServer(com.alipay.sofa.jraft.rpc.RpcServer) BootstrapOptions(com.alipay.sofa.jraft.option.BootstrapOptions) Set(java.util.Set) ReadIndexClosure(com.alipay.sofa.jraft.closure.ReadIndexClosure) SnapshotThrottle(com.alipay.sofa.jraft.storage.SnapshotThrottle) JRaftUtils(com.alipay.sofa.jraft.JRaftUtils) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) RaftGroupService(com.alipay.sofa.jraft.RaftGroupService) Assert.assertFalse(org.junit.Assert.assertFalse) RaftException(com.alipay.sofa.jraft.error.RaftException) LogIndexOutOfBoundsException(com.alipay.sofa.jraft.error.LogIndexOutOfBoundsException) ThroughputSnapshotThrottle(com.alipay.sofa.jraft.storage.snapshot.ThroughputSnapshotThrottle) UserLog(com.alipay.sofa.jraft.entity.UserLog) BeforeClass(org.junit.BeforeClass) JoinableClosure(com.alipay.sofa.jraft.closure.JoinableClosure) Bits(com.alipay.sofa.jraft.util.Bits) LogNotFoundException(com.alipay.sofa.jraft.error.LogNotFoundException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Utils(com.alipay.sofa.jraft.util.Utils) EnumOutter(com.alipay.sofa.jraft.entity.EnumOutter) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Assert.assertSame(org.junit.Assert.assertSame) SizeUnit(org.rocksdb.util.SizeUnit) StorageOptionsFactory(com.alipay.sofa.jraft.util.StorageOptionsFactory) NodeManager(com.alipay.sofa.jraft.NodeManager) TestName(org.junit.rules.TestName) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) Assert.assertArrayEquals(org.junit.Assert.assertArrayEquals) RaftError(com.alipay.sofa.jraft.error.RaftError) TaskClosure(com.alipay.sofa.jraft.closure.TaskClosure) Iterator(com.alipay.sofa.jraft.Iterator) LinkedHashSet(java.util.LinkedHashSet) Before(org.junit.Before) Logger(org.slf4j.Logger) Assert.assertNotNull(org.junit.Assert.assertNotNull) RaftRpcServerFactory(com.alipay.sofa.jraft.rpc.RaftRpcServerFactory) Assert.assertTrue(org.junit.Assert.assertTrue) FileUtils(org.apache.commons.io.FileUtils) Test(org.junit.Test) Status(com.alipay.sofa.jraft.Status) NodeOptions(com.alipay.sofa.jraft.option.NodeOptions) File(java.io.File) TimeUnit(java.util.concurrent.TimeUnit) Rule(org.junit.Rule) Task(com.alipay.sofa.jraft.entity.Task) Assert.assertNull(org.junit.Assert.assertNull) Node(com.alipay.sofa.jraft.Node) ConsoleReporter(com.codahale.metrics.ConsoleReporter) SnapshotReader(com.alipay.sofa.jraft.storage.snapshot.SnapshotReader) Assert(org.junit.Assert) RocksDBLogStorage(com.alipay.sofa.jraft.storage.impl.RocksDBLogStorage) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) RaftOptions(com.alipay.sofa.jraft.option.RaftOptions) Task(com.alipay.sofa.jraft.entity.Task) Configuration(com.alipay.sofa.jraft.conf.Configuration) Node(com.alipay.sofa.jraft.Node) ArrayList(java.util.ArrayList) NodeOptions(com.alipay.sofa.jraft.option.NodeOptions) ByteBuffer(java.nio.ByteBuffer) Endpoint(com.alipay.sofa.jraft.util.Endpoint) Endpoint(com.alipay.sofa.jraft.util.Endpoint) JoinableClosure(com.alipay.sofa.jraft.closure.JoinableClosure) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) PeerId(com.alipay.sofa.jraft.entity.PeerId) Test(org.junit.Test)

Example 35 with Status

use of com.alipay.sofa.jraft.Status in project sofa-jraft by sofastack.

the class NodeTest method testReadIndexChaos.

@Test
public void testReadIndexChaos() throws Exception {
    final List<PeerId> peers = TestUtils.generatePeers(3);
    final TestCluster cluster = new TestCluster("unittest", this.dataPath, peers);
    for (final PeerId peer : peers) {
        assertTrue(cluster.start(peer.getEndpoint(), false, 300, true));
    }
    // elect leader
    cluster.waitLeader();
    // get leader
    final Node leader = cluster.getLeader();
    assertNotNull(leader);
    assertEquals(3, leader.listPeers().size());
    final CountDownLatch latch = new CountDownLatch(10);
    for (int i = 0; i < 10; i++) {
        new Thread() {

            @Override
            public void run() {
                try {
                    for (int i = 0; i < 100; i++) {
                        try {
                            sendTestTaskAndWait(leader);
                        } catch (final InterruptedException e) {
                            Thread.currentThread().interrupt();
                        }
                        readIndexRandom(cluster);
                    }
                } finally {
                    latch.countDown();
                }
            }

            private void readIndexRandom(final TestCluster cluster) {
                final CountDownLatch readLatch = new CountDownLatch(1);
                final byte[] requestContext = TestUtils.getRandomBytes();
                cluster.getNodes().get(ThreadLocalRandom.current().nextInt(3)).readIndex(requestContext, new ReadIndexClosure() {

                    @Override
                    public void run(final Status status, final long index, final byte[] reqCtx) {
                        if (status.isOk()) {
                            assertTrue(status.toString(), status.isOk());
                            assertTrue(index > 0);
                            assertArrayEquals(requestContext, reqCtx);
                        }
                        readLatch.countDown();
                    }
                });
                try {
                    readLatch.await();
                } catch (final InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        }.start();
    }
    latch.await();
    cluster.ensureSame();
    for (final MockStateMachine fsm : cluster.getFsms()) {
        assertEquals(10000, fsm.getLogs().size());
    }
    cluster.stopAll();
}
Also used : Status(com.alipay.sofa.jraft.Status) ReadIndexClosure(com.alipay.sofa.jraft.closure.ReadIndexClosure) Node(com.alipay.sofa.jraft.Node) CountDownLatch(java.util.concurrent.CountDownLatch) Endpoint(com.alipay.sofa.jraft.util.Endpoint) PeerId(com.alipay.sofa.jraft.entity.PeerId) Test(org.junit.Test)

Aggregations

Status (com.alipay.sofa.jraft.Status)213 Test (org.junit.Test)63 PeerId (com.alipay.sofa.jraft.entity.PeerId)55 CountDownLatch (java.util.concurrent.CountDownLatch)36 BaseKVStoreClosure (com.alipay.sofa.jraft.rhea.storage.BaseKVStoreClosure)33 Configuration (com.alipay.sofa.jraft.conf.Configuration)25 Message (com.google.protobuf.Message)24 ReadIndexClosure (com.alipay.sofa.jraft.closure.ReadIndexClosure)22 ArrayList (java.util.ArrayList)22 Node (com.alipay.sofa.jraft.Node)21 Closure (com.alipay.sofa.jraft.Closure)17 Task (com.alipay.sofa.jraft.entity.Task)17 ByteBuffer (java.nio.ByteBuffer)16 Endpoint (com.alipay.sofa.jraft.util.Endpoint)15 List (java.util.List)15 RaftException (com.alipay.sofa.jraft.error.RaftException)14 LogEntry (com.alipay.sofa.jraft.entity.LogEntry)12 LogId (com.alipay.sofa.jraft.entity.LogId)12 KVStoreClosure (com.alipay.sofa.jraft.rhea.storage.KVStoreClosure)12 JRaftException (com.alipay.sofa.jraft.error.JRaftException)11