optimizations
This commit is contained in:
parent
d6fe034453
commit
852f46bd16
13 changed files with 80 additions and 41 deletions
|
@ -6,7 +6,7 @@ public struct Resources(bool inverted, string[] names) : System.IEquatable<Resou
|
|||
|
||||
public string[] Names { get; set; } = names;
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override readonly bool Equals(object obj)
|
||||
{
|
||||
if (obj == null || obj is not Resources)
|
||||
return false;
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyCompany("FrostFS.SDK.Client")]
|
||||
[assembly: AssemblyFileVersion("1.0.2.0")]
|
||||
[assembly: AssemblyInformationalVersion("1.0.0+d6fe0344538a223303c9295452f0ad73681ca376")]
|
||||
[assembly: AssemblyProduct("FrostFS.SDK.Client")]
|
||||
[assembly: AssemblyTitle("FrostFS.SDK.Client")]
|
||||
|
||||
[assembly: AssemblyVersion("1.0.1")]
|
||||
[assembly: AssemblyFileVersion("1.0.1")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("1.0.2")]
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CommunityToolkit.HighPerformance" Version="7.1.2" />
|
||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
|
|
|
@ -14,7 +14,7 @@ public struct FrostFsPlacementPolicy(bool unique,
|
|||
params FrostFsReplica[] replicas)
|
||||
: IEquatable<FrostFsPlacementPolicy>
|
||||
{
|
||||
private PlacementPolicy policy;
|
||||
private PlacementPolicy? policy;
|
||||
|
||||
public FrostFsReplica[] Replicas { get; } = replicas;
|
||||
|
||||
|
|
|
@ -229,7 +229,7 @@ internal struct Context
|
|||
return [.. result];
|
||||
}
|
||||
|
||||
static double CalcBucketWeight(List<FrostFsNodeInfo> ns, IAggregator a, Func<FrostFsNodeInfo, double> wf)
|
||||
static double CalcBucketWeight(List<FrostFsNodeInfo> ns, MeanIQRAgg a, Func<FrostFsNodeInfo, double> wf)
|
||||
{
|
||||
foreach (var node in ns)
|
||||
{
|
||||
|
|
|
@ -4,7 +4,9 @@ namespace FrostFS.SDK;
|
|||
|
||||
public class FrostFsObject
|
||||
{
|
||||
private byte[]? bytes;
|
||||
// private byte[]? _payloadBytes;
|
||||
// private ReadOnlyMemory<byte> _payloadMemory;
|
||||
// private bool _isInitPayloadMemory;
|
||||
|
||||
/// <summary>
|
||||
/// Creates new instance from <c>ObjectHeader</c>
|
||||
|
@ -45,21 +47,31 @@ public class FrostFsObject
|
|||
/// <value>Reader for received data</value>
|
||||
public IObjectReader? ObjectReader { get; set; }
|
||||
|
||||
public byte[] SingleObjectPayload
|
||||
{
|
||||
get { return bytes ?? []; }
|
||||
set { bytes = value; }
|
||||
}
|
||||
public ReadOnlyMemory<byte> SingleObjectPayload { get; set; }
|
||||
|
||||
//public ReadOnlyMemory<byte> SingleObjectPayloadMemory
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// if (!_isInitPayloadMemory)
|
||||
// {
|
||||
// _payloadMemory = _payloadBytes.AsMemory();
|
||||
// _isInitPayloadMemory = true;
|
||||
// }
|
||||
|
||||
// return _payloadMemory;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// _payloadMemory = value;
|
||||
// _isInitPayloadMemory = true;
|
||||
// }
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// The size of payload cannot exceed <c>MaxObjectSize</c> value from <c>NetworkSettings</c>
|
||||
/// Used only for PutSingleObject method
|
||||
/// Provide SHA256 hash of the payload. If null, the hash is calculated by internal logic
|
||||
/// </summary>
|
||||
/// <value>Buffer for output data</value>
|
||||
public void SetSingleObjectPayload(byte[] bytes)
|
||||
{
|
||||
this.bytes = bytes;
|
||||
}
|
||||
public byte[]? PayloadHash { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Applied only for the last Object in chain in case of manual multipart uploading
|
||||
|
|
|
@ -327,10 +327,10 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
{
|
||||
Body = new()
|
||||
{
|
||||
Address = address,
|
||||
Address = address,
|
||||
Patch = new PatchRequest.Types.Body.Types.Patch
|
||||
{
|
||||
Chunk = ByteString.CopyFrom(chunkBuffer, 0, bytesCount),
|
||||
Chunk = UnsafeByteOperations.UnsafeWrap(chunkBuffer.AsMemory(0, bytesCount)),
|
||||
SourceRange = new Object.Range { Offset = currentPos, Length = (ulong)bytesCount }
|
||||
}
|
||||
}
|
||||
|
@ -481,7 +481,7 @@ internal sealed class ObjectServiceProvider(ObjectService.ObjectServiceClient cl
|
|||
|
||||
var obj = new FrostFsObject(partHeader)
|
||||
{
|
||||
SingleObjectPayload = buffer.Length == size ? buffer : buffer[..size]
|
||||
SingleObjectPayload = buffer.AsMemory(0, size)
|
||||
};
|
||||
|
||||
var prm = new PrmSingleObjectPut(obj);
|
||||
|
|
|
@ -55,7 +55,15 @@ public static class ObjectTools
|
|||
var grpcHeader = @object.Header.GetHeader();
|
||||
|
||||
grpcHeader.PayloadLength = (ulong)@object.SingleObjectPayload.Length;
|
||||
grpcHeader.PayloadHash = Sha256Checksum(@object.SingleObjectPayload);
|
||||
|
||||
if (@object.PayloadHash != null)
|
||||
{
|
||||
grpcHeader.PayloadHash = ChecksumFromSha256(@object.PayloadHash);
|
||||
}
|
||||
else
|
||||
{
|
||||
grpcHeader.PayloadHash = Sha256Checksum(@object.SingleObjectPayload);
|
||||
}
|
||||
|
||||
var split = @object.Header.Split;
|
||||
|
||||
|
@ -148,6 +156,15 @@ public static class ObjectTools
|
|||
};
|
||||
}
|
||||
|
||||
internal static Checksum Sha256Checksum(ReadOnlyMemory<byte> data)
|
||||
{
|
||||
return new Checksum
|
||||
{
|
||||
Type = ChecksumType.Sha256,
|
||||
Sum = ByteString.CopyFrom(data.Sha256())
|
||||
};
|
||||
}
|
||||
|
||||
internal static Checksum ChecksumFromSha256(ReadOnlyMemory<byte> dataHash)
|
||||
{
|
||||
return new Checksum
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyCompany("FrostFS.SDK.Cryptography")]
|
||||
[assembly: AssemblyFileVersion("1.0.2.0")]
|
||||
[assembly: AssemblyInformationalVersion("1.0.0+d6fe0344538a223303c9295452f0ad73681ca376")]
|
||||
[assembly: AssemblyProduct("FrostFS.SDK.Cryptography")]
|
||||
[assembly: AssemblyTitle("FrostFS.SDK.Cryptography")]
|
||||
|
||||
[assembly: AssemblyVersion("1.0.1")]
|
||||
[assembly: AssemblyFileVersion("1.0.1")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("1.0.2.0")]
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Threading;
|
||||
|
||||
using CommunityToolkit.HighPerformance;
|
||||
using Org.BouncyCastle.Crypto.Digests;
|
||||
|
||||
namespace FrostFS.SDK.Cryptography;
|
||||
|
@ -39,6 +40,22 @@ public static class Extentions
|
|||
}
|
||||
}
|
||||
|
||||
public static byte[] Sha256(this ReadOnlyMemory<byte> value)
|
||||
{
|
||||
bool lockTaken = false;
|
||||
try
|
||||
{
|
||||
_spinlockSha256.Enter(ref lockTaken);
|
||||
|
||||
return _sha256.ComputeHash(value.AsStream());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (lockTaken)
|
||||
_spinlockSha256.Exit(false);
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] Sha512(this byte[] value)
|
||||
{
|
||||
bool lockTaken = false;
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />
|
||||
<PackageReference Include="CommunityToolkit.HighPerformance" Version="7.1.2" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="7.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
|
|
@ -152,7 +152,7 @@ public static class KeyExtension
|
|||
{
|
||||
var secp256R1 = SecNamedCurves.GetByName("secp256r1");
|
||||
var publicKey = secp256R1.G.Multiply(new Org.BouncyCastle.Math.BigInteger(1, privateKey))
|
||||
.GetEncoded(false).Skip(1);
|
||||
.GetEncoded(false).Skip(1).ToArray();
|
||||
|
||||
var key = ECDsa.Create(new ECParameters
|
||||
{
|
||||
|
@ -177,7 +177,7 @@ public static class KeyExtension
|
|||
|
||||
public static ECDsa LoadPublicKey(this byte[] publicKey)
|
||||
{
|
||||
var publicKeyFull = publicKey.Decompress().Skip(1);
|
||||
var publicKeyFull = publicKey.Decompress().Skip(1).ToArray();
|
||||
var key = ECDsa.Create(new ECParameters
|
||||
{
|
||||
Curve = ECCurve.NamedCurves.nistP256,
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyCompany("FrostFS.SDK.Protos")]
|
||||
[assembly: AssemblyFileVersion("1.0.2.0")]
|
||||
[assembly: AssemblyInformationalVersion("1.0.0+d6fe0344538a223303c9295452f0ad73681ca376")]
|
||||
[assembly: AssemblyProduct("FrostFS.SDK.Protos")]
|
||||
[assembly: AssemblyTitle("FrostFS.SDK.Protos")]
|
||||
|
||||
[assembly: AssemblyVersion("1.0.1")]
|
||||
[assembly: AssemblyFileVersion("1.0.1")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: AssemblyVersion("1.0.2.0")]
|
||||
|
|
Loading…
Add table
Reference in a new issue