Search in sources :

Example 96 with Status

use of org.apache.ignite.raft.jraft.Status in project ignite-3 by apache.

the class LogManagerTest method testAppendOneEntry.

@Test
public void testAppendOneEntry() throws Exception {
    final CountDownLatch latch = new CountDownLatch(1);
    final LogEntry entry = TestUtils.mockEntry(1, 1);
    final List<LogEntry> entries = new ArrayList<>();
    entries.add(entry);
    this.logManager.appendEntries(entries, new LogManager.StableClosure() {

        @Override
        public void run(final Status status) {
            assertTrue(status.isOk());
            latch.countDown();
        }
    });
    latch.await();
    assertEquals(1, this.logManager.getFirstLogIndex());
    assertEquals(1, this.logManager.getLastLogIndex());
    assertEquals(entry, this.logManager.getEntry(1));
    assertEquals(1, this.logManager.getLastLogIndex(true));
    LogId lastLogId = this.logManager.getLastLogId(true);
    assertEquals(1, lastLogId.getIndex());
    lastLogId = this.logManager.getLastLogId(false);
    assertEquals(1, lastLogId.getIndex());
    assertTrue(this.logManager.checkConsistency().isOk());
}
Also used : Status(org.apache.ignite.raft.jraft.Status) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) LogManager(org.apache.ignite.raft.jraft.storage.LogManager) LogId(org.apache.ignite.raft.jraft.entity.LogId) LogEntry(org.apache.ignite.raft.jraft.entity.LogEntry) BaseStorageTest(org.apache.ignite.raft.jraft.storage.BaseStorageTest) Test(org.junit.jupiter.api.Test)

Example 97 with Status

use of org.apache.ignite.raft.jraft.Status in project ignite-3 by apache.

the class LogManagerTest method mockAddEntries.

private List<LogEntry> mockAddEntries() throws InterruptedException {
    final CountDownLatch latch = new CountDownLatch(1);
    final List<LogEntry> mockEntries = TestUtils.mockEntries(10);
    this.logManager.appendEntries(new ArrayList<>(mockEntries), new LogManager.StableClosure() {

        @Override
        public void run(final Status status) {
            assertTrue(status.isOk());
            latch.countDown();
        }
    });
    latch.await();
    return mockEntries;
}
Also used : Status(org.apache.ignite.raft.jraft.Status) CountDownLatch(java.util.concurrent.CountDownLatch) LogManager(org.apache.ignite.raft.jraft.storage.LogManager) LogEntry(org.apache.ignite.raft.jraft.entity.LogEntry)

Example 98 with Status

use of org.apache.ignite.raft.jraft.Status in project ignite-3 by apache.

the class LogManagerTest method testGetConfiguration.

@Test
public void testGetConfiguration() throws Exception {
    assertTrue(this.logManager.getConfiguration(1).isEmpty());
    final List<LogEntry> entries = new ArrayList<>(2);
    final LogEntry confEntry1 = new LogEntry(EnumOutter.EntryType.ENTRY_TYPE_CONFIGURATION);
    confEntry1.setId(new LogId(0, 1));
    confEntry1.setPeers(JRaftUtils.getConfiguration("localhost:8081,localhost:8082").listPeers());
    final LogEntry confEntry2 = new LogEntry(EnumOutter.EntryType.ENTRY_TYPE_CONFIGURATION);
    confEntry2.setId(new LogId(0, 2));
    confEntry2.setPeers(JRaftUtils.getConfiguration("localhost:8081,localhost:8082,localhost:8083").listPeers());
    confEntry2.setOldPeers(confEntry1.getPeers());
    entries.add(confEntry1);
    entries.add(confEntry2);
    final CountDownLatch latch = new CountDownLatch(1);
    this.logManager.appendEntries(new ArrayList<>(entries), new LogManager.StableClosure() {

        @Override
        public void run(final Status status) {
            assertTrue(status.isOk());
            latch.countDown();
        }
    });
    latch.await();
    ConfigurationEntry entry = this.logManager.getConfiguration(1);
    assertEquals("localhost:8081,localhost:8082", entry.getConf().toString());
    assertTrue(entry.getOldConf().isEmpty());
    entry = this.logManager.getConfiguration(2);
    assertEquals("localhost:8081,localhost:8082,localhost:8083", entry.getConf().toString());
    assertEquals("localhost:8081,localhost:8082", entry.getOldConf().toString());
}
Also used : Status(org.apache.ignite.raft.jraft.Status) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) LogId(org.apache.ignite.raft.jraft.entity.LogId) LogManager(org.apache.ignite.raft.jraft.storage.LogManager) ConfigurationEntry(org.apache.ignite.raft.jraft.conf.ConfigurationEntry) LogEntry(org.apache.ignite.raft.jraft.entity.LogEntry) BaseStorageTest(org.apache.ignite.raft.jraft.storage.BaseStorageTest) Test(org.junit.jupiter.api.Test)

Example 99 with Status

use of org.apache.ignite.raft.jraft.Status in project ignite-3 by apache.

the class LogManagerTest method testAppendEntresConflicts.

