예제 #1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public static ReplicatedLockTokenRequest unmarshal(org.neo4j.storageengine.api.ReadableChannel channel) throws java.io.IOException, org.neo4j.causalclustering.messaging.EndOfStreamException
        public static ReplicatedLockTokenRequest Unmarshal(ReadableChannel channel)
        {
            int      candidateId = channel.Int;
            MemberId owner       = (new MemberId.Marshal()).unmarshal(channel);

            return(new ReplicatedLockTokenRequest(owner, candidateId));
        }
예제 #2
0
        public ClusteringModule(DiscoveryServiceFactory discoveryServiceFactory, MemberId myself, PlatformModule platformModule, File clusterStateDirectory, DatabaseLayout databaseLayout)
        {
            LifeSupport           life                  = platformModule.Life;
            Config                config                = platformModule.Config;
            LogProvider           logProvider           = platformModule.Logging.InternalLogProvider;
            LogProvider           userLogProvider       = platformModule.Logging.UserLogProvider;
            Dependencies          dependencies          = platformModule.Dependencies;
            Monitors              monitors              = platformModule.Monitors;
            FileSystemAbstraction fileSystem            = platformModule.FileSystem;
            RemoteMembersResolver remoteMembersResolver = chooseResolver(config, platformModule.Logging);

            _topologyService = discoveryServiceFactory.CoreTopologyService(config, myself, platformModule.JobScheduler, logProvider, userLogProvider, remoteMembersResolver, ResolveStrategy(config, logProvider), monitors);

            life.Add(_topologyService);

            dependencies.SatisfyDependency(_topologyService);                 // for tests

            CoreBootstrapper coreBootstrapper = new CoreBootstrapper(databaseLayout, platformModule.PageCache, fileSystem, config, logProvider, platformModule.Monitors);

            SimpleStorage <ClusterId> clusterIdStorage = new SimpleFileStorage <ClusterId>(fileSystem, clusterStateDirectory, CLUSTER_ID_NAME, new ClusterId.Marshal(), logProvider);

            SimpleStorage <DatabaseName> dbNameStorage = new SimpleFileStorage <DatabaseName>(fileSystem, clusterStateDirectory, DB_NAME, new DatabaseName.Marshal(), logProvider);

            string dbName           = config.Get(CausalClusteringSettings.database);
            int    minimumCoreHosts = config.Get(CausalClusteringSettings.minimum_core_cluster_size_at_formation);

            Duration clusterBindingTimeout = config.Get(CausalClusteringSettings.cluster_binding_timeout);

            _clusterBinder = new ClusterBinder(clusterIdStorage, dbNameStorage, _topologyService, Clocks.systemClock(), () => sleep(100), clusterBindingTimeout, coreBootstrapper, dbName, minimumCoreHosts, platformModule.Monitors);
        }
예제 #3
0
 public virtual bool Update(MemberId votedFor, long term)
 {
     if (TermChanged(term))
     {
         this._votedFor = votedFor;
         this._term     = term;
         return(true);
     }
     else
     {
         if (this._votedFor == null)
         {
             if (votedFor != null)
             {
                 this._votedFor = votedFor;
                 return(true);
             }
         }
         else if (!this._votedFor.Equals(votedFor))
         {
             throw new System.ArgumentException("Can only vote once per term.");
         }
         return(false);
     }
 }
예제 #4
0
 public ReplicatedIdAllocationRequest(MemberId owner, IdType idType, long idRangeStart, int idRangeLength)
 {
     this._owner         = owner;
     this._idType        = idType;
     this._idRangeStart  = idRangeStart;
     this._idRangeLength = idRangeLength;
 }
예제 #5
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldThrowExceptionForHalfWrittenInstance() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldThrowExceptionForHalfWrittenInstance()
        {
            // given
            // a CoreMember and a ByteBuffer to write it to
            MemberId.Marshal marshal = new MemberId.Marshal();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId aRealMember = new org.neo4j.causalclustering.identity.MemberId(java.util.UUID.randomUUID());
            MemberId aRealMember = new MemberId(System.Guid.randomUUID());

            ByteBuf buffer = Unpooled.buffer(1000);

            // and the CoreMember is serialized but for 5 bytes at the end
            marshal.MarshalConflict(aRealMember, new BoundedNetworkWritableChannel(buffer));
            ByteBuf bufferWithMissingBytes = buffer.copy(0, buffer.writerIndex() - 5);

            // when
            try
            {
                marshal.Unmarshal(new NetworkReadableClosableChannelNetty4(bufferWithMissingBytes));
                fail("Should have thrown exception");
            }
            catch (EndOfStreamException)
            {
                // expected
            }
        }
