Skip to content

Commit

Permalink
RavenDB-20610 refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
ppekrol committed Jul 7, 2023
1 parent 9b95d7b commit a106afc
Show file tree
Hide file tree
Showing 75 changed files with 150 additions and 118 deletions.
10 changes: 8 additions & 2 deletions src/Raven.Server/Documents/AbstractDatabaseRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,15 @@ public abstract class AbstractDatabaseRequestHandler<TOperationContext> : Reques

public abstract char IdentityPartsSeparator { get; }

public abstract OperationCancelToken CreateTimeLimitedOperationToken(bool useRequestAbortedToken = true);
public abstract OperationCancelToken CreateHttpRequestBoundTimeLimitedOperationToken();

public abstract OperationCancelToken CreateTimeLimitedQueryToken();
public abstract OperationCancelToken CreateHttpRequestBoundTimeLimitedOperationTokenForQuery();

public abstract OperationCancelToken CreateTimeLimitedBackgroundOperationTokenForQueryOperation();

public abstract OperationCancelToken CreateTimeLimitedBackgroundOperationTokenForCollectionOperation();

public abstract OperationCancelToken CreateTimeLimitedBackgroundOperationToken();

public JsonContextPoolBase<TOperationContext> ContextPool;

Expand Down
36 changes: 22 additions & 14 deletions src/Raven.Server/Documents/DatabaseRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,36 +77,44 @@ public override async Task WaitForIndexToBeAppliedAsync(TransactionOperationCont
}
}

public override OperationCancelToken CreateTimeLimitedOperationToken(bool useRequestAbortedToken = true)
public override OperationCancelToken CreateHttpRequestBoundTimeLimitedOperationToken()
{
if (useRequestAbortedToken)
return new OperationCancelToken(Database.Configuration.Databases.OperationTimeout.AsTimeSpan, Database.DatabaseShutdown, HttpContext.RequestAborted);
return new OperationCancelToken(Database.Configuration.Databases.OperationTimeout.AsTimeSpan, Database.DatabaseShutdown);
return CreateHttpRequestBoundTimeLimitedOperationToken(Database.Configuration.Databases.OperationTimeout.AsTimeSpan);
}

public override OperationCancelToken CreateTimeLimitedQueryToken()
public override OperationCancelToken CreateHttpRequestBoundTimeLimitedOperationTokenForQuery()
{
return new OperationCancelToken(Database.Configuration.Databases.QueryTimeout.AsTimeSpan, Database.DatabaseShutdown, HttpContext.RequestAborted);
return CreateHttpRequestBoundTimeLimitedOperationToken(Database.Configuration.Databases.QueryTimeout.AsTimeSpan);
}

public OperationCancelToken CreateTimeLimitedCollectionOperationToken()
public override OperationCancelToken CreateHttpRequestBoundTimeLimitedOperationToken(TimeSpan cancelAfter)
{
return new OperationCancelToken(Database.Configuration.Databases.CollectionOperationTimeout.AsTimeSpan, Database.DatabaseShutdown, HttpContext.RequestAborted);
return new OperationCancelToken(cancelAfter, Database.DatabaseShutdown, HttpContext.RequestAborted);
}

public OperationCancelToken CreateTimeLimitedQueryOperationToken()
public override OperationCancelToken CreateHttpRequestBoundOperationToken()
{
return new OperationCancelToken(Database.Configuration.Databases.QueryOperationTimeout.AsTimeSpan, Database.DatabaseShutdown, HttpContext.RequestAborted);
return new OperationCancelToken(Database.DatabaseShutdown, HttpContext.RequestAborted);
}

public override OperationCancelToken CreateOperationToken()
public override OperationCancelToken CreateTimeLimitedBackgroundOperationTokenForQueryOperation()
{
return new OperationCancelToken(Database.DatabaseShutdown, HttpContext.RequestAborted);
return new OperationCancelToken(Database.Configuration.Databases.QueryOperationTimeout.AsTimeSpan, Database.DatabaseShutdown);
}

