public DocumentDatabase(InMemoryRavenConfiguration configuration)
{
ExternalState = new ConcurrentDictionary<string, object>();
Name = configuration.DatabaseName;
if (configuration.BackgroundTasksPriority != ThreadPriority.Normal)
{
backgroundTaskScheduler = new TaskSchedulerWithCustomPriority(
// we need a minimum of four task threads - one for indexing dispatch, one for reducing dispatch, one for tasks, one for indexing/reducing ops
Math.Max(4, configuration.MaxNumberOfParallelIndexTasks + 2),
configuration.BackgroundTasksPriority);
}
else
{
backgroundTaskScheduler = TaskScheduler.Current;
}
ExtensionsState = new ConcurrentDictionary<object, object>();
Configuration = configuration;
ExecuteAlterConfiguration();
configuration.Container.SatisfyImportsOnce(this);
workContext = new WorkContext
{
IndexUpdateTriggers = IndexUpdateTriggers,
ReadTriggers = ReadTriggers
};
TransactionalStorage = configuration.CreateTransactionalStorage(workContext.HandleWorkNotifications);
configuration.Container.SatisfyImportsOnce(TransactionalStorage);
try
{
TransactionalStorage.Initialize(this);
}
catch (Exception)
{
TransactionalStorage.Dispose();
throw;
}
TransactionalStorage.Batch(actions => currentEtagBase = actions.General.GetNextIdentityValue("Raven/Etag"));
IndexDefinitionStorage = new IndexDefinitionStorage(
configuration,
TransactionalStorage,
configuration.DataDirectory,
configuration.Container.GetExportedValues<AbstractViewGenerator>(),
Extensions);
IndexStorage = new IndexStorage(IndexDefinitionStorage, configuration);
workContext.Configuration = configuration;
workContext.IndexStorage = IndexStorage;
workContext.TransactionaStorage = TransactionalStorage;
workContext.IndexDefinitionStorage = IndexDefinitionStorage;
try
{
InitializeTriggers();
ExecuteStartupTasks();
}
catch (Exception)
{
Dispose();
throw;
}
}