Ejemplo n.º 1
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldRespondNegativelyToAppendEntriesRequestFromEarlierTerm() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldRespondNegativelyToAppendEntriesRequestFromEarlierTerm()
        {
            // given
            long leaderTerm        = 5;
            long leaderCommitIndex = 10;
            long rivalTerm         = leaderTerm - 1;
            long logIndex          = 20;

            RaftLogEntry[] entries = new RaftLogEntry[] { new RaftLogEntry(rivalTerm, ReplicatedInteger.valueOf(99)) };

            Leader    leader = new Leader();
            RaftState state  = raftState().term(leaderTerm).commitIndex(leaderCommitIndex).build();

            // when
            Outcome outcome = leader.Handle(new Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request(_member1, rivalTerm, logIndex, leaderTerm, entries, leaderCommitIndex), state, Log());

            // then
            assertThat(outcome.Role, equalTo(LEADER));
            assertThat(outcome.Term, equalTo(leaderTerm));

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage response = messageFor(outcome, _member1);
            assertThat(response, instanceOf(typeof(Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response)));
            Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response typedResponse = (Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response)response;
            assertThat(typedResponse.Term(), equalTo(leaderTerm));
            assertThat(typedResponse.Success(), equalTo(false));
        }
Ejemplo n.º 2
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldStepDownIfAppendEntriesRequestFromLaterTerm() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldStepDownIfAppendEntriesRequestFromLaterTerm()
        {
            // given
            long leaderTerm        = 1;
            long leaderCommitIndex = 10;
            long rivalTerm         = leaderTerm + 1;
            long logIndex          = 20;

            RaftLogEntry[] entries = new RaftLogEntry[] { new RaftLogEntry(rivalTerm, ReplicatedInteger.valueOf(99)) };

            Leader    leader = new Leader();
            RaftState state  = raftState().term(leaderTerm).commitIndex(leaderCommitIndex).build();

            // when
            Outcome outcome = leader.Handle(new Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request(_member1, rivalTerm, logIndex, leaderTerm, entries, leaderCommitIndex), state, Log());

            // then
            assertThat(outcome.Role, equalTo(FOLLOWER));
            assertThat(outcome.Leader, equalTo(_member1));
            assertThat(outcome.Term, equalTo(rivalTerm));

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage response = messageFor(outcome, _member1);
            assertThat(response, instanceOf(typeof(Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response)));
            Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response typedResponse = (Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response)response;
            assertThat(typedResponse.Term(), equalTo(rivalTerm));
            // Not checking success or failure of append
        }
Ejemplo n.º 3
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldSendCompactionInfoIfFailureWithNoEarlierEntries() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldSendCompactionInfoIfFailureWithNoEarlierEntries()
        {
            // given
            Leader leader          = new Leader();
            long   term            = 1;
            long   leaderPrevIndex = 3;
            long   followerIndex   = leaderPrevIndex - 1;

            InMemoryRaftLog raftLog = new InMemoryRaftLog();

            raftLog.Skip(leaderPrevIndex, term);

            RaftState state = raftState().term(term).entryLog(raftLog).build();

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response incomingResponse = appendEntriesResponse().failure().term(term).appendIndex(followerIndex).from(_member1).build();

            // when
            Outcome outcome = leader.Handle(incomingResponse, state, Log());

            // then
            Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage outgoingMessage = messageFor(outcome, _member1);
            assertThat(outgoingMessage, instanceOf(typeof(Org.Neo4j.causalclustering.core.consensus.RaftMessages_LogCompactionInfo)));

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_LogCompactionInfo typedOutgoingMessage = (Org.Neo4j.causalclustering.core.consensus.RaftMessages_LogCompactionInfo)outgoingMessage;
            assertThat(typedOutgoingMessage.PrevIndex(), equalTo(leaderPrevIndex));
        }
Ejemplo n.º 4
0
        public override ClusterState Advance(ClusterState previous)
        {
            ClusterState newClusterState = new ClusterState(previous);
            LinkedList <Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage> inboundQueue = new LinkedList <Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage>(previous.Queues[_member]);

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message = inboundQueue.RemoveFirst();
            if (message == null)
            {
                return(previous);
            }

            newClusterState.Queues[_member] = inboundQueue;
            return(newClusterState);
        }
Ejemplo n.º 5
0
        public override ClusterState Advance(ClusterState previous)
        {
            ClusterState newClusterState = new ClusterState(previous);
            LinkedList <Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage> inboundQueue = new LinkedList <Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage>(previous.Queues[_member]);

            if (inboundQueue.Count < 2)
            {
                return(previous);
            }
            Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message = inboundQueue.RemoveFirst();
//JAVA TO C# CONVERTER TODO TASK: There is no .NET LinkedList equivalent to the 2-parameter Java 'add' method:
            inboundQueue.Add(1, message);

            newClusterState.Queues[_member] = inboundQueue;
            return(newClusterState);
        }
Ejemplo n.º 6
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public synchronized void encode(io.netty.channel.ChannelHandlerContext ctx, org.neo4j.causalclustering.core.consensus.RaftMessages_ClusterIdAwareMessage decoratedMessage, io.netty.buffer.ByteBuf out) throws Exception
        public override void Encode(ChannelHandlerContext ctx, Org.Neo4j.causalclustering.core.consensus.RaftMessages_ClusterIdAwareMessage decoratedMessage, ByteBuf @out)
        {
            lock (this)
            {
                Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message = decoratedMessage.message();
                ClusterId        clusterId     = decoratedMessage.clusterId();
                MemberId.Marshal memberMarshal = new MemberId.Marshal();

                NetworkWritableChannel channel = new NetworkWritableChannel(@out);
                ClusterId.Marshal.INSTANCE.marshal(clusterId, channel);
                channel.PutInt(message.Type().ordinal());
                memberMarshal.MarshalConflict(message.From(), channel);

                message.Dispatch(new Handler(_marshal, memberMarshal, channel));
            }
        }
