Search in sources :

Example 1 with PrimitiveProtocol

use of io.atomix.primitive.PrimitiveProtocol in project atomix by atomix.

the class ConsistentTreeMapProxyBuilder method buildAsync.

@Override
@SuppressWarnings("unchecked")
public CompletableFuture<ConsistentTreeMap<V>> buildAsync() {
    PrimitiveProtocol protocol = protocol();
    return managementService.getPartitionService().getPartitionGroup(protocol).getPartition(name()).getPrimitiveClient().newProxy(name(), primitiveType(), protocol).connect().thenApply(proxy -> {
        ConsistentTreeMapProxy rawMap = new ConsistentTreeMapProxy(proxy);
        Serializer serializer = serializer();
        return new TranscodingAsyncConsistentTreeMap<V, byte[]>(rawMap, value -> value == null ? null : serializer.encode(value), bytes -> serializer.decode(bytes)).sync();
    });
}
Also used : PrimitiveManagementService(io.atomix.primitive.PrimitiveManagementService) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) ConsistentTreeMapBuilder(io.atomix.core.map.ConsistentTreeMapBuilder) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) CompletableFuture(java.util.concurrent.CompletableFuture) Serializer(io.atomix.utils.serializer.Serializer) AsyncConsistentTreeMap(io.atomix.core.map.AsyncConsistentTreeMap) ConsistentTreeMap(io.atomix.core.map.ConsistentTreeMap) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) Serializer(io.atomix.utils.serializer.Serializer)

Example 2 with PrimitiveProtocol

use of io.atomix.primitive.PrimitiveProtocol in project atomix by atomix.

the class AtomicCounterMapProxyBuilder method buildAsync.

@Override
@SuppressWarnings("unchecked")
public CompletableFuture<AtomicCounterMap<K>> buildAsync() {
    PrimitiveProtocol protocol = protocol();
    return managementService.getPartitionService().getPartitionGroup(protocol).getPartition(name()).getPrimitiveClient().newProxy(name(), primitiveType(), protocol).connect().thenApply(proxy -> {
        AtomicCounterMapProxy rawMap = new AtomicCounterMapProxy(proxy);
        Serializer serializer = serializer();
        return new TranscodingAsyncAtomicCounterMap<K, String>(rawMap, key -> BaseEncoding.base16().encode(serializer.encode(key)), string -> serializer.decode(BaseEncoding.base16().decode(string))).sync();
    });
}
Also used : BaseEncoding(com.google.common.io.BaseEncoding) PrimitiveManagementService(io.atomix.primitive.PrimitiveManagementService) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) CompletableFuture(java.util.concurrent.CompletableFuture) Serializer(io.atomix.utils.serializer.Serializer) AtomicCounterMap(io.atomix.core.map.AtomicCounterMap) AtomicCounterMapBuilder(io.atomix.core.map.AtomicCounterMapBuilder) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) Serializer(io.atomix.utils.serializer.Serializer)

Example 3 with PrimitiveProtocol

use of io.atomix.primitive.PrimitiveProtocol in project atomix by atomix.

the class DocumentTreeProxyBuilder method buildAsync.

