diff --git a/src/FrostFS.SDK.ClientV2/Client.cs b/src/FrostFS.SDK.ClientV2/Client.cs index b8a6defa..5df849af 100644 --- a/src/FrostFS.SDK.ClientV2/Client.cs +++ b/src/FrostFS.SDK.ClientV2/Client.cs @@ -8,6 +8,7 @@ using FrostFS.SDK.ModelsV2; using FrostFS.Session; using Grpc.Core; using Grpc.Net.Client; +using Version = FrostFS.SDK.ModelsV2.Version; namespace FrostFS.SDK.ClientV2; @@ -16,7 +17,7 @@ public partial class Client: IFrostFSClient private GrpcChannel _channel; private readonly ECDsa _key; private readonly OwnerId _owner; - public readonly ModelsV2.Version Version = new (2, 13); + public readonly Version Version = new (2, 13); private ContainerService.ContainerServiceClient _containerServiceClient; private NetmapService.NetmapServiceClient _netmapServiceClient; diff --git a/src/FrostFS.SDK.ClientV2/Interfaces/IFrostFSClient.cs b/src/FrostFS.SDK.ClientV2/Interfaces/IFrostFSClient.cs index 3cac9bac..0d659aec 100644 --- a/src/FrostFS.SDK.ClientV2/Interfaces/IFrostFSClient.cs +++ b/src/FrostFS.SDK.ClientV2/Interfaces/IFrostFSClient.cs @@ -1,14 +1,18 @@ +using FrostFS.Container; using FrostFS.Object; using FrostFS.Refs; +using DeleteResponse = FrostFS.Container.DeleteResponse; +using GetResponse = FrostFS.Container.GetResponse; +using PutResponse = FrostFS.Container.PutResponse; namespace FrostFS.SDK.ClientV2; public interface IFrostFSClient { - Task ListContainersAsync(); - Task CreateContainerAsync(Container.Container container); - Task GetContainerAsync(ContainerID containerId); - Task DeleteContainerAsync(ContainerID containerId); + Task ListContainersAsync(); + Task CreateContainerAsync(Container.Container container); + Task GetContainerAsync(ContainerID containerId); + Task DeleteContainerAsync(ContainerID containerId); Task GetObjectHeadAsync(ContainerID containerId, ObjectID objectId); Task PutObjectAsync(ContainerID containerId, Stream data); Task DeleteObjectAsync(ContainerID containerId, ObjectID objectId); diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Container.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Container.cs index bb69aa08..c880b2f9 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Container.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Container.cs @@ -1,6 +1,6 @@ -using System.Runtime.InteropServices.ComTypes; using FrostFS.SDK.ClientV2.Mappers.GRPC.Netmap; using FrostFS.SDK.Cryptography; +using FrostFS.SDK.ModelsV2.Enums; using Google.Protobuf; namespace FrostFS.SDK.ClientV2.Mappers.GRPC; @@ -19,14 +19,14 @@ public static class ContainerMapper public static ModelsV2.Container ToModel(this Container.Container container) { - var basicAclName = Enum.GetName(typeof(ModelsV2.Enums.BasicACL), container.BasicAcl); + var basicAclName = Enum.GetName(typeof(BasicACL), container.BasicAcl); if (basicAclName is null) { throw new ArgumentException($"Unknown BasicACL rule. Value: '{container.BasicAcl}'."); } return new ModelsV2.Container( - Enum.Parse(basicAclName), + Enum.Parse(basicAclName), container.PlacementPolicy.ToModel() ) { diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ContainerId.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ContainerId.cs index eb266234..1bfd6146 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ContainerId.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ContainerId.cs @@ -1,5 +1,5 @@ -using FrostFS.SDK.ModelsV2; using FrostFS.Refs; +using FrostFS.SDK.ModelsV2; using Google.Protobuf; namespace FrostFS.SDK.ClientV2.Mappers.GRPC; diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/MetaHeader.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/MetaHeader.cs index c32a466e..d3bf04fa 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/MetaHeader.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/MetaHeader.cs @@ -1,5 +1,6 @@ using FrostFS.SDK.ModelsV2; using FrostFS.Session; +using Version = FrostFS.Refs.Version; namespace FrostFS.SDK.ClientV2.Mappers.GRPC; @@ -9,7 +10,7 @@ public static class MetaHeaderMapper { return new RequestMetaHeader { - Version = new Refs.Version + Version = new Version { Major = (uint)metaHeader.Version.Major, Minor = (uint)metaHeader.Version.Minor, diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Netmap/PlacementPolicy.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Netmap/PlacementPolicy.cs index 7ca1d104..71f66aed 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Netmap/PlacementPolicy.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Netmap/PlacementPolicy.cs @@ -1,4 +1,5 @@ using FrostFS.Netmap; +using Replica = FrostFS.SDK.ModelsV2.Netmap.Replica; namespace FrostFS.SDK.ClientV2.Mappers.GRPC.Netmap; @@ -23,7 +24,7 @@ public static class PlacementPolicyMapper public static ModelsV2.Netmap.PlacementPolicy ToModel(this PlacementPolicy placementPolicy) { - var replicas = new List(); + var replicas = new List(); foreach (var replica in placementPolicy.Replicas) { replicas.Add(replica.ToModel()); diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs index d476106c..a4578913 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Object.cs @@ -1,11 +1,11 @@ +using FrostFS.Object; using FrostFS.SDK.ModelsV2; -using FrostFS.SDK.ModelsV2.Enums; namespace FrostFS.SDK.ClientV2.Mappers.GRPC; public static class ObjectHeadMapper { - public static ObjectHead ToModel(this Object.Header head) + public static ObjectHead ToModel(this Header head) { // var obtype = Enum.Parse(head.ObjectType.ToString()); return new ObjectHead diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ObjectId.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ObjectId.cs index c6baae95..4c280350 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ObjectId.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/ObjectId.cs @@ -1,5 +1,5 @@ -using FrostFS.SDK.ModelsV2; using FrostFS.Refs; +using FrostFS.SDK.ModelsV2; using Google.Protobuf; namespace FrostFS.SDK.ClientV2.Mappers.GRPC; diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/OwnerId.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/OwnerId.cs index 8259478a..4bea66dd 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/OwnerId.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/OwnerId.cs @@ -1,5 +1,5 @@ -using FrostFS.SDK.ModelsV2; using FrostFS.Refs; +using FrostFS.SDK.ModelsV2; using Google.Protobuf; namespace FrostFS.SDK.ClientV2.Mappers.GRPC; diff --git a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Version.cs b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Version.cs index db8601d3..549ff1ae 100644 --- a/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Version.cs +++ b/src/FrostFS.SDK.ClientV2/Mappers/GRPC/Version.cs @@ -1,17 +1,19 @@ +using Version = FrostFS.Refs.Version; + namespace FrostFS.SDK.ClientV2.Mappers.GRPC; public static class VersionMapper { - public static Refs.Version ToGrpcMessage(this ModelsV2.Version version) + public static Version ToGrpcMessage(this ModelsV2.Version version) { - return new Refs.Version + return new Version { Major = (uint)version.Major, Minor = (uint)version.Minor }; } - public static ModelsV2.Version ToModel(this Refs.Version version) + public static ModelsV2.Version ToModel(this Version version) { return new ModelsV2.Version((int)version.Major, (int)version.Minor); } diff --git a/src/FrostFS.SDK.ClientV2/RequestSigner.cs b/src/FrostFS.SDK.ClientV2/RequestSigner.cs index ea4f4e2b..88c64c30 100644 --- a/src/FrostFS.SDK.ClientV2/RequestSigner.cs +++ b/src/FrostFS.SDK.ClientV2/RequestSigner.cs @@ -1,7 +1,7 @@ using System.Security.Cryptography; using FrostFS.Refs; -using FrostFS.Session; using FrostFS.SDK.Cryptography; +using FrostFS.Session; using Google.Protobuf; using Org.BouncyCastle.Asn1.Sec; using Org.BouncyCastle.Crypto.Digests; diff --git a/src/FrostFS.SDK.ClientV2/RequestVerifier.cs b/src/FrostFS.SDK.ClientV2/RequestVerifier.cs index 400c16a9..5301e761 100644 --- a/src/FrostFS.SDK.ClientV2/RequestVerifier.cs +++ b/src/FrostFS.SDK.ClientV2/RequestVerifier.cs @@ -1,7 +1,7 @@ using System.Security.Cryptography; using FrostFS.Refs; -using FrostFS.Session; using FrostFS.SDK.Cryptography; +using FrostFS.Session; using Google.Protobuf; using Org.BouncyCastle.Asn1.Sec; using Org.BouncyCastle.Crypto.Digests; diff --git a/src/FrostFS.SDK.ClientV2/Services/Object.cs b/src/FrostFS.SDK.ClientV2/Services/Object.cs index 499423f5..1a4b548c 100644 --- a/src/FrostFS.SDK.ClientV2/Services/Object.cs +++ b/src/FrostFS.SDK.ClientV2/Services/Object.cs @@ -2,6 +2,7 @@ using FrostFS.Object; using FrostFS.Refs; using FrostFS.SDK.ClientV2.Mappers.GRPC; using FrostFS.SDK.Cryptography; +using FrostFS.SDK.ModelsV2; using FrostFS.Session; using Google.Protobuf; using Grpc.Core; @@ -56,8 +57,8 @@ public partial class Client request.Sign(_key); using var stream = await InitObject(request); - var buffer = new byte[ModelsV2.Constants.ObjectChunkSize]; - var bufferLength = data.Read(buffer, 0, ModelsV2.Constants.ObjectChunkSize); + var buffer = new byte[Constants.ObjectChunkSize]; + var bufferLength = data.Read(buffer, 0, Constants.ObjectChunkSize); while (bufferLength > 0) { request.Body = new PutRequest.Types.Body @@ -67,7 +68,7 @@ public partial class Client request.VerifyHeader = null; request.Sign(_key); await stream.Write(request); - bufferLength = data.Read(buffer, 0, ModelsV2.Constants.ObjectChunkSize); + bufferLength = data.Read(buffer, 0, Constants.ObjectChunkSize); } return await stream.Close(); } diff --git a/src/FrostFS.SDK.Cryptography/Key.cs b/src/FrostFS.SDK.Cryptography/Key.cs index c5a33931..15b888f4 100644 --- a/src/FrostFS.SDK.Cryptography/Key.cs +++ b/src/FrostFS.SDK.Cryptography/Key.cs @@ -2,7 +2,6 @@ using System.Numerics; using System.Security.Cryptography; using System.Text; -using Google.Protobuf; using Org.BouncyCastle.Asn1.Sec; namespace FrostFS.SDK.Cryptography; diff --git a/src/FrostFS.SDK.ModelsV2/Container.cs b/src/FrostFS.SDK.ModelsV2/Container.cs index 7d798d39..d205bf63 100644 --- a/src/FrostFS.SDK.ModelsV2/Container.cs +++ b/src/FrostFS.SDK.ModelsV2/Container.cs @@ -1,3 +1,4 @@ +using FrostFS.SDK.ModelsV2.Enums; using FrostFS.SDK.ModelsV2.Netmap; namespace FrostFS.SDK.ModelsV2; @@ -5,11 +6,11 @@ namespace FrostFS.SDK.ModelsV2; public class Container { public Guid Nonce { get; set; } - public Enums.BasicACL BasicAcl { get; set; } + public BasicACL BasicAcl { get; set; } public PlacementPolicy PlacementPolicy { get; set; } public Version? Version { get; set; } - public Container(Enums.BasicACL basicAcl, PlacementPolicy placementPolicy) + public Container(BasicACL basicAcl, PlacementPolicy placementPolicy) { Nonce = Guid.NewGuid(); BasicAcl = basicAcl; diff --git a/src/FrostFS.SDK.ModelsV2/Object.cs b/src/FrostFS.SDK.ModelsV2/Object.cs index 46664e6f..b588eab9 100644 --- a/src/FrostFS.SDK.ModelsV2/Object.cs +++ b/src/FrostFS.SDK.ModelsV2/Object.cs @@ -5,5 +5,24 @@ public class ObjectHead { public ContainerId ContainerId { get; set; } public long Size { get; set; } - public Version Version { get; set; } + public Version? Version { get; set; } +} + +public class Object : ObjectHead +{ + public Stream Payload { get; set; } + + public Object(ContainerId containerId, Stream payload) + { + ContainerId = containerId; + Payload = payload; + Size = Payload.Length; + } + + public Object(ContainerId containerId, byte[] payload) + { + ContainerId = containerId; + Payload = new MemoryStream(payload); + Size = Payload.Length; + } } \ No newline at end of file diff --git a/src/FrostFS.SDK.ProtosV2/Interfaces/IRequest.cs b/src/FrostFS.SDK.ProtosV2/Interfaces/IRequest.cs index 6dd9cf7f..6c0b2648 100644 --- a/src/FrostFS.SDK.ProtosV2/Interfaces/IRequest.cs +++ b/src/FrostFS.SDK.ProtosV2/Interfaces/IRequest.cs @@ -1,5 +1,3 @@ -using FrostFS.Session; - namespace FrostFS.Session { public interface IRequest : IVerificableMessage diff --git a/src/FrostFS.SDK.ProtosV2/container/Extension.Message.cs b/src/FrostFS.SDK.ProtosV2/container/Extension.Message.cs index fd6535cb..3c54a01e 100644 --- a/src/FrostFS.SDK.ProtosV2/container/Extension.Message.cs +++ b/src/FrostFS.SDK.ProtosV2/container/Extension.Message.cs @@ -1,5 +1,5 @@ -using Google.Protobuf; using FrostFS.Session; +using Google.Protobuf; namespace FrostFS.Container { diff --git a/src/FrostFS.SDK.ProtosV2/netmap/Extension.Message.cs b/src/FrostFS.SDK.ProtosV2/netmap/Extension.Message.cs index 350cf74f..8ab7c04b 100644 --- a/src/FrostFS.SDK.ProtosV2/netmap/Extension.Message.cs +++ b/src/FrostFS.SDK.ProtosV2/netmap/Extension.Message.cs @@ -1,5 +1,5 @@ -using Google.Protobuf; -using FrostFS.Session; +using FrostFS.Session; +using Google.Protobuf; namespace FrostFS.Netmap { diff --git a/src/FrostFS.SDK.Service/Service.cs b/src/FrostFS.SDK.Service/Service.cs index bc11d34e..0cd0ad45 100644 --- a/src/FrostFS.SDK.Service/Service.cs +++ b/src/FrostFS.SDK.Service/Service.cs @@ -52,15 +52,9 @@ public class FrostFsService return getObjectHeadResponse.Body.Header.Header.ToModel(); } - public async Task PutObjectAsync(ContainerId containerId, Stream data) + public async Task PutObjectAsync(ModelsV2.Object obj) { - var putObjectResponse = await _client.PutObjectAsync(containerId.ToGrpcMessage(), data); - return ObjectId.FromHash(putObjectResponse.Body.ObjectId.Value.ToByteArray()); - } - - public async Task PutObjectAsync(ContainerId containerId, byte[] data) - { - var putObjectResponse = await _client.PutObjectAsync(containerId.ToGrpcMessage(), new MemoryStream(data)); + var putObjectResponse = await _client.PutObjectAsync(obj.ContainerId.ToGrpcMessage(), obj.Payload); return ObjectId.FromHash(putObjectResponse.Body.ObjectId.Value.ToByteArray()); }