@Test
public void testAppendEntresConflicts() throws Exception {
    // Append 0-10
    List<LogEntry> mockEntries = TestUtils.mockEntries(10);
    for (int i = 0; i < 10; i++) {
        mockEntries.get(i).getId().setTerm(1);
    }
    final CountDownLatch latch1 = new CountDownLatch(1);
    this.logManager.appendEntries(new ArrayList<>(mockEntries), new LogManager.StableClosure() {

        @Override
        public void run(final Status status) {
            assertTrue(status.isOk());
            latch1.countDown();
        }
    });
    latch1.await();
    assertEquals(1, this.logManager.getFirstLogIndex());
    assertEquals(10, this.logManager.getLastLogIndex());
    // Append 11-20
    final CountDownLatch latch2 = new CountDownLatch(1);
    mockEntries = TestUtils.mockEntries(10);
    for (int i = 0; i < 10; i++) {
        mockEntries.get(i).getId().setIndex(11 + i);
        mockEntries.get(i).getId().setTerm(1);
    }
    this.logManager.appendEntries(new ArrayList<>(mockEntries), new LogManager.StableClosure() {

        @Override
        public void run(final Status status) {
            assertTrue(status.isOk());
            latch2.countDown();
        }
    });
    latch2.await();
    assertEquals(1, this.logManager.getFirstLogIndex());
    assertEquals(20, this.logManager.getLastLogIndex());
    // Re-adds 11-30, but 15 has different term, it will truncate [14,lastIndex] logs
    mockEntries = TestUtils.mockEntries(20);
    for (int i = 0; i < 20; i++) {
        if (11 + i >= 15) {
            mockEntries.get(i).getId().setTerm(2);
        } else {
            mockEntries.get(i).getId().setTerm(1);
        }
        mockEntries.get(i).getId().setIndex(11 + i);
    }
    final CountDownLatch latch3 = new CountDownLatch(1);
    this.logManager.appendEntries(new ArrayList<>(mockEntries), new LogManager.StableClosure() {

        @Override
        public void run(final Status status) {
            assertTrue(status.isOk());
            latch3.countDown();
        }
    });
    latch3.await();
    assertEquals(1, this.logManager.getFirstLogIndex());
    assertEquals(30, this.logManager.getLastLogIndex());
    for (int i = 0; i < 30; i++) {
        final LogEntry entry = (this.logManager.getEntry(i + 1));
        assertEquals(i + 1, entry.getId().getIndex());
        if (i + 1 >= 15) {
            assertEquals(2, entry.getId().getTerm());
        } else {
            assertEquals(1, entry.getId().getTerm());
        }
    }
}
Also used : Status(org.apache.ignite.raft.jraft.Status) CountDownLatch(java.util.concurrent.CountDownLatch) LogManager(org.apache.ignite.raft.jraft.storage.LogManager) LogEntry(org.apache.ignite.raft.jraft.entity.LogEntry) BaseStorageTest(org.apache.ignite.raft.jraft.storage.BaseStorageTest) Test(org.junit.jupiter.api.Test)

Example 100 with Status

use of org.apache.ignite.raft.jraft.Status in project ignite-3 by apache.

the class UtilsTest method testRunClosure.

@Test
public void testRunClosure() throws Exception {
    CountDownLatch latch = new CountDownLatch(1);
    Utils.runClosureInExecutor(executor, new Closure() {

        @Override
        public void run(Status status) {
            assertTrue(status.isOk());
            latch.countDown();
        }
    });
    latch.await();
}
Also used : Status(org.apache.ignite.raft.jraft.Status) Closure(org.apache.ignite.raft.jraft.Closure) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.jupiter.api.Test)

Aggregations

Status (org.apache.ignite.raft.jraft.Status)121 Test (org.junit.jupiter.api.Test)49 PeerId (org.apache.ignite.raft.jraft.entity.PeerId)43 CountDownLatch (java.util.concurrent.CountDownLatch)31 Message (org.apache.ignite.raft.jraft.rpc.Message)21 ArrayList (java.util.ArrayList)20 Node (org.apache.ignite.raft.jraft.Node)20 Configuration (org.apache.ignite.raft.jraft.conf.Configuration)20 ReadIndexClosure (org.apache.ignite.raft.jraft.closure.ReadIndexClosure)16 LogId (org.apache.ignite.raft.jraft.entity.LogId)14 RaftException (org.apache.ignite.raft.jraft.error.RaftException)14 LogEntry (org.apache.ignite.raft.jraft.entity.LogEntry)11 JRaftException (org.apache.ignite.raft.jraft.error.JRaftException)11 SynchronizedClosure (org.apache.ignite.raft.jraft.closure.SynchronizedClosure)10 Endpoint (org.apache.ignite.raft.jraft.util.Endpoint)10 ByteBuffer (java.nio.ByteBuffer)9 List (java.util.List)9 ConfigurationEntry (org.apache.ignite.raft.jraft.conf.ConfigurationEntry)9 Task (org.apache.ignite.raft.jraft.entity.Task)8 RaftOptions (org.apache.ignite.raft.jraft.option.RaftOptions)8