コード例 #1
0
        protected ReaderSubscriptionBase(
            IPublisher publisher,
            Guid subscriptionId,
            CheckpointTag @from,
            IReaderStrategy readerStrategy,
            ITimeProvider timeProvider,
            long? checkpointUnhandledBytesThreshold,
            int? checkpointProcessedEventsThreshold,
            bool stopOnEof,
            int? stopAfterNEvents)
        {
            if (publisher == null) throw new ArgumentNullException("publisher");
            if (readerStrategy == null) throw new ArgumentNullException("readerStrategy");
            if (timeProvider == null) throw new ArgumentNullException("timeProvider");
            if (checkpointProcessedEventsThreshold > 0 && stopAfterNEvents > 0)
                throw new ArgumentException("checkpointProcessedEventsThreshold > 0 && stopAfterNEvents > 0");

            _publisher = publisher;
            _readerStrategy = readerStrategy;
            _timeProvider = timeProvider;
            _checkpointUnhandledBytesThreshold = checkpointUnhandledBytesThreshold;
            _checkpointProcessedEventsThreshold = checkpointProcessedEventsThreshold;
            _stopOnEof = stopOnEof;
            _stopAfterNEvents = stopAfterNEvents;
            _subscriptionId = subscriptionId;
            _lastPassedOrCheckpointedEventPosition = null;

            _eventFilter = readerStrategy.EventFilter;

            _positionTagger = readerStrategy.PositionTagger;
            _positionTracker = new PositionTracker(_positionTagger);
            _positionTracker.UpdateByCheckpointTagInitial(@from);
        }
コード例 #2
0
        protected CoreProjectionCheckpointManager(
            IPublisher publisher, Guid projectionCorrelationId, ProjectionConfig projectionConfig, string name,
            PositionTagger positionTagger, ProjectionNamesBuilder namingBuilder, bool usePersistentCheckpoints,
            bool producesRunningResults)
        {
            if (publisher == null) throw new ArgumentNullException("publisher");
            if (projectionConfig == null) throw new ArgumentNullException("projectionConfig");
            if (name == null) throw new ArgumentNullException("name");
            if (positionTagger == null) throw new ArgumentNullException("positionTagger");
            if (namingBuilder == null) throw new ArgumentNullException("namingBuilder");
            if (name == "") throw new ArgumentException("name");

            _lastProcessedEventPosition = new PositionTracker(positionTagger);
            _zeroTag = positionTagger.MakeZeroCheckpointTag();

            _publisher = publisher;
            _projectionCorrelationId = projectionCorrelationId;
            _projectionConfig = projectionConfig;
            _logger = LogManager.GetLoggerFor<CoreProjectionCheckpointManager>();
            _namingBuilder = namingBuilder;
            _usePersistentCheckpoints = usePersistentCheckpoints;
            _producesRunningResults = producesRunningResults;
            _requestedCheckpointState = new PartitionState("", null, _zeroTag);
            _currentProjectionState = new PartitionState("", null, _zeroTag);
        }
