internal string ToFullString(bool full = false) { if (!full) { return(ToString()); } List <SiloAddress> suspecters = SuspectTimes == null ? null : SuspectTimes.Select(tuple => tuple.Item1).ToList(); List <DateTime> timestamps = SuspectTimes == null ? null : SuspectTimes.Select(tuple => tuple.Item2).ToList(); return(string.Format("[SiloAddress={0} SiloName={1} Status={2} HostName={3} ProxyPort={4} " + "RoleName={5} UpdateZone={6} FaultZone={7} StartTime = {8} IAmAliveTime = {9} {10} {11}]", SiloAddress.ToLongString(), SiloName, Status, HostName, ProxyPort, RoleName, UpdateZone, FaultZone, LogFormatter.PrintDate(StartTime), LogFormatter.PrintDate(IAmAliveTime), suspecters == null ? "" : "Suspecters = " + Utils.EnumerableToString(suspecters, sa => sa.ToLongString()), timestamps == null ? "" : "SuspectTimes = " + Utils.EnumerableToString(timestamps, LogFormatter.PrintDate) )); }
public void AddSuspector(SiloAddress suspectingSilo, DateTime suspectingTime) { SuspectTimes ??= new List <Tuple <SiloAddress, DateTime> >(); var suspector = new Tuple <SiloAddress, DateTime>(suspectingSilo, suspectingTime); SuspectTimes.Add(suspector); }
public MembershipEntry ToEntry() { return(new MembershipEntry { FaultZone = FaultZone, HostName = HostName, IAmAliveTime = LogFormatter.ParseDate(IAmAliveTime), ProxyPort = ProxyPort, RoleName = RoleName, SiloAddress = SiloAddressClass.FromParsableString(SiloAddress), SiloName = SiloName, Status = (SiloStatus)Status, StartTime = LogFormatter.ParseDate(StartTime), SuspectTimes = SuspectTimes.Select(x => x.ToTuple()).ToList(), UpdateZone = UpdateZone }); }
internal List <Tuple <SiloAddress, DateTime> > GetFreshVotes(TimeSpan expiration) { if (SuspectTimes == null) { return(EmptyList); } DateTime now = DateTime.UtcNow; return(SuspectTimes.FindAll(voter => { DateTime otherVoterTime = voter.Item2; // If now is smaller than otherVoterTime, than assume the otherVoterTime is fresh. // This could happen if clocks are not synchronized and the other voter clock is ahead of mine. if (now < otherVoterTime) { return true; } return now.Subtract(otherVoterTime) < expiration; })); }