private static RavenServer CreateServer(int port, int tcpPort) { var configuration = new RavenConfiguration(); configuration.Initialize(); configuration.DebugLog.LogMode = LogMode.None; configuration.Core.ServerUrl = $"http://localhost:{port}"; configuration.Core.TcpServerUrl = $"tcp://localhost:{tcpPort}"; configuration.Server.Name = ServerName; configuration.Core.RunInMemory = true; string postfix = port == 8080 ? "" : "_" + port; configuration.Core.DataDirectory = Path.Combine(configuration.Core.DataDirectory, $"Tests{postfix}"); configuration.Server.MaxTimeForTaskToWaitForDatabaseToLoad = new TimeSetting(10, TimeUnit.Seconds); configuration.Storage.AllowOn32Bits = true; IOExtensions.DeleteDirectory(configuration.Core.DataDirectory); var server = new RavenServer(configuration); server.Initialize(); // TODO: Make sure to properly handle this when this is resolved: // TODO: https://github.com/dotnet/corefx/issues/5205 // TODO: AssemblyLoadContext.GetLoadContext(typeof(RavenTestBase).GetTypeInfo().Assembly).Unloading += return(server); }
protected RachisConsensus <CountingStateMachine> SetupServer(bool bootstrap = false, int port = 0, int electionTimeout = 300, [CallerMemberName] string caller = null) { var tcpListener = new TcpListener(IPAddress.Loopback, port); tcpListener.Start(); char ch; if (bootstrap) { ch = (char)65; } else { ch = (char)(65 + Interlocked.Increment(ref _count)); } var url = $"tcp://localhost:{((IPEndPoint)tcpListener.LocalEndpoint).Port}/?{caller}#{ch}"; var server = StorageEnvironmentOptions.CreateMemoryOnly(); int seed = PredictableSeeds ? _random.Next(int.MaxValue) : (int)Interlocked.Read(ref _count); var configuration = RavenConfiguration.CreateForServer(caller); configuration.Initialize(); configuration.Core.RunInMemory = true; configuration.Core.PublicServerUrl = new UriSetting($"http://localhost:{((IPEndPoint)tcpListener.LocalEndpoint).Port}"); configuration.Cluster.ElectionTimeout = new TimeSetting(electionTimeout, TimeUnit.Milliseconds); var serverStore = new RavenServer(configuration) { ThrowOnLicenseActivationFailure = true }.ServerStore; serverStore.Initialize(); var rachis = new RachisConsensus <CountingStateMachine>(serverStore, seed); var storageEnvironment = new StorageEnvironment(server); rachis.Initialize(storageEnvironment, configuration, configuration.Core.ServerUrls[0], out _); rachis.OnDispose += (sender, args) => { serverStore.Dispose(); storageEnvironment.Dispose(); }; if (bootstrap) { rachis.Bootstrap(url, "A"); } rachis.Url = url; _listeners.Add(tcpListener); RachisConsensuses.Add(rachis); var task = AcceptConnection(tcpListener, rachis); return(rachis); }
protected virtual RavenServer GetNewServer(IDictionary <string, string> customSettings = null, bool deletePrevious = true, bool runInMemory = true, string partialPath = null, string customConfigPath = null) { lock (_getNewServerSync) { var configuration = RavenConfiguration.CreateForServer(Guid.NewGuid().ToString(), customConfigPath); configuration.SetSetting(RavenConfiguration.GetKey(x => x.Replication.ReplicationMinimalHeartbeat), "1"); configuration.SetSetting(RavenConfiguration.GetKey(x => x.Replication.RetryReplicateAfter), "3"); configuration.SetSetting(RavenConfiguration.GetKey(x => x.Cluster.AddReplicaTimeout), "10"); if (customSettings != null) { foreach (var setting in customSettings) { configuration.SetSetting(setting.Key, setting.Value); } } configuration.Initialize(); configuration.Logs.Mode = LogMode.None; if (customSettings == null || customSettings.ContainsKey(RavenConfiguration.GetKey(x => x.Core.ServerUrls)) == false) { configuration.Core.ServerUrls = new[] { "http://127.0.0.1:0" }; } configuration.Server.Name = ServerName; configuration.Core.RunInMemory = runInMemory; configuration.Core.DataDirectory = configuration.Core.DataDirectory.Combine(partialPath ?? $"Tests{Interlocked.Increment(ref _serverCounter)}"); configuration.Server.MaxTimeForTaskToWaitForDatabaseToLoad = new TimeSetting(60, TimeUnit.Seconds); configuration.Licensing.EulaAccepted = true; if (customSettings == null || customSettings.ContainsKey(RavenConfiguration.GetKey(x => x.Core.FeaturesAvailability)) == false) { configuration.Core.FeaturesAvailability = FeaturesAvailability.Experimental; } if (deletePrevious) { IOExtensions.DeleteDirectory(configuration.Core.DataDirectory.FullPath); } var server = new RavenServer(configuration) { ThrowOnLicenseActivationFailure = true }; server.Initialize(); server.ServerStore.ValidateFixedPort = false; return(server); } }
protected RachisConsensus <CountingStateMachine> SetupServer(bool bootstrap = false, int port = 0, int electionTimeout = 300, [CallerMemberName] string caller = null) { var tcpListener = new TcpListener(IPAddress.Loopback, port); tcpListener.Start(); var ch = (char)(66 + _count++); if (bootstrap) { ch = (char)65; _count--; } var url = "tcp://localhost:" + ((IPEndPoint)tcpListener.LocalEndpoint).Port + "/?" + caller + "#" + ch; var server = StorageEnvironmentOptions.CreateMemoryOnly(); int seed = PredictableSeeds ? _random.Next(int.MaxValue) : _count; var configuration = new RavenConfiguration(caller, ResourceType.Server); configuration.Initialize(); configuration.Core.RunInMemory = true; configuration.Core.PublicServerUrl = new UriSetting($"http://localhost:{((IPEndPoint)tcpListener.LocalEndpoint).Port}"); configuration.Cluster.ElectionTimeout = new TimeSetting(electionTimeout, TimeUnit.Milliseconds); var serverStore = new RavenServer(configuration).ServerStore; serverStore.Initialize(); var rachis = new RachisConsensus <CountingStateMachine>(serverStore, seed); var storageEnvironment = new StorageEnvironment(server); rachis.Initialize(storageEnvironment, configuration, configuration.Core.ServerUrls[0]); rachis.OnDispose += (sender, args) => { serverStore.Dispose(); storageEnvironment.Dispose(); }; if (bootstrap) { rachis.Bootstrap(url, "A"); } rachis.Url = url; _listeners.Add(tcpListener); RachisConsensuses.Add(rachis); var task = AcceptConnection(tcpListener, rachis); return(rachis); }
protected RavenServer GetNewServer(IDictionary <string, string> customSettings = null, bool deletePrevious = true, bool runInMemory = true, string partialPath = null, string customConfigPath = null) { lock (_getNewServerSync) { var configuration = new RavenConfiguration(Guid.NewGuid().ToString(), ResourceType.Server, customConfigPath); if (customSettings != null) { foreach (var setting in customSettings) { configuration.SetSetting(setting.Key, setting.Value); } } configuration.Initialize(); configuration.Logs.Mode = LogMode.None; if (customSettings == null || customSettings.ContainsKey(RavenConfiguration.GetKey(x => x.Core.ServerUrls)) == false) { configuration.Core.ServerUrls = new[] { "http://127.0.0.1:0" }; } configuration.Server.Name = ServerName; configuration.Core.RunInMemory = runInMemory; configuration.Core.DataDirectory = configuration.Core.DataDirectory.Combine(partialPath ?? $"Tests{Interlocked.Increment(ref _serverCounter)}"); configuration.Server.MaxTimeForTaskToWaitForDatabaseToLoad = new TimeSetting(60, TimeUnit.Seconds); configuration.Replication.ReplicationMinimalHeartbeat = new TimeSetting(100, TimeUnit.Milliseconds); configuration.Replication.RetryReplicateAfter = new TimeSetting(3, TimeUnit.Seconds); configuration.Cluster.AddReplicaTimeout = new TimeSetting(10, TimeUnit.Seconds); configuration.Licensing.EulaAccepted = true; if (deletePrevious) { IOExtensions.DeleteDirectory(configuration.Core.DataDirectory.FullPath); } var server = new RavenServer(configuration); server.Initialize(); return(server); } }
public void Start(string[] startupArguments, ServiceStoppedCallback serviceStoppedCallback) { if (Logger.IsInfoEnabled) { Logger.Info($"Starting RavenDB Windows Service: {ServiceName}."); } _serviceStoppedCallback = serviceStoppedCallback; try { _ravenServer.OpenPipes(); } catch (Exception e) { if (Logger.IsInfoEnabled) { Logger.Info("Unable to OpenPipe. Admin Channel will not be available to the user", e); } throw; } try { _ravenServer.Initialize(); } catch (Exception e) { if (Logger.IsInfoEnabled) { Logger.Info("Error initializing the server", e); } throw; } }