public static void Main() { using (IIgnite ignite = Ignition.Start(Utils.GetServerNodeConfiguration())) { Console.WriteLine(); Console.WriteLine(">>> Atomic reference example started."); // Create atomic reference with a value of empty Guid. IAtomicReference <Guid> atomicRef = ignite.GetAtomicReference( AtomicReferenceModifyAction.AtomicReferenceName, Guid.Empty, true); // Make sure initial value is set to Empty. atomicRef.Write(Guid.Empty); // Attempt to modify the value on each node. Only one node will succeed. ignite.GetCompute().Broadcast(new AtomicReferenceModifyAction()); // Print current value which is equal to the Id of the node that has modified the reference first. Console.WriteLine("\n>>> Current atomic reference value: " + atomicRef.Read()); } Console.WriteLine(); Console.WriteLine(">>> Example finished, press any key to exit ..."); Console.ReadKey(); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldCorrectlyReturnCoreMemberRoles() public virtual void ShouldCorrectlyReturnCoreMemberRoles() { //given int numMembers = 3; IList <MemberId> members = IntStream.range(0, numMembers).mapToObj(ignored => new MemberId(System.Guid.randomUUID())).collect(Collectors.toList()); //JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @SuppressWarnings("unchecked") com.hazelcast.core.IAtomicReference<org.neo4j.causalclustering.core.consensus.LeaderInfo> leaderRef = mock(com.hazelcast.core.IAtomicReference.class); IAtomicReference <LeaderInfo> leaderRef = mock(typeof(IAtomicReference)); MemberId chosenLeaderId = members[0]; when(leaderRef.get()).thenReturn(new LeaderInfo(chosenLeaderId, 0L)); //JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @SuppressWarnings("unchecked") com.hazelcast.core.IMap<String,java.util.UUID> uuidDBMap = mock(com.hazelcast.core.IMap.class); IMap <string, System.Guid> uuidDBMap = mock(typeof(IMap)); when(uuidDBMap.Keys).thenReturn(Collections.singleton(DEFAULT_DB_NAME)); when(_hzInstance.getAtomicReference <LeaderInfo>(startsWith(DB_NAME_LEADER_TERM_PREFIX))).thenReturn(leaderRef); when(_hzInstance.getMap <string, System.Guid>(eq(CLUSTER_UUID_DB_NAME_MAP))).thenReturn(uuidDBMap); // when IDictionary <MemberId, RoleInfo> roleMap = HazelcastClusterTopology.GetCoreRoles(_hzInstance, new HashSet <MemberId, RoleInfo>(members)); // then assertEquals("First member was expected to be leader.", RoleInfo.Leader, roleMap[chosenLeaderId]); }
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()); } }
/// <summary> /// Invokes action. /// </summary> public void Invoke() { // Get or create the atomic reference. IAtomicReference <Guid> atomicRef = _ignite.GetAtomicReference(AtomicReferenceName, Guid.Empty, true); // Get local node id. Guid localNodeId = _ignite.GetCluster().GetLocalNode().Id; // Replace empty value with current node id. Guid expectedValue = Guid.Empty; Guid originalValue = atomicRef.CompareExchange(localNodeId, expectedValue); if (originalValue == expectedValue) { Console.WriteLine(">>> Successfully updated atomic reference on node {0}", localNodeId); } else { Console.WriteLine(">>> Failed to update atomic reference on node {0}, actual value is {1}", localNodeId, originalValue); } }
public static void Main() { using (var ignite = Ignition.StartFromApplicationConfiguration()) { Console.WriteLine(); Console.WriteLine(">>> Atomic reference example started."); IAtomicReference <Guid> atomicRef = ignite.GetAtomicReference( AtomicReferenceModifyAction.AtomicReferenceName, Guid.Empty, true); atomicRef.Write(Guid.Empty); ignite.GetCompute().Broadcast(new AtomicReferenceModifyAction()); Console.WriteLine("\n>>> Current atomic reference value: " + atomicRef.Read()); } Console.WriteLine("\n>>> Example finished, press any key to exit ..."); Console.ReadKey(); }
private static Optional <LeaderInfo> GetLeaderForDBName(HazelcastInstance hazelcastInstance, string dbName) { IAtomicReference <LeaderInfo> leader = hazelcastInstance.getAtomicReference(DB_NAME_LEADER_TERM_PREFIX + dbName); return(Optional.ofNullable(leader.get())); }