コード例 #3
0
        protected ProjectionSubscriptionBase(
            Guid projectionCorrelationId, Guid subscriptionId, CheckpointTag from,
            IHandle<ProjectionSubscriptionMessage.CommittedEventReceived> eventHandler,
            IHandle<ProjectionSubscriptionMessage.CheckpointSuggested> checkpointHandler,
            IHandle<ProjectionSubscriptionMessage.ProgressChanged> progressHandler,
            IHandle<ProjectionSubscriptionMessage.EofReached> eofHandler,
            CheckpointStrategy checkpointStrategy, long? checkpointUnhandledBytesThreshold, bool stopOnEof)
        {
            if (eventHandler == null) throw new ArgumentNullException("eventHandler");
            if (checkpointHandler == null) throw new ArgumentNullException("checkpointHandler");
            if (progressHandler == null) throw new ArgumentNullException("progressHandler");
            if (eofHandler == null) throw new ArgumentNullException("eofHandler");
            if (checkpointStrategy == null) throw new ArgumentNullException("checkpointStrategy");
            _eventHandler = eventHandler;
            _checkpointHandler = checkpointHandler;
            _progressHandler = progressHandler;
            _eofHandler = eofHandler;
            _checkpointStrategy = checkpointStrategy;
            _checkpointUnhandledBytesThreshold = checkpointUnhandledBytesThreshold;
            _stopOnEof = stopOnEof;
            _projectionCorrelationId = projectionCorrelationId;
            _subscriptionId = subscriptionId;
            _lastPassedOrCheckpointedEventPosition = null;

            _eventFilter = checkpointStrategy.EventFilter;

            _positionTagger = checkpointStrategy.PositionTagger;
            _positionTracker = new PositionTracker(_positionTagger);
            _positionTracker.UpdateByCheckpointTagInitial(@from);
        }
 public void When()
 {
     // given
     _tagger = new PreparePositionTagger();
     _positionTracker = new PositionTracker(_tagger);
     var newTag = CheckpointTag.FromPreparePosition(50);
     _positionTracker.UpdateByCheckpointTagInitial(newTag);
 }
        public void When()
        {
            _tagger = new EventByTypeIndexPositionTagger(0, new[] {"type1", "type2"});
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tagger.MakeZeroCheckpointTag());
        }
        public void When()
        {
            _tagger = new StreamPositionTagger("stream1");
            _positionTracker = new PositionTracker(_tagger);
            // when

            _positionTracker.UpdateByCheckpointTagInitial(_tagger.MakeZeroCheckpointTag());
        }
コード例 #7
0
 public void When()
 {
     // given
     _tagger = new StreamPositionTagger("stream1");
     _positionTracker = new PositionTracker(_tagger);
     var newTag = CheckpointTag.FromStreamPosition("stream1", 1, 50);
     _positionTracker.UpdateByCheckpointTagInitial(newTag);
 }
        public void When()
        {
            _tagger = new MultiStreamPositionTagger(0, new [] {"stream1", "stream2"});
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tagger.MakeZeroCheckpointTag());
        }
 public void When()
 {
     // given
     _tagger = new TransactionFilePositionTagger(0);
     _positionTracker = new PositionTracker(_tagger);
     var newTag = CheckpointTag.FromPosition(0, 100, 50);
     _positionTracker.UpdateByCheckpointTagInitial(newTag);
 }
        public void When()
        {
            _tagger = new StreamPositionTagger("stream1");
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateToZero();
        }
 public void When()
 {
     // given
     _tagger = new MultiStreamPositionTagger(0, new []{"stream1", "stream2"});
     _positionTracker = new PositionTracker(_tagger);
     var newTag = CheckpointTag.FromStreamPositions(0, new Dictionary<string, int>{{"stream1", 1}, {"stream2", 2}});
     var newTag2 = CheckpointTag.FromStreamPositions(0, new Dictionary<string, int> { { "stream1", 1 }, { "stream2", 3 } });
     _positionTracker.UpdateByCheckpointTagInitial(newTag);
     _positionTracker.UpdateByCheckpointTagForward(newTag2);
 }
 public void When()
 {
     // given
     _tagger = new StreamPositionTagger("stream1");
     _positionTracker = new PositionTracker(_tagger);
     _positionTracker.Update(
         new ProjectionMessage.Projections.CommittedEventReceived(
             Guid.NewGuid(), new EventPosition(100, 50), "stream1", 1, false,
             new Event(Guid.NewGuid(), "eventtype", false, new byte[0], new byte[0])));
 }
 public void When()
 {
     // given
     _tagger = new EventByTypeIndexPositionTagger(0, new[] {"type1", "type2"});
     _positionTracker = new PositionTracker(_tagger);
     var newTag = CheckpointTag.FromEventTypeIndexPositions(0, new TFPos(10, 5), new Dictionary<string, int> {{"type1", 1}, {"type2", 2}});
     var newTag2 = CheckpointTag.FromEventTypeIndexPositions(0, new TFPos(20, 15), new Dictionary<string, int> {{"type1", 1}, {"type2", 3}});
     _positionTracker.UpdateByCheckpointTagInitial(newTag);
     _positionTracker.UpdateByCheckpointTagForward(newTag2);
 }
