Beispiel #1
0
        private void ExecuteQueryOperation(IndexQueryServerSide query,
                                           Func <QueryRunner,
                                                 QueryOperationOptions,
                                                 Action <IOperationProgress>, OperationCancelToken,
                                                 Task <IOperationResult> > operation,
                                           DocumentsOperationContext context,
                                           IDisposable returnContextToPool,
                                           Operations.Operations.OperationType operationType)
        {
            var options = GetQueryOperationOptions();
            var token   = CreateTimeLimitedOperationToken();

            var operationId = Database.Operations.GetNextOperationId();

            var task = Database.Operations.AddOperation(Database, query.Metadata.IndexName, operationType,
                                                        onProgress => operation(Database.QueryRunner, options, onProgress, token), operationId, token);

            using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
            {
                writer.WriteOperationId(context, operationId);
            }

            task.ContinueWith(_ =>
            {
                using (returnContextToPool)
                    token.Dispose();
            });
        }
Beispiel #2
0
        private async Task ExecuteQueryOperation(IndexQueryServerSide query,
                                                 Func <QueryRunner,
                                                       QueryOperationOptions,
                                                       Action <IOperationProgress>, OperationCancelToken,
                                                       Task <IOperationResult> > operation,
                                                 IDisposable returnContextToPool,
                                                 Operations.Operations.OperationType operationType)
        {
            var options = GetQueryOperationOptions();
            var token   = CreateTimeLimitedQueryOperationToken();

            var operationId = Database.Operations.GetNextOperationId();

            var indexName = query.Metadata.IsDynamic
                ? (query.Metadata.IsCollectionQuery ? "collection/" : "dynamic/") + query.Metadata.CollectionName
                : query.Metadata.IndexName;

            var details = new BulkOperationResult.OperationDetails
            {
                Query = query.Query
            };

            var task = Database.Operations.AddOperation(
                Database,
                indexName,
                operationType,
                onProgress => operation(Database.QueryRunner, options, onProgress, token), operationId, details, token);

            using (ContextPool.AllocateOperationContext(out JsonOperationContext context))
                await using (var writer = new AsyncBlittableJsonTextWriter(context, ResponseBodyStream()))
                {
                    writer.WriteOperationIdAndNodeTag(context, operationId, ServerStore.NodeTag);
                }

            _ = task.ContinueWith(_ =>
            {
                using (returnContextToPool)
                    token.Dispose();
            });
        }