Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        /// <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");
            }
Esempio n. 5
0
 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);
            }));
        }
Esempio n. 7
0
        /// <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)
 {
 }