
io.activej.crdt.storage.cluster.AbstractDiscoveryService Maven / Gradle / Ivy
package io.activej.crdt.storage.cluster;
import io.activej.common.builder.AbstractBuilder;
import io.activej.common.exception.MalformedDataException;
import io.activej.crdt.storage.ICrdtStorage;
import io.activej.reactor.AbstractReactive;
import io.activej.reactor.Reactor;
import io.activej.rpc.client.sender.strategy.RpcStrategy;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.function.Function;
import static io.activej.crdt.json.JsonCodecs.ofPartitionId;
import static io.activej.crdt.json.JsonCodecs.ofRendezvousPartitionGroup;
import static io.activej.json.JsonCodecs.ofList;
import static io.activej.json.JsonUtils.fromJsonBytes;
public abstract class AbstractDiscoveryService extends AbstractReactive
implements IDiscoveryService {
protected @Nullable Function rpcProvider;
protected @Nullable Function> crdtProvider;
protected AbstractDiscoveryService(Reactor reactor) {
super(reactor);
}
@SuppressWarnings("unchecked")
public abstract class Builder, D extends AbstractDiscoveryService>
extends AbstractBuilder {
public final Self withCrdtProvider(Function> crdtProvider) {
AbstractDiscoveryService.this.crdtProvider = crdtProvider;
return (Self) this;
}
public final Self withRpcProvider(Function rpcProvider) {
AbstractDiscoveryService.this.rpcProvider = rpcProvider;
return (Self) this;
}
@Override
protected D doBuild() {
return (D) AbstractDiscoveryService.this;
}
}
protected final RendezvousPartitionScheme parseScheme(byte[] bytes) throws MalformedDataException {
List> partitionGroups = fromJsonBytes(
ofList(ofRendezvousPartitionGroup(ofPartitionId())),
bytes);
RendezvousPartitionScheme.Builder schemeBuilder = RendezvousPartitionScheme.builder(partitionGroups)
.withPartitionIdGetter(PartitionId::getId);
if (rpcProvider != null) schemeBuilder.withRpcProvider(rpcProvider);
if (crdtProvider != null) schemeBuilder.withCrdtProvider(crdtProvider);
return schemeBuilder.build();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy