frostfs-sdk-java/client/src/main/java/info/FrostFS/sdk/services/FrostFSClient.java
Bruk Ori ca7ba79817 [#XX] add client environment
add client cut
code cleanup
Signed-off-by: Ori Bruk <o.bruk@yadro.com>
2024-07-22 19:13:52 +03:00

135 lines
4.5 KiB
Java

package info.FrostFS.sdk.services;
import frostFS.session.Types;
import info.FrostFS.sdk.tools.ClientSettings;
import info.FrostFS.sdk.tools.PutObjectParameters;
import info.FrostFS.sdk.dto.container.Container;
import info.FrostFS.sdk.dto.container.ContainerId;
import info.FrostFS.sdk.dto.SessionToken;
import info.FrostFS.sdk.dto.Version;
import info.FrostFS.sdk.dto.netmap.NetmapSnapshot;
import info.FrostFS.sdk.dto.netmap.NodeInfo;
import info.FrostFS.sdk.dto.object.ObjectFilter;
import info.FrostFS.sdk.dto.object.ObjectFrostFS;
import info.FrostFS.sdk.dto.object.ObjectHeader;
import info.FrostFS.sdk.dto.object.ObjectId;
import info.FrostFS.sdk.services.impl.*;
import info.FrostFS.sdk.tools.ClientEnvironment;
import info.FrostFS.sdk.tools.NetworkSettings;
import io.grpc.Channel;
import java.util.List;
import static info.FrostFS.sdk.GrpcClient.initGrpcChannel;
import static java.util.Objects.isNull;
public class FrostFSClient implements ContainerClient, ObjectClient, NetmapClient, SessionClient, ToolsClient {
private final ContainerService containerService;
private final NetmapService netmapService;
private final ObjectService objectService;
private final SessionService sessionService;
private final ObjectTools objectTools;
public FrostFSClient(ClientSettings clientSettings) {
if (isNull(clientSettings)) {
throw new IllegalArgumentException("Options must be initialized");
}
clientSettings.validate();
Channel channel = initGrpcChannel(clientSettings.getHost(), clientSettings.getCreds());
ClientEnvironment clientEnvironment =
new ClientEnvironment(clientSettings.getKey(), channel, new Version(2, 13), this);
this.containerService = new ContainerService(clientEnvironment);
this.netmapService = new NetmapService(clientEnvironment);
this.sessionService = new SessionService(clientEnvironment);
this.objectService = new ObjectService(clientEnvironment);
this.objectTools = new ObjectTools(clientEnvironment);
checkFrostFsVersionSupport(clientEnvironment.getVersion());
}
private void checkFrostFsVersionSupport(Version version) {
var localNodeInfo = netmapService.getLocalNodeInfo();
if (!localNodeInfo.getVersion().isSupported(version)) {
var msg = String.format("FrostFS %s is not supported.", localNodeInfo.getVersion());
System.out.println(msg);
throw new IllegalArgumentException(msg);
}
}
@Override
public Container getContainer(ContainerId cid) {
return containerService.getContainer(cid);
}
@Override
public List<ContainerId> listContainers() {
return containerService.listContainers();
}
@Override
public ContainerId createContainer(Container container) {
return containerService.createContainer(container);
}
@Override
public void deleteContainer(ContainerId cid) {
containerService.deleteContainer(cid);
}
@Override
public ObjectHeader getObjectHead(ContainerId containerId, ObjectId objectId) {
return objectService.getObjectHead(containerId, objectId);
}
@Override
public ObjectFrostFS getObject(ContainerId containerId, ObjectId objectId) {
return objectService.getObject(containerId, objectId);
}
@Override
public ObjectId putObject(PutObjectParameters parameters) {
return objectService.putObject(parameters);
}
@Override
public void deleteObject(ContainerId containerId, ObjectId objectId) {
objectService.deleteObject(containerId, objectId);
}
@Override
public Iterable<ObjectId> searchObjects(ContainerId cid, ObjectFilter... filters) {
return objectService.searchObjects(cid, filters);
}
@Override
public NetmapSnapshot getNetmapSnapshot() {
return netmapService.getNetmapSnapshot();
}
@Override
public NodeInfo getLocalNodeInfo() {
return netmapService.getLocalNodeInfo();
}
@Override
public NetworkSettings getNetworkSettings() {
return netmapService.getNetworkSettings();
}
@Override
public SessionToken createSession(long expiration) {
return sessionService.createSession(expiration);
}
public Types.SessionToken createSessionInternal(long expiration) {
return sessionService.createSessionInternal(expiration);
}
@Override
public ObjectId calculateObjectId(ObjectHeader header) {
return objectTools.calculateObjectId(header);
}
}