@Override
@SuppressWarnings("unchecked")
public CompletableFuture<DocumentTree<V>> buildAsync() {
    PrimitiveProtocol protocol = protocol();
    PartitionGroup<?> partitions = managementService.getPartitionService().getPartitionGroup(protocol);
    Map<PartitionId, CompletableFuture<AsyncDocumentTree<V>>> trees = Maps.newConcurrentMap();
    for (Partition partition : partitions.getPartitions()) {
        trees.put(partition.id(), partition.getPrimitiveClient().newProxy(name(), primitiveType(), protocol).connect().thenApply(proxy -> {
            DocumentTreeProxy rawTree = new DocumentTreeProxy(proxy);
            return new TranscodingAsyncDocumentTree<>(rawTree, serializer()::encode, serializer()::decode);
        }));
    }
    Partitioner<DocumentPath> partitioner = key -> {
        int bucket = (key == null) ? 0 : Math.abs(Hashing.murmur3_32().hashUnencodedChars(key.pathElements().size() == 1 ? key.pathElements().get(0) : key.pathElements().get(1)).asInt()) % NUM_BUCKETS;
        return partitions.getPartitionIds().get(Hashing.consistentHash(bucket, partitions.getPartitionIds().size()));
    };
    return Futures.allOf(Lists.newArrayList(trees.values())).thenApply(t -> {
        AsyncDocumentTree<V> tree = new PartitionedAsyncDocumentTree<>(name(), Maps.transformValues(trees, v -> v.getNow(null)), partitioner);
        if (relaxedReadConsistency()) {
            tree = new CachingAsyncDocumentTree<>(tree);
        }
        return tree.sync();
    });
}
Also used : Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) AsyncDocumentTree(io.atomix.core.tree.AsyncDocumentTree) Hashing(com.google.common.hash.Hashing) DocumentPath(io.atomix.core.tree.DocumentPath) CompletableFuture(java.util.concurrent.CompletableFuture) Maps(com.google.common.collect.Maps) PartitionGroup(io.atomix.primitive.partition.PartitionGroup) DocumentTree(io.atomix.core.tree.DocumentTree) PartitionId(io.atomix.primitive.partition.PartitionId) DocumentTreeBuilder(io.atomix.core.tree.DocumentTreeBuilder) Lists(com.google.common.collect.Lists) Partition(io.atomix.primitive.partition.Partition) PrimitiveManagementService(io.atomix.primitive.PrimitiveManagementService) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) Map(java.util.Map) Partitioner(io.atomix.primitive.partition.Partitioner) Futures(io.atomix.utils.concurrent.Futures) Partition(io.atomix.primitive.partition.Partition) PartitionId(io.atomix.primitive.partition.PartitionId) CompletableFuture(java.util.concurrent.CompletableFuture) DocumentPath(io.atomix.core.tree.DocumentPath) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol)

Example 4 with PrimitiveProtocol

use of io.atomix.primitive.PrimitiveProtocol in project atomix by atomix.

the class ConsistentMapProxyBuilder method buildAsync.

@Override
@SuppressWarnings("unchecked")
public CompletableFuture<ConsistentMap<K, V>> buildAsync() {
    PrimitiveProtocol protocol = protocol();
    PartitionGroup<?> partitions = managementService.getPartitionService().getPartitionGroup(protocol);
    Map<PartitionId, CompletableFuture<AsyncConsistentMap<byte[], byte[]>>> maps = Maps.newConcurrentMap();
    for (Partition partition : partitions.getPartitions()) {
        maps.put(partition.id(), partition.getPrimitiveClient().newProxy(name(), primitiveType(), protocol).connect().thenApply(proxy -> new TranscodingAsyncConsistentMap<>(new ConsistentMapProxy(proxy), BaseEncoding.base16()::encode, BaseEncoding.base16()::decode, Function.identity(), Function.identity())));
    }
    Partitioner<byte[]> partitioner = key -> {
        int bucket = Math.abs(Hashing.murmur3_32().hashBytes(key).asInt()) % NUM_BUCKETS;
        return partitions.getPartitionIds().get(Hashing.consistentHash(bucket, partitions.getPartitionIds().size()));
    };
    return Futures.allOf(Lists.newArrayList(maps.values())).thenApply(m -> {
        AsyncConsistentMap<byte[], byte[]> partitionedMap = new PartitionedAsyncConsistentMap<>(name(), Maps.transformValues(maps, v -> v.getNow(null)), partitioner);
        Serializer serializer = serializer();
        AsyncConsistentMap<K, V> map = new TranscodingAsyncConsistentMap<>(partitionedMap, key -> serializer.encode(key), bytes -> serializer.decode(bytes), value -> value == null ? null : serializer.encode(value), bytes -> serializer.decode(bytes));
        if (!nullValues()) {
            map = new NotNullAsyncConsistentMap<>(map);
        }
        if (relaxedReadConsistency()) {
            map = new CachingAsyncConsistentMap<>(map);
        }
        if (readOnly()) {
            map = new UnmodifiableAsyncConsistentMap<>(map);
        }
        return map.sync();
    });
}
Also used : BaseEncoding(com.google.common.io.BaseEncoding) ConsistentMapBuilder(io.atomix.core.map.ConsistentMapBuilder) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) Hashing(com.google.common.hash.Hashing) CompletableFuture(java.util.concurrent.CompletableFuture) Maps(com.google.common.collect.Maps) PartitionGroup(io.atomix.primitive.partition.PartitionGroup) Function(java.util.function.Function) PartitionId(io.atomix.primitive.partition.PartitionId) Lists(com.google.common.collect.Lists) AsyncConsistentMap(io.atomix.core.map.AsyncConsistentMap) Partition(io.atomix.primitive.partition.Partition) PrimitiveManagementService(io.atomix.primitive.PrimitiveManagementService) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) ConsistentMap(io.atomix.core.map.ConsistentMap) Map(java.util.Map) Partitioner(io.atomix.primitive.partition.Partitioner) Serializer(io.atomix.utils.serializer.Serializer) Futures(io.atomix.utils.concurrent.Futures) Partition(io.atomix.primitive.partition.Partition) PartitionId(io.atomix.primitive.partition.PartitionId) CompletableFuture(java.util.concurrent.CompletableFuture) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) Serializer(io.atomix.utils.serializer.Serializer)