コード例 #14
0
        public void When()
        {
            // given
            var tagger = new PreparePositionTagger(0);
            var positionTracker = new PositionTracker(tagger);

            var newTag = CheckpointTag.FromPreparePosition(0, 50);
            positionTracker.UpdateByCheckpointTagInitial(newTag);
            _tag = positionTracker.LastTag;
            _tagger = new PreparePositionTagger(0);
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tag);
        }
        public void When()
        {
            // given
            var tagger = new StreamPositionTagger("stream1");
            var tracker = new PositionTracker(tagger);

            var newTag = CheckpointTag.FromStreamPosition("stream1", 1);
            tracker.UpdateByCheckpointTagInitial(newTag);
            _tag = tracker.LastTag;
            _tagger = new StreamPositionTagger("stream1");
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tag);
        }
        public void When()
        {
            // given
            var tagger = new MultiStreamPositionTagger(new []{"stream1", "stream2"});
            var tracker = new PositionTracker(tagger);

            var newTag = CheckpointTag.FromStreamPositions(new Dictionary<string, int>{{"stream1", 1}, {"stream2", 2}});
            tracker.UpdateByCheckpointTagInitial(newTag);
            _tag = tracker.LastTag;
            _tagger = new MultiStreamPositionTagger(new []{"stream1", "stream2"});
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tag);
        }
        public void When()
        {
            // given
            var tagger = new TransactionFilePositionTagger();
            var positionTracker = new PositionTracker(tagger);

            var newTag = CheckpointTag.FromPosition(100, 50);
            positionTracker.UpdateByCheckpointTagInitial(newTag);
            _tag = positionTracker.LastTag;
            _tagger = new TransactionFilePositionTagger();
            _positionTracker = new PositionTracker(_tagger);
            _positionTracker.UpdateByCheckpointTagInitial(_tag);
            // when

            _positionTracker.Initialize();
        }
コード例 #18
0
        public NoopCheckpointManager(
            IPublisher publisher, Guid projectionCorrelationId, ProjectionConfig projectionConfig, string name,
            PositionTagger positionTagger, ProjectionNamesBuilder namingBuilder)
        {
            if (publisher == null) throw new ArgumentNullException("publisher");
            if (projectionConfig == null) throw new ArgumentNullException("projectionConfig");
            if (name == null) throw new ArgumentNullException("name");
            if (positionTagger == null) throw new ArgumentNullException("positionTagger");
            if (namingBuilder == null) throw new ArgumentNullException("namingBuilder");
            if (name == "") throw new ArgumentException("name");

            _lastProcessedEventPosition = new PositionTracker(positionTagger);

            _publisher = publisher;
            _projectionCorrelationId = projectionCorrelationId;
        }
        public void When()
        {
            // given
            var tagger = new EventByTypeIndexPositionTagger(0, new[] {"type1", "type2"});
            var tracker = new PositionTracker(tagger);

            var newTag = CheckpointTag.FromEventTypeIndexPositions(0, new TFPos(10, 5), new Dictionary<string, int> {{"type1", 1}, {"type2", 2}});

            tracker.UpdateByCheckpointTagInitial(newTag);
            _tag = tracker.LastTag;
            _tagger = new EventByTypeIndexPositionTagger(0, new[] {"type1", "type2"});
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTagInitial(_tag);
        }
