Search in sources :

Example 1 with DocumentTree

use of io.atomix.core.tree.DocumentTree 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)

Aggregations

Preconditions.checkNotNull (com.google.common.base.Preconditions.checkNotNull)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1 Hashing (com.google.common.hash.Hashing)1 AsyncDocumentTree (io.atomix.core.tree.AsyncDocumentTree)1 DocumentPath (io.atomix.core.tree.DocumentPath)1 DocumentTree (io.atomix.core.tree.DocumentTree)1 DocumentTreeBuilder (io.atomix.core.tree.DocumentTreeBuilder)1 PrimitiveManagementService (io.atomix.primitive.PrimitiveManagementService)1 PrimitiveProtocol (io.atomix.primitive.PrimitiveProtocol)1 Partition (io.atomix.primitive.partition.Partition)1 PartitionGroup (io.atomix.primitive.partition.PartitionGroup)1 PartitionId (io.atomix.primitive.partition.PartitionId)1 Partitioner (io.atomix.primitive.partition.Partitioner)1 Futures (io.atomix.utils.concurrent.Futures)1 Map (java.util.Map)1 CompletableFuture (java.util.concurrent.CompletableFuture)1