Exemplo n.º 1
0
        /// <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}");
                }
            }
        }
Exemplo n.º 2
0
        /// <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));
        }