public override OperationCancelToken CreateOperationToken(TimeSpan cancelAfter)
public override OperationCancelToken CreateTimeLimitedBackgroundOperationTokenForCollectionOperation()
{
return new OperationCancelToken(cancelAfter, Database.DatabaseShutdown, HttpContext.RequestAborted);
return new OperationCancelToken(Database.Configuration.Databases.CollectionOperationTimeout.AsTimeSpan, Database.DatabaseShutdown);
}

public override OperationCancelToken CreateTimeLimitedBackgroundOperationToken()
{
return new OperationCancelToken(Database.Configuration.Databases.OperationTimeout.AsTimeSpan, Database.DatabaseShutdown);
}

public override OperationCancelToken CreateBackgroundOperationToken()
{
return new OperationCancelToken(Database.DatabaseShutdown);
}

public override bool ShouldAddPagingPerformanceHint(long numberOfResults)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public async Task OptimizeIndex()
if (index == null)
IndexDoesNotExistException.ThrowFor(name);

var token = new OperationCancelToken(Database.DatabaseShutdown);
var token = CreateBackgroundOperationToken();
var result = new IndexOptimizeResult(index.Name);
var operationId = Database.Operations.GetNextOperationId();
var t = Database.Operations.AddLocalOperation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ protected override async ValueTask HandleCurrentNodeAsync()
}

var operationId = RequestHandler.Database.Operations.GetNextOperationId();
var token = new OperationCancelToken(RequestHandler.Database.Configuration.Databases.QueryOperationTimeout.AsTimeSpan,
RequestHandler.Database.DatabaseShutdown);
var token = RequestHandler.CreateTimeLimitedBackgroundOperationTokenForQueryOperation();

