Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Introducing cancellation tokens and limited time to process queries o…
…n server side queries
  • Loading branch information
ayende committed Jan 22, 2014
1 parent 0341764 commit 1136a1c
Show file tree
Hide file tree
Showing 35 changed files with 349 additions and 238 deletions.
12 changes: 6 additions & 6 deletions Raven.Client.Embedded/EmbeddedDatabaseCommands.cs
Expand Up @@ -479,11 +479,11 @@ public QueryResult Query(string index, IndexQuery query, string[] includes, bool
string entityName = null; string entityName = null;
if (index.StartsWith("dynamic/")) if (index.StartsWith("dynamic/"))
entityName = index.Substring("dynamic/".Length); entityName = index.Substring("dynamic/".Length);
queryResult = database.ExecuteDynamicQuery(entityName, query.Clone()); queryResult = database.ExecuteDynamicQuery(entityName, query.Clone(), CancellationToken.None);
} }
else else
{ {
queryResult = database.Query(index, query.Clone()); queryResult = database.Query(index, query.Clone(),CancellationToken.None);
} }


var loadedIds = new HashSet<string>( var loadedIds = new HashSet<string>(
Expand Down Expand Up @@ -534,7 +534,7 @@ public IEnumerator<RavenJObject> StreamQuery(string index, IndexQuery query, out
// the cache for that, to avoid filling it up very quickly // the cache for that, to avoid filling it up very quickly
using (DocumentCacher.SkipSettingDocumentsInDocumentCache()) using (DocumentCacher.SkipSettingDocumentsInDocumentCache())
{ {
database.Query(index, query, information => database.Query(index, query, CancellationToken.None, information =>
{ {
localQueryHeaderInfo = information; localQueryHeaderInfo = information;
waitForHeaders.Set(); waitForHeaders.Set();
Expand Down Expand Up @@ -824,7 +824,7 @@ public Operation UpdateByIndex(string indexName, IndexQuery queryToUpdate, Scrip
public Operation UpdateByIndex(string indexName, IndexQuery queryToUpdate, PatchRequest[] patchRequests, bool allowStale) public Operation UpdateByIndex(string indexName, IndexQuery queryToUpdate, PatchRequest[] patchRequests, bool allowStale)
{ {
CurrentOperationContext.Headers.Value = OperationsHeaders; CurrentOperationContext.Headers.Value = OperationsHeaders;
var databaseBulkOperations = new DatabaseBulkOperations(database, TransactionInformation); var databaseBulkOperations = new DatabaseBulkOperations(database, TransactionInformation, CancellationToken.None, null);
var state = databaseBulkOperations.UpdateByIndex(indexName, queryToUpdate, patchRequests, allowStale); var state = databaseBulkOperations.UpdateByIndex(indexName, queryToUpdate, patchRequests, allowStale);
return new Operation(0, state); return new Operation(0, state);
} }
Expand All @@ -839,7 +839,7 @@ public Operation UpdateByIndex(string indexName, IndexQuery queryToUpdate, Patch
public Operation UpdateByIndex(string indexName, IndexQuery queryToUpdate, ScriptedPatchRequest patch, bool allowStale) public Operation UpdateByIndex(string indexName, IndexQuery queryToUpdate, ScriptedPatchRequest patch, bool allowStale)
{ {
CurrentOperationContext.Headers.Value = OperationsHeaders; CurrentOperationContext.Headers.Value = OperationsHeaders;
var databaseBulkOperations = new DatabaseBulkOperations(database, RavenTransactionAccessor.GetTransactionInformation()); var databaseBulkOperations = new DatabaseBulkOperations(database, RavenTransactionAccessor.GetTransactionInformation(), CancellationToken.None, null);
var state = databaseBulkOperations.UpdateByIndex(indexName, queryToUpdate, patch, allowStale); var state = databaseBulkOperations.UpdateByIndex(indexName, queryToUpdate, patch, allowStale);
return new Operation(0, state); return new Operation(0, state);
} }
Expand All @@ -864,7 +864,7 @@ public Operation DeleteByIndex(string indexName, IndexQuery queryToDelete)
public Operation DeleteByIndex(string indexName, IndexQuery queryToDelete, bool allowStale) public Operation DeleteByIndex(string indexName, IndexQuery queryToDelete, bool allowStale)
{ {
CurrentOperationContext.Headers.Value = OperationsHeaders; CurrentOperationContext.Headers.Value = OperationsHeaders;
var databaseBulkOperations = new DatabaseBulkOperations(database, TransactionInformation); var databaseBulkOperations = new DatabaseBulkOperations(database, TransactionInformation, CancellationToken.None, null);
var state = databaseBulkOperations.DeleteByIndex(indexName, queryToDelete, allowStale); var state = databaseBulkOperations.DeleteByIndex(indexName, queryToDelete, allowStale);
return new Operation(0, state); return new Operation(0, state);
} }
Expand Down
6 changes: 4 additions & 2 deletions Raven.Database/Bundles/Expiration/ExpiredDocumentsCleaner.cs
Expand Up @@ -15,6 +15,7 @@
using Raven.Abstractions.Logging; using Raven.Abstractions.Logging;
using Raven.Database; using Raven.Database;
using Raven.Database.Data; using Raven.Database.Data;
using Raven.Database.Extensions;
using Raven.Database.Plugins; using Raven.Database.Plugins;


namespace Raven.Bundles.Expiration namespace Raven.Bundles.Expiration
Expand Down Expand Up @@ -78,17 +79,18 @@ private void TimerCallback(object state)
const int pageSize = 1024; const int pageSize = 1024;


QueryResultWithIncludes queryResult; QueryResultWithIncludes queryResult;

using(var cts = new CancellationTokenSource())
using (Database.DisableAllTriggersForCurrentThread()) using (Database.DisableAllTriggersForCurrentThread())
{ {
cts.TimeoutAfter(TimeSpan.FromMinutes(5));
queryResult = Database.Query(RavenDocumentsByExpirationDate, new IndexQuery queryResult = Database.Query(RavenDocumentsByExpirationDate, new IndexQuery
{ {
Start = start, Start = start,
PageSize = pageSize, PageSize = pageSize,
Cutoff = currentTime, Cutoff = currentTime,
Query = query, Query = query,
FieldsToFetch = new[] { "__document_id" } FieldsToFetch = new[] { "__document_id" }
}); }, cts.Token);
} }


if(queryResult.Results.Count == 0) if(queryResult.Results.Count == 0)
Expand Down
7 changes: 7 additions & 0 deletions Raven.Database/Config/InMemoryRavenConfiguration.cs
Expand Up @@ -152,6 +152,8 @@ public void Initialize()


CreateAutoIndexesForAdHocQueriesIfNeeded = ravenSettings.CreateAutoIndexesForAdHocQueriesIfNeeded.Value; CreateAutoIndexesForAdHocQueriesIfNeeded = ravenSettings.CreateAutoIndexesForAdHocQueriesIfNeeded.Value;


DatbaseOperationTimeout = ravenSettings.DatbaseOperationTimeout.Value;

TimeToWaitBeforeRunningIdleIndexes = ravenSettings.TimeToWaitBeforeRunningIdleIndexes.Value; TimeToWaitBeforeRunningIdleIndexes = ravenSettings.TimeToWaitBeforeRunningIdleIndexes.Value;
TimeToWaitBeforeMarkingAutoIndexAsIdle = ravenSettings.TimeToWaitBeforeMarkingAutoIndexAsIdle.Value; TimeToWaitBeforeMarkingAutoIndexAsIdle = ravenSettings.TimeToWaitBeforeMarkingAutoIndexAsIdle.Value;


Expand Down Expand Up @@ -222,6 +224,11 @@ public void Initialize()
/// </summary> /// </summary>
public SemaphoreSlim ConcurrentMultiGetRequests = new SemaphoreSlim(192); public SemaphoreSlim ConcurrentMultiGetRequests = new SemaphoreSlim(192);


/// <summary>
/// The time to wait before canceling a database operation such as load (many) or query
/// </summary>
public TimeSpan DatbaseOperationTimeout { get; private set; }

public TimeSpan TimeToWaitBeforeRunningIdleIndexes { get; private set; } public TimeSpan TimeToWaitBeforeRunningIdleIndexes { get; private set; }


public TimeSpan TimeToWaitBeforeRunningAbandonedIndexes { get; private set; } public TimeSpan TimeToWaitBeforeRunningAbandonedIndexes { get; private set; }
Expand Down
5 changes: 4 additions & 1 deletion Raven.Database/Config/StronglyTypedRavenSettings.cs
Expand Up @@ -113,6 +113,8 @@ public void Setup(int defaultMaxNumberOfItemsToIndexInSingleBatch, int defaultIn
TimeSpanArgumentType.FromParse); TimeSpanArgumentType.FromParse);


TimeToWaitBeforeRunningIdleIndexes = new TimeSpanSetting(settings["Raven/TimeToWaitBeforeRunningIdleIndexes"], TimeSpan.FromMinutes(10), TimeSpanArgumentType.FromParse); TimeToWaitBeforeRunningIdleIndexes = new TimeSpanSetting(settings["Raven/TimeToWaitBeforeRunningIdleIndexes"], TimeSpan.FromMinutes(10), TimeSpanArgumentType.FromParse);

DatbaseOperationTimeout = new TimeSpanSetting(settings["Raven/DatbaseOperationTimeout"], TimeSpan.FromMinutes(5), TimeSpanArgumentType.FromParse);


TimeToWaitBeforeMarkingAutoIndexAsIdle = new TimeSpanSetting(settings["Raven/TimeToWaitBeforeMarkingAutoIndexAsIdle"], TimeSpan.FromHours(1), TimeSpanArgumentType.FromParse); TimeToWaitBeforeMarkingAutoIndexAsIdle = new TimeSpanSetting(settings["Raven/TimeToWaitBeforeMarkingAutoIndexAsIdle"], TimeSpan.FromHours(1), TimeSpanArgumentType.FromParse);


Expand Down Expand Up @@ -248,5 +250,6 @@ private int GetDefaultMemoryCacheLimitMegabytes()
public BooleanSetting PreventAutomaticSuggestionCreation { get; set; } public BooleanSetting PreventAutomaticSuggestionCreation { get; set; }


public BooleanSetting DisablePerformanceCounters { get; set; } public BooleanSetting DisablePerformanceCounters { get; set; }
} public TimeSpanSetting DatbaseOperationTimeout { get; private set; }
}
} }

0 comments on commit 1136a1c

Please sign in to comment.