コード例 #20
0
        protected ReaderSubscriptionBase(
            IPublisher publisher,
            Guid subscriptionId,
            CheckpointTag @from,
            IReaderStrategy readerStrategy,
            ITimeProvider timeProvider,
            long?checkpointUnhandledBytesThreshold,
            int?checkpointProcessedEventsThreshold,
            int checkpointAfterMs,
            bool stopOnEof,
            int?stopAfterNEvents)
        {
            if (publisher == null)
            {
                throw new ArgumentNullException("publisher");
            }
            if (readerStrategy == null)
            {
                throw new ArgumentNullException("readerStrategy");
            }
            if (timeProvider == null)
            {
                throw new ArgumentNullException("timeProvider");
            }
            if (checkpointProcessedEventsThreshold > 0 && stopAfterNEvents > 0)
            {
                throw new ArgumentException("checkpointProcessedEventsThreshold > 0 && stopAfterNEvents > 0");
            }

            _publisher      = publisher;
            _readerStrategy = readerStrategy;
            _timeProvider   = timeProvider;
            _checkpointUnhandledBytesThreshold  = checkpointUnhandledBytesThreshold;
            _checkpointProcessedEventsThreshold = checkpointProcessedEventsThreshold;
            _checkpointAfter  = TimeSpan.FromMilliseconds(checkpointAfterMs);
            _stopOnEof        = stopOnEof;
            _stopAfterNEvents = stopAfterNEvents;
            _subscriptionId   = subscriptionId;
            _lastPassedOrCheckpointedEventPosition = null;

            _eventFilter = readerStrategy.EventFilter;

            _positionTagger  = readerStrategy.PositionTagger;
            _positionTracker = new PositionTracker(_positionTagger);
            _positionTracker.UpdateByCheckpointTagInitial(@from);
        }
コード例 #21
0
        public void When()
        {
            // given
            var tagger = new TransactionFilePositionTagger();
            var positionTracker = new PositionTracker(tagger);

            positionTracker.Update(
                new ProjectionMessage.Projections.CommittedEventReceived(
                    Guid.NewGuid(), new EventPosition(100, 50), "stream", 1, false,
                    new Event(Guid.NewGuid(), "eventtype", false, new byte[0], new byte[0])));
            _tag = positionTracker.LastTag;
            _tagger = new TransactionFilePositionTagger();
            _positionTracker = new PositionTracker(_tagger);
            // when 

            _positionTracker.UpdateByCheckpointTag(_tag);
        }
コード例 #22
0
        protected CoreProjectionCheckpointManager(
            IPublisher publisher,
            Guid projectionCorrelationId,
            ProjectionConfig projectionConfig,
            string name,
            PositionTagger positionTagger,
            ProjectionNamesBuilder namingBuilder,
            bool usePersistentCheckpoints)
        {
            if (publisher == null)
            {
                throw new ArgumentNullException("publisher");
            }
            if (projectionConfig == null)
            {
                throw new ArgumentNullException("projectionConfig");
            }
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (positionTagger == null)
            {
                throw new ArgumentNullException("positionTagger");
            }
            if (namingBuilder == null)
            {
                throw new ArgumentNullException("namingBuilder");
            }
            if (name == "")
            {
                throw new ArgumentException("name");
            }

            _lastProcessedEventPosition = new PositionTracker(positionTagger);
            _zeroTag = positionTagger.MakeZeroCheckpointTag();

            _publisher = publisher;
            _projectionCorrelationId = projectionCorrelationId;
            _projectionConfig        = projectionConfig;
            _logger                   = LogManager.GetLoggerFor <CoreProjectionCheckpointManager>();
            _namingBuilder            = namingBuilder;
            _usePersistentCheckpoints = usePersistentCheckpoints;
            _requestedCheckpointState = new PartitionState("", null, _zeroTag);
            _currentProjectionState   = new PartitionState("", null, _zeroTag);
        }
コード例 #23
0
        private void CompleteCheckpoint(PositionTracker lastProcessedEventPosition, string projectionState)
        {
            CheckpointTag requestedCheckpointPosition = lastProcessedEventPosition.LastTag;

            if (requestedCheckpointPosition == _lastCompletedCheckpointPosition)
            {
                return; // either suggested or requested to stop
            }
            _inCheckpoint = true;
            _requestedCheckpointPosition  = requestedCheckpointPosition;
            _requestedCheckpointState     = projectionState;
            _handledEventsAfterCheckpoint = 0;

            _closingCheckpoint = _currentCheckpoint;
            _currentCheckpoint = new ProjectionCheckpoint(
                _publisher, this, requestedCheckpointPosition, _positionTagger.MakeZeroCheckpointTag(), _projectionConfig.MaxWriteBatchLength, _logger);
            // checkpoint only after assigning new current checkpoint, as it may call back immediately
            _closingCheckpoint.Prepare(requestedCheckpointPosition);
        }
