コード例 #1
0
        public void CanAccelerateViewsByPartitioning()
        {
            // SomeRootView is intentionally slow - it takes ~ 1 second to process each event, so unless we process these
            // two bad boys in parallel, we're not going to make it in 15 seconds
            var viewManagers = new[]
            {
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view1", "Position"),
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view2", "Position"),
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view3", "Position"),
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view4", "Position"),
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view5", "Position"),
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view6", "Position"),
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view7", "Position"),
                new MongoDbViewManager <SomeRootView>(_mongoDatabase, "view8", "Position"),
            };

            var firstCommandProcessor = CreateCommandProcessor("1", viewManagers);

            CreateCommandProcessor("2", viewManagers);

            CreateCommandProcessor("3", viewManagers);

            CreateCommandProcessor("4", viewManagers);

            CreateCommandProcessor("5", viewManagers);

            CreateCommandProcessor("6", viewManagers);

            CreateCommandProcessor("7", viewManagers);

            CreateCommandProcessor("8", viewManagers);

            var lastResult = Enumerable.Range(0, 20)
                             .Select(i => firstCommandProcessor.ProcessCommand(new MakeSomeRootDoStuff("bimse")))
                             .Last();

            var goal = TimeSpan.FromSeconds(45);

            using (var statusTimer = new Timer(5000))
            {
                var state = new MongoDbAutoDistributionState(_mongoDatabase, "AutoDistribution");
                statusTimer.Elapsed += (o, ea) =>
                {
                    Console.WriteLine(@"--------------------------------------------
Distribution:
{0}

Views:
{1}",
                                      string.Join(Environment.NewLine, state.GetCurrentState().Select(s => string.Format("    {0}: {1}", s.ManagerId, string.Join(", ", s.ViewIds)))),
                                      string.Join(Environment.NewLine, viewManagers.Select(v => string.Format("    {0}: {1}", v.GetPosition().Result, v.GetType().GetPrettyName()))));
                };
                statusTimer.Start();

                Task.WaitAll(viewManagers.Select(v => v.WaitUntilProcessed(lastResult, goal)).ToArray());
            }
        }
コード例 #2
0
 protected override void DoSetUp()
 {
     _state = new MongoDbAutoDistributionState(MongoHelper.InitializeTestDatabase(), "AutoDistribution");
 }