public static DocumentCountersOperation Parse(BlittableJsonReaderObject input) { if (input.TryGet("DocumentId", out string docId) == false || docId == null) { ThrowMissingDocumentId(); } if (input.TryGet("Operations", out BlittableJsonReaderArray operations) == false || operations == null) { ThrowMissingCounterOperations(); } var result = new DocumentCountersOperation { DocumentId = docId, Operations = new List <CounterOperation>() }; foreach (var op in operations) { if (!(op is BlittableJsonReaderObject bjro)) { ThrowNotBlittableJsonReaderObjectOperation(op); return(null); //never hit } result.Operations.Add(CounterOperation.Parse(bjro)); } return(result); }
private void PrepareRequestWithMultipleCounters(StringBuilder pathBuilder, HttpRequestMessage request, JsonOperationContext ctx) { var uniqueNames = GetOrderedUniqueNames(out int sumLength); // if it is too big, we drop to POST (note that means that we can't use the HTTP cache any longer) // we are fine with that, such requests are going to be rare if (sumLength < 1024) { foreach (var counter in uniqueNames) { pathBuilder.Append("&counter=").Append(Uri.EscapeDataString(counter ?? string.Empty)); } } else { request.Method = HttpMethod.Post; var docOps = new DocumentCountersOperation { DocumentId = _docId, Operations = new List <CounterOperation>() }; foreach (var counter in uniqueNames) { docOps.Operations.Add(new CounterOperation { Type = CounterOperationType.Get, CounterName = counter }); } var batch = new CounterBatch { Documents = new List <DocumentCountersOperation> { docOps }, ReplyWithAllNodesValues = _returnFullResults }; request.Content = new BlittableJsonContent(stream => { var config = EntityToBlittable.ConvertCommandToBlittable(batch, ctx); ctx.Write(stream, config); }); } }
private void PrepareRequestWithMultipleCounters(StringBuilder pathBuilder, HttpRequestMessage request, JsonOperationContext ctx) { var uniqueNames = new HashSet <string>(_counters); // if it is too big, we drop to POST (note that means that we can't use the HTTP cache any longer) // we are fine with that, requests to load more than 1024 counters are going to be rare if (uniqueNames.Sum(x => x?.Length ?? 0) < 1024) { uniqueNames.ApplyIfNotNull(counter => pathBuilder.Append("&counter=").Append(Uri.EscapeDataString(counter ?? string.Empty))); } else { request.Method = HttpMethod.Post; var docOps = new DocumentCountersOperation { DocumentId = _docId, Operations = new List <CounterOperation>() }; foreach (var counter in uniqueNames) { docOps.Operations.Add(new CounterOperation { Type = CounterOperationType.Get, CounterName = counter }); } var batch = new CounterBatch { Documents = new List <DocumentCountersOperation> { docOps }, ReplyWithAllNodesValues = _returnFullResults }; request.Content = new BlittableJsonContent(stream => { var config = DocumentConventions.Default.Serialization.DefaultConverter.ToBlittable(batch, ctx); ctx.Write(stream, config); }); } }