public LatencyModule(ILatencyPerformer latencyPerformer, RateManager rateManager, Func <TimeSpan> latencyProvider, Func <double> rateProvider)
 {
     this.latencyProvider  = latencyProvider;
     this.rateProvider     = rateProvider;
     this.latencyPerformer = latencyPerformer;
     this.rateManager      = rateManager;
 }
示例#2
0
 /// <summary>
 /// Inject latency to the every request retry with custom <paramref name="latencyPerformer"/>
 /// </summary>
 /// <example>
 /// <code>
 ///   ------► + injected latency ---► replica(1..n)
 ///     ↑__________retry (1..n)__________________|
 /// </code>
 /// </example>
 /// <param name="configuration">IClusterClientConfiguration instance</param>
 /// <param name="latencyPerformer">Custom class for latency performing or simulation</param>
 /// <param name="latencyProvider">Func returning latency to inject</param>
 /// <param name="rateProvider">Func returning injection probability (rate)</param>
 public static void InjectLatencyOnEveryRetry(
     this IClusterClientConfiguration configuration,
     ILatencyPerformer latencyPerformer,
     Func <TimeSpan> latencyProvider,
     Func <double> rateProvider)
 {
     configuration.AddRequestModule(new LatencyModule(latencyPerformer, new RateManager(), latencyProvider, rateProvider), RequestModule.RequestRetry, ModulePosition.After);
 }
 public LatencyStrategy(ILatencyPerformer latencyPerformer, RateManager rateManager, Func <TimeSpan> latencyProvider, Func <double> rateProvider, IRequestStrategy baseStrategy)
 {
     this.latencyPerformer = latencyPerformer;
     this.rateManager      = rateManager;
     this.latencyProvider  = latencyProvider;
     this.rateProvider     = rateProvider;
     this.baseStrategy     = baseStrategy;
 }
示例#4
0
 /// <summary>
 /// Inject latency to the every strategy IRequestSender.SendToReplicaAsync call with custom <paramref name="latencyPerformer"/>
 /// </summary>
 /// <example>
 /// <code>
 ///   ---► + injected latency ---► replica1 ---► + injected latency ---> replica2 ...
 ///                                                          ◄---------------------|
 /// </code>
 /// </example>
 /// <param name="configuration">IClusterClientConfiguration instance</param>
 /// <param name="latencyPerformer">Custom class for latency performing</param>
 /// <param name="latencyProvider">Func returning latency to inject</param>
 /// <param name="rateProvider">Func returning injection probability (rate)</param>
 public static void InjectLatencyOnEveryNetworkCall(
     this IClusterClientConfiguration configuration,
     ILatencyPerformer latencyPerformer,
     Func <TimeSpan> latencyProvider,
     Func <double> rateProvider)
 {
     configuration.DefaultRequestStrategy = new LatencyStrategy(latencyPerformer, new RateManager(), latencyProvider, rateProvider, configuration.DefaultRequestStrategy);
 }
 public LatencyRequestSender(
     IRequestSender baseRequestSender,
     ILatencyPerformer latencyPerformer,
     RateManager rateManager,
     TimeSpan latency,
     double rate)
 {
     this.baseRequestSender = baseRequestSender;
     this.latencyPerformer  = latencyPerformer;
     this.rateManager       = rateManager;
     this.latency           = latency;
     this.rate = rate;
 }