Exemplo n.º 1
0
 /// <summary>同步集群中MasterLeader
 /// </summary>
 private void SyncMasterLeader()
 {
     if (_masterLeaderConnection == null)
     {
         _logger.LogError("同步MasterLeader出错,当前MasterConnection为空.");
         return;
     }
     try
     {
         //查询集群中的状态
         var request = new ClusterStatusRequest();
         //执行结果
         var task = _seaweedfsExecuter.ExecuteAsync(request);
         task.Wait();
         //集群状态
         var clusterStatus = task.Result;
         if (!clusterStatus.IsSuccessful)
         {
             //如果不成功,Master可能废了,需要构建新的
             _masterLeaderConnection = CreateMasterConnection(_masterLeaderConnection.ConnectionAddress);
             SyncMasterLeader();
             return;
         }
         //判断集群中的Master服务器的Leader是否发生了改变
         if (!clusterStatus.IsLeader || clusterStatus.Leader != _masterLeaderConnection.ConnectionAddress.ToString())
         {
             //更新当前Master连接
             lock (SyncObject)
             {
                 var connectionAddress = new ConnectionAddress(clusterStatus.Leader);
                 _masterLeaderConnection = _connectionFactory.CreateConnection(connectionAddress, ConnectionType.Master);
             }
         }
     }
     catch (AggregateException ex)
     {
         foreach (var e in ex.InnerExceptions)
         {
             _logger.LogError(e.InnerException, "同步MasterLeader出现线程异常,{0}", ex.Message);
         }
     }
     catch (Exception ex)
     {
         _logger.LogError(ex, "同步MasterLeader出错,{0}", ex.Message);
     }
 }
Exemplo n.º 2
0
        /// <summary>查询集群状态
        /// </summary>
        /// <returns><see cref="Seaweedfs.Client.Rest.ClusterStatusResponse"/></returns>
        public async Task <ClusterStatusResponse> GetClusterStatus()
        {
            var request = new ClusterStatusRequest();

            return(await _seaweedfsExecuter.ExecuteAsync(request));
        }