示例#1
0
        public async Task TestZKLeaderSeletor1()
        {
            LOG.Info("------------ BEFORE -------------");
            using (_zkClient = new ZKClient(TestUtil.zkServers))
            {
                await TestUtil.ReSetPathUnCreate(_zkClient, leaderPath);

                var msgList = new List <string>();
                await _zkClient.CreateRecursiveAsync(leaderPath, null, CreateMode.PERSISTENT);

                var listener = new ZKLeaderSelectorListener();
                listener.takeLeadership = async(client, selector) =>
                {
                    try
                    {
                        await Task.Delay(1000);
                    }
                    catch (ThreadInterruptedException)
                    {
                    }
                    msgList.Add("server1 I am the leader");
                    Console.WriteLine("server1: I am the leader-" + await selector.GetLeaderAsync());
                };


                var selector1 = new ZKLeaderSelector("server1", true, _zkClient, leaderPath, listener);

                var task = new Task(() =>
                {
                    var zkClient1 = ZKClientBuilder.NewZKClient()
                                    .Servers(TestUtil.zkServers)
                                    .SessionTimeout(10000)
                                    .Build();
                    var listener2 = new ZKLeaderSelectorListener();

                    listener2.takeLeadership = async(client, selector) =>
                    {
                        try
                        {
                            await Task.Delay(1000);
                        }
                        catch (ThreadInterruptedException)
                        {
                        }
                        msgList.Add("server2 I am the leader");
                        Console.WriteLine("server2: I am the leader-" + await selector.GetLeaderAsync());
                        selector.Close();
                    };
                    var selector2 = new ZKLeaderSelector("server2", true, zkClient1, leaderPath, listener2);
                    selector2.Start();
                });

                selector1.Start();
                task.Start();
                Thread.Sleep(1000);

                int size = TestUtil.WaitUntil(2, () => { return(msgList.Count); }, new TimeSpan(0, 0, 100));
                Assert.True(size == 2);
            }
        }
        public async Task TestZKLeaderSeletor()
        {
            LOG.Info("------------ BEFORE -------------");
            using (_zkClient = new ZKClient(TestUtil.zkServers))
            {
                await TestUtil.ReSetPathUnCreate(_zkClient, leaderPath);

                var msgList = new List <string>();
                var count   = new CountdownEvent(20);
                var count1  = new CountdownEvent(20);
                await _zkClient.CreateRecursiveAsync(leaderPath, null, CreateMode.PERSISTENT);

                var index = 0;
                for (int i = 0; i < 20; i++)
                {
                    var name = "server:" + index;
                    var task = new Task(() =>
                    {
                        var zkClient1           = new ZKClient(TestUtil.zkServers);
                        var listener            = new ZKLeaderSelectorListener();
                        listener.takeLeadership = async(client, selector) =>
                        {
                            msgList.Add(name + " I am the leader");
                            Console.WriteLine(name + ": I am the leader-" + await selector.GetLeaderAsync());
                            selector.Close();
                            count1.Signal();
                        };

                        var _selector = new ZKLeaderSelector(name, true, zkClient1, leaderPath, listener);
                        try
                        {
                            Console.WriteLine(name + ":waiting");
                            count.Wait();
                        }
                        //catch (ThreadInterruptedException)
                        catch (Exception)
                        {
                        }
                        _selector.Start();

                        try
                        {
                            count1.Wait();
                        }
                        //catch (ThreadInterruptedException)
                        catch (Exception)
                        {
                        }
                    });
                    task.Start();
                    count.Signal();
                    Interlocked.Increment(ref index);
                }

                int size = TestUtil.WaitUntil(20, () => { return(msgList.Count); }, new TimeSpan(0, 0, 100));
                Assert.True(size == 20);
            }
            LOG.Info("------------ AFTER -------------");
        }
        public void TestZKLeaderSeletor()
        {
            List <string>  msgList = new List <string>();
            CountdownEvent count   = new CountdownEvent(20);
            CountdownEvent count1  = new CountdownEvent(20);

            _zkClient.CreateRecursive(leaderPath, null, CreateMode.Persistent);
            int index = 0;

            for (int i = 0; i < 20; i++)
            {
                string name = "server:" + index;
                Task   task = new Task(() =>
                {
                    ZKClient zkClient1 = ZKClientBuilder.NewZKClient()
                                         .Servers(string.Format("{0}:{1}", TestUtil.ip, TestUtil.port))
                                         .SessionTimeout(10000)
                                         .Build();
                    ZKLeaderSelectorListener listener = new ZKLeaderSelectorListener()
                                                        .TakeLeadership((client, selector) =>
                    {
                        msgList.Add(name + " I am the leader");
                        Console.WriteLine(name + ": I am the leader-" + selector.GetLeader());
                        selector.Close();
                        count1.Signal();
                    });


                    ZKLeaderSelector _selector = new ZKLeaderSelector(name, true, zkClient1, leaderPath, listener);

                    try
                    {
                        Console.WriteLine(name + ":waiting");
                        count.Wait();
                    }
                    catch (ThreadInterruptedException e1)
                    {
                    }
                    _selector.Start();

                    try
                    {
                        count1.Wait();
                    }
                    catch (ThreadInterruptedException e)
                    {
                    }
                });
                task.Start();
                count.Signal();
                Interlocked.Increment(ref index);
            }

            int size = TestUtil.WaitUntil(20, () => { return(msgList.Count); }, new TimeSpan(0, 0, 100));

            Assert.True(size == 20);
        }
        public void TestZKLeaderSeletor1()
        {
            List <string> msgList = new List <string>();

            _zkClient.CreateRecursive(leaderPath, null, CreateMode.Persistent);

            ZKLeaderSelectorListener listener = new ZKLeaderSelectorListener()
                                                .TakeLeadership((client, selector) =>
            {
                try
                {
                    Thread.Sleep(1000);
                }
                catch (ThreadInterruptedException e)
                {
                }
                msgList.Add("server1 I am the leader");
                Console.WriteLine("server1: I am the leader-" + selector.GetLeader());
            });


            ZKLeaderSelector selector1 = new ZKLeaderSelector("server1", true, _zkClient, leaderPath, listener);

            Task task = new Task(() =>
            {
                ZKClient zkClient1 = ZKClientBuilder.NewZKClient()
                                     .Servers(string.Format("{0}:{1}", TestUtil.ip, TestUtil.port))
                                     .SessionTimeout(10000)
                                     .Build();
                ZKLeaderSelectorListener listener2 = new ZKLeaderSelectorListener()
                                                     .TakeLeadership((client, selector) =>
                {
                    try
                    {
                        Thread.Sleep(1000);
                    }
                    catch (ThreadInterruptedException e)
                    {
                    }
                    msgList.Add("server2 I am the leader");
                    Console.WriteLine("server2: I am the leader-" + selector.GetLeader());
                    selector.Close();
                });
                ZKLeaderSelector selector2 = new ZKLeaderSelector("server2", true, zkClient1, leaderPath, listener2);
                selector2.Start();
            });

            selector1.Start();
            task.Start();
            Thread.Sleep(1000);


            int size = TestUtil.WaitUntil(2, () => { return(msgList.Count); }, new TimeSpan(0, 0, 100));

            Assert.True(size == 2);
        }