public async Task Put() { using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) { var input = await context.ReadForMemoryAsync(RequestBodyStream(), "Sorters"); if (input.TryGet("Sorters", out BlittableJsonReaderArray analyzers) == false) { ThrowRequiredPropertyNameInRequest("Sorters"); } var commands = new List <PutServerWideSorterCommand>(); foreach (var sorterToAdd in analyzers) { var sorterDefinition = JsonDeserializationServer.SorterDefinition((BlittableJsonReaderObject)sorterToAdd); sorterDefinition.Name = sorterDefinition.Name?.Trim(); if (LoggingSource.AuditLog.IsInfoEnabled) { var clientCert = GetCurrentCertificate(); var auditLog = LoggingSource.AuditLog.GetLogger("Server", "Audit"); auditLog.Info($"Sorter {sorterDefinition.Name} PUT by {clientCert?.Subject} {clientCert?.Thumbprint} with definition: {sorterToAdd}"); } sorterDefinition.Validate(); // check if sorter is compilable SorterCompiler.Compile(sorterDefinition.Name, sorterDefinition.Code); var command = new PutServerWideSorterCommand(sorterDefinition, GetRaftRequestIdFromQuery()); commands.Add(command); } var index = 0L; foreach (var command in commands) { index = (await ServerStore.SendToLeaderAsync(command)).Index; } await ServerStore.WaitForCommitIndexChange(RachisConsensus.CommitIndexModification.GreaterOrEqual, index); NoContentStatus(HttpStatusCode.Created); } }
public async Task Put() { using (ContextPool.AllocateOperationContext(out DocumentsOperationContext context)) { var input = await context.ReadForMemoryAsync(RequestBodyStream(), "Sorters"); if (input.TryGet("Sorters", out BlittableJsonReaderArray sorters) == false) { ThrowRequiredPropertyNameInRequest("Sorters"); } var command = new PutSortersCommand(Database.Name, GetRaftRequestIdFromQuery()); foreach (var sorterToAdd in sorters) { var sorterDefinition = JsonDeserializationServer.SorterDefinition((BlittableJsonReaderObject)sorterToAdd); sorterDefinition.Name = sorterDefinition.Name?.Trim(); if (LoggingSource.AuditLog.IsInfoEnabled) { var clientCert = GetCurrentCertificate(); var auditLog = LoggingSource.AuditLog.GetLogger(Database.Name, "Audit"); auditLog.Info($"Sorter {sorterDefinition.Name} PUT by {clientCert?.Subject} {clientCert?.Thumbprint} with definition: {sorterToAdd}"); } sorterDefinition.Validate(); // check if sorter is compilable SorterCompiler.Compile(sorterDefinition.Name, sorterDefinition.Code); command.Sorters.Add(sorterDefinition); } var index = (await ServerStore.SendToLeaderAsync(command)).Index; await Database.RachisLogIndexNotifications.WaitForIndexNotification(index, ServerStore.Engine.OperationTimeout); NoContentStatus(HttpStatusCode.Created); } }