public void Handle(ProjectionManagementMessage.Command.Delete message)
        {
            if ((_state != ManagedProjectionState.Stopped && _state != ManagedProjectionState.Faulted) && Mode != ProjectionMode.Transient)
            {
                throw new InvalidOperationException("Cannot delete a projection that hasn't been stopped or faulted.");
            }
            _lastAccessed = _timeProvider.Now;

            PersistedProjectionState.DeleteCheckpointStream = message.DeleteCheckpointStream;
            PersistedProjectionState.DeleteStateStream      = message.DeleteStateStream;
            PersistedProjectionState.DeleteEmittedStreams   = message.DeleteEmittedStreams;

            if (PersistedProjectionState.DeleteCheckpointStream)
            {
                PersistedProjectionState.NumberOfPrequisitesMetForDeletion++;
            }
            if ((PersistedProjectionState.EmitEnabled ?? false) && ((PersistedProjectionState.TrackEmittedStreams ?? false) && PersistedProjectionState.DeleteEmittedStreams))
            {
                PersistedProjectionState.NumberOfPrequisitesMetForDeletion++;
            }

            Delete();
            UpdateProjectionVersion();
            SetLastReplyEnvelope(message.Envelope);
            SetState(ManagedProjectionState.Deleting);
            StopUnlessPreparedOrLoaded();
        }
Пример #2
0
        public void Handle(ProjectionManagementMessage.Command.Delete message)
        {
            if (!_started)
            {
                return;
            }
            var projection = GetProjection(message.Name);

            if (projection == null)
            {
                message.Envelope.ReplyWith(new ProjectionManagementMessage.NotFound());
            }
            else
            {
                if (!ProjectionManagementMessage.RunAs.ValidateRunAs(projection.Mode, ReadWrite.Write, projection.RunAs, message))
                {
                    return;
                }
                try {
                    projection.Handle(message);
                }
                catch (InvalidOperationException ex) {
                    message.Envelope.ReplyWith(new ProjectionManagementMessage.OperationFailed(ex.Message));
                    return;
                }
            }
        }
        public void Handle(ProjectionManagementMessage.Command.Delete message)
        {
            var command = new DeleteCommand {
                Name  = message.Name,
                RunAs = message.RunAs,
                DeleteCheckpointStream = message.DeleteCheckpointStream,
                DeleteStateStream      = message.DeleteStateStream,
                DeleteEmittedStreams   = message.DeleteEmittedStreams,
            };

            _writer.PublishCommand("$delete", command);
        }
Пример #4
0
 public void Handle(ProjectionManagementMessage.Command.Delete message)
 {
     _lastAccessed = _timeProvider.Now;
     if (!ProjectionManagementMessage.RunAs.ValidateRunAs(Mode, ReadWrite.Write, _runAs, message))
     {
         return;
     }
     DoDelete();
     UpdateProjectionVersion();
     SetLastReplyEnvelope(message.Envelope);
     StopUnlessPreparedOrLoaded();
 }
Пример #5
0
 public void Handle(ProjectionManagementMessage.Command.Delete message)
 {
     if (_state != ManagedProjectionState.Stopped)
     {
         message.Envelope.ReplyWith(new ProjectionManagementMessage.OperationFailed("Cannot delete a projection that hasn't been stopped."));
     }
     _lastAccessed = _timeProvider.Now;
     if (!ProjectionManagementMessage.RunAs.ValidateRunAs(Mode, ReadWrite.Write, _runAs, message))
     {
         return;
     }
     DoDelete();
     UpdateProjectionVersion();
     SetLastReplyEnvelope(message.Envelope);
     StopUnlessPreparedOrLoaded();
 }
Пример #6
0
 public void Handle(ProjectionManagementMessage.Command.Delete message)
 {
     if (_state != ManagedProjectionState.Stopped && Mode != ProjectionMode.Transient)
     {
         throw new InvalidOperationException("Cannot delete a running projection");
     }
     _lastAccessed = _timeProvider.Now;
     if (message.DeleteCheckpointStream)
     {
         DeleteCheckpointStream();
     }
     DoDelete();
     UpdateProjectionVersion();
     SetLastReplyEnvelope(message.Envelope);
     StopUnlessPreparedOrLoaded();
 }
Пример #7
0
 public void Handle(ProjectionManagementMessage.Command.Delete message)
 {
     if (_state != ManagedProjectionState.Stopped)
     {
         message.Envelope.ReplyWith(new ProjectionManagementMessage.OperationFailed("Cannot delete a projection that hasn't been stopped."));
     }
     _lastAccessed = _timeProvider.Now;
     if (message.DeleteCheckpointStream)
     {
         DeleteCheckpointStream();
     }
     DoDelete();
     UpdateProjectionVersion();
     SetLastReplyEnvelope(message.Envelope);
     StopUnlessPreparedOrLoaded();
 }
Пример #8
0
        public void Handle(ProjectionManagementMessage.Command.Delete message)
        {
            if (!_started)
            {
                return;
            }
            var projection = GetProjection(message.Name);

            if (projection == null)
            {
                message.Envelope.ReplyWith(new ProjectionManagementMessage.NotFound());
            }
            else
            {
                if (!ProjectionManagementMessage.RunAs.ValidateRunAs(projection.GetMode(), ReadWrite.Write, projection.RunAs, message))
                {
                    return;
                }
                try {
                    projection.Handle(message);
                }
                catch (InvalidOperationException ex) {
                    message.Envelope.ReplyWith(new ProjectionManagementMessage.OperationFailed(ex.Message));
                    return;
                }
                _projections.Remove(message.Name);
                _projectionsMap.Remove(projection.Id);
                const string eventStreamId = "$projections-$all";
                var          corrId        = Guid.NewGuid();
                _writeDispatcher.Publish(
                    new ClientMessage.WriteEvents(
                        corrId,
                        corrId,
                        _writeDispatcher.Envelope,
                        true,
                        eventStreamId,
                        ExpectedVersion.Any,
                        new Event(
                            Guid.NewGuid(),
                            "$ProjectionDeleted",
                            false,
                            Helper.UTF8NoBom.GetBytes(message.Name),
                            Empty.ByteArray),
                        SystemAccount.Principal),
                    m => { });
            }
        }
Пример #9
0
        public void Handle(ProjectionManagementMessage.Command.Delete message)
        {
            if (!_started)
            {
                return;
            }
            var projection = GetProjection(message.Name);

            if (projection == null)
            {
                message.Envelope.ReplyWith(new ProjectionManagementMessage.NotFound());
            }
            else
            {
                projection.Handle(message);
                _projections.Remove(message.Name);
                _projectionsMap.Remove(projection.Id);
            }
        }