[#17] Client: Add extra parameter
API methods' parameters types with optional session, polling settings, xHeaders etc. and corresponding handlers have been added Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
parent
00a1e9412f
commit
7b9c19f37c
42 changed files with 1054 additions and 386 deletions
|
@ -2,6 +2,7 @@
|
|||
using FrostFS.Netmap;
|
||||
using FrostFS.Object;
|
||||
using FrostFS.SDK.ClientV2.Interfaces;
|
||||
using FrostFS.SDK.ClientV2.Parameters;
|
||||
using FrostFS.SDK.Cryptography;
|
||||
using FrostFS.SDK.ModelsV2;
|
||||
using FrostFS.SDK.ModelsV2.Netmap;
|
||||
|
@ -96,7 +97,8 @@ public class Client : IFrostFSClient
|
|||
channel: channel,
|
||||
version: new Version(2, 13));
|
||||
|
||||
CheckFrostFsVersionSupport();
|
||||
// TODO: define timeout logic
|
||||
CheckFrostFsVersionSupport(new Context { Timeout = TimeSpan.FromSeconds(20)});
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
@ -115,105 +117,106 @@ public class Client : IFrostFSClient
|
|||
}
|
||||
|
||||
#region ContainerImplementation
|
||||
public Task<ModelsV2.Container> GetContainerAsync(ContainerId containerId, Context? ctx = null)
|
||||
public Task<ModelsV2.Container> GetContainerAsync(PrmGetContainer args)
|
||||
{
|
||||
var service = GetContainerService(ref ctx);
|
||||
return service.GetContainerAsync(containerId, ctx!);
|
||||
var service = GetContainerService(args);
|
||||
return service.GetContainerAsync(args);
|
||||
}
|
||||
|
||||
public IAsyncEnumerable<ContainerId> ListContainersAsync(Context? ctx = default)
|
||||
public IAsyncEnumerable<ContainerId> ListContainersAsync(PrmListContainer? args = null)
|
||||
{
|
||||
var service = GetContainerService(ref ctx);
|
||||
return service.ListContainersAsync(ctx!);
|
||||
args = args ?? new PrmListContainer();
|
||||
var service = GetContainerService(args);
|
||||
return service.ListContainersAsync(args);
|
||||
}
|
||||
|
||||
public Task<ContainerId> CreateContainerAsync(ModelsV2.Container container, Context? ctx = null)
|
||||
public Task<ContainerId> CreateContainerAsync(PrmCreateContainer args)
|
||||
{
|
||||
var service = GetContainerService(ref ctx);
|
||||
return service.CreateContainerAsync(container, ctx!);
|
||||
var service = GetContainerService(args);
|
||||
return service.CreateContainerAsync(args);
|
||||
}
|
||||
|
||||
public Task DeleteContainerAsync(ContainerId containerId, Context? ctx = default)
|
||||
public Task DeleteContainerAsync(PrmDeleteContainer args)
|
||||
{
|
||||
var service = GetContainerService(ref ctx);
|
||||
return service.DeleteContainerAsync(containerId, ctx!);
|
||||
var service = GetContainerService(args);
|
||||
return service.DeleteContainerAsync(args);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region NetworkImplementation
|
||||
public Task<NetmapSnapshot> GetNetmapSnapshotAsync(Context? ctx = default)
|
||||
public Task<NetmapSnapshot> GetNetmapSnapshotAsync(PrmGetNetmapSnapshot? args)
|
||||
{
|
||||
var service = GetNetmapService(ref ctx);
|
||||
return service.GetNetmapSnapshotAsync(ctx!);
|
||||
args ??= new PrmGetNetmapSnapshot();
|
||||
var service = GetNetmapService(args);
|
||||
return service.GetNetmapSnapshotAsync(args);
|
||||
}
|
||||
|
||||
public Task<ModelsV2.Netmap.NodeInfo> GetNodeInfoAsync(Context? ctx = default)
|
||||
public Task<ModelsV2.Netmap.NodeInfo> GetNodeInfoAsync(PrmGetNodeInfo? args)
|
||||
{
|
||||
var service = GetNetmapService(ref ctx);
|
||||
return service.GetLocalNodeInfoAsync(ctx!);
|
||||
args ??= new PrmGetNodeInfo();
|
||||
var service = GetNetmapService(args);
|
||||
return service.GetLocalNodeInfoAsync(args);
|
||||
}
|
||||
|
||||
public Task<NetworkSettings> GetNetworkSettingsAsync(Context? ctx = default)
|
||||
{
|
||||
var service = GetNetmapService(ref ctx);
|
||||
return service.GetNetworkSettingsAsync(ctx!);
|
||||
public Task<NetworkSettings> GetNetworkSettingsAsync(PrmGetNetworkSettings? args)
|
||||
{
|
||||
args ??= new PrmGetNetworkSettings();
|
||||
var service = GetNetmapService(args);
|
||||
return service.GetNetworkSettingsAsync(args.Context!);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ObjectImplementation
|
||||
public Task<ObjectHeader> GetObjectHeadAsync(ContainerId containerId, ObjectId objectId, Context? ctx = default)
|
||||
public Task<ObjectHeader> GetObjectHeadAsync(PrmGetObjectHead args)
|
||||
{
|
||||
var service = GetObjectService(ref ctx);
|
||||
return service.GetObjectHeadAsync(containerId, objectId, ctx!);
|
||||
var service = GetObjectService(args);
|
||||
return service.GetObjectHeadAsync(args);
|
||||
}
|
||||
|
||||
public Task<FrostFsObject> GetObjectAsync(ContainerId containerId, ObjectId objectId, Context? ctx = default)
|
||||
public Task<FrostFsObject> GetObjectAsync(PrmGetObject args)
|
||||
{
|
||||
var service = GetObjectService(ref ctx);
|
||||
return service.GetObjectAsync(containerId, objectId, ctx!);
|
||||
var service = GetObjectService(args);
|
||||
return service.GetObjectAsync(args);
|
||||
}
|
||||
|
||||
public Task<ObjectId> PutObjectAsync(PutObjectParameters putObjectParameters, Context? ctx = default)
|
||||
public Task<ObjectId> PutObjectAsync(PrmPutObject args)
|
||||
{
|
||||
var service = GetObjectService(ref ctx);
|
||||
return service.PutObjectAsync(putObjectParameters, ctx!);
|
||||
var service = GetObjectService(args);
|
||||
return service.PutObjectAsync(args);
|
||||
}
|
||||
|
||||
public Task<ObjectId> PutSingleObjectAsync(FrostFsObject obj, Context? ctx = default)
|
||||
public Task<ObjectId> PutSingleObjectAsync(PrmPutSingleObject args)
|
||||
{
|
||||
var service = GetObjectService(ref ctx);
|
||||
return service.PutSingleObjectAsync(obj, ctx!);
|
||||
var service = GetObjectService(args);
|
||||
return service.PutSingleObjectAsync(args);
|
||||
}
|
||||
|
||||
public Task DeleteObjectAsync(ContainerId containerId, ObjectId objectId, Context? ctx = default)
|
||||
public Task DeleteObjectAsync(PrmDeleteObject args)
|
||||
{
|
||||
var service = GetObjectService(ref ctx);
|
||||
return service.DeleteObjectAsync(containerId, objectId, ctx!);
|
||||
var service = GetObjectService(args);
|
||||
return service.DeleteObjectAsync(args);
|
||||
}
|
||||
|
||||
public IAsyncEnumerable<ObjectId> SearchObjectsAsync(
|
||||
ContainerId containerId,
|
||||
IEnumerable<ObjectFilter> filters,
|
||||
Context? ctx = default)
|
||||
public IAsyncEnumerable<ObjectId> SearchObjectsAsync(PrmSearchObject args)
|
||||
{
|
||||
var service = GetObjectService(ref ctx);
|
||||
return service.SearchObjectsAsync(containerId, filters, ctx!);
|
||||
var service = GetObjectService(args);
|
||||
return service.SearchObjectsAsync(args);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SessionImplementation
|
||||
public async Task<ModelsV2.SessionToken> CreateSessionAsync(ulong expiration, Context? ctx = null)
|
||||
public async Task<ModelsV2.SessionToken> CreateSessionAsync(PrmCreateSession args)
|
||||
{
|
||||
var session = await CreateSessionInternalAsync(expiration, ctx);
|
||||
var session = await CreateSessionInternalAsync(args);
|
||||
var token = session.Serialize();
|
||||
|
||||
return new ModelsV2.SessionToken([], token);
|
||||
return new ModelsV2.SessionToken(token);
|
||||
}
|
||||
|
||||
public Task<Session.SessionToken> CreateSessionInternalAsync(ulong expiration, Context? ctx = null)
|
||||
internal Task<Session.SessionToken> CreateSessionInternalAsync(PrmCreateSession args)
|
||||
{
|
||||
var service = GetSessionService(ref ctx);
|
||||
return service.CreateSessionAsync(expiration, ctx!);
|
||||
var service = GetSessionService(args);
|
||||
return service.CreateSessionAsync(args);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -226,8 +229,9 @@ public class Client : IFrostFSClient
|
|||
|
||||
private async void CheckFrostFsVersionSupport(Context? ctx = default)
|
||||
{
|
||||
var service = GetNetmapService(ref ctx);
|
||||
var localNodeInfo = await service.GetLocalNodeInfoAsync(ctx!);
|
||||
var args = new PrmGetNodeInfo(ctx);
|
||||
var service = GetNetmapService(args);
|
||||
var localNodeInfo = await service.GetLocalNodeInfoAsync(args);
|
||||
|
||||
if (!localNodeInfo.Version.IsSupported(ClientCtx.Version))
|
||||
{
|
||||
|
@ -237,24 +241,24 @@ public class Client : IFrostFSClient
|
|||
}
|
||||
}
|
||||
|
||||
private CallInvoker? SetupEnvironment(ref Context? ctx)
|
||||
private CallInvoker? SetupEnvironment(IContext ctx)
|
||||
{
|
||||
if (isDisposed)
|
||||
throw new Exception("Client is disposed.");
|
||||
|
||||
ctx ??= new Context();
|
||||
ctx.Context ??= new Context();
|
||||
|
||||
CallInvoker? callInvoker = null;
|
||||
if (ctx.Interceptors != null && ctx.Interceptors.Count > 0)
|
||||
if (ctx.Context.Interceptors != null && ctx.Context.Interceptors.Count > 0)
|
||||
{
|
||||
foreach (var interceptor in ctx.Interceptors)
|
||||
foreach (var interceptor in ctx.Context.Interceptors)
|
||||
{
|
||||
callInvoker = AddInvoker(callInvoker, interceptor);
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx.Callback != null)
|
||||
callInvoker = AddInvoker(callInvoker, new MetricsInterceptor(ctx.Callback));
|
||||
if (ctx.Context.Callback != null)
|
||||
callInvoker = AddInvoker(callInvoker, new MetricsInterceptor(ctx.Context.Callback));
|
||||
|
||||
return callInvoker;
|
||||
|
||||
|
@ -269,9 +273,9 @@ public class Client : IFrostFSClient
|
|||
}
|
||||
}
|
||||
|
||||
private NetmapServiceProvider GetNetmapService(ref Context? ctx)
|
||||
private NetmapServiceProvider GetNetmapService(IContext ctx)
|
||||
{
|
||||
var callInvoker = SetupEnvironment(ref ctx);
|
||||
var callInvoker = SetupEnvironment(ctx);
|
||||
var client = NetmapServiceClient ?? (callInvoker != null
|
||||
? new NetmapService.NetmapServiceClient(callInvoker)
|
||||
: new NetmapService.NetmapServiceClient(ClientCtx.Channel));
|
||||
|
@ -279,9 +283,9 @@ public class Client : IFrostFSClient
|
|||
return new NetmapServiceProvider(client, ClientCtx);
|
||||
}
|
||||
|
||||
private SessionServiceProvider GetSessionService(ref Context? ctx)
|
||||
private SessionServiceProvider GetSessionService(IContext ctx)
|
||||
{
|
||||
var callInvoker = SetupEnvironment(ref ctx);
|
||||
var callInvoker = SetupEnvironment(ctx);
|
||||
var client = SessionServiceClient ?? (callInvoker != null
|
||||
? new SessionService.SessionServiceClient(callInvoker)
|
||||
: new SessionService.SessionServiceClient(ClientCtx.Channel));
|
||||
|
@ -289,9 +293,9 @@ public class Client : IFrostFSClient
|
|||
return new SessionServiceProvider(client, ClientCtx);
|
||||
}
|
||||
|
||||
private ContainerServiceProvider GetContainerService(ref Context? ctx)
|
||||
private ContainerServiceProvider GetContainerService(IContext ctx)
|
||||
{
|
||||
var callInvoker = SetupEnvironment(ref ctx);
|
||||
var callInvoker = SetupEnvironment(ctx);
|
||||
var client = ContainerServiceClient ?? (callInvoker != null
|
||||
? new ContainerService.ContainerServiceClient(callInvoker)
|
||||
: new ContainerService.ContainerServiceClient(ClientCtx.Channel));
|
||||
|
@ -299,9 +303,9 @@ public class Client : IFrostFSClient
|
|||
return new ContainerServiceProvider(client, ClientCtx);
|
||||
}
|
||||
|
||||
private ObjectServiceProvider GetObjectService(ref Context? ctx)
|
||||
private ObjectServiceProvider GetObjectService(IContext ctx)
|
||||
{
|
||||
var callInvoker = SetupEnvironment(ref ctx);
|
||||
var callInvoker = SetupEnvironment(ctx);
|
||||
var client = ObjectServiceClient ?? (callInvoker != null
|
||||
? new ObjectService.ObjectServiceClient(callInvoker)
|
||||
: new ObjectService.ObjectServiceClient(ClientCtx.Channel));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue