private CheckpointStrategy CreateCheckpointStrategy()
 {
     var result = new CheckpointStrategy.Builder();
     result.FromAll();
     result.AllEvents();
     return result.Build(ProjectionMode.Persistent);
 }
 public void setup()
 {
     var builder = new CheckpointStrategy.Builder();
     builder.FromStream("stream1");
     builder.AllEvents();
     _strategy = builder.Build(ProjectionConfig.GetTest());
 }
 public void setup()
 {
     var builder = new CheckpointStrategy.Builder();
     builder.FromStream("stream1");
     builder.AllEvents();
     _strategy = builder.Build(ProjectionMode.Persistent);
 }
 protected CheckpointStrategy CreateCheckpointStrategy()
 {
     var result = new CheckpointStrategy.Builder();
     result.FromAll();
     result.AllEvents();
     return result.Build();
 }
 public void it_can_be_created()
 {
     var builder = new CheckpointStrategy.Builder();
     builder.FromAll();
     builder.AllEvents();
     var cs = builder.Build(ProjectionMode.Persistent);
 }
 public void it_can_be_created()
 {
     var builder = new CheckpointStrategy.Builder();
     builder.FromAll();
     builder.AllEvents();
     var cs = builder.Build(ProjectionConfig.GetTest());
 }
Exemple #7
0
        public CoreProjection(
            string name, Guid projectionCorrelationId, IPublisher publisher,
            IProjectionStateHandler projectionStateHandler, ProjectionConfig projectionConfig,
            RequestResponseDispatcher
            <ClientMessage.ReadStreamEventsBackward, ClientMessage.ReadStreamEventsBackwardCompleted> readDispatcher,
            RequestResponseDispatcher <ClientMessage.WriteEvents, ClientMessage.WriteEventsCompleted> writeDispatcher,
            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");
            }
            _projectionStateHandler  = projectionStateHandler;
            _projectionCorrelationId = projectionCorrelationId;

            var namingBuilder = new ProjectionNamesBuilder();

            _projectionStateHandler.ConfigureSourceProcessingStrategy(namingBuilder);

            _name = namingBuilder.ForceProjectionName ?? name;
            //TODO: move into name builder
            _stateStreamNamePattern = namingBuilder.StateStreamName ?? ProjectionsStreamPrefix + _name + "-{0}" + ProjectionsStateStreamSuffix;
            _stateStreamName        = namingBuilder.StateStreamName ?? ProjectionsStreamPrefix + _name + ProjectionsStateStreamSuffix;
            _projectionConfig       = projectionConfig;
            _logger          = logger;
            _publisher       = publisher;
            _readDispatcher  = readDispatcher;
            _writeDispatcher = writeDispatcher;
            var builder = new CheckpointStrategy.Builder();

            _projectionStateHandler.ConfigureSourceProcessingStrategy(builder);
            _checkpointStrategy  = builder.Build(_projectionConfig.Mode);
            _partitionStateCache = new PartitionStateCache();
            _processingQueue     = new CoreProjectionQueue(
                projectionCorrelationId, publisher, projectionConfig.PendingEventsThreshold, UpdateStatistics);
            _checkpointManager = this._checkpointStrategy.CreateCheckpointManager(
                this, projectionCorrelationId, this._publisher, this._readDispatcher,
                this._writeDispatcher, this._projectionConfig, this._name, _stateStreamName);
            GoToState(State.Initial);
        }
 private CheckpointStrategy CreateCheckpointStrategy()
 {
     var result = new CheckpointStrategy.Builder();
     if (_source != null)
     {
         _source(result);
     }
     else
     {
         result.FromAll();
         result.AllEvents();
     }
     return result.Build();
 }