コード例 #24
0
        public CoreProjection(
            string name, Guid projectionCorrelationId, IPublisher publisher,
            IProjectionStateHandler projectionStateHandler, ProjectionConfig projectionConfig, ILogger logger = null)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (name == "")
            {
                throw new ArgumentException("name");
            }
            if (publisher == null)
            {
                throw new ArgumentNullException("publisher");
            }
            if (projectionStateHandler == null)
            {
                throw new ArgumentNullException("projectionStateHandler");
            }
            _projectionCorrelationId = projectionCorrelationId;
            _name                   = name;
            _projectionConfig       = projectionConfig;
            _logger                 = logger;
            _publisher              = publisher;
            _projectionStateHandler = projectionStateHandler;
            _readDispatcher         =
                new RequestResponseDispatcher
                <ClientMessage.ReadEventsBackwards, ClientMessage.ReadEventsBackwardsCompleted>(
                    _publisher, v => v.CorrelationId, v => v.CorrelationId);
            _projectionCheckpointStreamId = ProjectionsStreamPrefix + _name + ProjectionCheckpointStreamSuffix;
            var builder = new CheckpointStrategy.Builder();

            _projectionStateHandler.ConfigureSourceProcessingStrategy(builder);
            _checkpointStrategy         = builder.Build(_projectionConfig.Mode);
            _eventFilter                = _checkpointStrategy.EventFilter;
            _lastProcessedEventPosition = new PositionTracker(_checkpointStrategy.PositionTagger);
            _partitionStateCache        = new PartitionStateCache();
            GoToState(State.Initial);
        }
コード例 #25
0
        public ProjectionSubscription(
            Guid projectionCorrelationId, CheckpointTag from,
            IHandle<ProjectionMessage.Projections.CommittedEventReceived> eventHandler,
            IHandle<ProjectionMessage.Projections.CheckpointSuggested> checkpointHandler,
            CheckpointStrategy checkpointStrategy, long? checkpointUnhandledBytesThreshold)
        {
            if (eventHandler == null) throw new ArgumentNullException("eventHandler");
            if (checkpointHandler == null) throw new ArgumentNullException("checkpointHandler");
            if (checkpointStrategy == null) throw new ArgumentNullException("checkpointStrategy");
            _eventHandler = eventHandler;
            _checkpointHandler = checkpointHandler;
            _checkpointStrategy = checkpointStrategy;
            _checkpointUnhandledBytesThreshold = checkpointUnhandledBytesThreshold;
            _projectionCorrelationId = projectionCorrelationId;
            _lastPassedOrCheckpointedEventPosition = from.Position;

            _eventFilter = checkpointStrategy.EventFilter;

            _positionTagger = checkpointStrategy.PositionTagger;
            _positionTracker = new PositionTracker(_positionTagger);
            _positionTracker.UpdateByCheckpointTagInitial(from);
        }
コード例 #26
0
        public ProjectionSubscription(
            Guid projectionCorrelationId, CheckpointTag from,
            IHandle <ProjectionSubscriptionMessage.CommittedEventReceived> eventHandler,
            IHandle <ProjectionSubscriptionMessage.CheckpointSuggested> checkpointHandler,
            IHandle <ProjectionSubscriptionMessage.ProgressChanged> progressHandler,
            CheckpointStrategy checkpointStrategy, long?checkpointUnhandledBytesThreshold)
        {
            if (eventHandler == null)
            {
                throw new ArgumentNullException("eventHandler");
            }
            if (checkpointHandler == null)
            {
                throw new ArgumentNullException("checkpointHandler");
            }
            if (progressHandler == null)
            {
                throw new ArgumentNullException("progressHandler");
            }
            if (checkpointStrategy == null)
            {
                throw new ArgumentNullException("checkpointStrategy");
            }
            _eventHandler       = eventHandler;
            _checkpointHandler  = checkpointHandler;
            _progressHandler    = progressHandler;
            _checkpointStrategy = checkpointStrategy;
            _checkpointUnhandledBytesThreshold     = checkpointUnhandledBytesThreshold;
            _projectionCorrelationId               = projectionCorrelationId;
            _lastPassedOrCheckpointedEventPosition = from.Position;

            _eventFilter = checkpointStrategy.EventFilter;

            _positionTagger  = checkpointStrategy.PositionTagger;
            _positionTracker = new PositionTracker(_positionTagger);
            _positionTracker.UpdateByCheckpointTagInitial(from);
        }
