Search in sources :

Example 16 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class FailureDetectorTest method testMemberStatusChangeAfterNetworkRecovery.

@Test
public void testMemberStatusChangeAfterNetworkRecovery() throws Exception {
    // Create transports
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    List<Address> members = Arrays.asList(a.address(), b.address());
    // Create failure detectors
    FailureDetectorImpl fd_a = createFD(a, members);
    FailureDetectorImpl fd_b = createFD(b, members);
    List<FailureDetectorImpl> fdetectors = Arrays.asList(fd_a, fd_b);
    // Traffic is blocked initially on both sides: A--X-->B, B--X-->A
    a.networkEmulator().block(b.address());
    b.networkEmulator().block(a.address());
    Future<List<FailureDetectorEvent>> list_a = listenNextEventFor(fd_a, members);
    Future<List<FailureDetectorEvent>> list_b = listenNextEventFor(fd_b, members);
    try {
        start(fdetectors);
        assertStatus(a.address(), SUSPECT, awaitEvents(list_a), b.address());
        assertStatus(b.address(), SUSPECT, awaitEvents(list_b), a.address());
        // Unblock A and B members: A-->B, B-->A
        a.networkEmulator().unblockAll();
        b.networkEmulator().unblockAll();
        TimeUnit.SECONDS.sleep(2);
        // Check that members recover
        list_a = listenNextEventFor(fd_a, members);
        list_b = listenNextEventFor(fd_b, members);
        assertStatus(a.address(), ALIVE, awaitEvents(list_a), b.address());
        assertStatus(b.address(), ALIVE, awaitEvents(list_b), a.address());
    } finally {
        stop(fdetectors);
    }
}
Also used : Address(io.scalecube.transport.Address) ArrayList(java.util.ArrayList) List(java.util.List) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 17 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class FailureDetectorTest method testStatusChangeAfterMemberRestart.

@Test
public void testStatusChangeAfterMemberRestart() throws Exception {
    // Create transports
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport x = Transport.bindAwait(true);
    List<Address> members = Arrays.asList(a.address(), b.address(), x.address());
    // Create failure detectors
    FailureDetectorImpl fd_a = createFD(a, members);
    FailureDetectorImpl fd_b = createFD(b, members);
    FailureDetectorImpl fd_x = createFD(x, members);
    List<FailureDetectorImpl> fdetectors = Arrays.asList(fd_a, fd_b, fd_x);
    Future<List<FailureDetectorEvent>> list_a = listenNextEventFor(fd_a, members);
    Future<List<FailureDetectorEvent>> list_b = listenNextEventFor(fd_b, members);
    Future<List<FailureDetectorEvent>> list_x = listenNextEventFor(fd_x, members);
    // Restarted member attributes are not initialized
    Transport xx;
    FailureDetectorImpl fd_xx;
    try {
        start(fdetectors);
        assertStatus(a.address(), ALIVE, awaitEvents(list_a), b.address(), x.address());
        assertStatus(b.address(), ALIVE, awaitEvents(list_b), a.address(), x.address());
        assertStatus(x.address(), ALIVE, awaitEvents(list_x), a.address(), b.address());
        // stop node X
        stop(Lists.newArrayList(fd_x));
        TimeUnit.SECONDS.sleep(2);
        // restart node X as XX
        xx = Transport.bindAwait(TransportConfig.builder().port(x.address().port()).portAutoIncrement(false).useNetworkEmulator(true).build());
        assertEquals(x.address(), xx.address());
        fdetectors = Arrays.asList(fd_a, fd_b, fd_xx = createFD(xx, members));
        // actual restart here
        fd_xx.start();
        TimeUnit.SECONDS.sleep(2);
        list_a = listenNextEventFor(fd_a, members);
        list_b = listenNextEventFor(fd_b, members);
        Future<List<FailureDetectorEvent>> list_xx = listenNextEventFor(fd_xx, members);
        // TODO [AK]: It would be more correct to consider restarted member as a new member, so x is still suspected!
        assertStatus(a.address(), ALIVE, awaitEvents(list_a), b.address(), xx.address());
        assertStatus(b.address(), ALIVE, awaitEvents(list_b), a.address(), xx.address());
        assertStatus(xx.address(), ALIVE, awaitEvents(list_xx), a.address(), b.address());
    } finally {
        stop(fdetectors);
    }
}
Also used : Address(io.scalecube.transport.Address) ArrayList(java.util.ArrayList) List(java.util.List) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 18 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class FailureDetectorTest method testTrusted.

@Test
public void testTrusted() {
    // Create transports
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport c = Transport.bindAwait(true);
    List<Address> members = Arrays.asList(a.address(), b.address(), c.address());
    // Create failure detectors
    FailureDetectorImpl fd_a = createFD(a, members);
    FailureDetectorImpl fd_b = createFD(b, members);
    FailureDetectorImpl fd_c = createFD(c, members);
    List<FailureDetectorImpl> fdetectors = Arrays.asList(fd_a, fd_b, fd_c);
    try {
        start(fdetectors);
        Future<List<FailureDetectorEvent>> list_a = listenNextEventFor(fd_a, members);
        Future<List<FailureDetectorEvent>> list_b = listenNextEventFor(fd_b, members);
        Future<List<FailureDetectorEvent>> list_c = listenNextEventFor(fd_c, members);
        assertStatus(a.address(), ALIVE, awaitEvents(list_a), b.address(), c.address());
        assertStatus(b.address(), ALIVE, awaitEvents(list_b), a.address(), c.address());
        assertStatus(c.address(), ALIVE, awaitEvents(list_c), a.address(), b.address());
    } finally {
        stop(fdetectors);
    }
}
Also used : Address(io.scalecube.transport.Address) ArrayList(java.util.ArrayList) List(java.util.List) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 19 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class FailureDetectorTest method testSuspected.