Exemple #9
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);
        }
 private CheckpointStrategy CreateCheckpointStrategy()
 {
     var result = new CheckpointStrategy.Builder();
     result.FromAll();
     result.AllEvents();
     return result.Build(ProjectionConfig.GetTest());
 }
        private void BeginCreateAndPrepare(
            ProjectionStateHandlerFactory handlerFactory, ProjectionConfig config,
            Action onPrepared)
        {
            _onPrepared = onPrepared;
            if (handlerFactory == null) throw new ArgumentNullException("handlerFactory");
            if (config == null) throw new ArgumentNullException("config");

            //TODO: which states are allowed here?
            if (_state >= ManagedProjectionState.Preparing)
                throw new InvalidOperationException("Already preparing or has been prepared");

            //TODO: load configuration from the definition

            var createProjectionMessage =
                new CoreProjectionManagementMessage.CreateAndPrepare(
                    new PublishEnvelope(_inputQueue), _id, _name, config, delegate
                        {
                            // this delegate runs in the context of a projection core thread
                            // TODO: move this code to the projection core service as we may be in different processes in the future
                            IProjectionStateHandler stateHandler = null;
                            try
                            {
                                stateHandler = handlerFactory.Create(HandlerType, Query, Console.WriteLine);
                                var checkpointStrategyBuilder = new CheckpointStrategy.Builder();
                                stateHandler.ConfigureSourceProcessingStrategy(checkpointStrategyBuilder);
                                checkpointStrategyBuilder.Validate(Mode); // avoid future exceptions in coreprojection
                                return stateHandler;
                            }
                            catch (Exception ex)
                            {
                                SetFaulted(
                                    string.Format(
                                        "Cannot create a projection state handler.\r\n\r\nHandler type: {0}\r\nQuery:\r\n\r\n{1}\r\n\r\nMessage:\r\n\r\n{2}",
                                        HandlerType, Query, ex.Message), ex);
                                if (stateHandler != null)
                                    stateHandler.Dispose();
                                throw;
                            }
                        });

            //note: set runnign before start as coreProjection.start() can respond with faulted
            _state = ManagedProjectionState.Preparing;
            _coreQueue.Publish(createProjectionMessage);
        }
 public void Setup()
 {
     _builder = new CheckpointStrategy.Builder();
     Given();
     When();
 }
        private void Start(IPublisher coreOutput, ProjectionStateHandlerFactory handlerFactory, ProjectionConfig config)
        {
            if (coreOutput == null) throw new ArgumentNullException("coreOutput");
            if (handlerFactory == null) throw new ArgumentNullException("handlerFactory");
            if (config == null) throw new ArgumentNullException("config");

            if (_coreProjection != null)
                throw new InvalidOperationException("CoreProjection has been already created");

            IProjectionStateHandler stateHandler = null;
            try
            {
                stateHandler = handlerFactory.Create(HandlerType, Query, Console.WriteLine);
                var checkpointStrategyBuilder = new CheckpointStrategy.Builder();
                stateHandler.ConfigureSourceProcessingStrategy(checkpointStrategyBuilder);
                checkpointStrategyBuilder.Validate(this.Mode); // avoid future exceptions in coreprojection
                // constructor can fail if wrong source defintion
                //TODO: revise it
                _coreProjection = new CoreProjection(_name, _id, coreOutput, stateHandler, config, _logger);
            }
            catch (Exception ex)
            {
                SetFaulted(
                    String.Format(
                        "Cannot create a projection state handler.\r\n\r\nHandler type: {0}\r\nQuery:\r\n\r\n{1}\r\n\r\nMessage:\r\n\r\n{2}",
                        HandlerType, Query, ex.Message), ex);
                if (stateHandler != null)
                    stateHandler.Dispose();
                return;
            }

            //TODO: load configuration from the definition
            _state = ManagedProjectionState.Running;
            //note: set runnign before start as coreProjection.start() can respond with faulted
            _coreProjection.Start();
        }
 protected virtual CheckpointStrategy CreateCheckpointStrategy()
 {
     var result = new CheckpointStrategy.Builder();
     if (_source != null)
     {
         _source(result);
     }
     else
     {
         result.FromAll();
         result.AllEvents();
         result.SetEmitStateUpdated();
     }
     return result.Build(ProjectionConfig.GetTest());
 }
 protected virtual CheckpointStrategy CreateCheckpointStrategy()
 {
     var result = new CheckpointStrategy.Builder();
     var readerBuilder = new ReaderStrategy.Builder();
     if (_source != null)
     {
         _source(readerBuilder);
         _source(result);
     }
     else
     {
         readerBuilder.FromAll();
         readerBuilder.AllEvents();
         result.FromAll();
         result.AllEvents();
     }
     var config = ProjectionConfig.GetTest();
     return result.Build(config, null, readerBuilder.Build(new RealTimeProvider(), runAs: null));
 }
Exemple #16
0
        private void Start(ProjectionStateHandlerFactory handlerFactory, ProjectionConfig config)
        {
            if (handlerFactory == null) throw new ArgumentNullException("handlerFactory");
            if (config == null) throw new ArgumentNullException("config");

            if (_state == ManagedProjectionState.Running)
                throw new InvalidOperationException("Already started");

            //TODO: load configuration from the definition

            var createProjectionMessage = new ProjectionMessage.CoreService.Management.Create(new PublishEnvelope(_inputQueue), _id, _name, config, delegate
                {
                    IProjectionStateHandler stateHandler = null;
                    try
                    {
                        stateHandler = handlerFactory.Create(this.HandlerType, this.Query, Console.WriteLine);
                        var checkpointStrategyBuilder = new CheckpointStrategy.Builder();
                        stateHandler.ConfigureSourceProcessingStrategy(checkpointStrategyBuilder);
                        checkpointStrategyBuilder.Validate(Mode); // avoid future exceptions in coreprojection
                        return stateHandler;
                    }
                    catch (Exception ex)
                    {
                        SetFaulted(String.Format("Cannot create a projection state handler.\r\n\r\nHandler type: {0}\r\nQuery:\r\n\r\n{1}\r\n\r\nMessage:\r\n\r\n{2}", HandlerType, Query, ex.Message), ex);
                        if (stateHandler != null)
                            stateHandler.Dispose();
                        throw;
                    }
                });

            //note: set runnign before start as coreProjection.start() can respond with faulted
            _state = ManagedProjectionState.Running;
            _coreQueue.Publish(createProjectionMessage);
            _coreQueue.Publish(new ProjectionMessage.Projections.Management.Start(_id));
        }