public StreamSegmentReaderSettings(
     [NotNull] string streamName,
     [NotNull] IHerculesStreamClient <T> streamClient,
     [NotNull] StreamCoordinates start,
     [NotNull] StreamCoordinates end)
 {
     StreamName   = streamName;
     StreamClient = streamClient;
     Start        = start.ToDictionary();
     End          = end.ToDictionary();
 }
 public StreamConsumerSettings(
     [NotNull] string streamName,
     [NotNull] IHerculesStreamClient <T> streamClient,
     [NotNull] IStreamEventsHandler <T> eventsHandler,
     [NotNull] IStreamCoordinatesStorage coordinatesStorage,
     [NotNull] Func <StreamShardingSettings> shardingSettingsProvider)
 {
     StreamName               = streamName ?? throw new ArgumentNullException(nameof(streamName));
     StreamClient             = streamClient ?? throw new ArgumentNullException(nameof(streamClient));
     EventsHandler            = eventsHandler ?? throw new ArgumentNullException(nameof(eventsHandler));
     CoordinatesStorage       = coordinatesStorage ?? throw new ArgumentNullException(nameof(coordinatesStorage));
     ShardingSettingsProvider = shardingSettingsProvider ?? throw new ArgumentNullException(nameof(shardingSettingsProvider));
 }
Example #3
0
        public static void WaitForAnyRecord(this IHerculesStreamClient client, string stream)
        {
            var readQuery = new ReadStreamQuery(stream)
            {
                Limit            = 1,
                Coordinates      = new StreamCoordinates(new StreamPosition[0]),
                ClientShard      = 0,
                ClientShardCount = 1
            };

            new Action(() => client.Read(readQuery, 20.Seconds()).Payload.Events.Should().NotBeEmpty())
            .ShouldPassIn(20.Seconds());
        }
 public StreamConsumerSettings(
     [NotNull] string streamName,
     [NotNull] IHerculesStreamClient streamClient,
     [NotNull] IStreamEventsHandler eventsHandler,
     [NotNull] IStreamCoordinatesStorage coordinatesStorage,
     [NotNull] Func <StreamShardingSettings> shardingSettingsProvider)
     : base(
         streamName,
         streamClient.ToGenericClient(),
         eventsHandler.ToGenericHandler(),
         coordinatesStorage,
         shardingSettingsProvider)
 {
 }
 public StreamTransformerSettings(
     [NotNull] string sourceStreamName,
     [NotNull] string targetStreamName,
     [NotNull] IHerculesStreamClient streamClient,
     [NotNull] IHerculesGateClient gateClient,
     [NotNull] IStreamCoordinatesStorage coordinatesStorage,
     [NotNull] Func <StreamShardingSettings> shardingSettingsProvider)
 {
     SourceStreamName         = sourceStreamName ?? throw new ArgumentNullException(nameof(sourceStreamName));
     TargetStreamName         = targetStreamName ?? throw new ArgumentNullException(nameof(targetStreamName));
     StreamClient             = streamClient ?? throw new ArgumentNullException(nameof(streamClient));
     GateClient               = gateClient ?? throw new ArgumentNullException(nameof(gateClient));
     CoordinatesStorage       = coordinatesStorage ?? throw new ArgumentNullException(nameof(coordinatesStorage));
     ShardingSettingsProvider = shardingSettingsProvider ?? throw new ArgumentNullException(nameof(shardingSettingsProvider));
 }
Example #6
0
        public static List <HerculesEvent>[] ReadEvents(
            this IHerculesStreamClient client,
            string stream,
            int count,
            int limit,
            int clientShards,
            StreamCoordinates coordinates = null)
        {
            var timeout = 30.Seconds();

            var stopwatch  = Stopwatch.StartNew();
            var eventsRead = 0;

            var clientShardTasks = Enumerable.Range(0, clientShards).Select(ReadSingleClientShard);

            var events = Task.WhenAll(clientShardTasks).GetAwaiter().GetResult();

            events.Sum(x => x.Count).Should().Be(count);
            return(events);

            async Task <List <HerculesEvent> > ReadSingleClientShard(int clientShard)
            {
                var shardEvents = new List <HerculesEvent>();
                var readQuery   = new ReadStreamQuery(stream)
                {
                    Limit            = limit,
                    Coordinates      = coordinates ?? StreamCoordinates.Empty,
                    ClientShard      = clientShard,
                    ClientShardCount = clientShards
                };

                while (stopwatch.Elapsed < timeout && eventsRead < count)
                {
                    var result = await client.ReadAsync(readQuery, timeout);

                    result.IsSuccessful.Should().BeTrue();

                    var eventsFromResponse = result.Payload.Events;

                    shardEvents.AddRange(eventsFromResponse);
                    readQuery.Coordinates = result.Payload.Next;
                    Interlocked.Add(ref eventsRead, eventsFromResponse.Count);
                    await Task.Delay(100);
                }

                return(shardEvents);
            }
        }
Example #7
0
 public GenericAdapter(IHerculesStreamClient client)
 {
     this.client = client;
 }
Example #8
0
 public static IHerculesStreamClient <HerculesEvent> ToGenericClient([NotNull] this IHerculesStreamClient client)
 {
     return(new GenericAdapter(client));
 }
Example #9
0
 public static SeekToEndStreamResult SeekToEnd(
     [NotNull] this IHerculesStreamClient client,
     [NotNull] SeekToEndStreamQuery query,
     TimeSpan timeout,
     CancellationToken cancellationToken = default) =>
 client.SeekToEndAsync(query, timeout, cancellationToken).GetAwaiter().GetResult();
 public static ReadStreamResult <T> Read <T>(
     [NotNull] this IHerculesStreamClient <T> client,
     [NotNull] ReadStreamQuery query,
     TimeSpan timeout,
     CancellationToken cancellationToken = default) =>
 client.ReadAsync(query, timeout, cancellationToken).GetAwaiter().GetResult();
Example #11
0
 public static List <HerculesEvent> ReadEvents(
     this IHerculesStreamClient client,
     string stream,
     int count,
     StreamCoordinates coordinates,
     int limit = 10000) => client.ReadEvents(stream, count, limit, 1, coordinates).Single();
 public StreamReaderSettings([NotNull] string streamName, [NotNull] IHerculesStreamClient streamClient)
     : base(streamName, streamClient.ToGenericClient())
 {
 }
 public StreamReaderSettings([NotNull] string streamName, [NotNull] IHerculesStreamClient<T> streamClient)
 {
     StreamName = streamName;
     StreamClient = streamClient;
 }