@Test
public void testSuspected() {
    // Create transports
    Transport a = Transport.bindAwait(true);
    Transport b = Transport.bindAwait(true);
    Transport c = Transport.bindAwait(true);
    List<Address> members = Arrays.asList(a.address(), b.address(), c.address());
    // Create failure detectors
    FailureDetectorImpl fd_a = createFD(a, members);
    FailureDetectorImpl fd_b = createFD(b, members);
    FailureDetectorImpl fd_c = createFD(c, members);
    List<FailureDetectorImpl> fdetectors = Arrays.asList(fd_a, fd_b, fd_c);
    // block all traffic
    a.networkEmulator().block(members);
    b.networkEmulator().block(members);
    c.networkEmulator().block(members);
    try {
        start(fdetectors);
        Future<List<FailureDetectorEvent>> list_a = listenNextEventFor(fd_a, members);
        Future<List<FailureDetectorEvent>> list_b = listenNextEventFor(fd_b, members);
        Future<List<FailureDetectorEvent>> list_c = listenNextEventFor(fd_c, members);
        assertStatus(a.address(), SUSPECT, awaitEvents(list_a), b.address(), c.address());
        assertStatus(b.address(), SUSPECT, awaitEvents(list_b), a.address(), c.address());
        assertStatus(c.address(), SUSPECT, awaitEvents(list_c), a.address(), b.address());
    } finally {
        a.networkEmulator().unblockAll();
        b.networkEmulator().unblockAll();
        c.networkEmulator().unblockAll();
        stop(fdetectors);
    }
}
Also used : Address(io.scalecube.transport.Address) ArrayList(java.util.ArrayList) List(java.util.List) Transport(io.scalecube.transport.Transport) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Example 20 with Transport

use of io.scalecube.transport.Transport in project scalecube by scalecube.

the class GossipProtocolTest method computeMessageSentStats.

private LongSummaryStatistics computeMessageSentStats(List<GossipProtocolImpl> gossipProtocols) {
    List<Long> messageSentPerNode = new ArrayList<>(gossipProtocols.size());
    for (GossipProtocolImpl gossipProtocol : gossipProtocols) {
        Transport transport = gossipProtocol.getTransport();
        messageSentPerNode.add(transport.networkEmulator().totalMessageSentCount());
    }
    return messageSentPerNode.stream().mapToLong(v -> v).summaryStatistics();
}
Also used : Arrays(java.util.Arrays) Address(io.scalecube.transport.Address) MembershipProtocol(io.scalecube.cluster.membership.MembershipProtocol) RunWith(org.junit.runner.RunWith) LoggerFactory(org.slf4j.LoggerFactory) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) CompletableFuture(java.util.concurrent.CompletableFuture) ArrayList(java.util.ArrayList) ClusterConfig(io.scalecube.cluster.ClusterConfig) ClusterMath.maxMessagesPerGossipTotal(io.scalecube.cluster.ClusterMath.maxMessagesPerGossipTotal) Map(java.util.Map) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) Transport(io.scalecube.transport.Transport) Message(io.scalecube.transport.Message) DummyMembershipProtocol(io.scalecube.cluster.membership.DummyMembershipProtocol) BaseTest(io.scalecube.testlib.BaseTest) ClusterMath.gossipConvergencePercent(io.scalecube.cluster.ClusterMath.gossipConvergencePercent) Parameterized(org.junit.runners.Parameterized) LongSummaryStatistics(java.util.LongSummaryStatistics) ClusterMath(io.scalecube.cluster.ClusterMath) Logger(org.slf4j.Logger) ClusterMath.maxMessagesPerGossipPerNode(io.scalecube.cluster.ClusterMath.maxMessagesPerGossipPerNode) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Test(org.junit.Test) TimeUnit(java.util.concurrent.TimeUnit) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) Member(io.scalecube.cluster.Member) TransportConfig(io.scalecube.transport.TransportConfig) Assert(org.junit.Assert) ClusterMath.gossipDisseminationTime(io.scalecube.cluster.ClusterMath.gossipDisseminationTime) ArrayList(java.util.ArrayList) Transport(io.scalecube.transport.Transport)

Aggregations

Transport (io.scalecube.transport.Transport)25 BaseTest (io.scalecube.testlib.BaseTest)21 Test (org.junit.Test)21 Address (io.scalecube.transport.Address)20 ArrayList (java.util.ArrayList)13 List (java.util.List)10 InetAddress (java.net.InetAddress)8 CompletableFuture (java.util.concurrent.CompletableFuture)4 Message (io.scalecube.transport.Message)3 TransportConfig (io.scalecube.transport.TransportConfig)3 Map (java.util.Map)3 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 ClusterConfig (io.scalecube.cluster.ClusterConfig)2 ClusterMath (io.scalecube.cluster.ClusterMath)2 ClusterMath.gossipConvergencePercent (io.scalecube.cluster.ClusterMath.gossipConvergencePercent)2 ClusterMath.gossipDisseminationTime (io.scalecube.cluster.ClusterMath.gossipDisseminationTime)2 ClusterMath.maxMessagesPerGossipPerNode (io.scalecube.cluster.ClusterMath.maxMessagesPerGossipPerNode)2 ClusterMath.maxMessagesPerGossipTotal (io.scalecube.cluster.ClusterMath.maxMessagesPerGossipTotal)2