コード例 #1
0
ファイル: Streams.Delete.cs プロジェクト: matsnd/EventStore
        public override async Task <TombstoneResp> Tombstone(TombstoneReq request, ServerCallContext context)
        {
            var options         = request.Options;
            var streamName      = options.StreamName;
            var expectedVersion = options.ExpectedStreamRevisionCase switch {
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.Revision =>
                new StreamRevision(options.Revision).ToInt64(),
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.Any =>
                AnyStreamRevision.Any.ToInt64(),
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.NoStream =>
                AnyStreamRevision.NoStream.ToInt64(),
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.StreamExists =>
                AnyStreamRevision.StreamExists.ToInt64(),
                _ => throw new InvalidOperationException()
            };

            var user           = context.GetHttpContext().User;
            var requiresLeader = GetRequiresLeader(context.RequestHeaders);

            var position = await DeleteInternal(streamName, expectedVersion, user, true, requiresLeader).ConfigureAwait(false);

            return(position.HasValue
                                ? new TombstoneResp {
                Position = new TombstoneResp.Types.Position {
                    CommitPosition = position.Value.CommitPosition,
                    PreparePosition = position.Value.PreparePosition
                }
            }
                                : new TombstoneResp {
                NoPosition = new Empty()
            });
        }
コード例 #2
0
        private async Task <DeleteResult> TombstoneInternal(TombstoneReq request, UserCredentials userCredentials,
                                                            CancellationToken cancellationToken)
        {
            var result = await _client.TombstoneAsync(request, RequestMetadata.Create(userCredentials),
                                                      cancellationToken : cancellationToken);

            return(new DeleteResult(new Position(result.Position.CommitPosition, result.Position.PreparePosition)));
        }
コード例 #3
0
        private async Task <DeleteResult> TombstoneInternal(TombstoneReq request,
                                                            EventStoreClientOperationOptions operationOptions, UserCredentials userCredentials,
                                                            CancellationToken cancellationToken)
        {
            var result = await _client.TombstoneAsync(request, RequestMetadata.Create(userCredentials),
                                                      deadline : DeadLine.After(operationOptions.TimeoutAfter), cancellationToken);

            return(new DeleteResult(new Position(result.Position.CommitPosition, result.Position.PreparePosition)));
        }
        private async Task <DeleteResult> TombstoneInternal(TombstoneReq request,
                                                            EventStoreClientOperationOptions operationOptions, UserCredentials?userCredentials,
                                                            CancellationToken cancellationToken)
        {
            _log.LogDebug("Tombstoning stream {streamName}.", request.Options.StreamIdentifier);

            var result = await _client.TombstoneAsync(request,
                                                      EventStoreCallOptions.Create(Settings, operationOptions, userCredentials, cancellationToken));

            return(new DeleteResult(new Position(result.Position.CommitPosition, result.Position.PreparePosition)));
        }
        private async Task <DeleteResult> TombstoneInternal(TombstoneReq request,
                                                            EventStoreClientOperationOptions operationOptions, UserCredentials?userCredentials,
                                                            CancellationToken cancellationToken)
        {
            _log.LogDebug("Tombstoning stream {streamName}.", request.Options.StreamName);

            var result = await _client.TombstoneAsync(request, RequestMetadata.Create(userCredentials ?? Settings.DefaultCredentials),
                                                      deadline : DeadLine.After(operationOptions.TimeoutAfter), cancellationToken);

            return(new DeleteResult(new Position(result.Position.CommitPosition, result.Position.PreparePosition)));
        }
コード例 #6
0
        public override async Task <TombstoneResp> Tombstone(TombstoneReq request, ServerCallContext context)
        {
            var options    = request.Options;
            var streamName = options.StreamName;

            var expectedVersion = options.ExpectedStreamRevisionCase switch {
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.Revision =>
                new StreamRevision(options.Revision).ToInt64(),
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.Any =>
                AnyStreamRevision.Any.ToInt64(),
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.NoStream =>
                AnyStreamRevision.NoStream.ToInt64(),
                TombstoneReq.Types.Options.ExpectedStreamRevisionOneofCase.StreamExists =>
                AnyStreamRevision.StreamExists.ToInt64(),
                _ => throw new InvalidOperationException()
            };

            var requiresLeader = GetRequiresLeader(context.RequestHeaders);

            var user = context.GetHttpContext().User;
            var op   = DeleteOperation.WithParameter(Plugins.Authorization.Operations.Streams.Parameters.StreamId(streamName));

            if (!await _provider.CheckAccessAsync(user, op, context.CancellationToken).ConfigureAwait(false))
            {
                throw AccessDenied();
            }

            var position = await DeleteInternal(streamName, expectedVersion, user, true, requiresLeader,
                                                context.CancellationToken).ConfigureAwait(false);

            return(position.HasValue
                                ? new TombstoneResp {
                Position = new TombstoneResp.Types.Position {
                    CommitPosition = position.Value.CommitPosition,
                    PreparePosition = position.Value.PreparePosition
                }
            }
                                : new TombstoneResp {
                NoPosition = new Empty()
            });
        }