コード例 #1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: private void refreshRoles() throws InterruptedException
        private void RefreshRoles()
        {
            WaitOnHazelcastInstanceCreation();
            LeaderInfo            localLeaderInfo   = _leaderInfo.get();
            Optional <LeaderInfo> localStepDownInfo = _stepDownInfo.get();

            if (localStepDownInfo.Present)
            {
                HazelcastClusterTopology.CasLeaders(_hazelcastInstance, localStepDownInfo.get(), _localDBName, Log);
                _stepDownInfo.compareAndSet(localStepDownInfo, null);
            }
            else if (localLeaderInfo.MemberId() != null && localLeaderInfo.MemberId().Equals(MyselfConflict))
            {
                HazelcastClusterTopology.CasLeaders(_hazelcastInstance, localLeaderInfo, _localDBName, Log);
            }

            _coreRoles = HazelcastClusterTopology.GetCoreRoles(_hazelcastInstance, AllCoreServers().members().Keys);
        }
コード例 #2
0
        public override void HandleStepDown(long term, string dbName)
        {
            LeaderInfo localLeaderInfo = Leader;

            bool wasLeaderForDbAndTerm = Objects.Equals(MyselfConflict, localLeaderInfo.MemberId()) && LocalDBName().Equals(dbName) && term == localLeaderInfo.Term();

            if (wasLeaderForDbAndTerm)
            {
                Log.info("Step down event detected. This topology member, with MemberId %s, was leader in term %s, now moving " + "to follower.", MyselfConflict, localLeaderInfo.Term());
                HandleStepDown0(localLeaderInfo.StepDown());
            }
        }
コード例 #3
0
        public override void OnLeaderSwitch(LeaderInfo leaderInfo)
        {
            _progressTracker.triggerReplicationEvent();
            MemberId newLeader = leaderInfo.MemberId();
            MemberId oldLeader = _leaderProvider.currentLeader();

            if (newLeader == null && oldLeader != null)
            {
                _log.info("Lost previous leader '%s'. Currently no available leader", oldLeader);
            }
            else if (newLeader != null && oldLeader == null)
            {
                _log.info("A new leader has been detected: '%s'", newLeader);
            }
            _leaderProvider.Leader = newLeader;
        }
コード例 #4
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test void shouldListenToLeaderUpdates() throws ReplicationFailureException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        internal virtual void ShouldListenToLeaderUpdates()
        {
            OneProgressTracker oneProgressTracker = new OneProgressTracker(this);

            oneProgressTracker.Last.setReplicated();
            CapturingOutbound <Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage> outbound = new CapturingOutbound <Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage>();
            RaftReplicator    replicator = GetReplicator(outbound, oneProgressTracker, new Monitors());
            ReplicatedInteger content    = ReplicatedInteger.valueOf(5);

            LeaderInfo lastLeader = _leaderInfo;

            // set initial leader, sens to that leader
            replicator.OnLeaderSwitch(lastLeader);
            replicator.Replicate(content, false);
            assertEquals(outbound.LastTo, lastLeader.MemberId());

            // update with valid new leader, sends to new leader
            lastLeader = new LeaderInfo(new MemberId(System.Guid.randomUUID()), 1);
            replicator.OnLeaderSwitch(lastLeader);
            replicator.Replicate(content, false);
            assertEquals(outbound.LastTo, lastLeader.MemberId());
        }
コード例 #5
0
        internal void CasLeaders(LeaderInfo leaderInfo, string dbName)
        {
            lock ( _leaderMap )
            {
                Optional <LeaderInfo> current = Optional.ofNullable(_leaderMap.get(dbName));

//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
                bool sameLeader = current.map(LeaderInfo::memberId).Equals(Optional.ofNullable(leaderInfo.MemberId()));

                int termComparison = current.map(l => Long.compare(l.term(), leaderInfo.Term())).orElse(-1);

                bool greaterTermExists = termComparison > 0;

                bool sameTermButNoStepDown = termComparison == 0 && !leaderInfo.SteppingDown;

                if (!(greaterTermExists || sameTermButNoStepDown || sameLeader))
                {
                    _leaderMap.put(dbName, leaderInfo);
                }
            }
        }
コード例 #6
0
        internal static void CasLeaders(HazelcastInstance hazelcastInstance, LeaderInfo leaderInfo, string dbName, Log log)
        {
            IAtomicReference <LeaderInfo> leaderRef = hazelcastInstance.getAtomicReference(DB_NAME_LEADER_TERM_PREFIX + dbName);

            LeaderInfo            current    = leaderRef.get();
            Optional <LeaderInfo> currentOpt = Optional.ofNullable(current);

//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
            bool sameLeader = currentOpt.map(LeaderInfo::memberId).Equals(Optional.ofNullable(leaderInfo.MemberId()));

            int termComparison = currentOpt.map(l => Long.compare(l.term(), leaderInfo.Term())).orElse(-1);

            bool greaterTermExists = termComparison > 0;

            bool sameTermButNoStepdown = termComparison == 0 && !leaderInfo.SteppingDown;

            if (sameLeader || greaterTermExists || sameTermButNoStepdown)
            {
                return;
            }

            bool success = leaderRef.compareAndSet(current, leaderInfo);

            if (!success)
            {
                log.Warn("Fail to set new leader info: %s. Latest leader info: %s.", leaderInfo, leaderRef.get());
            }
        }