예제 #6
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldNeverReuseWhenNotLeader()
        public virtual void ShouldNeverReuseWhenNotLeader()
        {
            MemberId someoneElse = new MemberId(System.Guid.randomUUID());

            _idReusabilityCondition.onLeaderSwitch(new LeaderInfo(someoneElse, 1));
            assertFalse(_idReusabilityCondition.AsBoolean);
        }
예제 #7
0
            internal CountedSelectionStrategy(UpstreamStrategyAddressSupplierTest outerInstance, MemberId upstreamDatabase, int numberOfIterations) : base(typeof(CountedSelectionStrategy).FullName)
            {
//JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
                this._outerInstance           = outerInstance;
                this.UpstreamDatabaseConflict = upstreamDatabase;
                this.NumberOfIterations       = numberOfIterations;
            }
예제 #8
0
 public IdReusabilityCondition(CommandIndexTracker commandIndexTracker, RaftMachine raftMachine, MemberId myself)
 {
     this._commandIndexTracker = commandIndexTracker;
     this._raftMachine         = raftMachine;
     this._myself = myself;
     raftMachine.RegisterListener(this);
 }
예제 #9
0
        public virtual Optional <CatchupServerAddress> Find(MemberId upstream)
        {
            Optional <CatchupServerAddress> coreCatchupAddress = _coreTopology.find(upstream).map(a => ( CatchupServerAddress )a);
            Optional <CatchupServerAddress> readCatchupAddress = _readReplicaTopology.find(upstream).map(a => ( CatchupServerAddress )a);

            return(coreCatchupAddress.map(Optional.of).orElse(readCatchupAddress));
        }
예제 #10
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldBeIdempotent()
        public virtual void ShouldBeIdempotent()
        {
            // given
            EphemeralFileSystemAbstraction fsa = FileSystemRule.get();

            fsa.Mkdir(TestDir.directory());

            StateMarshal <ReplicatedLockTokenState> marshal = new ReplicatedLockTokenState.Marshal(new MemberId.Marshal());

            DurableStateStorage <ReplicatedLockTokenState> storage = new DurableStateStorage <ReplicatedLockTokenState>(fsa, TestDir.directory(), "state", marshal, 100, NullLogProvider.Instance);

            using (Lifespan lifespan = new Lifespan(storage))
            {
                ReplicatedLockTokenStateMachine stateMachine = new ReplicatedLockTokenStateMachine(storage);

                MemberId memberA = member(0);
                MemberId memberB = member(1);

                stateMachine.ApplyCommand(new ReplicatedLockTokenRequest(memberA, 0), 3, r =>
                {
                });

                // when
                stateMachine.ApplyCommand(new ReplicatedLockTokenRequest(memberB, 1), 2, r =>
                {
                });

                // then
                assertEquals(memberA, stateMachine.CurrentToken().owner());
            }
        }
예제 #11
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldNotIssueLocksOnNonLeader() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldNotIssueLocksOnNonLeader()
        {
            // given
            MemberId me     = member(0);
            MemberId leader = member(1);

            ReplicatedLockTokenStateMachine replicatedLockStateMachine = new ReplicatedLockTokenStateMachine(new InMemoryStateStorage(new ReplicatedLockTokenState()));
            DirectReplicator replicator = new DirectReplicator(replicatedLockStateMachine);

            LeaderLocator leaderLocator = mock(typeof(LeaderLocator));

            when(leaderLocator.Leader).thenReturn(leader);
            Locks locks = mock(typeof(Locks));

            Org.Neo4j.Kernel.impl.locking.Locks_Client client = mock(typeof(Org.Neo4j.Kernel.impl.locking.Locks_Client));
            when(locks.NewClient()).thenReturn(client);

            LeaderOnlyLockManager lockManager = new LeaderOnlyLockManager(me, replicator, leaderLocator, locks, replicatedLockStateMachine);

            // when
            Org.Neo4j.Kernel.impl.locking.Locks_Client lockClient = lockManager.NewClient();
            try
            {
                lockClient.AcquireExclusive(LockTracer.NONE, ResourceTypes.NODE, 0L);
                fail("Should have thrown exception");
            }
            catch (AcquireLockTimeoutException)
            {
                // expected
            }
        }
