public RavenDbServer(RavenConfiguration settings) { settings.LoadLoggingSettings(); if (settings.ShouldCreateDefaultsWhenBuildingNewDatabaseFromScratch) settings.DatabaseCreatedFromScratch += OnDatabaseCreatedFromScratch; database = new DocumentDatabase(settings); database.SpinBackgroundWorkers(); server = new HttpServer(settings, typeof (RequestResponder).Assembly.GetTypes() .Where( t => typeof (RequestResponder).IsAssignableFrom(t) && t.IsAbstract == false) // to ensure that we would get consistent order, so we would always // have the responders using the same order, otherwise we get possibly // random ordering, and that might cause issues .OrderBy(x => x.Name) .Select(t => (RequestResponder) Activator.CreateInstance(t)) .Select(r => { r.Database = database; r.Settings = settings; return r; }) ); server.Start(); }
public RavenDbServer(RavenConfiguration settings) { settings.LoadLoggingSettings(); database = new DocumentDatabase(settings); database.SpinBackgroundWorkers(); server = new HttpServer(settings, database); server.Start(); }
public TransactionalStorage(RavenConfiguration configuration, Action onCommit) { database = configuration.DataDirectory; this.configuration = configuration; this.onCommit = onCommit; path = database; if (Path.IsPathRooted(database) == false) path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, database); database = Path.Combine(path, "Data"); LimitSystemCache(); Api.JetCreateInstance(out instance, database + Guid.NewGuid()); }
public DocumentDatabase(RavenConfiguration configuration) { Configuration = configuration; configuration.Container.SatisfyImportsOnce(this); workContext = new WorkContext { IndexUpdateTriggers = IndexUpdateTriggers, ReadTriggers = ReadTriggers }; TransactionalStorage = configuration.CreateTransactionalStorage(workContext.NotifyAboutWork); configuration.Container.SatisfyImportsOnce(TransactionalStorage); bool newDb; try { newDb = TransactionalStorage.Initialize(); } catch (Exception) { TransactionalStorage.Dispose(); throw; } IndexDefinitionStorage = new IndexDefinitionStorage( TransactionalStorage, configuration.DataDirectory, configuration.Container.GetExportedValues<AbstractViewGenerator>(), Extensions); IndexStorage = new IndexStorage(IndexDefinitionStorage, configuration); workContext.PerformanceCounters = new PerformanceCounters("Instance @ " + configuration.Port); workContext.IndexStorage = IndexStorage; workContext.TransactionaStorage = TransactionalStorage; workContext.IndexDefinitionStorage = IndexDefinitionStorage; InitializeTriggers(); ExecuteStartupTasks(); if (!newDb) return; OnNewlyCreatedDatabase(); }
private static void InteractiveRun(string[] args) { switch (GetArgument(args)) { case "install": AdminRequired(InstallAndStart, "/install"); break; case "uninstall": AdminRequired(EnsureStoppedAndUninstall, "/uninstall"); break; case "start": AdminRequired(StartService, "/start"); break; case "restart": AdminRequired(RestartService, "/restart"); break; case "stop": AdminRequired(StopService, "/stop"); break; case "restore": if (args.Length != 3) { PrintUsage(); break; } RunRestoreOperation(args[0], args[1]); break; case "debug": RunInDebugMode(anonymousUserAccessMode: null); break; case "tcp": #if DEBUG case "test": var dataDirectory = new RavenConfiguration().DataDirectory; if (Directory.Exists(dataDirectory)) Directory.Delete(dataDirectory, true); RunInDebugMode(anonymousUserAccessMode: AnonymousUserAccessMode.All); break; #endif default: PrintUsage(); break; } }
public RavenDbServer(RavenConfiguration settings) { settings.LoadLoggingSettings(); database = new DocumentDatabase(settings); try { database.SpinBackgroundWorkers(); server = new HttpServer(settings, database); server.Start(); } catch (Exception) { database.Dispose(); database = null; throw; } }
public HttpServer( RavenConfiguration configuration, IEnumerable<RequestResponder> requestResponders) { this.configuration = configuration; this.requestResponders = requestResponders.ToArray(); listener = new HttpListener(); listener.Prefixes.Add("http://+:" + configuration.Port + "/" + configuration.VirtualDirectory); switch (configuration.AnonymousUserAccessMode) { case AnonymousUserAccessMode.None: listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication; break; default: listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication | AuthenticationSchemes.Anonymous; break; } }
public DocumentDatabase(RavenConfiguration configuration) { this.configuration = configuration; workContext = new WorkContext(); TransactionalStorage = new TransactionalStorage(configuration.DataDirectory, workContext.NotifyAboutWork); bool newDb; try { newDb = TransactionalStorage.Initialize(); } catch (Exception) { TransactionalStorage.Dispose(); throw; } IndexDefinitionStorage = new IndexDefinitionStorage(configuration.DataDirectory); IndexStorage = new IndexStorage(configuration.DataDirectory, IndexDefinitionStorage); workContext.IndexStorage = IndexStorage; workContext.TransactionaStorage = TransactionalStorage; workContext.IndexDefinitionStorage = IndexDefinitionStorage; if (!newDb) return; if(configuration.ShouldCreateDefaultsWhenBuildingNewDatabaseFromScratch) { PutIndex("Raven/DocumentsByEntityName", new IndexDefinition { Map = @" from doc in docs where doc[""@metadata""][""Raven-Entity-Name""] != null select new { Tag = doc[""@metadata""][""Raven-Entity-Name""] }; " }); } configuration.RaiseDatabaseCreatedFromScratch(this); }
private void StartTheServer() { try { var ravenConfiguration = new RavenConfiguration { AnonymousUserAccessMode = AnonymousUserAccessMode.All, Port = _endPoint.Port, ListenerProtocol = ListenerProtocol.Tcp, DataDirectory = _ravenDrivePath }; _documentDatabase = new DocumentDatabase(ravenConfiguration); _documentDatabase.SpinBackgroundWorkers(); _ravenHttpServer = new HttpServer(ravenConfiguration, _documentDatabase); _ravenHttpServer.Start(); } catch (Exception ex) { Log.Error(ex.ToString()); } }
public static void Restore(RavenConfiguration configuration, string backupLocation, string databaseLocation) { using(var transactionalStorage = configuration.CreateTransactionalStorage(() => { })) { transactionalStorage.Restore(backupLocation, databaseLocation); } }
public TransactionalStorage(RavenConfiguration configuration, Action onCommit) : this(configuration.DataDirectory) { this.onCommit = onCommit; }
private static void RunInDebugMode(AnonymousUserAccessMode? anonymousUserAccessMode) { var consoleAppender = new ConsoleAppender { Layout = new PatternLayout(PatternLayout.DefaultConversionPattern), }; consoleAppender.AddFilter(new LoggerMatchFilter { AcceptOnMatch = true, LoggerToMatch = typeof(HttpServer).FullName }); consoleAppender.AddFilter(new DenyAllFilter()); BasicConfigurator.Configure(consoleAppender); var ravenConfiguration = new RavenConfiguration(); NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port); if (anonymousUserAccessMode.HasValue) ravenConfiguration.AnonymousUserAccessMode = anonymousUserAccessMode.Value; using (new RavenDbServer(ravenConfiguration)) { var path = Path.Combine(Environment.CurrentDirectory, "default.raven"); if (File.Exists(path)) { Console.WriteLine("Loading data from: {0}", path); Smuggler.Smuggler.ImportData(ravenConfiguration.ServerUrl, path); } Console.WriteLine("Raven is ready to process requests."); Console.WriteLine("Data directory: {0}, Port: {1}", ravenConfiguration.DataDirectory, ravenConfiguration.Port); Console.WriteLine("Press the enter key to stop the server or enter 'cls' and then enter to clear the log"); while (true) { var readLine = Console.ReadLine(); if (!"CLS".Equals(readLine, StringComparison.InvariantCultureIgnoreCase)) break; Console.Clear(); } } }
public TransactionalStorageConfigurator(RavenConfiguration configuration) { this.configuration = configuration; }
private static void Main(string[] args) { if (Environment.UserInteractive) { switch (GetArgument(args)) { case "install": AdminRequired(InstallAndStart, "/install"); break; case "uninstall": AdminRequired(EnsureStoppedAndUninstall, "/uninstall"); break; case "start": AdminRequired(StartService, "/start"); break; case "stop": AdminRequired(StopService, "/stop"); break; case "debug": RunInDebugMode(createDefaultDatabase: true, anonymousUserAccessMode: null); break; #if DEBUG case "test": var dataDirectory = new RavenConfiguration().DataDirectory; if (Directory.Exists(dataDirectory)) Directory.Delete(dataDirectory, true); RunInDebugMode(createDefaultDatabase: false, anonymousUserAccessMode: AnonymousUserAccessMode.All); break; #endif default: PrintUsage(); break; } } else { ServiceBase.Run(new RavenService()); } }
private static void RunInDebugMode(bool createDefaultDatabase, AnonymousUserAccessMode? anonymousUserAccessMode) { var consoleAppender = new ConsoleAppender { Layout = new PatternLayout(PatternLayout.DefaultConversionPattern), }; consoleAppender.AddFilter(new LoggerMatchFilter { AcceptOnMatch = true, LoggerToMatch = typeof (HttpServer).FullName }); BasicConfigurator.Configure(consoleAppender); var ravenConfiguration = new RavenConfiguration { ShouldCreateDefaultsWhenBuildingNewDatabaseFromScratch = createDefaultDatabase, }; RavenDbServer.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port); if (anonymousUserAccessMode.HasValue) ravenConfiguration.AnonymousUserAccessMode = anonymousUserAccessMode.Value; using (new RavenDbServer(ravenConfiguration)) { Console.WriteLine("Raven is ready to process requests."); Console.WriteLine("Press any key to stop the server"); Console.ReadLine(); } }
private static void InteractiveRun(string[] args) { switch (GetArgument(args)) { case "install": AdminRequired(InstallAndStart, "/install"); break; case "uninstall": AdminRequired(EnsureStoppedAndUninstall, "/uninstall"); break; case "start": AdminRequired(StartService, "/start"); break; case "restart": AdminRequired(RestartService, "/restart"); break; case "stop": AdminRequired(StopService, "/stop"); break; case "restore": if (args.Length != 3) { PrintUsage(); break; } RunRestoreOperation(args[0], args[1]); break; case "debug": RunInDebugMode(anonymousUserAccessMode: null, ravenConfiguration: new RavenConfiguration()); break; case "ram": RunInDebugMode(anonymousUserAccessMode: AnonymousUserAccessMode.All, ravenConfiguration: new RavenConfiguration { RunInMemory = true, StorageTypeName = typeof(Storage.Managed.TransactionalStorage).AssemblyQualifiedName }); break; #if DEBUG case "test": var dataDirectory = new RavenConfiguration().DataDirectory; IOExtensions.DeleteDirectory(dataDirectory); RunInDebugMode(anonymousUserAccessMode: AnonymousUserAccessMode.All, ravenConfiguration: new RavenConfiguration()); break; #endif default: PrintUsage(); break; } }