public void TestRubTaskInNotLeaderState()
        {
            string lockId = "lockId";

            // ReSharper disable once RedundantArgumentDefaultValue
            // ReSharper disable once RedundantArgumentNameForLiteralExpression
            var lockerMock = new LockerMock(isLeader: false, id: lockId, keeperId: LeaderAwareTaskRunner.GenerateLockKeeperId());
            LeaderAwareTaskRunner runner = new LeaderAwareTaskRunner(lockerMock, lockId);

            runner.RunTaskOnLeader(() => Assert.True(false));
        }
        public void TestRubTaskInNotLeaderState()
        {
            string lockId = "lockId";

            // ReSharper disable once RedundantArgumentDefaultValue
            // ReSharper disable once RedundantArgumentNameForLiteralExpression
            var lockerMock = new LockerMock(isLeader: false, id: lockId, keeperId: LeaderAwareTaskRunner.GenerateLockKeeperId());
            LeaderAwareTaskRunner runner = new LeaderAwareTaskRunner(lockerMock, lockId);

            runner.RunTaskOnLeader(() => Assert.True(false));
        }
        public void TestBecameALeader()
        {
            string lockId = "lockId";

            int i = 0;
            // ReSharper disable once RedundantArgumentDefaultValue
            // ReSharper disable once RedundantArgumentNameForLiteralExpression
            var lockerMock = new LockerMock(isLeader: true, id: lockId, keeperId: LeaderAwareTaskRunner.GenerateLockKeeperId());
            LeaderAwareTaskRunner runner = new LeaderAwareTaskRunner(lockerMock, lockId, 0);
            runner.RunTaskOnLeader(() => i++);
            Thread.Sleep(200);
            lockerMock.IsLeader = false;
            runner.RunTaskOnLeader(() => i++);
            Assert.AreEqual(1, i);
            Thread.Sleep(200);
            lockerMock.IsLeader = true;
            runner.RunTaskOnLeader(() => i++);
            Assert.AreEqual(2, i);
        }
        public void TestBecameALeader()
        {
            string lockId = "lockId";

            int i = 0;
            // ReSharper disable once RedundantArgumentDefaultValue
            // ReSharper disable once RedundantArgumentNameForLiteralExpression
            var lockerMock = new LockerMock(isLeader: true, id: lockId, keeperId: LeaderAwareTaskRunner.GenerateLockKeeperId());
            LeaderAwareTaskRunner runner = new LeaderAwareTaskRunner(lockerMock, lockId, 0);

            runner.RunTaskOnLeader(() => i++);
            Thread.Sleep(200);
            lockerMock.IsLeader = false;
            runner.RunTaskOnLeader(() => i++);
            Assert.AreEqual(1, i);
            Thread.Sleep(200);
            lockerMock.IsLeader = true;
            runner.RunTaskOnLeader(() => i++);
            Assert.AreEqual(2, i);
        }
예제 #5
0
        static void Main(string[] args)
        {
            string lockId           = "task1";
            string connectionString = "mongodb://localhost/LeaderElectionTest";

            using (var locker = new MongoDbPessimisticLocker(connectionString))
            {
                var leaderAwareTaskRunner = new LeaderAwareTaskRunner(locker, lockId);

                var taskRunner = new TaskRunner(500, () =>
                {
                    leaderAwareTaskRunner.RunTaskOnLeader(() =>
                    {
                        Console.WriteLine("task executed on a leader");
                    });
                });

                taskRunner.Start();
                Console.ReadLine();
                taskRunner.Stop();
            }
        }