/// <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); } }
/// <summary>查询集群状态 /// </summary> /// <returns><see cref="Seaweedfs.Client.Rest.ClusterStatusResponse"/></returns> public async Task <ClusterStatusResponse> GetClusterStatus() { var request = new ClusterStatusRequest(); return(await _seaweedfsExecuter.ExecuteAsync(request)); }