Exemplo n.º 1
0
 /// <summary>
 /// Adds an <see cref="AdaptiveHealthModifier{T}"/> with <see cref="AdaptiveHealthWithoutDecay"/> and given <paramref name="tuningPolicy"/>.
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="tuningPolicy">A health tuning policy. See <see cref="IAdaptiveHealthTuningPolicy"/> and <see cref="TuningPolicies"/> for details.</param>
 /// <param name="upMultiplier">A multiplier used to increase health. See <see cref="AdaptiveHealthWithoutDecay"/> for details.</param>
 /// <param name="downMultiplier">A multiplier used to decrease health. See <see cref="AdaptiveHealthWithoutDecay"/> for details.</param>
 /// <param name="minimumHealthValue">A minimum possible health value. See <see cref="AdaptiveHealthWithoutDecay"/> for details.</param>
 public static void AddAdaptiveHealthModifierWithoutDecay(
     this IWeighedReplicaOrderingBuilder builder,
     IAdaptiveHealthTuningPolicy tuningPolicy,
     double upMultiplier       = ClusterClientDefaults.AdaptiveHealthUpMultiplier,
     double downMultiplier     = ClusterClientDefaults.AdaptiveHealthDownMultiplier,
     double minimumHealthValue = ClusterClientDefaults.AdaptiveHealthMinimumValue) =>
 builder.AddModifier(new AdaptiveHealthModifier <double>(new AdaptiveHealthWithoutDecay(upMultiplier, downMultiplier, minimumHealthValue), tuningPolicy, builder.Log));
Exemplo n.º 2
0
 /// <summary>
 /// Adds an <see cref="AdaptiveHealthModifier{T}"/> with <see cref="AdaptiveHealthWithLinearDecay"/> and given <paramref name="tuningPolicy"/>.
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="tuningPolicy">A health tuning policy. See <see cref="IAdaptiveHealthTuningPolicy"/> and <see cref="TuningPolicies"/> for details.</param>
 /// <param name="decayDuration">A duration of full health damage decay. See <see cref="AdaptiveHealthWithLinearDecay"/> for details.</param>
 /// <param name="upMultiplier">A multiplier used to increase health. See <see cref="AdaptiveHealthWithLinearDecay"/> for details.</param>
 /// <param name="downMultiplier">A multiplier used to decrease health. See <see cref="AdaptiveHealthWithLinearDecay"/> for details.</param>
 /// <param name="minimumHealthValue">A minimum possible health value. See <see cref="AdaptiveHealthWithLinearDecay"/> for details.</param>
 public static void AddAdaptiveHealthModifierWithLinearDecay(
     this IWeighedReplicaOrderingBuilder builder,
     IAdaptiveHealthTuningPolicy tuningPolicy,
     TimeSpan decayDuration,
     double upMultiplier       = ClusterClientDefaults.AdaptiveHealthUpMultiplier,
     double downMultiplier     = ClusterClientDefaults.AdaptiveHealthDownMultiplier,
     double minimumHealthValue = ClusterClientDefaults.AdaptiveHealthMinimumValue) =>
 builder.AddModifier(new AdaptiveHealthModifier <HealthWithDecay>(new AdaptiveHealthWithLinearDecay(() => DateTime.UtcNow, decayDuration, upMultiplier, downMultiplier, minimumHealthValue), tuningPolicy, builder.Log));
Exemplo n.º 3
0
        public AdaptiveHealthModifier(IAdaptiveHealthImplementation <THealth> implementation, IAdaptiveHealthTuningPolicy tuningPolicy, ILog log)
        {
            this.implementation = implementation;
            this.tuningPolicy   = tuningPolicy;
            this.log            = log ?? new SilentLog();

            storageKey = implementation.GetType().FullName;
        }
Exemplo n.º 4
0
        public void SetUp()
        {
            replica1 = new Uri("http://replica1");
            replica2 = new Uri("http://replica2");
            replicas = new List <Uri> {
                replica1, replica2
            };
            request = Request.Get("foo/bar");

            storageProvider = Substitute.For <IReplicaStorageProvider>();
            storageProvider.Obtain <int>(Arg.Any <string>()).Returns(storage = new ConcurrentDictionary <Uri, int>());

            implementation = Substitute.For <IAdaptiveHealthImplementation <int> >();
            tuningPolicy   = Substitute.For <IAdaptiveHealthTuningPolicy>();
            modifier       = new AdaptiveHealthModifier <int>(implementation, tuningPolicy, log = new ConsoleLog());
        }
Exemplo n.º 5
0
        public void Should_return_correct_action_based_on_constituents_decisions(AdaptiveHealthAction expected, params AdaptiveHealthAction[] actions)
        {
            var result = new ReplicaResult(new Uri("http://replica"), Responses.Timeout, ResponseVerdict.Accept, TimeSpan.Zero);

            var policies = new IAdaptiveHealthTuningPolicy[actions.Length];

            for (var i = 0; i < actions.Length; i++)
            {
                policies[i] = Substitute.For <IAdaptiveHealthTuningPolicy>();
                policies[i].SelectAction(result).Returns(actions[i]);
            }

            var compositePolicy = new CompositeTuningPolicy(policies);

            compositePolicy.SelectAction(result).Should().Be(expected);
        }