Example 5 with PrimitiveProtocol

use of io.atomix.primitive.PrimitiveProtocol in project atomix by atomix.

the class LeaderElectorProxyBuilder method buildAsync.

@Override
@SuppressWarnings("unchecked")
public CompletableFuture<LeaderElector<T>> buildAsync() {
    PrimitiveProtocol protocol = protocol();
    PartitionGroup<?> partitions = managementService.getPartitionService().getPartitionGroup(protocol);
    Map<PartitionId, CompletableFuture<AsyncLeaderElector<T>>> electors = Maps.newConcurrentMap();
    for (Partition partition : partitions.getPartitions()) {
        electors.put(partition.id(), newLeaderElector(partition.getPrimitiveClient().newProxy(name(), primitiveType(), protocol)));
    }
    Partitioner<String> partitioner = topic -> partitions.getPartition(topic).id();
    return Futures.allOf(new ArrayList<>(electors.values())).thenApply(e -> new PartitionedAsyncLeaderElector<T>(name(), Maps.transformValues(electors, v -> v.getNow(null)), partitioner).sync());
}
Also used : LeaderElectorBuilder(io.atomix.core.election.LeaderElectorBuilder) AsyncLeaderElector(io.atomix.core.election.AsyncLeaderElector) LeaderElector(io.atomix.core.election.LeaderElector) Preconditions.checkNotNull(com.google.common.base.Preconditions.checkNotNull) CompletableFuture(java.util.concurrent.CompletableFuture) Maps(com.google.common.collect.Maps) PartitionGroup(io.atomix.primitive.partition.PartitionGroup) PartitionId(io.atomix.primitive.partition.PartitionId) ArrayList(java.util.ArrayList) Partition(io.atomix.primitive.partition.Partition) PrimitiveProxy(io.atomix.primitive.proxy.PrimitiveProxy) PrimitiveManagementService(io.atomix.primitive.PrimitiveManagementService) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol) Map(java.util.Map) Partitioner(io.atomix.primitive.partition.Partitioner) Futures(io.atomix.utils.concurrent.Futures) Partition(io.atomix.primitive.partition.Partition) CompletableFuture(java.util.concurrent.CompletableFuture) ArrayList(java.util.ArrayList) PartitionId(io.atomix.primitive.partition.PartitionId) PrimitiveProtocol(io.atomix.primitive.PrimitiveProtocol)

Aggregations

Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)6 PrimitiveManagementService (io.atomix.primitive.PrimitiveManagementService)6 PrimitiveProtocol (io.atomix.primitive.PrimitiveProtocol)6 CompletableFuture (java.util.concurrent.CompletableFuture)6 Serializer (io.atomix.utils.serializer.Serializer)4 Maps (com.google.common.collect.Maps)3 BaseEncoding (com.google.common.io.BaseEncoding)3 Partition (io.atomix.primitive.partition.Partition)3 PartitionGroup (io.atomix.primitive.partition.PartitionGroup)3 PartitionId (io.atomix.primitive.partition.PartitionId)3 Partitioner (io.atomix.primitive.partition.Partitioner)3 Futures (io.atomix.utils.concurrent.Futures)3 Map (java.util.Map)3 Lists (com.google.common.collect.Lists)2 Hashing (com.google.common.hash.Hashing)2 AsyncLeaderElector (io.atomix.core.election.AsyncLeaderElector)1 LeaderElector (io.atomix.core.election.LeaderElector)1 LeaderElectorBuilder (io.atomix.core.election.LeaderElectorBuilder)1 AsyncConsistentMap (io.atomix.core.map.AsyncConsistentMap)1 AsyncConsistentTreeMap (io.atomix.core.map.AsyncConsistentTreeMap)1