public static MembershipTableSnapshot Create(MembershipEntry localSiloEntry, MembershipTableData table) { if (localSiloEntry is null) { throw new ArgumentNullException(nameof(localSiloEntry)); } if (table is null) { throw new ArgumentNullException(nameof(table)); } var entries = ImmutableDictionary.CreateBuilder <SiloAddress, MembershipEntry>(); if (table.Members != null) { foreach (var item in table.Members) { var entry = item.Item1; entries.Add(entry.SiloAddress, entry); } } if (entries.TryGetValue(localSiloEntry.SiloAddress, out var existing)) { entries[localSiloEntry.SiloAddress] = existing.WithStatus(localSiloEntry.Status); } else { entries[localSiloEntry.SiloAddress] = localSiloEntry; } var version = new MembershipVersion(table.Version.Version); return(new MembershipTableSnapshot(localSiloEntry, version, entries.ToImmutable())); }
public MembershipTableSnapshot( MembershipEntry localSilo, MembershipVersion version, ImmutableDictionary <SiloAddress, MembershipEntry> entries) { this.LocalSilo = localSilo; this.Version = version; this.Entries = entries; }
private bool IsKnownDeadSilo(SiloAddress siloAddress, MembershipVersion membershipVersion) { var current = this.clusterMembershipService.CurrentSnapshot; // Check if the target silo is in the cluster if (current.Members.TryGetValue(siloAddress, out var value)) { // It is, check if it's alive return(value.Status.IsTerminating()); } // We didn't find it in the cluster. If the silo entry is too old, it has been cleaned in the membership table: the entry isn't valid anymore. // Otherwise, maybe the membership service isn't up to date yet. The entry should be valid return(current.Version > membershipVersion); }
private void NotifyMembershipTableChanged(MembershipVersion version, Identity applicant) { foreach (var member in membershipMembers.Values) { if (member.Identity != applicant) { try { member.MembershipTableChanged(version); } catch (Exception ex) { logger.Warn("{0}.{1} error:{2}", nameof(ClusterMembershipService), nameof(TableChanged), ex); } } } }
public void MembershipTableChanged(MembershipVersion version) { if (membershipManager.Version == null || membershipManager.Version < version) { MembershipSnapshot membershipSnapshot; try { membershipSnapshot = clusterMembershipService.CreateSnapshot(); } catch (Exception ex) { logger.Warn("{0}.{1} error:{2}", nameof(GatewayMembershipService), nameof(IClusterMembershipService.CreateSnapshot), ex); return; } membershipManager.UpdateFromSnapshot(membershipSnapshot); } }
public void MembershipTableChanged(MembershipVersion version) { systemTarget.MembershipTableChanged(version); }
public void Deconstruct(out MembershipVersion version, out SiloAddress siloAddress) { version = MembershipVersion; siloAddress = SiloAddress; }
public VersionedSuccessor(MembershipVersion membershipVersion, SiloAddress siloAddress) { MembershipVersion = membershipVersion; SiloAddress = siloAddress; }
public ValueTask Refresh(MembershipVersion minimumVersion = default) => new ValueTask();