Пример #1
0
        public async Task <long> ProjectionProgressFor(ShardName name,
                                                       CancellationToken token = default)
        {
            await EnsureStorageExistsAsync(typeof(IEvent), token).ConfigureAwait(false);

            var statement = new ProjectionProgressStatement(_options.EventGraph)
            {
                Name = name
            };

            var handler = new OneResultHandler <ShardState>(statement,
                                                            new ShardStateSelector(), true, false);

            await using var conn = CreateConnection();
            await conn.OpenAsync(token).ConfigureAwait(false);

            var builder = new CommandBuilder();

            handler.ConfigureCommand(builder, null);

            await using var reader = await builder.ExecuteReaderAsync(conn, token).ConfigureAwait(false);

            var state = await handler.HandleAsync(reader, null, token).ConfigureAwait(false);

            return(state?.Sequence ?? 0);
        }
Пример #2
0
        public async Task <long> ProjectionProgressFor(ShardName name, CancellationToken token = default)
        {
            await _store.Tenancy.Default.EnsureStorageExistsAsync(typeof(IEvent), token);

            var statement = new ProjectionProgressStatement(_store.Events)
            {
                Name = name
            };

            var handler = new OneResultHandler <ShardState>(statement,
                                                            new ShardStateSelector(), true, false);

            await using var session = (QuerySession)_store.QuerySession();

            var progress = await session.ExecuteHandlerAsync(handler, token);

            return(progress?.Sequence ?? 0);
        }
Пример #3
0
        /// <summary>
        /// Check the current progress of a single projection or projection shard
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task <long> ProjectionProgressFor(string projectionOrShardName, CancellationToken token = default(CancellationToken))
        {
            _store.Tenancy.Default.EnsureStorageExists(typeof(IEvent));

            var statement = new ProjectionProgressStatement(this)
            {
                ProjectionOrShardName = projectionOrShardName
            };

            var handler = new OneResultHandler <ProjectionProgress>(statement,
                                                                    new ProjectionProgressSelector(), true, false);

            await using var session = (QuerySession)_store.QuerySession();

            var progress = await session.ExecuteHandlerAsync(handler, token);

            return(progress?.LastSequenceId ?? 0);
        }