diff --git a/src/Raven.Server/Documents/AbstractDatabaseRequestHandler.cs b/src/Raven.Server/Documents/AbstractDatabaseRequestHandler.cs index 10d55acb4b7..4b0087d25d2 100644 --- a/src/Raven.Server/Documents/AbstractDatabaseRequestHandler.cs +++ b/src/Raven.Server/Documents/AbstractDatabaseRequestHandler.cs @@ -16,7 +16,7 @@ public abstract class AbstractDatabaseRequestHandler : Reques public abstract char IdentityPartsSeparator { get; } - public abstract OperationCancelToken CreateTimeLimitedOperationToken(); + public abstract OperationCancelToken CreateTimeLimitedOperationToken(bool useRequestAbortedToken = true); public abstract OperationCancelToken CreateTimeLimitedQueryToken(); diff --git a/src/Raven.Server/Documents/DatabaseRequestHandler.cs b/src/Raven.Server/Documents/DatabaseRequestHandler.cs index b062df76cca..199b87c257a 100644 --- a/src/Raven.Server/Documents/DatabaseRequestHandler.cs +++ b/src/Raven.Server/Documents/DatabaseRequestHandler.cs @@ -77,9 +77,11 @@ public override async Task WaitForIndexToBeAppliedAsync(TransactionOperationCont } } - public override OperationCancelToken CreateTimeLimitedOperationToken() + public override OperationCancelToken CreateTimeLimitedOperationToken(bool useRequestAbortedToken = true) { - return new OperationCancelToken(Database.Configuration.Databases.OperationTimeout.AsTimeSpan, Database.DatabaseShutdown, HttpContext.RequestAborted); + if (useRequestAbortedToken) + return new OperationCancelToken(Database.Configuration.Databases.OperationTimeout.AsTimeSpan, Database.DatabaseShutdown, HttpContext.RequestAborted); + return new OperationCancelToken(Database.Configuration.Databases.OperationTimeout.AsTimeSpan, Database.DatabaseShutdown); } public override OperationCancelToken CreateTimeLimitedQueryToken() diff --git a/src/Raven.Server/Documents/Handlers/Admin/AdminIndexHandler.cs b/src/Raven.Server/Documents/Handlers/Admin/AdminIndexHandler.cs index 1eb790f71b8..38774d8f6d2 100644 --- a/src/Raven.Server/Documents/Handlers/Admin/AdminIndexHandler.cs +++ b/src/Raven.Server/Documents/Handlers/Admin/AdminIndexHandler.cs @@ -9,6 +9,7 @@ using Raven.Server.Documents.Operations; using Raven.Server.Json; using Raven.Server.Routing; +using Raven.Server.ServerWide; using Raven.Server.ServerWide.Context; using Sparrow.Json; using Sparrow.Json.Parsing; @@ -134,7 +135,7 @@ public async Task OptimizeIndex() if (index == null) IndexDoesNotExistException.ThrowFor(name); - var token = CreateOperationToken(); + var token = new OperationCancelToken(Database.DatabaseShutdown); var result = new IndexOptimizeResult(index.Name); var operationId = Database.Operations.GetNextOperationId(); var t = Database.Operations.AddLocalOperation( diff --git a/src/Raven.Server/Documents/Handlers/Admin/Processors/Indexes/AdminIndexHandlerProcessorForDump.cs b/src/Raven.Server/Documents/Handlers/Admin/Processors/Indexes/AdminIndexHandlerProcessorForDump.cs index 8de4348942b..64f1b3a5e08 100644 --- a/src/Raven.Server/Documents/Handlers/Admin/Processors/Indexes/AdminIndexHandlerProcessorForDump.cs +++ b/src/Raven.Server/Documents/Handlers/Admin/Processors/Indexes/AdminIndexHandlerProcessorForDump.cs @@ -32,7 +32,8 @@ protected override async ValueTask HandleCurrentNodeAsync() } var operationId = RequestHandler.Database.Operations.GetNextOperationId(); - var token = RequestHandler.CreateTimeLimitedQueryOperationToken(); + var token = new OperationCancelToken(RequestHandler.Database.Configuration.Databases.QueryOperationTimeout.AsTimeSpan, + RequestHandler.Database.DatabaseShutdown); _ = RequestHandler.Database.Operations.AddLocalOperation( operationId, diff --git a/src/Raven.Server/Documents/Handlers/Admin/Processors/Revisions/AbstractAdminRevisionsHandlerProcessorForEnforceRevisionsConfiguration.cs b/src/Raven.Server/Documents/Handlers/Admin/Processors/Revisions/AbstractAdminRevisionsHandlerProcessorForEnforceRevisionsConfiguration.cs index 908695f3f4c..6cf65ceae9a 100644 --- a/src/Raven.Server/Documents/Handlers/Admin/Processors/Revisions/AbstractAdminRevisionsHandlerProcessorForEnforceRevisionsConfiguration.cs +++ b/src/Raven.Server/Documents/Handlers/Admin/Processors/Revisions/AbstractAdminRevisionsHandlerProcessorForEnforceRevisionsConfiguration.cs @@ -21,7 +21,7 @@ protected AbstractAdminRevisionsHandlerProcessorForEnforceRevisionsConfiguration public override async ValueTask ExecuteAsync() { - var token = RequestHandler.CreateTimeLimitedOperationToken(); + var token = RequestHandler.CreateTimeLimitedOperationToken(useRequestAbortedToken: false); var operationId = RequestHandler.GetLongQueryString("operationId", false) ?? GetNextOperationId(); ScheduleEnforceConfigurationOperation(operationId, token); diff --git a/src/Raven.Server/Documents/Handlers/Debugging/ServerWideDebugInfoPackageHandler.cs b/src/Raven.Server/Documents/Handlers/Debugging/ServerWideDebugInfoPackageHandler.cs index 5d9f0cac602..2ac42b35e32 100644 --- a/src/Raven.Server/Documents/Handlers/Debugging/ServerWideDebugInfoPackageHandler.cs +++ b/src/Raven.Server/Documents/Handlers/Debugging/ServerWideDebugInfoPackageHandler.cs @@ -201,7 +201,7 @@ await ServerStore.Operations.AddLocalOperation( if (debugInfoType.HasFlag(DebugInfoPackageContentType.ServerWide)) { - await WriteServerInfo(archive, context, localEndpointClient, token.Token); + await WriteServerInfo(archive, context, localEndpointClient, token.Token); } if (debugInfoType.HasFlag(DebugInfoPackageContentType.Databases)) @@ -211,8 +211,8 @@ await ServerStore.Operations.AddLocalOperation( if (debugInfoType.HasFlag(DebugInfoPackageContentType.LogFile)) { - await WriteLogFile(archive, token.Token); - } + await WriteLogFile(archive, token.Token); + } } catch (Exception e) { diff --git a/src/Raven.Server/Documents/Handlers/Processors/OngoingTasks/AbstractOngoingTasksHandlerProcessorForBackupDatabaseOnce.cs b/src/Raven.Server/Documents/Handlers/Processors/OngoingTasks/AbstractOngoingTasksHandlerProcessorForBackupDatabaseOnce.cs index c899f4f519a..66586003304 100644 --- a/src/Raven.Server/Documents/Handlers/Processors/OngoingTasks/AbstractOngoingTasksHandlerProcessorForBackupDatabaseOnce.cs +++ b/src/Raven.Server/Documents/Handlers/Processors/OngoingTasks/AbstractOngoingTasksHandlerProcessorForBackupDatabaseOnce.cs @@ -58,8 +58,7 @@ public override async ValueTask ExecuteAsync() ServerStore.ConcurrentBackupsCounter.StartBackup(backupName, Logger); try { - var cancelToken = RequestHandler.CreateOperationToken(); - + var cancelToken = new OperationCancelToken(ServerStore.ServerShutdown); ScheduleBackup(backupConfiguration, operationId, backupName, sw, startTime, cancelToken); await using (var writer = new AsyncBlittableJsonTextWriter(context, RequestHandler.ResponseBodyStream())) diff --git a/src/Raven.Server/Documents/Handlers/Processors/Queries/AbstractDatabaseOperationQueriesHandlerProcessor.cs b/src/Raven.Server/Documents/Handlers/Processors/Queries/AbstractDatabaseOperationQueriesHandlerProcessor.cs index bca2f983f1f..4cb846735f8 100644 --- a/src/Raven.Server/Documents/Handlers/Processors/Queries/AbstractDatabaseOperationQueriesHandlerProcessor.cs +++ b/src/Raven.Server/Documents/Handlers/Processors/Queries/AbstractDatabaseOperationQueriesHandlerProcessor.cs @@ -59,7 +59,7 @@ private void ExecuteQueryOperation(IndexQueryServerSide query, long operationId, IDisposable returnContextToPool, OperationType operationType) { - var token = RequestHandler.CreateTimeLimitedQueryOperationToken(); + var token = new OperationCancelToken(RequestHandler.Database.Configuration.Databases.QueryOperationTimeout.AsTimeSpan, RequestHandler.Database.DatabaseShutdown); var description = GetOperationDescription(query); diff --git a/src/Raven.Server/Documents/Handlers/Processors/Revisions/AbstractRevisionsHandlerProcessorForRevertRevisions.cs b/src/Raven.Server/Documents/Handlers/Processors/Revisions/AbstractRevisionsHandlerProcessorForRevertRevisions.cs index ea4d7be6017..e7d18aace4e 100644 --- a/src/Raven.Server/Documents/Handlers/Processors/Revisions/AbstractRevisionsHandlerProcessorForRevertRevisions.cs +++ b/src/Raven.Server/Documents/Handlers/Processors/Revisions/AbstractRevisionsHandlerProcessorForRevertRevisions.cs @@ -30,7 +30,7 @@ public override async ValueTask ExecuteAsync() configuration = JsonDeserializationServer.RevertRevisions(json); } - var token = RequestHandler.CreateTimeLimitedOperationToken(); + var token = RequestHandler.CreateTimeLimitedOperationToken(useRequestAbortedToken: false); var operationId = RequestHandler.GetLongQueryString("operationId", required: false) ?? GetNextOperationId(); ScheduleRevertRevisions(operationId, configuration, token); diff --git a/src/Raven.Server/Documents/Handlers/Processors/Studio/StudioCollectionHandlerProcessorForDeleteCollection.cs b/src/Raven.Server/Documents/Handlers/Processors/Studio/StudioCollectionHandlerProcessorForDeleteCollection.cs index aaa142eb863..0c9fcf1df88 100644 --- a/src/Raven.Server/Documents/Handlers/Processors/Studio/StudioCollectionHandlerProcessorForDeleteCollection.cs +++ b/src/Raven.Server/Documents/Handlers/Processors/Studio/StudioCollectionHandlerProcessorForDeleteCollection.cs @@ -35,7 +35,7 @@ private void ExecuteCollectionOperation( DocumentsOperationContext docsContext, IDisposable returnToContextPool, OperationType operationType, string collectionName, long operationId, HashSet excludeIds) { - var token = RequestHandler.CreateTimeLimitedCollectionOperationToken(); + var token = new OperationCancelToken(RequestHandler.Database.Configuration.Databases.CollectionOperationTimeout.AsTimeSpan, RequestHandler.Database.DatabaseShutdown); var collectionRunner = new StudioCollectionRunner(RequestHandler.Database, docsContext, excludeIds); diff --git a/src/Raven.Server/Documents/Sharding/Handlers/Processors/OngoingTasks/ShardedOngoingTasksHandlerProcessorForBackupDatabaseNow.cs b/src/Raven.Server/Documents/Sharding/Handlers/Processors/OngoingTasks/ShardedOngoingTasksHandlerProcessorForBackupDatabaseNow.cs index c03832890a0..382b2467c3c 100644 --- a/src/Raven.Server/Documents/Sharding/Handlers/Processors/OngoingTasks/ShardedOngoingTasksHandlerProcessorForBackupDatabaseNow.cs +++ b/src/Raven.Server/Documents/Sharding/Handlers/Processors/OngoingTasks/ShardedOngoingTasksHandlerProcessorForBackupDatabaseNow.cs @@ -5,6 +5,7 @@ using Raven.Client.Documents.Operations.Backups; using Raven.Client.Util; using Raven.Server.Documents.Handlers.Processors.OngoingTasks; +using Raven.Server.ServerWide; using Raven.Server.ServerWide.Context; namespace Raven.Server.Documents.Sharding.Handlers.Processors.OngoingTasks @@ -17,7 +18,8 @@ public ShardedOngoingTasksHandlerProcessorForBackupDatabaseNow([NotNull] Sharded protected override ValueTask ScheduleBackupOperationAsync(long taskId, bool isFullBackup, long operationId, DateTime? _) { - var token = RequestHandler.CreateTimeLimitedOperationToken(); + var token = new OperationCancelToken(RequestHandler.DatabaseContext.Configuration.Databases.OperationTimeout.AsTimeSpan, RequestHandler.DatabaseContext.DatabaseShutdown); + var startTime = SystemTime.UtcNow; var t = RequestHandler.DatabaseContext.Operations.AddRemoteOperation, ShardedBackupResult, ShardedBackupProgress>(operationId, Server.Documents.Operations.OperationType.DatabaseBackup, diff --git a/src/Raven.Server/Documents/Sharding/Handlers/Processors/Queries/AbstractShardedOperationQueriesHandlerProcessor.cs b/src/Raven.Server/Documents/Sharding/Handlers/Processors/Queries/AbstractShardedOperationQueriesHandlerProcessor.cs index 98ba32e2e5d..b4bd7865d55 100644 --- a/src/Raven.Server/Documents/Sharding/Handlers/Processors/Queries/AbstractShardedOperationQueriesHandlerProcessor.cs +++ b/src/Raven.Server/Documents/Sharding/Handlers/Processors/Queries/AbstractShardedOperationQueriesHandlerProcessor.cs @@ -9,6 +9,7 @@ using Raven.Server.Documents.Operations; using Raven.Server.Documents.Queries; using Raven.Server.NotificationCenter; +using Raven.Server.ServerWide; using Raven.Server.ServerWide.Context; using Sparrow.Json; using Sparrow.Utils; @@ -46,7 +47,7 @@ protected override void ScheduleOperation(TransactionOperationContext asyncOpera throw new NotSupportedInShardingException("Query with limit is not supported in patch / delete by query operation"); } - var token = RequestHandler.CreateTimeLimitedOperationToken(); + var token = new OperationCancelToken(RequestHandler.DatabaseContext.Configuration.Databases.OperationTimeout.AsTimeSpan, RequestHandler.DatabaseContext.DatabaseShutdown); var op = GetOperation(query, operationId, options); diff --git a/src/Raven.Server/Documents/Sharding/Handlers/Processors/Studio/ShardedStudioCollectionHandlerProcessorForDeleteCollection.cs b/src/Raven.Server/Documents/Sharding/Handlers/Processors/Studio/ShardedStudioCollectionHandlerProcessorForDeleteCollection.cs index 2d6e2c2fb50..966a9ed6693 100644 --- a/src/Raven.Server/Documents/Sharding/Handlers/Processors/Studio/ShardedStudioCollectionHandlerProcessorForDeleteCollection.cs +++ b/src/Raven.Server/Documents/Sharding/Handlers/Processors/Studio/ShardedStudioCollectionHandlerProcessorForDeleteCollection.cs @@ -5,6 +5,7 @@ using Raven.Server.Documents.Commands.Studio; using Raven.Server.Documents.Handlers.Processors.Studio; using Raven.Server.Documents.Operations; +using Raven.Server.ServerWide; using Raven.Server.ServerWide.Context; namespace Raven.Server.Documents.Sharding.Handlers.Processors.Studio @@ -20,7 +21,7 @@ protected override void ScheduleDeleteCollection(TransactionOperationContext con { using (returnToContextPool) { - var token = RequestHandler.CreateTimeLimitedOperationToken(); + var token = new OperationCancelToken(RequestHandler.DatabaseContext.Configuration.Databases.OperationTimeout.AsTimeSpan, RequestHandler.DatabaseContext.DatabaseShutdown); var shardToIds = ShardLocator.GetDocumentIdsByShards(context, RequestHandler.DatabaseContext, excludeIds); diff --git a/src/Raven.Server/Documents/Sharding/Handlers/ReshardingHandler.cs b/src/Raven.Server/Documents/Sharding/Handlers/ReshardingHandler.cs index 56e2da5105e..c7894e5a77c 100644 --- a/src/Raven.Server/Documents/Sharding/Handlers/ReshardingHandler.cs +++ b/src/Raven.Server/Documents/Sharding/Handlers/ReshardingHandler.cs @@ -6,6 +6,7 @@ using Raven.Server.Json; using Raven.Server.Rachis; using Raven.Server.Routing; +using Raven.Server.ServerWide; using Raven.Server.ServerWide.Context; using Raven.Server.Utils; using Raven.Server.Web; @@ -47,7 +48,7 @@ public async Task StartResharding() ToBucket = toBucket, ToShard = toShard }; - var token = CreateOperationToken(); + var token = new OperationCancelToken(ServerStore.ServerShutdown); _ = ServerStore.Operations.AddLocalOperation(operationId, OperationType.Resharding, $"Move to shard {toShard} buckets [{fromBucket}-{toBucket}]", opDesc, async action => { var result = new ReshardingResult(); diff --git a/src/Raven.Server/Documents/Sharding/Handlers/ShardedDatabaseRequestHandler.cs b/src/Raven.Server/Documents/Sharding/Handlers/ShardedDatabaseRequestHandler.cs index 9d26954941d..7e522732cf9 100644 --- a/src/Raven.Server/Documents/Sharding/Handlers/ShardedDatabaseRequestHandler.cs +++ b/src/Raven.Server/Documents/Sharding/Handlers/ShardedDatabaseRequestHandler.cs @@ -124,9 +124,12 @@ public override OperationCancelToken CreateOperationToken(TimeSpan cancelAfter) return new OperationCancelToken(cancelAfter, DatabaseContext.DatabaseShutdown, HttpContext.RequestAborted); } - public override OperationCancelToken CreateTimeLimitedOperationToken() + public override OperationCancelToken CreateTimeLimitedOperationToken(bool useRequestAbortedToken = true) { - return new OperationCancelToken(DatabaseContext.Configuration.Databases.OperationTimeout.AsTimeSpan, DatabaseContext.DatabaseShutdown, HttpContext.RequestAborted); + if (useRequestAbortedToken) + return new OperationCancelToken(DatabaseContext.Configuration.Databases.OperationTimeout.AsTimeSpan, DatabaseContext.DatabaseShutdown, HttpContext.RequestAborted); + return new OperationCancelToken(DatabaseContext.Configuration.Databases.OperationTimeout.AsTimeSpan, DatabaseContext.DatabaseShutdown); + } public override OperationCancelToken CreateTimeLimitedQueryToken() diff --git a/src/Raven.Server/Smuggler/Documents/Handlers/SmugglerHandler.cs b/src/Raven.Server/Smuggler/Documents/Handlers/SmugglerHandler.cs index 9abad9f6d34..91e13653e55 100644 --- a/src/Raven.Server/Smuggler/Documents/Handlers/SmugglerHandler.cs +++ b/src/Raven.Server/Smuggler/Documents/Handlers/SmugglerHandler.cs @@ -12,7 +12,6 @@ using System.IO.Compression; using System.Linq; using System.Net; -using System.Net.Http; using System.Threading.Tasks; using System.Xml.Linq; using Microsoft.AspNetCore.WebUtilities; @@ -21,7 +20,6 @@ using Raven.Client.Documents.Conventions; using Raven.Client.Documents.Operations; using Raven.Client.Documents.Smuggler; -using Raven.Client.Exceptions.Security; using Raven.Client.Util; using Raven.Server.Documents; using Raven.Server.Documents.Handlers.Processors.Smuggler; @@ -336,7 +334,7 @@ public async Task MigrateFromAnotherDatabase() } var operationId = GetLongQueryString("operationId", false) ?? Database.Operations.GetNextOperationId(); - var token = CreateOperationToken(); + var token = new OperationCancelToken(Database.DatabaseShutdown); var transformScript = migrationConfiguration.TransformScript; _ = Database.Operations.AddLocalOperation( diff --git a/src/Raven.Server/Web/Studio/SqlMigrationHandler.cs b/src/Raven.Server/Web/Studio/SqlMigrationHandler.cs index c4398b131c5..d8abd699607 100644 --- a/src/Raven.Server/Web/Studio/SqlMigrationHandler.cs +++ b/src/Raven.Server/Web/Studio/SqlMigrationHandler.cs @@ -7,6 +7,7 @@ using Raven.Server.Documents.Operations; using Raven.Server.Json; using Raven.Server.Routing; +using Raven.Server.ServerWide; using Raven.Server.ServerWide.Context; using Raven.Server.SqlMigration; using Raven.Server.SqlMigration.Model; @@ -57,8 +58,7 @@ public async Task ImportSql() var dbDriver = DatabaseDriverDispatcher.CreateDriver(sourceSqlDatabase.Provider, sourceSqlDatabase.ConnectionString, sourceSqlDatabase.Schemas); var schema = dbDriver.FindSchema(); - var token = CreateOperationToken(); - + var token = new OperationCancelToken(Database.DatabaseShutdown); var result = new MigrationResult(migrationRequest.Settings); var collectionsCount = migrationRequest.Settings.Collections.Count; diff --git a/src/Raven.Server/Web/System/AdminDatabasesHandler.cs b/src/Raven.Server/Web/System/AdminDatabasesHandler.cs index 965c4a60810..9f053ea48e6 100644 --- a/src/Raven.Server/Web/System/AdminDatabasesHandler.cs +++ b/src/Raven.Server/Web/System/AdminDatabasesHandler.cs @@ -568,7 +568,8 @@ public async Task RestoreDatabase() await ServerStore.EnsureNotPassiveAsync(); - var cancelToken = CreateOperationToken(); + var cancelToken = new OperationCancelToken(ServerStore.ServerShutdown); + var operationId = ServerStore.Operations.GetNextOperationId(); _ = ServerStore.Operations.AddLocalOperation( @@ -1043,8 +1044,7 @@ public async Task CompactDatabase() } var database = await ServerStore.DatabasesLandlord.TryGetOrCreateResourceStore(compactSettings.DatabaseName).ConfigureAwait(false); - - var token = CreateOperationToken(); + var token = new OperationCancelToken(ServerStore.ServerShutdown); var compactDatabaseTask = new CompactDatabaseTask( ServerStore, compactSettings.DatabaseName, @@ -1224,7 +1224,9 @@ public async Task MigrateDatabaseOffline() } var (commandline, tmpFile) = configuration.GenerateExporterCommandLine(); var processStartInfo = new ProcessStartInfo(dataExporter, commandline); - var token = CreateOperationToken(); + + var token = new OperationCancelToken(ServerStore.ServerShutdown); + Task timeout = null; if (configuration.Timeout.HasValue) {