use of io.atomix.protocols.raft.proxy.impl.DefaultRaftProxy in project atomix by atomix.
the class DefaultRaftClient method newProxy.
@Override
public PrimitiveProxy newProxy(String primitiveName, PrimitiveType primitiveType, RaftProtocol primitiveProtocol) {
// Create a proxy builder that uses the session manager to open a session.
Supplier<PrimitiveProxy> proxyFactory = () -> new DefaultRaftProxy(primitiveName, primitiveType, DefaultRaftClient.this.protocol, selectorManager, sessionManager, primitiveProtocol.readConsistency(), primitiveProtocol.communicationStrategy(), threadContextFactory.createContext(), primitiveProtocol.minTimeout(), primitiveProtocol.maxTimeout());
PrimitiveProxy proxy;
// If the recovery strategy is set to RECOVER, wrap the builder in a recovering proxy client.
if (primitiveProtocol.recoveryStrategy() == Recovery.RECOVER) {
proxy = new RecoveringPrimitiveProxy(clientId, primitiveName, primitiveType, proxyFactory, threadContextFactory.createContext());
} else {
proxy = proxyFactory.get();
}
// If max retries is set, wrap the client in a retrying proxy client.
if (primitiveProtocol.maxRetries() > 0) {
proxy = new RetryingPrimitiveProxy(proxy, threadContextFactory.createContext(), primitiveProtocol.maxRetries(), primitiveProtocol.retryDelay());
}
// Default the executor to use the configured thread pool executor and create a blocking aware proxy client.
Executor executor = primitiveProtocol.executor() != null ? primitiveProtocol.executor() : threadContextFactory.createContext();
return new BlockingAwarePrimitiveProxy(proxy, executor);
}
Aggregations