コード例 #27
0
 protected CoreProjectionCheckpointManager(
     ICoreProjection coreProjection, IPublisher publisher, Guid projectionCorrelationId,
     RequestResponseDispatcher
         <ClientMessage.ReadStreamEventsBackward, ClientMessage.ReadStreamEventsBackwardCompleted> readDispatcher,
     RequestResponseDispatcher<ClientMessage.WriteEvents, ClientMessage.WriteEventsCompleted> writeDispatcher,
     ProjectionConfig projectionConfig, string name,
     PositionTagger positionTagger)
 {
     if (coreProjection == null) throw new ArgumentNullException("coreProjection");
     if (publisher == null) throw new ArgumentNullException("publisher");
     if (readDispatcher == null) throw new ArgumentNullException("readDispatcher");
     if (writeDispatcher == null) throw new ArgumentNullException("writeDispatcher");
     if (projectionConfig == null) throw new ArgumentNullException("projectionConfig");
     if (name == null) throw new ArgumentNullException("name");
     if (positionTagger == null) throw new ArgumentNullException("positionTagger");
     if (name == "") throw new ArgumentException("name");
     _lastProcessedEventPosition = new PositionTracker(positionTagger);
     _coreProjection = coreProjection;
     _publisher = publisher;
     _projectionCorrelationId = projectionCorrelationId;
     _readDispatcher = readDispatcher;
     _writeDispatcher = writeDispatcher;
     _projectionConfig = projectionConfig;
     _logger = LogManager.GetLoggerFor<CoreProjectionCheckpointManager>();
     _name = name;
     _positionTagger = positionTagger;
 }
コード例 #28
0
 private void RequestCheckpoint(PositionTracker lastProcessedEventPosition)
 {
     if (!_projectionConfig.CheckpointsEnabled)
         throw new InvalidOperationException("Checkpoints are not allowed");
     if (!_inCheckpoint)
         CompleteCheckpoint(lastProcessedEventPosition, _currentProjectionState);
     else
         _coreProjection.Handle(new CoreProjectionProcessingMessage.PauseRequested());
 }
コード例 #29
0
        private void CompleteCheckpoint(PositionTracker lastProcessedEventPosition, string projectionState)
        {
            CheckpointTag requestedCheckpointPosition = lastProcessedEventPosition.LastTag;
            if (requestedCheckpointPosition == _lastCompletedCheckpointPosition)
                return; // either suggested or requested to stop
            _inCheckpoint = true;
            _requestedCheckpointPosition = requestedCheckpointPosition;
            _requestedCheckpointState = projectionState;
            _handledEventsAfterCheckpoint = 0;

            _closingCheckpoint = _currentCheckpoint;
            _currentCheckpoint = new ProjectionCheckpoint(
                _publisher, this, requestedCheckpointPosition, _positionTagger.MakeZeroCheckpointTag(), _projectionConfig.MaxWriteBatchLength, _logger);
            // checkpoint only after assigning new current checkpoint, as it may call back immediately
            _closingCheckpoint.Prepare(requestedCheckpointPosition);
        }
