[#28] Clients: Make immutable parameters

Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
Pavel Gross 2024-12-02 19:33:45 +03:00
parent 749000a090
commit 9bb7b5eff8
62 changed files with 2742 additions and 963 deletions

View file

@ -49,7 +49,7 @@ public class FrostFSClient : IFrostFSClient
internal ClientContext ClientCtx { get; set; }
public static IFrostFSClient GetSingleOwnerInstance(IOptions<ClientSettings> clientOptions, GrpcChannelOptions? channelOptions = null)
public static IFrostFSClient GetInstance(IOptions<ClientSettings> clientOptions, GrpcChannelOptions? channelOptions = null)
{
return new FrostFSClient(clientOptions, channelOptions);
}
@ -170,229 +170,134 @@ public class FrostFSClient : IFrostFSClient
}
#region ApeManagerImplementation
public Task<ReadOnlyMemory<byte>> AddChainAsync(PrmApeChainAdd args)
public Task<ReadOnlyMemory<byte>> AddChainAsync(PrmApeChainAdd args, CallContext ctx)
{
if (args is null)
{
throw new ArgumentNullException(nameof(args));
}
var service = GetApeManagerService();
return service.AddChainAsync(args);
return GetApeManagerService().AddChainAsync(args, ctx);
}
public Task RemoveChainAsync(PrmApeChainRemove args)
public Task RemoveChainAsync(PrmApeChainRemove args, CallContext ctx)
{
if (args is null)
{
throw new ArgumentNullException(nameof(args));
}
var service = GetApeManagerService();
return service.RemoveChainAsync(args);
return GetApeManagerService().RemoveChainAsync(args, ctx);
}
public Task<Chain[]> ListChainAsync(PrmApeChainList args)
public Task<Chain[]> ListChainAsync(PrmApeChainList args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetApeManagerService();
return service.ListChainAsync(args);
return GetApeManagerService().ListChainAsync(args, ctx);
}
#endregion
#region ContainerImplementation
public Task<FrostFsContainerInfo> GetContainerAsync(PrmContainerGet args)
public Task<FrostFsContainerInfo> GetContainerAsync(PrmContainerGet args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetContainerService();
return service.GetContainerAsync(args);
return GetContainerService().GetContainerAsync(args, ctx);
}
public IAsyncEnumerable<FrostFsContainerId> ListContainersAsync(PrmContainerGetAll? args = null)
public IAsyncEnumerable<FrostFsContainerId> ListContainersAsync(PrmContainerGetAll args, CallContext ctx)
{
args ??= new PrmContainerGetAll();
var service = GetContainerService();
return service.ListContainersAsync(args);
return GetContainerService().ListContainersAsync(args, ctx);
}
public Task<FrostFsContainerId> CreateContainerAsync(PrmContainerCreate args)
public Task<FrostFsContainerId> CreateContainerAsync(PrmContainerCreate args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetContainerService();
return service.CreateContainerAsync(args);
return GetContainerService().CreateContainerAsync(args, ctx);
}
public Task DeleteContainerAsync(PrmContainerDelete args)
public Task DeleteContainerAsync(PrmContainerDelete args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetContainerService();
return service.DeleteContainerAsync(args);
return GetContainerService().DeleteContainerAsync(args, ctx);
}
#endregion
#region NetworkImplementation
public Task<FrostFsNetmapSnapshot> GetNetmapSnapshotAsync(PrmNetmapSnapshot? args)
public Task<FrostFsNetmapSnapshot> GetNetmapSnapshotAsync(CallContext ctx)
{
args ??= new PrmNetmapSnapshot();
var service = GetNetmapService();
return service.GetNetmapSnapshotAsync(args);
return GetNetmapService().GetNetmapSnapshotAsync(ctx);
}
public Task<FrostFsNodeInfo> GetNodeInfoAsync(PrmNodeInfo? args)
public Task<FrostFsNodeInfo> GetNodeInfoAsync(CallContext ctx)
{
args ??= new PrmNodeInfo();
var service = GetNetmapService();
return service.GetLocalNodeInfoAsync(args);
return GetNetmapService().GetLocalNodeInfoAsync(ctx);
}
public Task<NetworkSettings> GetNetworkSettingsAsync(PrmNetworkSettings? args)
public Task<NetworkSettings> GetNetworkSettingsAsync(CallContext ctx)
{
args ??= new PrmNetworkSettings();
var service = GetNetmapService();
return service.GetNetworkSettingsAsync(args.Context!);
return GetNetmapService().GetNetworkSettingsAsync(ctx);
}
#endregion
#region ObjectImplementation
public Task<FrostFsObjectHeader> GetObjectHeadAsync(PrmObjectHeadGet args)
public Task<FrostFsHeaderResult> GetObjectHeadAsync(PrmObjectHeadGet args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.GetObjectHeadAsync(args);
return GetObjectService().GetObjectHeadAsync(args, ctx);
}
public Task<FrostFsObject> GetObjectAsync(PrmObjectGet args)
public Task<FrostFsObject> GetObjectAsync(PrmObjectGet args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.GetObjectAsync(args);
return GetObjectService().GetObjectAsync(args, ctx);
}
public Task<RangeReader> GetRangeAsync(PrmRangeGet args)
public Task<RangeReader> GetRangeAsync(PrmRangeGet args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.GetRangeAsync(args);
return GetObjectService().GetRangeAsync(args, ctx);
}
public Task<ReadOnlyMemory<byte>[]> GetRangeHashAsync(PrmRangeHashGet args)
public Task<ReadOnlyMemory<byte>[]> GetRangeHashAsync(PrmRangeHashGet args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.GetRangeHashAsync(args);
return GetObjectService().GetRangeHashAsync(args, ctx);
}
public Task<FrostFsObjectId> PutObjectAsync(PrmObjectPut args)
public Task<FrostFsObjectId> PutObjectAsync(PrmObjectPut args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.PutObjectAsync(args);
return GetObjectService().PutObjectAsync(args, ctx);
}
public Task<FrostFsObjectId> PutSingleObjectAsync(PrmSingleObjectPut args)
public Task<FrostFsObjectId> PutSingleObjectAsync(PrmSingleObjectPut args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.PutSingleObjectAsync(args);
return GetObjectService().PutSingleObjectAsync(args, ctx);
}
public Task<FrostFsObjectId> PatchObjectAsync(PrmObjectPatch args)
public Task<FrostFsObjectId> PatchObjectAsync(PrmObjectPatch args, CallContext ctx)
{
if (args is null)
{
throw new ArgumentNullException(nameof(args));
}
var service = GetObjectService();
return service.PatchObjectAsync(args);
return GetObjectService().PatchObjectAsync(args, ctx);
}
public Task DeleteObjectAsync(PrmObjectDelete args)
public Task DeleteObjectAsync(PrmObjectDelete args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.DeleteObjectAsync(args);
return GetObjectService().DeleteObjectAsync(args, ctx);
}
public IAsyncEnumerable<FrostFsObjectId> SearchObjectsAsync(PrmObjectSearch args)
public IAsyncEnumerable<FrostFsObjectId> SearchObjectsAsync(PrmObjectSearch args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetObjectService();
return service.SearchObjectsAsync(args);
return GetObjectService().SearchObjectsAsync(args, ctx);
}
#endregion
#region Session Implementation
public async Task<FrostFsSessionToken> CreateSessionAsync(PrmSessionCreate args)
public async Task<FrostFsSessionToken> CreateSessionAsync(PrmSessionCreate args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var token = await CreateSessionInternalAsync(args).ConfigureAwait(false);
var token = await CreateSessionInternalAsync(args, ctx).ConfigureAwait(false);
return new FrostFsSessionToken(token);
}
internal Task<SessionToken> CreateSessionInternalAsync(PrmSessionCreate args)
internal Task<SessionToken> CreateSessionInternalAsync(PrmSessionCreate args, CallContext ctx)
{
if (args is null)
throw new ArgumentNullException(nameof(args));
var service = GetSessionService();
return service.CreateSessionAsync(args);
return service.CreateSessionAsync(args, ctx);
}
#endregion
#region Accounting Implementation
public async Task<Accounting.Decimal> GetBalanceAsync(PrmBalance? args)
public async Task<Accounting.Decimal> GetBalanceAsync(CallContext ctx)
{
args ??= new PrmBalance();
var service = GetAccouningService();
return await service.GetBallance(args).ConfigureAwait(false);
return await GetAccouningService().GetBallance(ctx).ConfigureAwait(false);
}
#endregion
#region ToolsImplementation
public FrostFsObjectId CalculateObjectId(FrostFsObjectHeader header)
private async void CheckFrostFsVersionSupport(CallContext ctx)
{
if (header == null)
throw new ArgumentNullException(nameof(header));
return ObjectTools.CalculateObjectId(header, this.ClientCtx);
}
#endregion
private async void CheckFrostFsVersionSupport(CallContext? ctx = default)
{
var args = new PrmNodeInfo(ctx);
var service = GetNetmapService();
var localNodeInfo = await service.GetLocalNodeInfoAsync(args).ConfigureAwait(false);
var localNodeInfo = await service.GetLocalNodeInfoAsync(ctx).ConfigureAwait(false);
if (!localNodeInfo.Version.IsSupported(ClientCtx.Version))
{
@ -559,10 +464,8 @@ public class FrostFSClient : IFrostFSClient
public async Task<string?> Dial(CallContext ctx)
{
var prm = new PrmBalance(ctx);
var service = GetAccouningService();
_ = await service.GetBallance(prm).ConfigureAwait(false);
_ = await service.GetBallance(ctx).ConfigureAwait(false);
return null;
}