예제 #12
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private void commit(ClusterState clusterState, org.neo4j.causalclustering.identity.MemberId member, long commitIndex) throws java.io.IOException
        private void Commit(ClusterState clusterState, MemberId member, long commitIndex)
        {
            ComparableRaftState state   = clusterState.States[member];
            Outcome             outcome = new Outcome(clusterState.Roles[member], state);

            outcome.CommitIndex = commitIndex;
            state.Update(outcome);
        }
예제 #13
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public ReplicatedLockTokenState unmarshal0(org.neo4j.storageengine.api.ReadableChannel channel) throws java.io.IOException, org.neo4j.causalclustering.messaging.EndOfStreamException
            public override ReplicatedLockTokenState Unmarshal0(ReadableChannel channel)
            {
                long     logIndex    = channel.Long;
                int      candidateId = channel.Int;
                MemberId member      = MemberMarshal.unmarshal(channel);

                return(new ReplicatedLockTokenState(logIndex, new ReplicatedLockTokenRequest(member, candidateId)));
            }
예제 #14
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldHandleMixedChangeToExistingRaftGroup() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldHandleMixedChangeToExistingRaftGroup()
        {
            DirectNetworking net = new DirectNetworking();

            // given
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId leader = member(0);
            MemberId leader = member(0);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId stable = member(1);
            MemberId stable = member(1);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId toBeRemoved1 = member(2);
            MemberId toBeRemoved1 = member(2);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId toBeRemoved2 = member(3);
            MemberId toBeRemoved2 = member(3);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId toBeAdded1 = member(4);
            MemberId toBeAdded1 = member(4);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId toBeAdded2 = member(5);
            MemberId toBeAdded2 = member(5);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId[] everyone = {leader, stable, toBeRemoved1, toBeRemoved2, toBeAdded1, toBeAdded2};
            MemberId[] everyone = new MemberId[] { leader, stable, toBeRemoved1, toBeRemoved2, toBeAdded1, toBeAdded2 };

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId[] initialMembers = {leader, stable, toBeRemoved1, toBeRemoved2};
            MemberId[] initialMembers = new MemberId[] { leader, stable, toBeRemoved1, toBeRemoved2 };
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId[] finalMembers = {leader, stable, toBeAdded1, toBeAdded2};
            MemberId[] finalMembers = new MemberId[] { leader, stable, toBeAdded1, toBeAdded2 };

            RaftTestFixture fixture = new RaftTestFixture(net, 3, everyone);

            fixture.Bootstrap(initialMembers);

            fixture.Members().withId(leader).timerService().invoke(ELECTION);
            net.ProcessMessages();

            // when
            fixture.Members().withId(leader).raftInstance().TargetMembershipSet = (new RaftTestGroup(finalMembers)).Members;
            net.ProcessMessages();

            fixture.Members().withId(leader).timerService().invoke(HEARTBEAT);
            net.ProcessMessages();
            fixture.Members().withId(leader).timerService().invoke(HEARTBEAT);
            net.ProcessMessages();
            fixture.Members().withId(leader).timerService().invoke(HEARTBEAT);
            net.ProcessMessages();

            // then
            assertThat(fixture.Members().withIds(finalMembers), HasCurrentMembers(new RaftTestGroup(finalMembers)));
            assertEquals(fixture.MessageLog(), 1, fixture.Members().withIds(finalMembers).withRole(LEADER).size());
            assertEquals(fixture.MessageLog(), 3, fixture.Members().withIds(finalMembers).withRole(FOLLOWER).size());
        }