コード例 #30
0
        /// <returns>true - if checkpoint has been completed in-sync</returns>
        private bool StartCheckpoint(PositionTracker lastProcessedEventPosition, PartitionState projectionState)
        {
            Contract.Requires(_closingCheckpoint == null);
            if (projectionState == null) throw new ArgumentNullException("projectionState");

            CheckpointTag requestedCheckpointPosition = lastProcessedEventPosition.LastTag;
            if (requestedCheckpointPosition == _lastCompletedCheckpointPosition)
                return true; // either suggested or requested to stop

            if (_usePersistentCheckpoints) // do not emit any events if we do not use persistent checkpoints
                EmitPartitionCheckpoints();

            _inCheckpoint = true;
            _requestedCheckpointPosition = requestedCheckpointPosition;
            _requestedCheckpointState = projectionState;
            _closingCheckpoint = _currentCheckpoint;
            _currentCheckpoint = CreateProjectionCheckpoint(requestedCheckpointPosition);
            // checkpoint only after assigning new current checkpoint, as it may call back immediately
            _closingCheckpoint.Prepare(requestedCheckpointPosition);
            return false; // even if prepare completes in sync it notifies the world by a message
        }
コード例 #31
0
 /// <returns>true - if checkpoint has beem completed in-sync</returns>
 private bool RequestCheckpoint(PositionTracker lastProcessedEventPosition, bool forcePrepareCheckpoint = false)
 {
     if (!forcePrepareCheckpoint && !_usePersistentCheckpoints)
         throw new InvalidOperationException("Checkpoints are not allowed");
     if (_inCheckpoint)
         throw new InvalidOperationException("Checkpoint in progress");
     return StartCheckpoint(lastProcessedEventPosition, _currentProjectionState);
 }
 public void when()
 {
     _tagger = new TransactionFilePositionTagger(0);
     _positionTracker = new PositionTracker(_tagger);
 }
        protected CoreProjectionCheckpointManager(
            ICoreProjection coreProjection, IPublisher publisher, Guid projectionCorrelationId,
            RequestResponseDispatcher<ClientMessage.ReadStreamEventsBackward, ClientMessage.ReadStreamEventsBackwardCompleted> readDispatcher,
            RequestResponseDispatcher<ClientMessage.WriteEvents, ClientMessage.WriteEventsCompleted> writeDispatcher,
            ProjectionConfig projectionConfig, string name, PositionTagger positionTagger,
            ProjectionNamesBuilder namingBuilder, bool useCheckpoints, bool emitStateUpdated,
            bool emitPartitionCheckpoints)
        {
            if (coreProjection == null) throw new ArgumentNullException("coreProjection");
            if (publisher == null) throw new ArgumentNullException("publisher");
            if (readDispatcher == null) throw new ArgumentNullException("readDispatcher");
            if (writeDispatcher == null) throw new ArgumentNullException("writeDispatcher");
            if (projectionConfig == null) throw new ArgumentNullException("projectionConfig");
            if (name == null) throw new ArgumentNullException("name");
            if (positionTagger == null) throw new ArgumentNullException("positionTagger");
            if (namingBuilder == null) throw new ArgumentNullException("namingBuilder");
            if (name == "") throw new ArgumentException("name");

            if (emitPartitionCheckpoints && emitStateUpdated)
                throw new InvalidOperationException("EmitPartitionCheckpoints && EmitStateUpdated cannot be both set");
            _lastProcessedEventPosition = new PositionTracker(positionTagger);
            _coreProjection = coreProjection;
            _publisher = publisher;
            _projectionCorrelationId = projectionCorrelationId;
            _readDispatcher = readDispatcher;
            _writeDispatcher = writeDispatcher;
            _projectionConfig = projectionConfig;
            _logger = LogManager.GetLoggerFor<CoreProjectionCheckpointManager>();
            _name = name;
            _positionTagger = positionTagger;
            _namingBuilder = namingBuilder;
            _useCheckpoints = useCheckpoints;
            _emitStateUpdated = emitStateUpdated;
            _emitPartitionCheckpoints = emitPartitionCheckpoints;
        }
コード例 #34
0
 public void can_be_created()
 {
     var t = new StreamPositionTagger("stream1");
     var tr = new PositionTracker(t);
 }
 public void when()
 {
     _tagger = new MultiStreamPositionTagger(new []{"stream1", "stream2"});
     _positionTracker = new PositionTracker(_tagger);
 }