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();
            }
        }
Пример #2
0
        internal async Task <ProjectionDaemon> StartDaemon()
        {
            var daemon = new ProjectionDaemon(theStore, Logger);

            await daemon.StartAllShards();

            _daemon = daemon;

            return(daemon);
        }
Пример #3
0
        internal async Task <ProjectionDaemon> StartDaemon()
        {
            var agent = new ProjectionDaemon(theStore, Logger);

            await agent.StartAll();

            _agent = agent;

            return(agent);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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();
        }