[#40] Client: Add memory optimization for hash
Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
parent
32a7e64538
commit
809bd90352
17 changed files with 170 additions and 64 deletions
|
@ -67,7 +67,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
request.AddMetaHeader(args.XHeaders, protoToken);
|
||||
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
var response = await client!.HeadAsync(request, null, ctx.GetDeadline(), ctx.CancellationToken).ConfigureAwait(false);
|
||||
|
||||
|
@ -111,7 +111,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
request.AddMetaHeader(args.XHeaders, protoToken);
|
||||
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
return await GetObject(request, ctx).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
request.AddMetaHeader(args.XHeaders, protoToken);
|
||||
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
var call = client.GetRange(request, null, ctx.GetDeadline(), ctx.CancellationToken);
|
||||
return new RangeReader(call);
|
||||
|
@ -185,7 +185,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
request.AddMetaHeader(args.XHeaders, protoToken);
|
||||
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
var response = await client.GetRangeHashAsync(request, null, ctx.GetDeadline(), ctx.CancellationToken);
|
||||
|
||||
|
@ -218,7 +218,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
ClientContext.Key);
|
||||
|
||||
request.AddMetaHeader(args.XHeaders, protoToken);
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
var response = await client.DeleteAsync(request, null, ctx.GetDeadline(), ctx.CancellationToken);
|
||||
|
||||
|
@ -247,7 +247,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
request.AddMetaHeader(args.XHeaders, protoToken);
|
||||
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
using var stream = GetSearchReader(request, ctx);
|
||||
|
||||
|
@ -283,7 +283,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
request.AddMetaHeader(args.XHeaders, protoToken);
|
||||
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
var response = await client.PutSingleAsync(request, null, ctx.GetDeadline(), ctx.CancellationToken).ConfigureAwait(false);
|
||||
|
||||
|
@ -363,7 +363,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
request.AddMetaHeader(args.XHeaders);
|
||||
}
|
||||
|
||||
request.Sign(ClientContext.Key.ECDsaKey);
|
||||
request.Sign(ClientContext.Key);
|
||||
|
||||
await call.RequestStream.WriteAsync(request).ConfigureAwait(false);
|
||||
|
||||
|
@ -402,11 +402,11 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
throw new ArgumentException("The stream has zero length");
|
||||
|
||||
var networkSettings = await ClientContext.Client.GetNetworkSettingsAsync(ctx).ConfigureAwait(false);
|
||||
args.PutObjectContext.MaxObjectSizeCache = (int)networkSettings.MaxObjectSize;
|
||||
var partSize = (int)networkSettings.MaxObjectSize;
|
||||
|
||||
var restBytes = args.PutObjectContext.FullLength;
|
||||
|
||||
var objectSize = (int)Math.Min((ulong)args.PutObjectContext.MaxObjectSizeCache, restBytes);
|
||||
var objectSize = (int)Math.Min((ulong)partSize, restBytes);
|
||||
|
||||
// define collection capacity
|
||||
var objectsCount = (int)(restBytes / (ulong)objectSize) + ((restBytes % (ulong)objectSize) > 0 ? 1 : 0);
|
||||
|
@ -414,6 +414,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
// if the object fits one part, it can be loaded as non-complex object
|
||||
if (objectsCount == 1)
|
||||
{
|
||||
args.PutObjectContext.MaxObjectSizeCache = partSize;
|
||||
var singlePartResult = await PutMultipartStreamObjectAsync(args, default).ConfigureAwait(false);
|
||||
return singlePartResult.ObjectId;
|
||||
}
|
||||
|
@ -422,8 +423,6 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
SplitId splitId = new();
|
||||
|
||||
var partSize = args.PutObjectContext.MaxObjectSizeCache;
|
||||
|
||||
// keep attributes for the large object
|
||||
var attributes = args.Header!.Attributes.ToArray();
|
||||
header.Attributes = null;
|
||||
|
@ -578,7 +577,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
};
|
||||
|
||||
chunkRequest.AddMetaHeader(args.XHeaders);
|
||||
chunkRequest.Sign(ClientContext.Key.ECDsaKey);
|
||||
chunkRequest.Sign(ClientContext.Key);
|
||||
|
||||
await stream.Write(chunkRequest).ConfigureAwait(false);
|
||||
}
|
||||
|
@ -640,7 +639,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
initRequest.AddMetaHeader(args.XHeaders, protoToken);
|
||||
|
||||
initRequest.Sign(ClientContext.Key.ECDsaKey);
|
||||
initRequest.Sign(ClientContext.Key);
|
||||
|
||||
return await PutObjectInit(initRequest, ctx).ConfigureAwait(false);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue