public void Register(StandardComponents standardComponents) { _leaderInputQueue = QueuedHandler.CreateQueuedHandler(_leaderMainBus, "Projections Leader", standardComponents.QueueStatsManager); _leaderOutputBus = new InMemoryBus("ProjectionManagerAndCoreCoordinatorOutput"); _leaderMainBus.Subscribe <ProjectionSubsystemMessage.RestartSubsystem>(this); _leaderMainBus.Subscribe <ProjectionSubsystemMessage.ComponentStarted>(this); _leaderMainBus.Subscribe <ProjectionSubsystemMessage.ComponentStopped>(this); _leaderMainBus.Subscribe <ProjectionSubsystemMessage.IODispatcherDrained>(this); _leaderMainBus.Subscribe <SystemMessage.SystemCoreReady>(this); _leaderMainBus.Subscribe <SystemMessage.StateChangeMessage>(this); var projectionsStandardComponents = new ProjectionsStandardComponents( _projectionWorkerThreadCount, _runProjections, _leaderOutputBus, _leaderInputQueue, _leaderMainBus, _faultOutOfOrderProjections, _compilationTimeout, _executionTimeout); CreateAwakerService(standardComponents); _coreQueues = ProjectionCoreWorkersNode.CreateCoreWorkers(standardComponents, projectionsStandardComponents); _queueMap = _coreQueues.ToDictionary(v => v.Key, v => (IPublisher)v.Value); ProjectionManagerNode.CreateManagerService(standardComponents, projectionsStandardComponents, _queueMap, _projectionsQueryExpiry); projectionsStandardComponents.LeaderMainBus.Subscribe <CoreProjectionStatusMessage.Stopped>(this); projectionsStandardComponents.LeaderMainBus.Subscribe <CoreProjectionStatusMessage.Started>(this); }
public void setup() { _timeProvider = new FakeTimeProvider(); _queues = new Dictionary <Guid, IPublisher> { { Guid.NewGuid(), new FakePublisher() } }; _timeoutSchedulers = ProjectionCoreWorkersNode.CreateTimeoutSchedulers(_queues.Count); new ProjectionCoreCoordinator( ProjectionType.All, _timeoutSchedulers, _queues.Values.ToArray(), new FakePublisher(), new NoopEnvelope()); }
public void Register(StandardComponents standardComponents) { _masterMainBus = new InMemoryBus("manager input bus"); _masterInputQueue = new QueuedHandler(_masterMainBus, "Projections Master"); _masterOutputBus = new InMemoryBus("ProjectionManagerAndCoreCoordinatorOutput"); var projectionsStandardComponents = new ProjectionsStandardComponents( _projectionWorkerThreadCount, _runProjections, _masterOutputBus, _masterInputQueue, _masterMainBus); CreateAwakerService(standardComponents); _coreQueues = ProjectionCoreWorkersNode.CreateCoreWorkers(standardComponents, projectionsStandardComponents); _queueMap = _coreQueues.ToDictionary(v => v.Key, v => (IPublisher)v.Value); ProjectionManagerNode.CreateManagerService(standardComponents, projectionsStandardComponents, _queueMap); _masterOutputBus.Subscribe(standardComponents.MainQueue.WidenFrom <ProjectionManagementMessage.RequestSystemProjections, Message>()); }
public void Setup() { //TODO: this became an integration test - proper ProjectionCoreService and ProjectionManager testing is required as well _bus.Subscribe(_consumer); _processingQueues = GivenProcessingQueues(); var queues = _processingQueues.ToDictionary(v => v.Item5, v => (IPublisher)v.Item1); _managerMessageDispatcher = new ProjectionManagerMessageDispatcher(queues); _manager = new ProjectionManager( GetInputQueue(), GetInputQueue(), queues, _timeProvider, ProjectionType.All, _ioDispatcher, TimeSpan.FromMinutes(Opts.ProjectionsQueryExpiryDefault), _initializeSystemProjections); _coordinator = new ProjectionCoreCoordinator( ProjectionType.All, ProjectionCoreWorkersNode.CreateTimeoutSchedulers(queues.Count), queues.Values.ToArray(), _bus, Envelope); _bus.Subscribe <ProjectionManagementMessage.Internal.CleanupExpired>(_manager); _bus.Subscribe <ProjectionManagementMessage.Internal.Deleted>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Started>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Stopped>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Prepared>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Faulted>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.StateReport>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.ResultReport>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.StatisticsReport>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Post>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.PostBatch>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.UpdateQuery>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetQuery>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Delete>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetStatistics>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetState>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetResult>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Disable>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Enable>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Abort>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.SetRunAs>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Reset>(_manager); _bus.Subscribe <ClientMessage.WriteEventsCompleted>(_manager); _bus.Subscribe <ClientMessage.ReadStreamEventsForwardCompleted>(_manager); _bus.Subscribe <ClientMessage.ReadStreamEventsBackwardCompleted>(_manager); _bus.Subscribe <ClientMessage.DeleteStreamCompleted>(_manager); _bus.Subscribe <ProjectionSubsystemMessage.StartComponents>(_manager); _bus.Subscribe <ProjectionSubsystemMessage.StopComponents>(_manager); _bus.Subscribe <ProjectionSubsystemMessage.StartComponents>(_coordinator); _bus.Subscribe <ProjectionSubsystemMessage.StopComponents>(_coordinator); if (GetInputQueue() != _processingQueues.First().Item2) { _bus.Subscribe <CoreProjectionManagementControlMessage>( _managerMessageDispatcher); } foreach (var q in _processingQueues) { SetUpCoreServices(q.Item5, q.Item1, q.Item2, q.Item3, q.Item4); } //Given(); WhenLoop(); }
public void Setup() { //TODO: this became an integration test - proper ProjectionCoreService and ProjectionManager testing is required as well _bus.Subscribe(_consumer); _processingQueues = GivenProcessingQueues(); var queues = _processingQueues.ToDictionary(v => v.Item5, v => (IPublisher)v.Item1); _managerMessageDispatcher = new ProjectionManagerMessageDispatcher(queues); _manager = new ProjectionManager( GetInputQueue(), GetInputQueue(), queues, _timeProvider, ProjectionType.All, _initializeSystemProjections); _coordinator = new ProjectionCoreCoordinator( ProjectionType.All, ProjectionCoreWorkersNode.CreateTimeoutSchedulers(queues.Count), queues.Values.ToArray(), _bus, Envelope); _bus.Subscribe <ProjectionManagementMessage.Internal.CleanupExpired>(_manager); _bus.Subscribe <ProjectionManagementMessage.Internal.Deleted>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Started>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Stopped>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Prepared>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.Faulted>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.StateReport>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.ResultReport>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.StatisticsReport>(_manager); _bus.Subscribe <CoreProjectionManagementMessage.SlaveProjectionReaderAssigned>(_manager); _bus.Subscribe <CoreProjectionStatusMessage.ProjectionWorkerStarted>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Post>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.UpdateQuery>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetQuery>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Delete>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetStatistics>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetState>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.GetResult>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Disable>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Enable>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Abort>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.SetRunAs>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.Reset>(_manager); _bus.Subscribe <ProjectionManagementMessage.Command.StartSlaveProjections>(_manager); _bus.Subscribe <ClientMessage.WriteEventsCompleted>(_manager); _bus.Subscribe <ClientMessage.ReadStreamEventsBackwardCompleted>(_manager); _bus.Subscribe <SystemMessage.StateChangeMessage>(_manager); _bus.Subscribe <SystemMessage.SystemCoreReady>(_manager); _bus.Subscribe <ProjectionManagementMessage.ReaderReady>(_manager); _bus.Subscribe( CallbackSubscriber.Create <ProjectionManagementMessage.Starting>( starting => _queue.Publish(new ProjectionManagementMessage.ReaderReady()))); _bus.Subscribe <SystemMessage.StateChangeMessage>(_coordinator); _bus.Subscribe <SystemMessage.SystemCoreReady>(_coordinator); if (GetInputQueue() != _processingQueues.First().Item2) { _bus.Subscribe <PartitionProcessingResultBase>(_managerMessageDispatcher); _bus.Subscribe <CoreProjectionManagementControlMessage>( _managerMessageDispatcher); _bus.Subscribe <PartitionProcessingResultOutputBase>(_managerMessageDispatcher); _bus.Subscribe <ReaderSubscriptionManagement.SpoolStreamReading>(_managerMessageDispatcher); } foreach (var q in _processingQueues) { SetUpCoreServices(q.Item5, q.Item1, q.Item2, q.Item3, q.Item4); } //Given(); WhenLoop(); }