Raven.Bundles.Expiration.ExpiredDocumentsCleaner.TimerCallback C# (CSharp) Method

TimerCallback() private method

private TimerCallback ( object state ) : void
state object
return void
		private void TimerCallback(object state)
		{
			if (executing)
				return;

			executing = true;
			try
			{
				DateTime currentTime = SystemTime.UtcNow;
				string nowAsStr = currentTime.ToString(Default.DateTimeFormatsToWrite);
				logger.Debug("Trying to find expired documents to delete");
				var query = "Expiry:[* TO " + nowAsStr + "]";

				var list = new List<string>();
				int start = 0;
				while (true)
				{
					const int pageSize = 1024;

					QueryResultWithIncludes queryResult;

					using (Database.DisableAllTriggersForCurrentThread())
					{
						queryResult = Database.Query(RavenDocumentsByExpirationDate, new IndexQuery
						{
							Start = start,
							PageSize = pageSize,
							Cutoff = currentTime,
							Query = query,
							FieldsToFetch = new[] { "__document_id" }
						});
					}

					if(queryResult.Results.Count == 0)
						break;

					start += pageSize;

					list.AddRange(queryResult.Results.Select(result => result.Value<string>("__document_id")).Where(x=>string.IsNullOrEmpty(x) == false));
				}

				if (list.Count == 0)
					return;

				logger.Debug(
					() => string.Format("Deleting {0} expired documents: [{1}]", list.Count, string.Join(", ", list)));

				foreach (var id in list)
				{
					Database.Delete(id, null, null);
				}
			}
			catch (Exception e)
			{
				logger.ErrorException("Error when trying to find expired documents", e);
			}
			finally
			{
				executing = false;
			}

		}
ExpiredDocumentsCleaner