private void CompletedReadingPossibleStream( ClientMessage.ReadStreamEventsBackwardCompleted completed, ProjectionManagementMessage.Command.Post message, IEnvelope replyEnvelope) { int version = -1; if (completed.Result == ReadStreamResult.Success) { version = completed.LastEventNumber + 1; } if (message.Mode >= ProjectionMode.OneTime) { BeginWriteProjectionRegistration( message.Name, projectionId => { var initializer = new NewProjectionInitializer( projectionId, message.Name, message.Mode, message.HandlerType, message.Query, message.Enabled, message.EmitEnabled, message.CheckpointsEnabled, message.EnableRunAs, message.RunAs, replyEnvelope); int queueIndex = GetNextWorkerIndex(); initializer.CreateAndInitializeNewProjection( this, Guid.NewGuid(), _workers[queueIndex], version: version); }); } else { var initializer = new NewProjectionInitializer( ProjectionQueryId, message.Name, message.Mode, message.HandlerType, message.Query, message.Enabled, message.EmitEnabled, message.CheckpointsEnabled, message.EnableRunAs, message.RunAs, replyEnvelope); int queueIndex = GetNextWorkerIndex(); initializer.CreateAndInitializeNewProjection(this, Guid.NewGuid(), _workers[queueIndex], version: version); } }
private void CINP( ProjectionManagementMessage.Command.StartSlaveProjections message, SlaveProjectionDefinitions.Definition @group, SlaveProjectionCommunicationChannel[] resultArray, int queueIndex, int arrayIndex, Action completed) { var projectionCorrelationId = Guid.NewGuid(); var slaveProjectionName = message.Name + "-" + @group.Name + "-" + queueIndex; _awaitingSlaveProjections.Add( projectionCorrelationId, assigned => { var queueWorkerId = _workers[queueIndex]; resultArray[arrayIndex] = new SlaveProjectionCommunicationChannel( slaveProjectionName, queueWorkerId, assigned.SubscriptionId); completed(); _awaitingSlaveProjections.Remove(projectionCorrelationId); }); var initializer = new NewProjectionInitializer( ProjectionQueryId, slaveProjectionName, @group.Mode, @group.HandlerType, @group.Query, true, @group.EmitEnabled, @group.CheckpointsEnabled, @group.EnableRunAs, @group.TrackEmittedStreams, @group.RunAs1, replyEnvelope: null); initializer.CreateAndInitializeNewProjection( this, projectionCorrelationId, _workers[queueIndex], true, message.MasterWorkerId, message.MasterCorrelationId); }
private void PostNewProjection(ProjectionManagementMessage.Command.Post message, IEnvelope replyEnvelope) { if (message.Mode >= ProjectionMode.OneTime) { BeginWriteProjectionRegistration( message.Name, projectionId => { var initializer = new NewProjectionInitializer( projectionId, message.Name, message.Mode, message.HandlerType, message.Query, message.Enabled, message.EmitEnabled, message.CheckpointsEnabled, message.EnableRunAs, message.RunAs, replyEnvelope); int queueIndex = GetNextWorkerIndex(); initializer.CreateAndInitializeNewProjection( this, Guid.NewGuid(), _workers[queueIndex]); }); } else { var initializer = new NewProjectionInitializer( ProjectionQueryId, message.Name, message.Mode, message.HandlerType, message.Query, message.Enabled, message.EmitEnabled, message.CheckpointsEnabled, message.EnableRunAs, message.RunAs, replyEnvelope); int queueIndex = GetNextWorkerIndex(); initializer.CreateAndInitializeNewProjection(this, Guid.NewGuid(), _workers[queueIndex]); } }
private void CINP( ProjectionManagementMessage.StartSlaveProjections message, SlaveProjectionDefinitions.Definition @group, SlaveProjectionCommunicationChannel[] resultArray, int queueIndex, int arrayIndex, Action completed) { var projectionCorrelationId = Guid.NewGuid(); var slaveProjectionName = message.Name + "-" + @group.Name + "-" + queueIndex; var initializer = new NewProjectionInitializer( ProjectionQueryId, slaveProjectionName, @group.Mode, @group.HandlerType, @group.Query, true, @group.EmitEnabled, @group.CheckpointsEnabled, @group.EnableRunAs, @group.RunAs); initializer.CreateAndInitializeNewProjection( this, managedProjection => { resultArray[arrayIndex] = new SlaveProjectionCommunicationChannel( slaveProjectionName, projectionCorrelationId, managedProjection.SlaveProjectionSubscriptionId, _queues[queueIndex]); completed(); }, projectionCorrelationId, queueIndex, true, message.ResultsPublisher, message.MasterCorrelationId); }
private void InitializeNewProjection(long projectionId, ProjectionManagementMessage.Command.Post message, long version, IEnvelope replyEnvelope) { try{ var initializer = new NewProjectionInitializer( projectionId, message.Name, message.Mode, message.HandlerType, message.Query, message.Enabled, message.EmitEnabled, message.CheckpointsEnabled, message.EnableRunAs, message.TrackEmittedStreams, message.RunAs, replyEnvelope); int queueIndex = GetNextWorkerIndex(); initializer.CreateAndInitializeNewProjection(this, Guid.NewGuid(), _workers[queueIndex], version: version); }catch (Exception ex) { message.Envelope.ReplyWith(new ProjectionManagementMessage.OperationFailed(ex.Message)); } }