Beispiel #1
0
        public static IAsyncEnumerable <DbRowGrpcModel> DownloadPartitionAsync(this MyNoSqlGrpcReaderConnection connection,
                                                                               string tableName, string partitionKey)
        {
            var grpcRequest = new DownloadPartitionGrpcRequest
            {
                ConnectionId = connection.ConnectionId,
                PartitionKey = partitionKey,
                TableName    = tableName
            };

            return(connection.MyNoSqlGrpcServerReader.DownloadPartitionAsync(grpcRequest, connection.CancellationTokenSource.Token));
        }
        public IAsyncEnumerable <DbRowGrpcModel> DownloadPartitionAsync(DownloadPartitionGrpcRequest request, CancellationToken token = default)
        {
            var session = _sessionsList.GetSession(request.ConnectionId);

            var table = _dbTablesList.GetTable(request.TableName);

            var rows = table.LockWithWriteAccess <IReadOnlyList <DbRowGrpcModel> >(writeAccess =>
            {
                session.SubscribeToPartition(table.Id, request.PartitionKey);

                var partition = writeAccess.TryGetPartition(request.PartitionKey);

                if (partition == null)
                {
                    return(Array.Empty <DbRowGrpcModel>());
                }

                return(partition.Get().ToList());
            });

            return(new AsyncEnumerableResult <DbRowGrpcModel>(rows));
        }