Exemplo n.º 1
0
        public void Learn(ReplicaResult result, IReplicaStorageProvider storageProvider)
        {
            var storage = storageProvider.Obtain <THealth>(storageKey);

            while (true)
            {
                THealth currentHealth;
                THealth newHealth;
                bool    foundHealth;

                if (!(foundHealth = storage.TryGetValue(result.Replica, out currentHealth)))
                {
                    currentHealth = implementation.CreateDefaultHealth();
                }

                switch (tuningPolicy.SelectAction(result))
                {
                case AdaptiveHealthAction.Increase:
                    newHealth = implementation.IncreaseHealth(currentHealth);
                    break;

                case AdaptiveHealthAction.Decrease:
                    newHealth = implementation.DecreaseHealth(currentHealth);
                    break;

                default:
                    newHealth = currentHealth;
                    break;
                }

                if (implementation.AreEqual(currentHealth, newHealth))
                {
                    break;
                }

                var updatedHealth = foundHealth
                    ? storage.TryUpdate(result.Replica, newHealth, currentHealth)
                    : storage.TryAdd(result.Replica, newHealth);

                if (updatedHealth)
                {
                    implementation.LogHealthChange(result.Replica, currentHealth, newHealth, log);
                    break;
                }
            }
        }
Exemplo n.º 2
0
 private void SetupTuningAction(AdaptiveHealthAction action)
 {
     tuningPolicy.SelectAction(Arg.Any <ReplicaResult>()).Returns(action);
 }