Example #1
0
        /// <inheritdoc />
        public void Learn(ReplicaResult result, IReplicaStorageProvider storageProvider)
        {
            var storage = storageProvider.Obtain <bool>(StorageKey);

            var wasLeader = IsLeader(result.Replica, storage, out var hadStoredStatus);
            var isLeader  = resultDetector.IsLeaderResult(result);

            if (isLeader == wasLeader)
            {
                return;
            }

            var updatedStatus = hadStoredStatus
                ? storage.TryUpdate(result.Replica, isLeader, wasLeader)
                : storage.TryAdd(result.Replica, isLeader);

            if (updatedStatus)
            {
                if (isLeader)
                {
                    LogLeaderDetected(result.Replica);
                }
                else
                {
                    LogLeaderFailed(result.Replica);
                }
            }
        }
        public void Learn_should_correctly_store_new_health(bool?old, bool isLeader, bool?expected)
        {
            if (old.HasValue)
            {
                storage[replica] = old.Value;
            }

            resultDetector.IsLeaderResult(result).Returns(isLeader);

            modifier.Learn(result, storageProvider);

            if (expected.HasValue)
            {
                storage[replica].Should().Be(expected.Value);
            }
            else
            {
                storage.Should().NotContainKey(replica);
            }
        }