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()); } }
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; } }
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); } } }
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()); } }