public async Task GetNextHiLo() { using (ContextPool.AllocateOperationContext(out DocumentsOperationContext context)) { var tag = GetQueryStringValueAndAssertIfSingleAndNotEmpty("tag"); var lastSize = GetLongQueryString("lastBatchSize", false) ?? 0; var lastRangeAt = GetStringQueryString("lastRangeAt", false); var identityPartsSeparator = GetStringQueryString("identityPartsSeparator", false) ?? "/"; var lastMax = GetLongQueryString("lastMax", false) ?? 0; var capacity = CalculateCapacity(lastSize, lastRangeAt); var cmd = new MergedNextHiLoCommand { Database = Database, Key = tag, Capacity = capacity, Separator = identityPartsSeparator, LastRangeMax = lastMax }; await Database.TxMerger.Enqueue(cmd); HttpContext.Response.StatusCode = (int)HttpStatusCode.Created; using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { context.Write(writer, new DynamicJsonValue { ["Prefix"] = cmd.Prefix, ["Low"] = cmd.OldMax + 1, ["High"] = cmd.OldMax + capacity, ["LastSize"] = capacity, ["ServerTag"] = ServerStore.NodeTag, ["LastRangeAt"] = DateTime.UtcNow.ToString(DefaultFormat.DateTimeOffsetFormatsToWrite) }); if (TrafficWatchManager.HasRegisteredClients) { AddStringToHttpContext(writer.ToString(), TrafficWatchChangeType.Hilo); } } } }
public async Task GetNextHiLo() { DocumentsOperationContext context; using (ContextPool.AllocateOperationContext(out context)) { var tag = GetQueryStringValueAndAssertIfSingleAndNotEmpty("tag"); var lastSize = GetLongQueryString("lastBatchSize", false) ?? 0; var lastRangeAt = GetStringQueryString("lastRangeAt", false); var identityPartsSeparator = GetStringQueryString("identityPartsSeparator", false) ?? "/"; var lastMax = GetLongQueryString("lastMax", false) ?? 0; var capacity = CalculateCapacity(lastSize, lastRangeAt); var cmd = new MergedNextHiLoCommand { Database = Database, Key = tag, Capacity = capacity, Separator = identityPartsSeparator, LastRangeMax = lastMax }; await Database.TxMerger.Enqueue(cmd); HttpContext.Response.StatusCode = 201; using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream())) { context.Write(writer, new DynamicJsonValue { ["Prefix"] = cmd.Prefix, ["Low"] = cmd.OldMax + 1, ["High"] = cmd.OldMax + capacity, ["LastSize"] = capacity, ["LastRangeAt"] = DateTime.UtcNow.ToString("o") }); } } }