예제 #15
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldAddMultipleInstancesToExistingRaftGroup() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldAddMultipleInstancesToExistingRaftGroup()
        {
            // given
            DirectNetworking net = new DirectNetworking();

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId leader = member(0);
            MemberId leader = member(0);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId stable1 = member(1);
            MemberId stable1 = member(1);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId stable2 = member(2);
            MemberId stable2 = member(2);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId toBeAdded1 = member(3);
            MemberId toBeAdded1 = member(3);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId toBeAdded2 = member(4);
            MemberId toBeAdded2 = member(4);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId toBeAdded3 = member(5);
            MemberId toBeAdded3 = member(5);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId[] initialMembers = {leader, stable1, stable2};
            MemberId[] initialMembers = new MemberId[] { leader, stable1, stable2 };
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId[] finalMembers = {leader, stable1, stable2, toBeAdded1, toBeAdded2, toBeAdded3};
            MemberId[] finalMembers = new MemberId[] { leader, stable1, stable2, toBeAdded1, toBeAdded2, toBeAdded3 };

            RaftTestFixture fixture = new RaftTestFixture(net, 3, finalMembers);

            fixture.Bootstrap(initialMembers);

            fixture.Members().withId(leader).timerService().invoke(ELECTION);
            net.ProcessMessages();

            // when
            fixture.Members().TargetMembershipSet = (new RaftTestGroup(finalMembers)).Members;
            net.ProcessMessages();

            // We need a heartbeat for every member we add. It is necessary to have the new members report their state
            // so their membership change can be processed. We can probably do better here.
            fixture.Members().withId(leader).timerService().invoke(HEARTBEAT);
            net.ProcessMessages();
            fixture.Members().withId(leader).timerService().invoke(HEARTBEAT);
            net.ProcessMessages();
            fixture.Members().withId(leader).timerService().invoke(HEARTBEAT);
            net.ProcessMessages();

            // then
            assertThat(fixture.MessageLog(), fixture.Members().withIds(finalMembers), HasCurrentMembers(new RaftTestGroup(finalMembers)));
            assertEquals(fixture.MessageLog(), 1, fixture.Members().withRole(LEADER).size());
            assertEquals(fixture.MessageLog(), 5, fixture.Members().withRole(FOLLOWER).size());
        }
예제 #16
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public java.util.Optional<org.neo4j.causalclustering.identity.MemberId> upstreamDatabase() throws org.neo4j.causalclustering.upstream.UpstreamDatabaseSelectionException
            public override Optional <MemberId> UpstreamDatabase()
            {
                MemberId consumed = UpstreamDatabaseConflict;

                NumberOfIterations--;
                if (NumberOfIterations < 0)
                {
                    UpstreamDatabaseConflict = null;
                }
                return(Optional.ofNullable(consumed));
            }
예제 #17
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public VoteState unmarshal0(org.neo4j.storageengine.api.ReadableChannel channel) throws java.io.IOException, org.neo4j.causalclustering.messaging.EndOfStreamException
            public override VoteState Unmarshal0(ReadableChannel channel)
            {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final long term = channel.getLong();
                long term = channel.Long;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId member = memberMarshal.unmarshal(channel);
                MemberId member = MemberMarshal.unmarshal(channel);

                return(new VoteState(member, term));
            }
예제 #18
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are ignored unless the option to convert to C# 7.2 'in' parameters is selected:
//ORIGINAL LINE: public static RaftMessages_RaftMessage messageFor(org.neo4j.causalclustering.core.consensus.outcome.Outcome outcome, final org.neo4j.causalclustering.identity.MemberId member)
        public static RaftMessages_RaftMessage MessageFor(Outcome outcome, MemberId member)
        {
            System.Predicate <RaftMessages_Directed> selectMember = message => message.to() == member;
            try
            {
                return(Iterables.single(new FilteringIterable <>(outcome.OutgoingMessages, selectMember)).message());
            }
            catch (NoSuchElementException)
            {
                throw new AssertionError(format("Expected message for %s, but outcome only contains %s.", member, outcome.OutgoingMessages));
            }
        }
예제 #19
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public org.neo4j.helpers.AdvertisedSocketAddress primary() throws CatchupAddressResolutionException
        public override AdvertisedSocketAddress Primary()
        {
            try
            {
                MemberId leadMember = LeaderLocator.Leader;
                return(TopologyService.findCatchupAddress(leadMember).orElseThrow(() => new CatchupAddressResolutionException(leadMember)));
            }
            catch (NoLeaderFoundException e)
            {
                throw new CatchupAddressResolutionException(e);
            }
        }
