Skip to content

Commit

Permalink
Make primitive builders type safe with respect to supported protocols.
Browse files Browse the repository at this point in the history
  • Loading branch information
kuujo committed Jul 12, 2018
1 parent 9715ddb commit 050b99d
Show file tree
Hide file tree
Showing 179 changed files with 1,809 additions and 1,102 deletions.
352 changes: 0 additions & 352 deletions core/src/main/java/io/atomix/core/PrimitivesService.java

Large diffs are not rendered by default.

Expand Up @@ -17,21 +17,30 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;


/** /**
* Distributed cyclic barrier builder. * Distributed cyclic barrier builder.
*/ */
public abstract class DistributedCyclicBarrierBuilder public abstract class DistributedCyclicBarrierBuilder
extends PrimitiveBuilder<DistributedCyclicBarrierBuilder, DistributedCyclicBarrierConfig, DistributedCyclicBarrier> { extends PrimitiveBuilder<DistributedCyclicBarrierBuilder, DistributedCyclicBarrierConfig, DistributedCyclicBarrier>
implements ProxyCompatibleBuilder<DistributedCyclicBarrierBuilder> {


protected Runnable barrierAction = () -> {}; protected Runnable barrierAction = () -> {};


public DistributedCyclicBarrierBuilder(String name, DistributedCyclicBarrierConfig config, PrimitiveManagementService managementService) { protected DistributedCyclicBarrierBuilder(String name, DistributedCyclicBarrierConfig config, PrimitiveManagementService managementService) {
super(DistributedCyclicBarrierType.instance(), name, config, managementService); super(DistributedCyclicBarrierType.instance(), name, config, managementService);
} }


@Override
public DistributedCyclicBarrierBuilder withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}

/** /**
* Sets the action to run when the barrier is tripped. * Sets the action to run when the barrier is tripped.
* *
Expand Down
Expand Up @@ -17,13 +17,23 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for AtomicCounter. * Builder for AtomicCounter.
*/ */
public abstract class AtomicCounterBuilder public abstract class AtomicCounterBuilder
extends PrimitiveBuilder<AtomicCounterBuilder, AtomicCounterConfig, AtomicCounter> { extends PrimitiveBuilder<AtomicCounterBuilder, AtomicCounterConfig, AtomicCounter>
public AtomicCounterBuilder(String name, AtomicCounterConfig config, PrimitiveManagementService managementService) { implements ProxyCompatibleBuilder<AtomicCounterBuilder> {

protected AtomicCounterBuilder(String name, AtomicCounterConfig config, PrimitiveManagementService managementService) {
super(AtomicCounterType.instance(), name, config, managementService); super(AtomicCounterType.instance(), name, config, managementService);
} }

@Override
public AtomicCounterBuilder withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
Expand Up @@ -17,13 +17,30 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;
import io.atomix.primitive.protocol.counter.CounterCompatibleBuilder;
import io.atomix.primitive.protocol.counter.CounterProtocol;


/** /**
* Builder for DistributedCounter. * Builder for DistributedCounter.
*/ */
public abstract class DistributedCounterBuilder public abstract class DistributedCounterBuilder
extends PrimitiveBuilder<DistributedCounterBuilder, DistributedCounterConfig, DistributedCounter> { extends PrimitiveBuilder<DistributedCounterBuilder, DistributedCounterConfig, DistributedCounter>
public DistributedCounterBuilder(String name, DistributedCounterConfig config, PrimitiveManagementService managementService) { implements ProxyCompatibleBuilder<DistributedCounterBuilder>, CounterCompatibleBuilder<DistributedCounterBuilder> {

protected DistributedCounterBuilder(String name, DistributedCounterConfig config, PrimitiveManagementService managementService) {
super(DistributedCounterType.instance(), name, config, managementService); super(DistributedCounterType.instance(), name, config, managementService);
} }

@Override
public DistributedCounterBuilder withProtocol(CounterProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}

@Override
public DistributedCounterBuilder withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
Expand Up @@ -22,8 +22,8 @@
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.GossipProtocol; import io.atomix.primitive.protocol.GossipProtocol;
import io.atomix.primitive.protocol.PrimitiveProtocol; import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.StateMachineReplicationProtocol; import io.atomix.primitive.protocol.ProxyProtocol;
import io.atomix.primitive.protocol.counter.CounterProtocolProvider; import io.atomix.primitive.protocol.counter.CounterProtocol;
import io.atomix.primitive.service.ServiceConfig; import io.atomix.primitive.service.ServiceConfig;
import io.atomix.utils.concurrent.Futures; import io.atomix.utils.concurrent.Futures;
import io.atomix.utils.config.ConfigurationException; import io.atomix.utils.config.ConfigurationException;
Expand All @@ -42,15 +42,15 @@ public DefaultDistributedCounterBuilder(String name, DistributedCounterConfig co
public CompletableFuture<DistributedCounter> buildAsync() { public CompletableFuture<DistributedCounter> buildAsync() {
PrimitiveProtocol protocol = protocol(); PrimitiveProtocol protocol = protocol();
if (protocol instanceof GossipProtocol) { if (protocol instanceof GossipProtocol) {
if (protocol instanceof CounterProtocolProvider) { if (protocol instanceof CounterProtocol) {
return managementService.getPrimitiveCache().getPrimitive(name, () -> CompletableFuture.completedFuture( return managementService.getPrimitiveCache().getPrimitive(name, () -> CompletableFuture.completedFuture(
new GossipDistributedCounter(name, (GossipProtocol) protocol, ((CounterProtocolProvider) protocol) new GossipDistributedCounter(name, (GossipProtocol) protocol, ((CounterProtocol) protocol)
.newCounterProtocol(name, managementService)))) .newCounterDelegate(name, managementService))))
.thenApply(AsyncDistributedCounter::sync); .thenApply(AsyncDistributedCounter::sync);
} else { } else {
return Futures.exceptionalFuture(new UnsupportedOperationException("Counter is not supported by the provided gossip protocol")); return Futures.exceptionalFuture(new UnsupportedOperationException("Counter is not supported by the provided gossip protocol"));
} }
} else if (protocol instanceof StateMachineReplicationProtocol) { } else if (protocol instanceof ProxyProtocol) {
return newProxy(AtomicCounterService.class, new ServiceConfig()) return newProxy(AtomicCounterService.class, new ServiceConfig())
.thenCompose(proxy -> new AtomicCounterProxy(proxy, managementService.getPrimitiveRegistry()).connect()) .thenCompose(proxy -> new AtomicCounterProxy(proxy, managementService.getPrimitiveRegistry()).connect())
.thenApply(DelegatingDistributedCounter::new) .thenApply(DelegatingDistributedCounter::new)
Expand Down
Expand Up @@ -21,7 +21,7 @@
import io.atomix.primitive.PrimitiveType; import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.protocol.GossipProtocol; import io.atomix.primitive.protocol.GossipProtocol;
import io.atomix.primitive.protocol.PrimitiveProtocol; import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.counter.CounterProtocol; import io.atomix.primitive.protocol.counter.CounterDelegate;


import java.time.Duration; import java.time.Duration;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
Expand All @@ -32,9 +32,9 @@
public class GossipDistributedCounter implements AsyncDistributedCounter { public class GossipDistributedCounter implements AsyncDistributedCounter {
private final String name; private final String name;
private final GossipProtocol protocol; private final GossipProtocol protocol;
private final CounterProtocol counter; private final CounterDelegate counter;


public GossipDistributedCounter(String name, GossipProtocol protocol, CounterProtocol counter) { public GossipDistributedCounter(String name, GossipProtocol protocol, CounterDelegate counter) {
this.name = name; this.name = name;
this.protocol = protocol; this.protocol = protocol;
this.counter = counter; this.counter = counter;
Expand Down
Expand Up @@ -17,13 +17,23 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for constructing new {@link AsyncLeaderElection} instances. * Builder for constructing new {@link AsyncLeaderElection} instances.
*/ */
public abstract class LeaderElectionBuilder<T> public abstract class LeaderElectionBuilder<T>
extends PrimitiveBuilder<LeaderElectionBuilder<T>, LeaderElectionConfig, LeaderElection<T>> { extends PrimitiveBuilder<LeaderElectionBuilder<T>, LeaderElectionConfig, LeaderElection<T>>
implements ProxyCompatibleBuilder<LeaderElectionBuilder<T>> {

protected LeaderElectionBuilder(String name, LeaderElectionConfig config, PrimitiveManagementService managementService) { protected LeaderElectionBuilder(String name, LeaderElectionConfig config, PrimitiveManagementService managementService) {
super(LeaderElectionType.instance(), name, config, managementService); super(LeaderElectionType.instance(), name, config, managementService);
} }

@Override
public LeaderElectionBuilder<T> withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
Expand Up @@ -17,13 +17,23 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for constructing new {@link AsyncLeaderElector} instances. * Builder for constructing new {@link AsyncLeaderElector} instances.
*/ */
public abstract class LeaderElectorBuilder<T> public abstract class LeaderElectorBuilder<T>
extends PrimitiveBuilder<LeaderElectorBuilder<T>, LeaderElectorConfig, LeaderElector<T>> { extends PrimitiveBuilder<LeaderElectorBuilder<T>, LeaderElectorConfig, LeaderElector<T>>
implements ProxyCompatibleBuilder<LeaderElectorBuilder<T>> {

protected LeaderElectorBuilder(String name, LeaderElectorConfig config, PrimitiveManagementService managementService) { protected LeaderElectorBuilder(String name, LeaderElectorConfig config, PrimitiveManagementService managementService) {
super(LeaderElectorType.instance(), name, config, managementService); super(LeaderElectorType.instance(), name, config, managementService);
} }

@Override
public LeaderElectorBuilder<T> withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
Expand Up @@ -17,13 +17,23 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for AtomicIdGenerator. * Builder for AtomicIdGenerator.
*/ */
public abstract class AtomicIdGeneratorBuilder public abstract class AtomicIdGeneratorBuilder
extends PrimitiveBuilder<AtomicIdGeneratorBuilder, AtomicIdGeneratorConfig, AtomicIdGenerator> { extends PrimitiveBuilder<AtomicIdGeneratorBuilder, AtomicIdGeneratorConfig, AtomicIdGenerator>
implements ProxyCompatibleBuilder<AtomicIdGeneratorBuilder> {

protected AtomicIdGeneratorBuilder(String name, AtomicIdGeneratorConfig config, PrimitiveManagementService managementService) { protected AtomicIdGeneratorBuilder(String name, AtomicIdGeneratorConfig config, PrimitiveManagementService managementService) {
super(AtomicIdGeneratorType.instance(), name, config, managementService); super(AtomicIdGeneratorType.instance(), name, config, managementService);
} }

@Override
public AtomicIdGeneratorBuilder withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
Expand Up @@ -28,7 +28,7 @@
import io.atomix.primitive.PrimitiveType; import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.PrimitiveTypeRegistry; import io.atomix.primitive.PrimitiveTypeRegistry;
import io.atomix.primitive.partition.PartitionService; import io.atomix.primitive.partition.PartitionService;
import io.atomix.primitive.protocol.StateMachineReplicationProtocol; import io.atomix.primitive.protocol.ProxyProtocol;
import io.atomix.primitive.proxy.ProxyClient; import io.atomix.primitive.proxy.ProxyClient;
import io.atomix.primitive.service.ServiceConfig; import io.atomix.primitive.service.ServiceConfig;
import io.atomix.utils.serializer.Namespaces; import io.atomix.utils.serializer.Namespaces;
Expand Down Expand Up @@ -110,7 +110,7 @@ public PrimitiveInfo getPrimitive(String name) {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public CompletableFuture<PrimitiveRegistry> start() { public CompletableFuture<PrimitiveRegistry> start() {
StateMachineReplicationProtocol protocol = partitionService.getSystemPartitionGroup().newProtocol(); ProxyProtocol protocol = partitionService.getSystemPartitionGroup().newProtocol();
ProxyClient proxy = protocol.newProxy( ProxyClient proxy = protocol.newProxy(
"primitives", "primitives",
AtomicMapType.instance(), AtomicMapType.instance(),
Expand Down
Expand Up @@ -31,11 +31,14 @@
import io.atomix.core.transaction.TransactionState; import io.atomix.core.transaction.TransactionState;
import io.atomix.core.transaction.Transactional; import io.atomix.core.transaction.Transactional;
import io.atomix.primitive.DistributedPrimitive; import io.atomix.primitive.DistributedPrimitive;
import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.PrimitiveType; import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.partition.PartitionGroup; import io.atomix.primitive.partition.PartitionGroup;
import io.atomix.primitive.protocol.PrimitiveProtocol; import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.PrimitiveProtocolConfig; import io.atomix.primitive.protocol.PrimitiveProtocolConfig;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;
import io.atomix.utils.concurrent.Futures; import io.atomix.utils.concurrent.Futures;
import io.atomix.utils.serializer.Namespace; import io.atomix.utils.serializer.Namespace;
import io.atomix.utils.serializer.Namespaces; import io.atomix.utils.serializer.Namespaces;
Expand Down Expand Up @@ -346,9 +349,9 @@ private CompletableFuture<Void> completeParticipant(
return Futures.exceptionalFuture(new TransactionException("Failed to locate partition group for participant " + participantInfo.name())); return Futures.exceptionalFuture(new TransactionException("Failed to locate partition group for participant " + participantInfo.name()));
} }


DistributedPrimitive primitive = primitiveType.newBuilder(participantInfo.name(), primitiveType.newConfig(), managementService) PrimitiveBuilder builder = primitiveType.newBuilder(participantInfo.name(), primitiveType.newConfig(), managementService);
.withProtocol(partitionGroup.newProtocol()) ((ProxyCompatibleBuilder) builder).withProtocol(partitionGroup.newProtocol());
.build(); DistributedPrimitive primitive = builder.build();
return completionFunction.apply((Transactional<?>) primitive); return completionFunction.apply((Transactional<?>) primitive);
} }


Expand All @@ -359,7 +362,7 @@ public CompletableFuture<TransactionService> start() {
PrimitiveProtocol protocol = protocolType.newProtocol(((PrimitiveProtocolConfig) protocolType.newConfig()).setSerializer(SERIALIZER)); PrimitiveProtocol protocol = protocolType.newProtocol(((PrimitiveProtocolConfig) protocolType.newConfig()).setSerializer(SERIALIZER));
return AtomicMapType.<TransactionId, TransactionInfo>instance() return AtomicMapType.<TransactionId, TransactionInfo>instance()
.newBuilder("atomix-transactions", new AtomicMapConfig(), managementService) .newBuilder("atomix-transactions", new AtomicMapConfig(), managementService)
.withProtocol(protocol) .withProtocol((ProxyProtocol) protocol)
.withCacheEnabled() .withCacheEnabled()
.buildAsync() .buildAsync()
.thenApply(transactions -> { .thenApply(transactions -> {
Expand Down
15 changes: 13 additions & 2 deletions core/src/main/java/io/atomix/core/list/DistributedListBuilder.java
Expand Up @@ -17,14 +17,25 @@


import io.atomix.core.collection.DistributedCollectionBuilder; import io.atomix.core.collection.DistributedCollectionBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for distributed queue. * Builder for distributed queue.
* *
* @param <E> queue element type * @param <E> queue element type
*/ */
public abstract class DistributedListBuilder<E> extends DistributedCollectionBuilder<DistributedListBuilder<E>, DistributedListConfig, DistributedList<E>, E> { public abstract class DistributedListBuilder<E>
public DistributedListBuilder(String name, DistributedListConfig config, PrimitiveManagementService managementService) { extends DistributedCollectionBuilder<DistributedListBuilder<E>, DistributedListConfig, DistributedList<E>, E>
implements ProxyCompatibleBuilder<DistributedListBuilder<E>> {

protected DistributedListBuilder(String name, DistributedListConfig config, PrimitiveManagementService managementService) {
super(DistributedListType.instance(), name, config, managementService); super(DistributedListType.instance(), name, config, managementService);
} }

@Override
public DistributedListBuilder<E> withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
14 changes: 12 additions & 2 deletions core/src/main/java/io/atomix/core/lock/AtomicLockBuilder.java
Expand Up @@ -17,13 +17,23 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for AtomicIdGenerator. * Builder for AtomicIdGenerator.
*/ */
public abstract class AtomicLockBuilder public abstract class AtomicLockBuilder
extends PrimitiveBuilder<AtomicLockBuilder, AtomicLockConfig, AtomicLock> { extends PrimitiveBuilder<AtomicLockBuilder, AtomicLockConfig, AtomicLock>
public AtomicLockBuilder(String name, AtomicLockConfig config, PrimitiveManagementService managementService) { implements ProxyCompatibleBuilder<AtomicLockBuilder> {

protected AtomicLockBuilder(String name, AtomicLockConfig config, PrimitiveManagementService managementService) {
super(AtomicLockType.instance(), name, config, managementService); super(AtomicLockType.instance(), name, config, managementService);
} }

@Override
public AtomicLockBuilder withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
14 changes: 12 additions & 2 deletions core/src/main/java/io/atomix/core/lock/DistributedLockBuilder.java
Expand Up @@ -17,13 +17,23 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for DistributedLock. * Builder for DistributedLock.
*/ */
public abstract class DistributedLockBuilder public abstract class DistributedLockBuilder
extends PrimitiveBuilder<DistributedLockBuilder, DistributedLockConfig, DistributedLock> { extends PrimitiveBuilder<DistributedLockBuilder, DistributedLockConfig, DistributedLock>
public DistributedLockBuilder(String name, DistributedLockConfig config, PrimitiveManagementService managementService) { implements ProxyCompatibleBuilder<DistributedLockBuilder> {

protected DistributedLockBuilder(String name, DistributedLockConfig config, PrimitiveManagementService managementService) {
super(DistributedLockType.instance(), name, config, managementService); super(DistributedLockType.instance(), name, config, managementService);
} }

@Override
public DistributedLockBuilder withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }
14 changes: 12 additions & 2 deletions core/src/main/java/io/atomix/core/map/AtomicCounterMapBuilder.java
Expand Up @@ -17,13 +17,23 @@


import io.atomix.primitive.PrimitiveBuilder; import io.atomix.primitive.PrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService; import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.protocol.ProxyCompatibleBuilder;
import io.atomix.primitive.protocol.ProxyProtocol;


/** /**
* Builder for AtomicCounterMap. * Builder for AtomicCounterMap.
*/ */
public abstract class AtomicCounterMapBuilder<K> public abstract class AtomicCounterMapBuilder<K>
extends PrimitiveBuilder<AtomicCounterMapBuilder<K>, AtomicCounterMapConfig, AtomicCounterMap<K>> { extends PrimitiveBuilder<AtomicCounterMapBuilder<K>, AtomicCounterMapConfig, AtomicCounterMap<K>>
public AtomicCounterMapBuilder(String name, AtomicCounterMapConfig config, PrimitiveManagementService managementService) { implements ProxyCompatibleBuilder<AtomicCounterMapBuilder<K>> {

protected AtomicCounterMapBuilder(String name, AtomicCounterMapConfig config, PrimitiveManagementService managementService) {
super(AtomicCounterMapType.instance(), name, config, managementService); super(AtomicCounterMapType.instance(), name, config, managementService);
} }

@Override
public AtomicCounterMapBuilder<K> withProtocol(ProxyProtocol protocol) {
return withProtocol((PrimitiveProtocol) protocol);
}
} }

0 comments on commit 050b99d

Please sign in to comment.