private async Task GetRevisionByChangeVector(DocumentsOperationContext context, Microsoft.Extensions.Primitives.StringValues changeVectors, bool metadataOnly, CancellationToken token) { var revisionsStorage = Database.DocumentsStorage.RevisionsStorage; var sw = Stopwatch.StartNew(); var revisions = new List <Document>(changeVectors.Count); foreach (var changeVector in changeVectors) { var revision = revisionsStorage.GetRevision(context, changeVector); if (revision == null && changeVectors.Count == 1) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; return; } revisions.Add(revision); } var actualEtag = ComputeHttpEtags.ComputeEtagForRevisions(revisions); var etag = GetStringFromHeaders("If-None-Match"); if (etag == actualEtag) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotModified; return; } HttpContext.Response.Headers[Constants.Headers.Etag] = "\"" + actualEtag + "\""; long numberOfResults; long totalDocumentsSizeInBytes; var blittable = GetBoolValueQueryString("blittable", required: false) ?? false; if (blittable) { WriteRevisionsBlittable(context, revisions, out numberOfResults, out totalDocumentsSizeInBytes); } else { (numberOfResults, totalDocumentsSizeInBytes) = await WriteRevisionsJsonAsync(context, metadataOnly, revisions, token); } AddPagingPerformanceHint(PagingOperationType.Documents, nameof(GetRevisionByChangeVector), HttpContext.Request.QueryString.Value, numberOfResults, revisions.Count, sw.ElapsedMilliseconds, totalDocumentsSizeInBytes); }
private void GetRevisionByChangeVector(DocumentsOperationContext context, StringValues changeVectors, bool metadataOnly) { var revisionsStorage = Database.DocumentsStorage.RevisionsStorage; var sw = Stopwatch.StartNew(); var revisions = new List <Document>(changeVectors.Count); foreach (var changeVector in changeVectors) { var revision = revisionsStorage.GetRevision(context, changeVector); if (revision == null && changeVectors.Count == 1) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; return; } revisions.Add(revision); } var actualEtag = ComputeHttpEtags.ComputeEtagForRevisions(revisions); var etag = GetStringFromHeaders("If-None-Match"); if (etag == actualEtag) { HttpContext.Response.StatusCode = (int)HttpStatusCode.NotModified; return; } HttpContext.Response.Headers[Constants.Headers.Etag] = "\"" + actualEtag + "\""; int numberOfResults; var blittable = GetBoolValueQueryString("blittable", required: false) ?? false; if (blittable) { WriteRevisionsBlittable(context, revisions, out numberOfResults); } else { WriteRevisionsJson(context, metadataOnly, revisions, out numberOfResults); } AddPagingPerformanceHint(PagingOperationType.Documents, nameof(GetRevisionByChangeVector), HttpContext, numberOfResults, revisions.Count, sw.Elapsed); }