コード例 #1
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());
            }
        }
コード例 #2
0
        public override void SetLeader(LeaderInfo newLeader, string dbName)
        {
            LeaderInfo currentLeaderInfo = Leader;

            if (currentLeaderInfo.Term() < newLeader.Term() && LocalDBName().Equals(dbName))
            {
                Log.info("Leader %s updating leader info for database %s and term %s", MyselfConflict, dbName, newLeader.Term());
                Leader0 = newLeader;
            }
        }
コード例 #3
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);
                }
            }
        }
コード例 #4
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());
            }
        }