コード例 #1
0
        public void TestSetup()
        {
            replica1 = new Uri("http://replica");
            replica2 = new Uri("http://replica");
            request  = Request.Get("foo/bar");

            oneReplicaResult = new ClusterResult(
                ClusterResultStatus.ReplicasExhausted,
                new[]
            {
                new ReplicaResult(replica1, Responses.Timeout, ResponseVerdict.Reject, TimeSpan.Zero)
            },
                null,
                request);

            twoReplicasResult = new ClusterResult(
                ClusterResultStatus.ReplicasExhausted,
                new[]
            {
                new ReplicaResult(replica1, Responses.Timeout, ResponseVerdict.Reject, TimeSpan.Zero),
                new ReplicaResult(replica2, Responses.Timeout, ResponseVerdict.Reject, TimeSpan.Zero)
            },
                null,
                request);

            context = Substitute.For <IRequestContext>();
            context.Log.Returns(new SilentLog());
            context.MaximumReplicasToUse.Returns(int.MaxValue);

            options = new ReplicaBudgetingOptions(Guid.NewGuid().ToString(), 1, MinimumRequests, CriticalRatio);
            module  = new ReplicaBudgetingModule(options);
        }
        /// <summary>
        /// Sets up a replica budgeting mechanism with given parameters.
        /// </summary>
        /// <param name="configuration">A configuration to be modified.</param>
        /// <param name="storageKey">See <see cref="ReplicaBudgetingOptions.StorageKey"/>.</param>
        /// <param name="minutesToTrack">See <see cref="ReplicaBudgetingOptions.MinutesToTrack"/>.</param>
        /// <param name="minimumRequests">See <see cref="ReplicaBudgetingOptions.MinimumRequests"/>.</param>
        /// <param name="criticalRatio">See <see cref="ReplicaBudgetingOptions.CriticalRatio"/>.</param>
        public static void SetupReplicaBudgeting(
            this IClusterClientConfiguration configuration,
            string storageKey,
            int minutesToTrack   = ClusterClientDefaults.ReplicaBudgetingMinutesToTrack,
            int minimumRequests  = ClusterClientDefaults.ReplicaBudgetingMinimumRequests,
            double criticalRatio = ClusterClientDefaults.ReplicaBudgetingCriticalRatio)
        {
            var options = new ReplicaBudgetingOptions(storageKey, minutesToTrack, minimumRequests, criticalRatio);

            configuration.AddRequestModule(new ReplicaBudgetingModule(options), RequestModule.RequestExecution);
        }