Ejemplo n.º 7
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldSendNegativeResponseForVoteRequestFromTermNotGreaterThanLeader() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldSendNegativeResponseForVoteRequestFromTermNotGreaterThanLeader()
        {
            // given
            long leaderTerm        = 5;
            long leaderCommitIndex = 10;
            long rivalTerm         = leaderTerm - 1;

            Leader    leader = new Leader();
            RaftState state  = raftState().term(leaderTerm).commitIndex(leaderCommitIndex).build();

            // when
            Outcome outcome = leader.Handle(new Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Request(_member1, rivalTerm, _member1, leaderCommitIndex, leaderTerm), state, Log());

            // then
            assertThat(outcome.Role, equalTo(LEADER));
            assertThat(outcome.Term, equalTo(leaderTerm));

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage response = messageFor(outcome, _member1);
            assertThat(response, instanceOf(typeof(Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Response)));
            Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Response typedResponse = (Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Response)response;
            assertThat(typedResponse.VoteGranted(), equalTo(false));
        }
Ejemplo n.º 8
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private void serializeReadBackAndVerifyMessage(org.neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message) throws Exception
        private void SerializeReadBackAndVerifyMessage(Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message)
        {
            // Given
            Instant            now     = Instant.now();
            Clock              clock   = Clock.@fixed(now, ZoneOffset.UTC);
            RaftMessageEncoder encoder = new RaftMessageEncoder(marshal);
            RaftMessageDecoder decoder = new RaftMessageDecoder(marshal, clock);

            // Deserialization adds read objects in this list
            List <object> thingsRead = new List <object>(1);

            // When
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: org.neo4j.causalclustering.core.consensus.RaftMessages_ClusterIdAwareMessage<?> decoratedMessage = org.neo4j.causalclustering.core.consensus.RaftMessages_ReceivedInstantClusterIdAwareMessage.of(now, clusterId, message);
            Org.Neo4j.causalclustering.core.consensus.RaftMessages_ClusterIdAwareMessage <object> decoratedMessage = Org.Neo4j.causalclustering.core.consensus.RaftMessages_ReceivedInstantClusterIdAwareMessage.of(now, _clusterId, message);
            ChannelHandlerContext ctx = SetupContext();
            ByteBuf buffer            = null;

            try
            {
                buffer = ctx.alloc().buffer();
                encoder.Encode(ctx, decoratedMessage, buffer);

                // When
                decoder.Decode(null, buffer, thingsRead);

                // Then
                assertEquals(1, thingsRead.Count);
                assertEquals(decoratedMessage, thingsRead[0]);
            }
            finally
            {
                if (buffer != null)
                {
                    buffer.release();
                }
            }
        }
Ejemplo n.º 9
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldStepDownIfReceiveVoteRequestFromGreaterTermThanLeader() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldStepDownIfReceiveVoteRequestFromGreaterTermThanLeader()
        {
            // given
            long leaderTerm        = 1;
            long leaderCommitIndex = 10;
            long rivalTerm         = leaderTerm + 1;

            Leader    leader = new Leader();
            RaftState state  = raftState().term(leaderTerm).commitIndex(leaderCommitIndex).build();

            // when
            Outcome outcome = leader.Handle(new Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Request(_member1, rivalTerm, _member1, leaderCommitIndex, leaderTerm), state, Log());

            // then
            assertThat(outcome.Role, equalTo(FOLLOWER));
            assertThat(outcome.Leader, nullValue());
            assertThat(outcome.Term, equalTo(rivalTerm));

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage response = messageFor(outcome, _member1);
            assertThat(response, instanceOf(typeof(Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Response)));
            Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Response typedResponse = (Org.Neo4j.causalclustering.core.consensus.RaftMessages_Vote_Response)response;
            assertThat(typedResponse.VoteGranted(), equalTo(true));
        }
Ejemplo n.º 10
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private void raftMessageEquals(org.neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage raftMessage, org.neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message) throws Exception
        private void RaftMessageEquals(Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage raftMessage, Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message)
        {
            if (raftMessage is Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request)
            {
                assertEquals(message.From(), raftMessage.From());
                assertEquals(message.Type(), raftMessage.Type());
                ContentEquals(((Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request)raftMessage).Content(), ((Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request)raftMessage).Content());
            }
            else if (raftMessage is Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request)
            {
                assertEquals(message.From(), raftMessage.From());
                assertEquals(message.Type(), raftMessage.Type());
                RaftLogEntry[] entries1 = ((Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request)raftMessage).Entries();
                RaftLogEntry[] entries2 = ((Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Request)message).Entries();
                for (int i = 0; i < entries1.Length; i++)
                {
                    RaftLogEntry raftLogEntry1 = entries1[i];
                    RaftLogEntry raftLogEntry2 = entries2[i];
                    assertEquals(raftLogEntry1.Term(), raftLogEntry2.Term());
                    ContentEquals(raftLogEntry1.Content(), raftLogEntry2.Content());
                }
            }
        }
Ejemplo n.º 11
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public org.neo4j.causalclustering.core.consensus.outcome.Outcome handle(org.neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message, org.neo4j.causalclustering.core.consensus.state.ReadableRaftState ctx, org.neo4j.logging.Log log) throws java.io.IOException
        public override Outcome Handle(Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message, ReadableRaftState ctx, Log log)
        {
            return(message.Dispatch(new Handler(ctx, log)));
        }
Ejemplo n.º 12
0
 private static Stream <object[]> Params(Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage raftMessage)
 {
     return(Arrays.stream(_protocols).mapToObj(p => new object[] { raftMessage, p }));
 }