public AllSubscriptionFiltered(IPublisher bus,
                                           Position?startPosition,
                                           bool resolveLinks,
                                           IEventFilter eventFilter,
                                           ClaimsPrincipal user,
                                           bool requiresLeader,
                                           IReadIndex readIndex,
                                           uint?maxSearchWindow,
                                           uint checkpointIntervalMultiplier,
                                           Func <Position, Task> checkpointReached,
                                           CancellationToken cancellationToken)
            {
                if (bus == null)
                {
                    throw new ArgumentNullException(nameof(bus));
                }

                if (eventFilter == null)
                {
                    throw new ArgumentNullException(nameof(eventFilter));
                }

                if (readIndex == null)
                {
                    throw new ArgumentNullException(nameof(readIndex));
                }

                if (checkpointReached == null)
                {
                    throw new ArgumentNullException(nameof(checkpointReached));
                }

                if (checkpointIntervalMultiplier == 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(checkpointIntervalMultiplier));
                }

                _subscriptionId  = Guid.NewGuid();
                _bus             = bus;
                _resolveLinks    = resolveLinks;
                _eventFilter     = eventFilter;
                _user            = user;
                _requiresLeader  = requiresLeader;
                _readIndex       = readIndex;
                _maxSearchWindow = maxSearchWindow;
                _checkpointIntervalMultiplier = checkpointIntervalMultiplier;
                _checkpointReached            = checkpointReached;
                _cancellationToken            = cancellationToken;
                _subscriptionStarted          = new TaskCompletionSource <bool>();
                _subscriptionStarted.SetResult(true);

                _inner = startPosition == Position.End
                                        ? (IStreamSubscription) new LiveStreamSubscription(_subscriptionId, _bus,
                                                                                           Position.FromInt64(_readIndex.LastIndexedPosition, _readIndex.LastIndexedPosition),
                                                                                           _resolveLinks, _eventFilter, _user, _requiresLeader, _maxSearchWindow,
                                                                                           _checkpointIntervalMultiplier, checkpointReached, _cancellationToken)
                                        : new CatchupAllSubscription(_subscriptionId, bus, startPosition ?? Position.Start, resolveLinks,
                                                                     _eventFilter, user, _requiresLeader, readIndex, _maxSearchWindow, _checkpointIntervalMultiplier, checkpointReached,
                                                                     cancellationToken);
            }
            public AllSubscriptionFiltered(IPublisher bus,
                                           Position position,
                                           bool resolveLinks,
                                           IEventFilter eventFilter,
                                           IPrincipal user,
                                           IReadIndex readIndex,
                                           CancellationToken cancellationToken)
            {
                if (bus == null)
                {
                    throw new ArgumentNullException(nameof(bus));
                }

                if (readIndex == null)
                {
                    throw new ArgumentNullException(nameof(readIndex));
                }

                if (eventFilter == null)
                {
                    throw new ArgumentNullException(nameof(eventFilter));
                }

                _bus                 = bus;
                _nextPosition        = position;
                _resolveLinks        = resolveLinks;
                _eventFilter         = eventFilter;
                _user                = user;
                _readIndex           = readIndex;
                _disposedTokenSource = new CancellationTokenSource();
                _buffer              = new ConcurrentQueue <ResolvedEvent>();
                _tokenRegistration   = cancellationToken.Register(_disposedTokenSource.Dispose);
            }
                public CatchupAllSubscription(Guid subscriptionId,
                                              IPublisher bus,
                                              Position position,
                                              bool resolveLinks,
                                              IEventFilter eventFilter,
                                              ClaimsPrincipal user,
                                              bool requiresLeader,
                                              IReadIndex readIndex,
                                              uint?maxWindowSize,
                                              uint checkpointIntervalMultiplier,
                                              Func <Position, Task> checkpointReached,
                                              CancellationToken cancellationToken)
                {
                    if (bus == null)
                    {
                        throw new ArgumentNullException(nameof(bus));
                    }

                    if (eventFilter == null)
                    {
                        throw new ArgumentNullException(nameof(eventFilter));
                    }

                    if (readIndex == null)
                    {
                        throw new ArgumentNullException(nameof(readIndex));
                    }

                    if (checkpointReached == null)
                    {
                        throw new ArgumentNullException(nameof(checkpointReached));
                    }

                    if (checkpointIntervalMultiplier == 0)
                    {
                        throw new ArgumentOutOfRangeException(nameof(checkpointIntervalMultiplier));
                    }

                    _subscriptionId = subscriptionId;
                    _bus            = bus;
                    _nextPosition   = position == Position.End
                                                ? Position.FromInt64(readIndex.LastIndexedPosition, readIndex.LastIndexedPosition)
                                                : position;
                    _startPosition  = position == Position.End ? Position.Start : position;
                    _resolveLinks   = resolveLinks;
                    _eventFilter    = eventFilter;
                    _user           = user;
                    _requiresLeader = requiresLeader;
                    _checkpointIntervalMultiplier = checkpointIntervalMultiplier;
                    _checkpointReached            = checkpointReached;
                    _maxWindowSize       = maxWindowSize ?? ReadBatchSize;
                    _disposedTokenSource = new CancellationTokenSource();
                    _buffer             = new ConcurrentQueueWrapper <(ResolvedEvent, Position?)>();
                    _tokenRegistration  = cancellationToken.Register(_disposedTokenSource.Dispose);
                    _currentPosition    = _startPosition;
                    _checkpointInterval = 0;
                    Log.Information("Catch-up subscription {subscriptionId} to $all:{eventFilter} running...",
                                    _subscriptionId, _eventFilter);
                }
Пример #4
0
            public ReadAllBackwardsFiltered(IPublisher bus,
                                            Position position,
                                            ulong maxCount,
                                            bool resolveLinks,
                                            IEventFilter eventFilter,
                                            uint?maxSearchWindow,
                                            ClaimsPrincipal user,
                                            bool requiresLeader,
                                            DateTime deadline,
                                            CancellationToken cancellationToken)
            {
                if (bus == null)
                {
                    throw new ArgumentNullException(nameof(bus));
                }

                if (eventFilter == null)
                {
                    throw new ArgumentNullException(nameof(eventFilter));
                }

                if (maxCount <= 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(maxCount));
                }

                if (maxSearchWindow.HasValue && maxSearchWindow.Value <= maxCount)
                {
                    throw new ArgumentOutOfRangeException(nameof(maxSearchWindow));
                }

                _bus                 = bus;
                _nextPosition        = position;
                _maxCount            = maxCount;
                _eventFilter         = eventFilter;
                _maxSearchWindow     = maxSearchWindow ?? (uint)maxCount;
                _resolveLinks        = resolveLinks;
                _user                = user;
                _requiresLeader      = requiresLeader;
                _deadline            = deadline;
                _disposedTokenSource = new CancellationTokenSource();
                _buffer              = new ConcurrentQueue <ResolvedEvent>();
                _tokenRegistration   = cancellationToken.Register(_disposedTokenSource.Dispose);
            }