public StreamApiRequestSender( [NotNull] IClusterProvider clusterProvider, [NotNull] ILog log, [NotNull] BufferPool bufferPool, [CanBeNull] ClusterClientSetup additionalSetup) { this.log = log; this.bufferPool = bufferPool; client = ClusterClientFactory.Create( clusterProvider, log, Constants.ServiceNames.StreamApi, config => { config.SetupUniversalTransport( new UniversalTransportSettings { BufferFactory = bufferPool.Rent }); config.AddResponseTransform(TryDecompress); additionalSetup?.Invoke(config); }); responseAnalyzer = new ResponseAnalyzer(ResponseAnalysisContext.Stream); compressionEnabled = LZ4Helper.Enabled; }
/// <summary> /// Creates a <see cref="ClusterClient"/> instance using given <paramref name="log"/> and <paramref name="setup"/> delegate. /// </summary> /// <exception cref="ClusterClientException">Configuration was incomplete or invalid.</exception> public ClusterClient(ILog log, ClusterClientSetup setup) { configuration = new ClusterClientConfiguration(log ?? new SilentLog()); setup(configuration); configuration.ValidateOrDie(); configuration.AugmentWithDefaults(); if (configuration.ReplicaTransform != null) { configuration.ClusterProvider = new TransformingClusterProvider(configuration.ClusterProvider, configuration.ReplicaTransform); } if (configuration.TransferDistributedContext) { configuration.Transport = new TransportWithDistributedContext(configuration.Transport); } if (configuration.EnableTracing) { configuration.Transport = new TransportWithTracing(configuration.Transport); } configuration.Transport = new TransportWithAuxiliaryHeaders(configuration.Transport, configuration); ReplicaStorageProvider = ReplicaStorageProviderFactory.Create(configuration.ReplicaStorageScope); var modules = RequestModuleChainBuilder.BuildChain(configuration, ReplicaStorageProvider); pipelineDelegate = RequestModuleChainBuilder.BuildChainDelegate(modules); }
public async Task GetBytesAsync_should_deserialize_bytes_from_response() { var responseBytes = new byte[] { 1, 2, 3 }; ClusterClientSetup.SetResponseBody(responseBytes); var bytes = await CreateHttp().GetBytesAsync("/some-resource"); bytes.Should().BeEquivalentTo(responseBytes); }
public async Task GetBytesAsync_should_send_GET_request_to_absolute_URI() { var responseBytes = new byte[] { 1, 2, 3 }; ClusterClientSetup.SetResponseBody(responseBytes); await CreateHttp().GetBytesAsync("/some-resource"); ClusterClientVerify.SentRequest.Should().NotBeNull(); ClusterClientVerify.SentRequest !.Url.Should().Be(new Uri("https://test/some-resource")); ClusterClientVerify.SentRequest !.Method.Should().Be("GET"); }
public GateRequestSender( [NotNull] IClusterProvider clusterProvider, [NotNull] ILog log, [NotNull] BufferPool bufferPool, [CanBeNull] ClusterClientSetup additionalSetup) { this.log = log; this.bufferPool = bufferPool; client = ClusterClientFactory.Create(clusterProvider, log, Constants.ServiceNames.Gate, additionalSetup); responseAnalyzer = new ResponseAnalyzer(ResponseAnalysisContext.Stream); compressionEnabled = LZ4Helper.Enabled; }
private static ClusterClient CreateClient(IClusterProvider cluster, ClusterClientSetup setup, ILog log, TimeSpan timeout) { return(new ClusterClient( log.WithMinimumLevel(LogLevel.Warn), config => { config.ClusterProvider = cluster; config.SetupUniversalTransport(); config.DefaultTimeout = timeout; config.DefaultRequestStrategy = Strategy.Forking3; config.Logging = new LoggingOptions { LogRequestDetails = false, LogResultDetails = false }; config.MaxReplicasUsedPerRequest = int.MaxValue; config.TargetServiceName = "ClusterConfig"; config.SetupWeighedReplicaOrdering( builder => builder.AddAdaptiveHealthModifierWithLinearDecay(TimeSpan.FromMinutes(2))); config.SetupResponseCriteria( new AcceptNonRetriableCriterion(), new Reject404ErrorsCriterion(), new RejectNetworkErrorsCriterion(), new RejectServerErrorsCriterion(), new RejectThrottlingErrorsCriterion(), new RejectUnknownErrorsCriterion(), new AlwaysAcceptCriterion()); config.AddResponseTransform(new GzipBodyTransform()); config.RetryPolicy = new RemoteRetryPolicy(); config.RetryStrategy = new LinearBackoffRetryStrategy(5, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(3)); setup?.Invoke(config); })); }
/// <summary> /// Creates a <see cref="ClusterClient"/> instance using given <paramref name="log"/> and <paramref name="setup"/> delegate. /// </summary> /// <exception cref="ClusterClientException">Configuration was incomplete or invalid.</exception> public ClusterClient(ILog log, ClusterClientSetup setup) { configuration = new ClusterClientConfiguration(log ?? new SilentLog()); setup(configuration); configuration.ValidateOrDie(); configuration.AugmentWithDefaults(); configuration.ApplyReplicaTransform(); configuration.SetupRequestTimeoutHeader(); ReplicaStorageProvider = ReplicaStorageProviderFactory.Create(configuration.ReplicaStorageScope); var modules = RequestModuleChainBuilder.BuildChain(configuration, ReplicaStorageProvider); pipelineDelegate = RequestModuleChainBuilder.BuildChainDelegate(modules); defaultParameters = RequestParameters.Empty .WithStrategy(configuration.DefaultRequestStrategy) .WithPriority(configuration.DefaultPriority) .WithConnectionTimeout(configuration.DefaultConnectionTimeout); }
public static Clusterclient.Core.ClusterClient Create( [NotNull] IClusterProvider clusterProvider, [NotNull] ILog log, [NotNull] string serviceName, [CanBeNull] ClusterClientSetup additionalSetup) { return(new Clusterclient.Core.ClusterClient( log, configuration => { configuration.TargetServiceName = serviceName; configuration.ClusterProvider = clusterProvider; configuration.Transport = new UniversalTransport(log); configuration.DefaultTimeout = 30.Seconds(); configuration.DefaultRequestStrategy = Strategy.Forking2; configuration.SetupWeighedReplicaOrdering(builder => builder.AddAdaptiveHealthModifierWithLinearDecay(10.Minutes())); configuration.SetupReplicaBudgeting(configuration.TargetServiceName); configuration.SetupAdaptiveThrottling(configuration.TargetServiceName); additionalSetup?.Invoke(configuration); })); }
public RemoteUpdater(bool enabled, IClusterProvider cluster, ClusterClientSetup setup, ILog log, string zone, TimeSpan timeout, bool assumeClusterConfigDeployed = false) : this(enabled, enabled ? CreateClient(cluster, setup, log, timeout) : null, log, zone, assumeClusterConfigDeployed) { }