All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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