// ReSharper disable once ParameterHidesMember protected private async Task <StreamCoordinates> SeekToEndAsync(StreamShardingSettings shardingSettings) { var query = new SeekToEndStreamQuery(settings.StreamName) { ClientShard = shardingSettings.ClientShardIndex, ClientShardCount = shardingSettings.ClientShardCount }; SeekToEndStreamResult result; using (var spanBuilder = tracer.BeginConsumerCustomOperationSpan("SeekToEnd")) { do { result = await client.SeekToEndAsync(query, settings.ApiKeyProvider(), settings.EventsReadTimeout).ConfigureAwait(false); if (!result.IsSuccessful) { log.Warn( "Failed to seek to end for Hercules stream '{StreamName}'. " + "Status: {Status}. Error: '{Error}'.", settings.StreamName, result.Status, result.ErrorDetails); await DelayOnError().ConfigureAwait(false); } } while (!result.IsSuccessful); spanBuilder.SetStream(query.Name); spanBuilder.SetShard(query.ClientShard, query.ClientShardCount); } return(result.Payload.Next); }
public async Task <StreamCoordinates> SeekToEndAsync( StreamShardingSettings shardingSettings, CancellationToken cancellationToken = default) { var seekToEndQuery = new SeekToEndStreamQuery(settings.StreamName) { ClientShard = shardingSettings.ClientShardIndex, ClientShardCount = shardingSettings.ClientShardCount }; var end = await settings.StreamClient.SeekToEndAsync(seekToEndQuery, settings.EventsReadTimeout, cancellationToken).ConfigureAwait(false); return(end.Payload.Next); }
public async Task <SeekToEndStreamResult> SeekToEndAsync(SeekToEndStreamQuery query, string apiKey, TimeSpan timeout, CancellationToken cancellationToken = new CancellationToken()) { try { var url = new RequestUrlBuilder("stream/seekToEnd") { { Constants.QueryParameters.Stream, query.Name }, { Constants.QueryParameters.ClientShard, query.ClientShard }, { Constants.QueryParameters.ClientShardCount, query.ClientShardCount } } .Build(); var request = Request .Get(url); if (!string.IsNullOrEmpty(apiKey)) { request = request.WithHeader(Constants.HeaderNames.ApiKey, apiKey); } var result = await client .SendAsync(request, timeout, cancellationToken : cancellationToken) .ConfigureAwait(false); try { var operationStatus = responseAnalyzer.Analyze(result.Response, out var errorMessage); if (operationStatus != HerculesStatus.Success) { return(new SeekToEndStreamResult(operationStatus, null, errorMessage)); } return(new SeekToEndStreamResult(operationStatus, ParseSeekToEndResponseBody(result.Response), errorMessage)); } finally { if (result.Response.HasContent) { bufferPool.Return(result.Response.Content.Buffer); } } } catch (Exception error) { log.Warn(error); return(new SeekToEndStreamResult(HerculesStatus.UnknownError, null, error.Message)); } }
public Task <SeekToEndStreamResult> SeekToEndAsync(SeekToEndStreamQuery query, TimeSpan timeout, CancellationToken cancellationToken = default) => client.SeekToEndAsync(query, timeout, cancellationToken);
public static SeekToEndStreamResult SeekToEnd( [NotNull] this IHerculesStreamClient client, [NotNull] SeekToEndStreamQuery query, TimeSpan timeout, CancellationToken cancellationToken = default) => client.SeekToEndAsync(query, timeout, cancellationToken).GetAwaiter().GetResult();
public Task <SeekToEndStreamResult> SeekToEndAsync(SeekToEndStreamQuery query, TimeSpan timeout, CancellationToken cancellationToken = new CancellationToken()) => client.SeekToEndAsync(query, settings.ApiKeyProvider(), timeout, cancellationToken);