/// <summary> /// Gets a current reputation for a given machine and resets the reputation if bad reputation expires. /// </summary> public virtual MachineReputation GetReputation(MachineLocation machine) { if (!Enabled) { return(MachineReputation.Good); } if (!_reputations.TryGetValue(machine, out var state)) { return(MachineReputation.Good); } if (state.ExpireTime < _clock.UtcNow) { ChangeReputation(MachineReputation.Good, state, machine.ToString(), $" due to expiry (expire time: {state.ExpireTime}, current time: {_clock.UtcNow})"); return(MachineReputation.Good); } return(state.Reputation); }
/// <summary> /// Reports about new reputation for a given location. /// </summary> public virtual void ReportReputation(MachineLocation location, MachineReputation reputation) { if (!Enabled) { return; } if (reputation == MachineReputation.Good && _clusterState != null && _clusterState.TryResolveMachineId(location, out var machineId) && (_clusterState.IsMachineMarkedInactive(machineId) || _clusterState.IsMachineMarkedClosed(machineId))) { _context.Debug($"Marked machine {machineId}='{location}' active due to report of good reputation."); _clusterState.MarkMachineActive(machineId).IgnoreFailure(); } var reputationState = _reputations.GetOrAdd(location, _ => new ReputationState()); string displayLocation = location.ToString(); ChangeReputation(reputation, reputationState, displayLocation, reason: ""); }
/// <nodoc /> public ContentLocation(MachineLocation machine, ContentHash hash) { Machine = machine; Hash = hash; }
/// <nodoc /> public ContentLocation(MachineLocation machine, ContentHash hash, bool fromRing = false) { Machine = machine; Hash = hash; FromRing = fromRing; }