public async Task spin_up_several_daemons_and_fail_over() { var daemon1 = await StartDaemonInHotColdMode(); await assertIsRunning(daemon1, 1.Seconds()); var others = new ProjectionDaemon[4]; others[0] = await StartDaemonInHotColdMode(); others[1] = await StartDaemonInHotColdMode(); others[2] = await StartDaemonInHotColdMode(); others[3] = await StartDaemonInHotColdMode(); await daemon1.StopAll(); var active = await findRunningDaemon(others); foreach (var other in others) { if (other.Equals(active)) { continue; } other.IsRunning.ShouldBeFalse(); } }
internal async Task <ProjectionDaemon> StartDaemon() { var daemon = new ProjectionDaemon(theStore, Logger); await daemon.StartAllShards(); _daemon = daemon; return(daemon); }
internal async Task <ProjectionDaemon> StartDaemon() { var agent = new ProjectionDaemon(theStore, Logger); await agent.StartAll(); _agent = agent; return(agent); }
internal async Task <ProjectionDaemon> StartAdditionalDaemonInHotColdMode() { theStore.Options.Projections.LeadershipPollingTime = 100; var coordinator = new HotColdCoordinator(theStore, theStore.Options.Projections, Logger); var daemon = new ProjectionDaemon(theStore, new HighWaterDetector(coordinator, theStore.Events), Logger); await daemon.UseCoordinator(coordinator); _disposables.Add(daemon); return(daemon); }
internal IProjectionDaemon StartProjectionDaemon(DocumentStore store, ILogger?logger = null) { logger ??= new NulloLogger(); var detector = new HighWaterDetector(new AutoOpenSingleQueryRunner(this), _options.EventGraph, logger); var daemon = new ProjectionDaemon(store, this, detector, logger); Tracker = daemon.Tracker; return(daemon); }
public async Task detect_correctly_after_restarting_with_previous_state() { NumberOfStreams = 10; await PublishSingleThreaded(); using var agent = await StartDaemon(); await agent.Tracker.WaitForHighWaterMark(NumberOfEvents, 15.Seconds()); agent.Tracker.HighWaterMark.ShouldBe(NumberOfEvents); await agent.StopAll(); using var agent2 = new ProjectionDaemon(theStore, new NulloLogger()); await agent2.StartDaemon(); await agent2.Tracker.WaitForHighWaterMark(NumberOfEvents, 15.Seconds()); }
private async Task assertIsRunning(ProjectionDaemon daemon, TimeSpan timeout) { if (daemon.IsRunning) { return; } var stopwatch = new Stopwatch(); stopwatch.Start(); while (stopwatch.Elapsed < timeout && !daemon.IsRunning) { await Task.Delay(200.Milliseconds()); } stopwatch.Stop(); daemon.IsRunning.ShouldBeTrue(); }