[#32] Provide a pool of clients to grpc
All checks were successful
DCO / DCO (pull_request) Successful in 25s
Verify code phase / Verify code (pull_request) Successful in 1m49s

Signed-off-by: Ori Bruk <o.bruk@yadro.com>
This commit is contained in:
Ori Bruk 2025-01-16 19:15:43 +03:00
parent 3c3ed76727
commit e9e9480701
56 changed files with 1712 additions and 59 deletions

View file

@ -6,7 +6,7 @@
<parent>
<groupId>info.frostfs.sdk</groupId>
<artifactId>frostfs-sdk-java</artifactId>
<version>0.1.0</version>
<version>0.2.0</version>
</parent>
<artifactId>models</artifactId>
@ -21,17 +21,17 @@
<dependency>
<groupId>info.frostfs.sdk</groupId>
<artifactId>cryptography</artifactId>
<version>0.1.0</version>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>info.frostfs.sdk</groupId>
<artifactId>protos</artifactId>
<version>0.1.0</version>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>info.frostfs.sdk</groupId>
<artifactId>exceptions</artifactId>
<version>0.1.0</version>
<version>0.2.0</version>
</dependency>
</dependencies>

View file

@ -1,6 +1,8 @@
package info.frostfs.sdk.constants;
public class AppConst {
public static final String RESERVED_PREFIX = "__SYSTEM__";
public static final int DEFAULT_MAJOR_VERSION = 2;
public static final int DEFAULT_MINOR_VERSION = 13;
public static final int BYTE_SHIFT = 10;

View file

@ -0,0 +1,10 @@
package info.frostfs.sdk.constants;
import static info.frostfs.sdk.constants.AppConst.RESERVED_PREFIX;
public class AttributeConst {
public static final String DISABLE_HOMOMORPHIC_HASHING_ATTRIBUTE = RESERVED_PREFIX + "DISABLE_HOMOMORPHIC_HASHING";
private AttributeConst() {
}
}

View file

@ -1,9 +1,10 @@
package info.frostfs.sdk.constants;
import static info.frostfs.sdk.constants.AppConst.RESERVED_PREFIX;
public class XHeaderConst {
public static final String RESERVED_XHEADER_PREFIX = "__SYSTEM__";
public static final String XHEADER_NETMAP_EPOCH = RESERVED_XHEADER_PREFIX + "NETMAP_EPOCH";
public static final String XHEADER_NETMAP_LOOKUP_DEPTH = RESERVED_XHEADER_PREFIX + "NETMAP_LOOKUP_DEPTH";
public static final String XHEADER_NETMAP_EPOCH = RESERVED_PREFIX + "NETMAP_EPOCH";
public static final String XHEADER_NETMAP_LOOKUP_DEPTH = RESERVED_PREFIX + "NETMAP_LOOKUP_DEPTH";
private XHeaderConst() {
}

View file

@ -6,6 +6,8 @@ import info.frostfs.sdk.enums.BasicAcl;
import lombok.Getter;
import lombok.Setter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Getter
@ -15,6 +17,7 @@ public class Container {
private BasicAcl basicAcl;
private PlacementPolicy placementPolicy;
private Version version;
private Map<String, String> attributes = new HashMap<>();
public Container(BasicAcl basicAcl, PlacementPolicy placementPolicy) {
this.nonce = UUID.randomUUID();

View file

@ -7,9 +7,13 @@ import info.frostfs.sdk.enums.BasicAcl;
import info.frostfs.sdk.exceptions.ProcessFrostFSException;
import info.frostfs.sdk.mappers.netmap.PlacementPolicyMapper;
import info.frostfs.sdk.mappers.netmap.VersionMapper;
import org.apache.commons.collections4.CollectionUtils;
import java.util.stream.Collectors;
import static info.frostfs.sdk.UuidExtension.asBytes;
import static info.frostfs.sdk.UuidExtension.asUuid;
import static info.frostfs.sdk.constants.AttributeConst.DISABLE_HOMOMORPHIC_HASHING_ATTRIBUTE;
import static info.frostfs.sdk.constants.ErrorConst.UNKNOWN_ENUM_VALUE_TEMPLATE;
import static java.util.Objects.isNull;
@ -22,11 +26,23 @@ public class ContainerMapper {
return null;
}
return Types.Container.newBuilder()
var containerGrpc = Types.Container.newBuilder()
.setBasicAcl(container.getBasicAcl().value)
.setPlacementPolicy(PlacementPolicyMapper.toGrpcMessage(container.getPlacementPolicy()))
.setNonce(ByteString.copyFrom(asBytes(container.getNonce())))
.build();
.setNonce(ByteString.copyFrom(asBytes(container.getNonce())));
container.getAttributes().putIfAbsent(DISABLE_HOMOMORPHIC_HASHING_ATTRIBUTE, Boolean.TRUE.toString());
var attributes = container.getAttributes().entrySet().stream()
.map(entry ->
Types.Container.Attribute.newBuilder()
.setKey(entry.getKey())
.setValue(entry.getValue())
.build()
)
.collect(Collectors.toList());
containerGrpc.addAllAttributes(attributes);
return containerGrpc.build();
}
public static Container toModel(Types.Container containerGrpc) {
@ -41,9 +57,17 @@ public class ContainerMapper {
);
}
var container = new Container(basicAcl, PlacementPolicyMapper.toModel(containerGrpc.getPlacementPolicy()));
container.setNonce(asUuid(containerGrpc.getNonce().toByteArray()));
container.setVersion(VersionMapper.toModel(containerGrpc.getVersion()));
if (CollectionUtils.isNotEmpty(containerGrpc.getAttributesList())) {
var attributes = containerGrpc.getAttributesList().stream()
.collect(Collectors.toMap(Types.Container.Attribute::getKey, Types.Container.Attribute::getValue));
container.setAttributes(attributes);
}
return container;
}
}

View file

@ -15,6 +15,7 @@ import java.util.UUID;
import static info.frostfs.sdk.UuidExtension.asBytes;
import static info.frostfs.sdk.UuidExtension.asUuid;
import static info.frostfs.sdk.constants.AttributeConst.DISABLE_HOMOMORPHIC_HASHING_ATTRIBUTE;
import static org.junit.jupiter.api.Assertions.*;
public class ContainerMapperTest {
@ -24,6 +25,8 @@ public class ContainerMapperTest {
//Given
var placementPolicy = new PlacementPolicy(new Replica[]{new Replica(1)}, true);
var container = new Container(BasicAcl.PUBLIC_RW, placementPolicy);
container.getAttributes().put("key1", "val1");
container.getAttributes().put(DISABLE_HOMOMORPHIC_HASHING_ATTRIBUTE, "false");
//When
var result = ContainerMapper.toGrpcMessage(container);
@ -42,6 +45,11 @@ public class ContainerMapperTest {
container.getPlacementPolicy().getReplicas()[0].getSelector(),
result.getPlacementPolicy().getReplicasList().get(0).getSelector()
);
assertEquals("key1", result.getAttributes(0).getKey());
assertEquals("val1", result.getAttributes(0).getValue());
assertEquals(DISABLE_HOMOMORPHIC_HASHING_ATTRIBUTE, result.getAttributes(1).getKey());
assertEquals("false", result.getAttributes(1).getValue());
}
@Test
@ -69,11 +77,23 @@ public class ContainerMapperTest {
.addReplicas(replica)
.build();
var attribute1 = Types.Container.Attribute.newBuilder()
.setKey("key1")
.setValue("val1")
.build();
var attribute2 = Types.Container.Attribute.newBuilder()
.setKey("key2")
.setValue("val2")
.build();
var container = Types.Container.newBuilder()
.setBasicAcl(basicAcl.value)
.setNonce(ByteString.copyFrom(asBytes(UUID.randomUUID())))
.setVersion(version)
.setPlacementPolicy(placementPolicy)
.addAttributes(attribute1)
.addAttributes(attribute2)
.build();
//When
@ -95,6 +115,9 @@ public class ContainerMapperTest {
);
assertEquals(version.getMajor(), result.getVersion().getMajor());
assertEquals(version.getMinor(), result.getVersion().getMinor());
assertEquals(attribute1.getValue(), result.getAttributes().get(attribute1.getKey()));
assertEquals(attribute2.getValue(), result.getAttributes().get(attribute2.getKey()));
}
@Test