Esempio n. 1
0
        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();
        }
Esempio n. 2
0
		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());
		}
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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;
            }
        }
Esempio n. 6
0
		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;
			}
		}
Esempio n. 7
0
 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;
     }
 }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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());
            }
        }
Esempio n. 10
0
		public static void Restore(RavenConfiguration configuration, string backupLocation, string databaseLocation)
		{
			using(var transactionalStorage = configuration.CreateTransactionalStorage(() => { }))
			{
				transactionalStorage.Restore(backupLocation, databaseLocation);
			}
		}
Esempio n. 11
0
		public TransactionalStorage(RavenConfiguration configuration, Action onCommit)
			: this(configuration.DataDirectory)
		{
			this.onCommit = onCommit;
		}
Esempio n. 12
0
        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;
		}
Esempio n. 14
0
        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());
            }
        }
Esempio n. 15
0
 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();
     }
 }
Esempio n. 16
0
        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;
            }
        }