Пример #1
0
        /// <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: "");
        }
Пример #3
0
 /// <nodoc />
 public ContentLocation(MachineLocation machine, ContentHash hash)
 {
     Machine = machine;
     Hash    = hash;
 }
Пример #4
0
 /// <nodoc />
 public ContentLocation(MachineLocation machine, ContentHash hash, bool fromRing = false)
 {
     Machine  = machine;
     Hash     = hash;
     FromRing = fromRing;
 }