예제 #20
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldStoreVote()
        public virtual void ShouldStoreVote()
        {
            // given
            VoteState voteState = new VoteState();
            MemberId  member    = new MemberId(System.Guid.randomUUID());

            // when
            voteState.Update(member, 0);

            // then
            assertEquals(member, voteState.VotedFor());
        }
예제 #21
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private static boolean shouldVoteFor(org.neo4j.causalclustering.core.consensus.state.ReadableRaftState state, org.neo4j.causalclustering.core.consensus.outcome.Outcome outcome, org.neo4j.causalclustering.core.consensus.RaftMessages_AnyVote_Request voteRequest, boolean committedToVotingForAnother, org.neo4j.logging.Log log) throws java.io.IOException
        private static bool ShouldVoteFor(ReadableRaftState state, Outcome outcome, Org.Neo4j.causalclustering.core.consensus.RaftMessages_AnyVote_Request voteRequest, bool committedToVotingForAnother, Log log)
        {
            long     requestTerm         = voteRequest.Term();
            MemberId candidate           = voteRequest.Candidate();
            long     requestLastLogTerm  = voteRequest.LastLogTerm();
            long     requestLastLogIndex = voteRequest.LastLogIndex();
            long     contextTerm         = outcome.Term;
            long     contextLastAppended = state.EntryLog().appendIndex();
            long     contextLastLogTerm  = state.EntryLog().readEntryTerm(contextLastAppended);

            return(ShouldVoteFor(candidate, contextTerm, requestTerm, contextLastLogTerm, requestLastLogTerm, contextLastAppended, requestLastLogIndex, committedToVotingForAnother, log));
        }
예제 #22
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public static org.neo4j.causalclustering.messaging.marshalling.ContentBuilder<ReplicatedContent> deserialize(org.neo4j.storageengine.api.ReadableChannel channel) throws java.io.IOException, org.neo4j.causalclustering.messaging.EndOfStreamException
        public static ContentBuilder <ReplicatedContent> Deserialize(ReadableChannel channel)
        {
            long          mostSigBits   = channel.Long;
            long          leastSigBits  = channel.Long;
            MemberId      owner         = (new MemberId.Marshal()).unmarshal(channel);
            GlobalSession globalSession = new GlobalSession(new System.Guid(mostSigBits, leastSigBits), owner);

            long             localSessionId   = channel.Long;
            long             sequenceNumber   = channel.Long;
            LocalOperationId localOperationId = new LocalOperationId(localSessionId, sequenceNumber);

            return(ContentBuilder.unfinished(subContent => new DistributedOperation(subContent, globalSession, localOperationId)));
        }
예제 #23
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldRemoveLeaderAndAddItBackIn() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldRemoveLeaderAndAddItBackIn()
        {
            DirectNetworking net = new DirectNetworking();

            // given
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId leader1 = member(0);
            MemberId leader1 = member(0);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId leader2 = member(1);
            MemberId leader2 = member(1);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId stable1 = member(2);
            MemberId stable1 = member(2);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId stable2 = member(3);
            MemberId stable2 = member(3);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId[] allMembers = {leader1, leader2, stable1, stable2};
            MemberId[] allMembers = new MemberId[] { leader1, leader2, stable1, stable2 };
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId[] fewerMembers = {leader2, stable1, stable2};
            MemberId[] fewerMembers = new MemberId[] { leader2, stable1, stable2 };

            RaftTestFixture fixture = new RaftTestFixture(net, 3, allMembers);

            fixture.Bootstrap(allMembers);

            // when
            fixture.Members().withId(leader1).timerService().invoke(ELECTION);
            net.ProcessMessages();

            fixture.Members().withId(leader1).raftInstance().setTargetMembershipSet(new RaftTestGroup(fewerMembers)
                                                                                    .Members);
            net.ProcessMessages();

            fixture.Members().withId(leader2).timerService().invoke(ELECTION);
            net.ProcessMessages();

            fixture.Members().withId(leader2).raftInstance().setTargetMembershipSet(new RaftTestGroup(allMembers)
                                                                                    .Members);
            net.ProcessMessages();

            fixture.Members().withId(leader2).timerService().invoke(HEARTBEAT);
            net.ProcessMessages();

            // then
            assertTrue(fixture.MessageLog(), fixture.Members().withId(leader2).raftInstance().Leader);
            assertThat(fixture.MessageLog(), fixture.Members().withIds(allMembers), HasCurrentMembers(new RaftTestGroup(allMembers)));
        }