_ = RequestHandler.Database.Operations.AddLocalOperation(
operationId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protected AbstractAdminRevisionsHandlerProcessorForEnforceRevisionsConfiguration

public override async ValueTask ExecuteAsync()
{
var token = RequestHandler.CreateTimeLimitedOperationToken(useRequestAbortedToken: false);
var token = RequestHandler.CreateTimeLimitedBackgroundOperationToken();
var operationId = RequestHandler.GetLongQueryString("operationId", false) ?? GetNextOperationId();

ScheduleEnforceConfigurationOperation(operationId, token);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ public async Task DeleteNode()
{
if (nodeTag == ServerStore.Engine.Tag)
{
using (var token = CreateOperationToken())
using (var token = CreateHttpRequestBoundOperationToken())
{
// cannot remove the leader, let's change the leader
ServerStore.Engine.CurrentLeader?.StepDown();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class BulkInsertHandler : DatabaseRequestHandler
[RavenAction("/databases/*/bulk_insert", "POST", AuthorizationStatus.ValidUser, EndpointType.Write, DisableOnCpuCreditsExhaustion = true)]
public async Task BulkInsert()
{
var operationCancelToken = CreateOperationToken();
var operationCancelToken = CreateHttpRequestBoundOperationToken();
var id = GetLongQueryString("id");
var skipOverwriteIfUnchanged = GetBoolValueQueryString("skipOverwriteIfUnchanged", required: false) ?? false;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public async Task GetClusterWideInfoPackage()
topology = ServerStore.GetClusterTopology(ctx);

var timeoutInSecPerNode = GetIntValueQueryString("timeoutInSecPerNode", false) ?? 60;
var clusterOperationToken = CreateOperationToken();
var clusterOperationToken = CreateHttpRequestBoundOperationToken();
var type = GetDebugInfoPackageContentType();
var databases = GetStringValuesQueryString("database", required: false);
var operationId = GetLongQueryString("operationId", false) ?? ServerStore.Operations.GetNextOperationId();
Expand Down Expand Up @@ -181,7 +181,7 @@ public async Task GetInfoPackage()
var debugInfoType = GetDebugInfoPackageContentType();
var databases = GetStringValuesQueryString("database", required: false);
var operationId = GetLongQueryString("operationId", false) ?? ServerStore.Operations.GetNextOperationId();
var token = CreateOperationToken();
var token = CreateHttpRequestBoundOperationToken();

await ServerStore.Operations.AddLocalOperation(
operationId,
Expand Down
2 changes: 1 addition & 1 deletion src/Raven.Server/Documents/Handlers/IndexHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public async Task FinishRolling()

var result = await ServerStore.SendToLeaderAsync(command);

using (var token = CreateOperationToken())
using (var token = CreateHttpRequestBoundOperationToken())
await Database.RachisLogIndexNotifications.WaitForIndexNotification(result.Index, token.Token);

NoContentStatus();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public override async ValueTask ExecuteAsync()

var proxyCommand = new ProxyCommand<TResult>(command, RequestHandler.HttpContext.Response);

using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
await HandleRemoteNodeAsync(proxyCommand, token);
}
}
Expand Down Expand Up @@ -68,7 +68,7 @@ public override async ValueTask ExecuteAsync()
var command = await CreateCommandForNodeAsync(nodeTag, context);
var proxyCommand = new ProxyCommand<TResult>(command, RequestHandler.HttpContext.Response);

using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
await HandleRemoteNodeAsync(proxyCommand, context, token);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ protected AbstractHandlerWebSocketProxyProcessor([NotNull] TRequestHandler reque
public override async ValueTask ExecuteAsync()
{
using (var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync())
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
if (IsCurrentNode(out var nodeTag))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public override async ValueTask ExecuteAsync()
var name = RequestHandler.GetQueryStringValueAndAssertIfSingleAndNotEmpty("name");

using (ContextPool.AllocateOperationContext(out TOperationContext context))
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
var type = AttachmentType.Document;
string changeVector = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ protected AbstractAttachmentHandlerProcessorForPutAttachment([NotNull] TRequestH
public override async ValueTask ExecuteAsync()
{
using (ContextPool.AllocateOperationContext(out TOperationContext context))
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
var id = RequestHandler.GetQueryStringValueAndAssertIfSingleAndNotEmpty("id");
var name = RequestHandler.GetQueryStringValueAndAssertIfSingleAndNotEmpty("name");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public override async ValueTask ExecuteAsync()

using (var commandsReader = GetCommandsReader())
using (ContextPool.AllocateOperationContext(out TOperationContext context))
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
var contentType = HttpContext.Request.ContentType;
try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public override async ValueTask ExecuteAsync()

var connection = CreateChangesClientConnection(webSocket, throttleConnection, fromStudio);

using (var token = RequestHandler.CreateOperationToken(connection.DisposeToken))
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken(connection.DisposeToken))
using (ContextPool.AllocateOperationContext(out JsonOperationContext context))
{
try
Expand Down Expand Up @@ -151,7 +151,7 @@ private async Task HandleConnectionAsync(
reader.TryGet("Param", out string commandParameter);
reader.TryGet("Params", out BlittableJsonReaderArray commandParameters);

using (var commandToken = RequestHandler.CreateOperationToken(TimeSpan.FromSeconds(30)))
using (var commandToken = RequestHandler.CreateHttpRequestBoundTimeLimitedOperationToken(TimeSpan.FromSeconds(30)))
await connection.HandleCommandAsync(command, commandParameter, commandParameters, commandToken.Token);

if (reader.TryGet("CommandId", out int commandId))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public override async ValueTask ExecuteAsync()
var sw = Stopwatch.StartNew();
long numberOfResults, totalDocumentsSizeInBytes;
using (ContextPool.AllocateOperationContext(out TOperationContext context))
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
(numberOfResults, totalDocumentsSizeInBytes) = await GetCollectionDocumentsAndWriteAsync(context, name, start, pageSize, token.Token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected AbstractIndexHandlerProcessorForTerms([NotNull] TRequestHandler reques

public override async ValueTask ExecuteAsync()
{
using (var token = RequestHandler.CreateTimeLimitedOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundTimeLimitedOperationToken())
using (RequestHandler.ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
{
var field = RequestHandler.GetQueryStringValueAndAssertIfSingleAndNotEmpty("field");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ protected override ValueTask HandleCurrentNodeAsync()
if (newIndex == null)
throw new IndexDoesNotExistException($"Could not find side-by-side index for '{name}'.");

using (var token = RequestHandler.CreateOperationToken(TimeSpan.FromMinutes(15)))
using (var token = RequestHandler.CreateHttpRequestBoundTimeLimitedOperationToken(TimeSpan.FromMinutes(15)))
{
RequestHandler.Database.IndexStore.ReplaceIndexes(name, newIndex.Name, token.Token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public override async ValueTask ExecuteAsync()
ServerStore.ConcurrentBackupsCounter.StartBackup(backupName, Logger);
try
{
var cancelToken = new OperationCancelToken(ServerStore.ServerShutdown);
var cancelToken = RequestHandler.CreateBackgroundOperationToken();
ScheduleBackup(backupConfiguration, operationId, backupName, sw, startTime, cancelToken);

await using (var writer = new AsyncBlittableJsonTextWriter(context, RequestHandler.ResponseBodyStream()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private void ExecuteQueryOperation(IndexQueryServerSide query, long operationId,
IDisposable returnContextToPool,
OperationType operationType)
{
var token = new OperationCancelToken(RequestHandler.Database.Configuration.Databases.QueryOperationTimeout.AsTimeSpan, RequestHandler.Database.DatabaseShutdown);
var token = RequestHandler.CreateTimeLimitedBackgroundOperationTokenForQueryOperation();

var description = GetOperationDescription(query);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public override async ValueTask ExecuteAsync()
{
try
{
using (var token = RequestHandler.CreateTimeLimitedQueryToken())
using (var token = RequestHandler.CreateHttpRequestBoundTimeLimitedOperationTokenForQuery())
using (AllocateContextForQueryOperation(out var queryContext, out var context))
{
var addSpatialProperties = RequestHandler.GetBoolValueQueryString("addSpatialProperties", required: false) ?? false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public RachisHandlerProcessorForWaitForIndexNotifications([NotNull] DatabaseRequ

protected override async ValueTask WaitForCommandsAsync(TransactionOperationContext _, WaitForIndexNotificationRequest commands)
{
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
foreach (var index in commands.RaftCommandIndexes)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public override async ValueTask ExecuteAsync()
var date = Convert.ToDateTime(since).ToUniversalTime();

using (ContextPool.AllocateOperationContext(out TOperationContext context))
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
await GetResolvedRevisionsAndWriteAsync(context, since: date, take, token.Token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected AbstractRevisionsHandlerProcessorForGetRevisions([NotNull] TRequestHan
public override async ValueTask ExecuteAsync()
{
using(ContextPool.AllocateOperationContext(out TOperationContext context))
using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
{
var changeVectors = RequestHandler.GetStringValuesQueryString("changeVector", required: false);
var metadataOnly = RequestHandler.GetBoolValueQueryString("metadataOnly", required: false) ?? false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public override async ValueTask ExecuteAsync()
configuration = JsonDeserializationServer.RevertRevisions(json);
}

var token = RequestHandler.CreateTimeLimitedOperationToken(useRequestAbortedToken: false);
var token = RequestHandler.CreateTimeLimitedBackgroundOperationToken();
var operationId = RequestHandler.GetLongQueryString("operationId", required: false) ?? GetNextOperationId();

ScheduleRevertRevisions(operationId, configuration, token);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ protected override async ValueTask GetAndWriteRevisionsBinAsync(DocumentsOperati
long count;
long totalDocumentsSizeInBytes;

using (var token = RequestHandler.CreateOperationToken())
using (var token = RequestHandler.CreateHttpRequestBoundOperationToken())
await using (var writer = new AsyncBlittableJsonTextWriter(context, RequestHandler.ResponseBodyStream()))
{
writer.WriteStartObject();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public override async ValueTask ExecuteAsync()
HttpContext.Response.Headers[Constants.Headers.ContentType] = "application/octet-stream";
ApplyBackwardCompatibility(options);

var token = RequestHandler.CreateOperationToken();
var token = RequestHandler.CreateHttpRequestBoundOperationToken();

await ExportAsync(context, returnContextToPool, operationId, options, startDocumentEtag, startRaftIndex, token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ internal async Task Import<TOperation>(JsonOperationContext context, string data
}
}

var token = RequestHandler.CreateOperationToken();
var token = RequestHandler.CreateHttpRequestBoundOperationToken();

var result = new SmugglerResult();
BlittableJsonReaderObject blittableJson = null;
Expand Down
Loading

0 comments on commit a106afc

Please sign in to comment.