コード例 #1
0
        public override RedialResult Redial()
        {
            if (Skip)
            {
                return(RedialResult.Skip);
            }

            if (Zk.Exists(_lockerFilePath, false) != null)
            {
                while (true)
                {
                    Thread.Sleep(50);
                    if (Zk.Exists(_lockerFilePath, false) == null)
                    {
                        return(RedialResult.OtherRedialed);
                    }
                }
            }
            else
            {
                try
                {
                    using (var zk = ZookeeperUtil.GetShortSessionZk(120))
                    {
                        zk.Create(_lockerFilePath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.Ephemeral);

                        // wait all operation stop.
                        Thread.Sleep(5000);

                        Logger.Warn("Wait atomic action to finish...");

                        AtomicExecutor.WaitAtomicAction();

                        Logger.Warn("Try to redial network...");

                        RedialInternet();

                        Logger.Warn("Redial finished.");
                        return(RedialResult.Sucess);
                    }
                }
                catch (IOException)
                {
                    // 有极小可能同时调用File.Open时抛出异常
                    return(Redial());
                }
                catch (Exception)
                {
                    return(RedialResult.Failed);
                }
            }
        }
コード例 #2
0
        public override RedialResult Redial()
        {
            if (Skip)
            {
                return(RedialResult.Skip);
            }

            var redialSetting = GetRedialStatus();

            if (RunningRedialStatus != redialSetting)
            {
                while (true)
                {
                    Thread.Sleep(50);
                    var redialSetting1 = GetRedialStatus();
                    if (redialSetting1 == RunningRedialStatus)
                    {
                        return(RedialResult.OtherRedialed);
                    }
                }
            }
            else
            {
                SetRedialStatus(DialingRedialStatus);

                // wait all operation stop.
                Thread.Sleep(5000);

                AtomicExecutor.WaitAtomicAction();

                Logger.Warn("Try to redial network...");

                RedialInternet();

                SetRedialStatus(RunningRedialStatus);

                Logger.Warn("Redial finished.");
                return(RedialResult.Sucess);
            }
        }
コード例 #3
0
        public override RedialResult Redial()
        {
            if (Skip)
            {
                return(RedialResult.Skip);
            }

            ClearTimeoutLocker();

            if (Redis.HashExists(GetSetKey(), Locker))
            {
                while (true)
                {
                    Thread.Sleep(50);
                    if (!Redis.HashExists(GetSetKey(), Locker))
                    {
                        return(RedialResult.OtherRedialed);
                    }
                }
            }
            else
            {
                Redis.HashSet(GetSetKey(), Locker, DateTime.Now.ToString("yyyy-MM-dd HH:mm"));

                // wait all operation stop.
                Thread.Sleep(5000);

                AtomicExecutor.WaitAtomicAction();

                Logger?.Warn("Try to redial network...");

                RedialInternet();

                Redis.HashDelete(GetSetKey(), Locker);

                Logger?.Warn("Redial finished.");
                return(RedialResult.Sucess);
            }
        }
コード例 #4
0
        public override RedialResult Redial()
        {
            if (Skip)
            {
                return(RedialResult.Skip);
            }

            if (File.Exists(_lockerFilePath))
            {
                while (true)
                {
                    Thread.Sleep(50);
                    if (!File.Exists(_lockerFilePath))
                    {
                        return(RedialResult.OtherRedialed);
                    }
                }
            }
            else
            {
                Stream stream = null;

                try
                {
                    stream = File.Open(_lockerFilePath, FileMode.Create, FileAccess.Write);

                    // wait all operation stop.
                    Thread.Sleep(5000);

                    Logger.Warn("Wait atomic action to finish...");

                    // 等待数据库等操作完成
                    AtomicExecutor.WaitAtomicAction();

                    Logger.Warn("Try to redial network...");

                    RedialInternet();

                    Logger.Warn("Redial finished.");
                    return(RedialResult.Sucess);
                }
                catch (IOException)
                {
                    // 有极小可能同时调用File.Open时抛出异常
                    return(Redial());
                }
                catch (Exception)
                {
                    return(RedialResult.Failed);
                }
                finally
                {
#if !NET_CORE
                    stream?.Close();
#else
                    stream?.Dispose();
#endif
                    File.Delete(_lockerFilePath);
                }
            }
        }