예제 #1
0
        public async Task <QueryState> ReadState(QueryETag etag)
        {
            var stream = etag.Key.GetCheckpointStream();

            var result = await _context.Connection.ReadEventAsync(stream, StreamPosition.End, resolveLinkTos : false);

            switch (result.Status)
            {
            case EventReadStatus.NoStream:
            case EventReadStatus.NotFound:
                return(new QueryState(etag.WithoutCheckpoint(), GetDefaultData(etag)));

            case EventReadStatus.Success:
                var number = result.Event?.Event.EventNumber;
                var data   = result.Event?.Event.Data;

                var checkpoint = new TimelinePosition(number);

                return(checkpoint == etag.Checkpoint
            ? new QueryState(etag)
            : new QueryState(etag.WithCheckpoint(checkpoint), new MemoryStream(data)));

            default:
                throw new Exception($"Unexpected result when reading {stream}: {result.Status}");
            }
        }
예제 #2
0
파일: ClientDb.cs 프로젝트: jtark/Totem
        QueryContent GetCheckpointContent(QueryETag etag, ResolvedEvent e)
        {
            var metadata = _context.ReadCheckpointMetadata(e);

            if (metadata.ErrorPosition.IsSome)
            {
                throw new Exception($"Query is stopped at {metadata.ErrorPosition} with the following error: {metadata.ErrorMessage}");
            }

            var checkpoint = new TimelinePosition(e.Event.EventNumber);

            return(checkpoint == etag.Checkpoint
        ? new QueryContent(etag)
        : new QueryContent(etag.WithCheckpoint(checkpoint), new MemoryStream(e.Event.Data)));
        }