Пример #1
0
            protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
            {
                using (queryOp)
                    using (accessor)
                        using (var writer = GetOutputWriter(req, stream))
                        {
                            outputContentTypeSetter(writer.ContentType);

                            writer.WriteHeader();
                            try
                            {
                                queryOp.Execute(o =>
                                {
                                    _timeout.Delay();
                                    writer.Write(o);
                                });
                            }
                            catch (Exception e)
                            {
                                writer.WriteError(e);
                            }
                        }

                return(Task.FromResult(true));
            }
Пример #2
0
        private RavenJArray PerformBulkOperation(string index, IndexQuery indexQuery, bool allowStale, Func <string, TransactionInformation, object> batchOperation)
        {
            var array          = new RavenJArray();
            var bulkIndexQuery = new IndexQuery
            {
                Query  = indexQuery.Query,
                Start  = indexQuery.Start,
                Cutoff = indexQuery.Cutoff,
                WaitForNonStaleResultsAsOfNow = indexQuery.WaitForNonStaleResultsAsOfNow,
                PageSize            = int.MaxValue,
                FieldsToFetch       = new[] { Constants.DocumentIdFieldName },
                SortedFields        = indexQuery.SortedFields,
                HighlighterPreTags  = indexQuery.HighlighterPreTags,
                HighlighterPostTags = indexQuery.HighlighterPostTags,
                HighlightedFields   = indexQuery.HighlightedFields,
                SortHints           = indexQuery.SortHints
            };

            bool stale;
            var  queryResults = database.Queries.QueryDocumentIds(index, bulkIndexQuery, token, out stale);

            if (stale && allowStale == false)
            {
                throw new InvalidOperationException(
                          "Bulk operation cancelled because the index is stale and allowStale is false");
            }

            const int batchSize = 1024;

            using (var enumerator = queryResults.GetEnumerator())
            {
                while (true)
                {
                    if (timeout != null)
                    {
                        timeout.Delay();
                    }
                    var batchCount = 0;
                    database.TransactionalStorage.Batch(actions =>
                    {
                        while (batchCount < batchSize && enumerator.MoveNext())
                        {
                            batchCount++;
                            var result = batchOperation(enumerator.Current, transactionInformation);
                            array.Add(RavenJObject.FromObject(result));
                        }
                    });
                    if (batchCount < batchSize)
                    {
                        break;
                    }
                }
            }
            return(array);
        }