예제 #24
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldClearVote()
        public virtual void ShouldClearVote()
        {
            // given
            VoteState voteState = new VoteState();
            MemberId  member    = new MemberId(System.Guid.randomUUID());

            voteState.Update(member, 0);

            // when
            voteState.Update(null, 1);

            // then
            assertNull(voteState.VotedFor());
        }
예제 #25
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldLogFirstFailure()
        public virtual void ShouldLogFirstFailure()
        {
            // given
            Log log = mock(typeof(Log));
            UnknownAddressMonitor logger = new UnknownAddressMonitor(log, TestClock(), 100);

            // when
            MemberId to = member(0);

            logger.LogAttemptToSendToMemberWithNoKnownAddress(to);

            // then
            verify(log).info(format("No address found for %s, probably because the member has been shut down.", to));
        }
예제 #26
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldReportNoUpdateWhenVoteStateUnchanged()
        public virtual void ShouldReportNoUpdateWhenVoteStateUnchanged()
        {
            // given
            VoteState voteState = new VoteState();
            MemberId  member1   = new MemberId(System.Guid.randomUUID());
            MemberId  member2   = new MemberId(System.Guid.randomUUID());

            // when
            assertTrue(voteState.Update(null, 0));
            assertFalse(voteState.Update(null, 0));
            assertTrue(voteState.Update(member1, 0));
            assertFalse(voteState.Update(member1, 0));
            assertTrue(voteState.Update(member2, 1));
            assertFalse(voteState.Update(member2, 1));
        }
예제 #27
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldWriteAndReadState() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldWriteAndReadState()
        {
            // given
            SimpleStorage <MemberId> storage = new SimpleFileStorage <MemberId>(Fsa.get(), new File("state-dir"), "member-id-a", new MemberId.Marshal(), NullLogProvider.Instance);

            // when
            MemberId idA = new MemberId(System.Guid.randomUUID());

            storage.WriteState(idA);
            MemberId idB = storage.ReadState();

            // then
            assertEquals(idA.Uuid, idB.Uuid);
            assertEquals(idA, idB);
        }
예제 #28
0
 internal RaftLogShipper(Outbound <MemberId, Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage> outbound, LogProvider logProvider, ReadableRaftLog raftLog, Clock clock, TimerService timerService, MemberId leader, MemberId follower, long leaderTerm, long leaderCommit, long retryTimeMillis, int catchupBatchSize, int maxAllowedShippingLag, InFlightCache inFlightCache)
 {
     this._outbound              = outbound;
     this._timerService          = timerService;
     this._catchupBatchSize      = catchupBatchSize;
     this._maxAllowedShippingLag = maxAllowedShippingLag;
     this._log               = logProvider.getLog(this.GetType());
     this._raftLog           = raftLog;
     this._clock             = clock;
     this._follower          = follower;
     this._leader            = leader;
     this._retryTimeMillis   = retryTimeMillis;
     this._lastLeaderContext = new LeaderContext(leaderTerm, leaderCommit);
     this._inFlightCache     = inFlightCache;
 }
예제 #29
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldEncodeAndDecodeNewEntryRequest()
        public virtual void ShouldEncodeAndDecodeNewEntryRequest()
        {
            // given
            MemberId member = new MemberId(System.Guid.randomUUID());

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request request = new Org.Neo4j.causalclustering.core.consensus.RaftMessages_NewEntry_Request(member, ReplicatedInteger.valueOf(12));

            // when
            _channel.writeOutbound(request);
            object message = _channel.readOutbound();

            _channel.writeInbound(message);

            // then
            assertEquals(request, _channel.readInbound());
        }
예제 #30
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldEncodeAndDecodeAppendEntriesResponse()
        public virtual void ShouldEncodeAndDecodeAppendEntriesResponse()
        {
            // given
            MemberId member = new MemberId(System.Guid.randomUUID());

            Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response response = new Org.Neo4j.causalclustering.core.consensus.RaftMessages_AppendEntries_Response(member, 1, false, -1, 0);

            // when
            _channel.writeOutbound(response);
            object message = _channel.readOutbound();

            _channel.writeInbound(message);

            // then
            assertEquals(response, _channel.readInbound());
        }