/// <summary>根据VolumeId(可以是Fid)获取Volume连接 /// </summary> public Connection GetVolumeConnectionByVolumeIdOrFid(string volumeIdOrFid) { //如果是Fid,就转换成VolumeId if (StringUtil.IsFid(volumeIdOrFid)) { volumeIdOrFid = StringUtil.GetVolumeId(volumeIdOrFid); } if (_volumeIdAddressMappers.TryGetValue(volumeIdOrFid, out ConnectionAddress connectionAddress)) { return(GetVolumeConnectionInternal(connectionAddress)); } else { var request = new LookupVolumeRequest(volumeIdOrFid); var task = _seaweedfsExecuter.ExecuteAsync(request); task.Wait(); //查询Volume返回 var lookupVolumeResponse = task.Result; if (lookupVolumeResponse.IsSuccessful) { //成功 lock (SyncObject) { //连接地址 connectionAddress = new ConnectionAddress(lookupVolumeResponse.Locations.FirstOrDefault().Url); //添加映射 _volumeIdAddressMappers.TryAdd(volumeIdOrFid, connectionAddress); return(GetVolumeConnectionInternal(connectionAddress)); } } else { _logger.LogInformation("根据VolumeId获取Volume信息时出错,VolumeId:{0},HttpStatus:{1}", volumeIdOrFid, lookupVolumeResponse.StatusCode); throw new Exception($"获取Volume信息出错,{lookupVolumeResponse.ErrorMessage}"); } } }
/// <summary>查询Volume /// </summary> /// <param name="volumeId">VolumeId</param> /// <param name="collection">集合</param> /// <param name="fid">文件Id</param> /// <returns><see cref="Seaweedfs.Client.Rest.LookupVolumeResponse"/></returns> public async Task <LookupVolumeResponse> LookupVolume(string volumeId = "", string collection = "", string fid = "") { var request = new LookupVolumeRequest(volumeId, collection); return(await _seaweedfsExecuter.ExecuteAsync(request)); }