use of io.atomix.primitive.session.impl.BlockingAwareSessionClient in project atomix by atomix.
the class DefaultRaftClient method sessionBuilder.
@Override
public RaftSessionClient.Builder sessionBuilder(String primitiveName, PrimitiveType primitiveType, ServiceConfig serviceConfig) {
return new RaftSessionClient.Builder() {
@Override
public SessionClient build() {
// Create a proxy builder that uses the session manager to open a session.
Supplier<CompletableFuture<SessionClient>> proxyFactory = () -> CompletableFuture.completedFuture(new DefaultRaftSessionClient(primitiveName, primitiveType, serviceConfig, partitionId, DefaultRaftClient.this.protocol, selectorManager, sessionManager, readConsistency, communicationStrategy, threadContextFactory.createContext(), minTimeout, maxTimeout));
SessionClient proxy;
ThreadContext context = threadContextFactory.createContext();
// If the recovery strategy is set to RECOVER, wrap the builder in a recovering proxy client.
if (recoveryStrategy == Recovery.RECOVER) {
proxy = new RecoveringSessionClient(clientId, partitionId, primitiveName, primitiveType, proxyFactory, context);
} else {
proxy = proxyFactory.get().join();
}
// If max retries is set, wrap the client in a retrying proxy client.
if (maxRetries > 0) {
proxy = new RetryingSessionClient(proxy, context, maxRetries, retryDelay);
}
return new BlockingAwareSessionClient(proxy, context);
}
};
}
use of io.atomix.primitive.session.impl.BlockingAwareSessionClient in project atomix by atomix.
the class PrimaryBackupClient method sessionBuilder.
/**
* Creates a new primary backup proxy session builder.
*
* @param primitiveName the primitive name
* @param primitiveType the primitive type
* @param serviceConfig the service configuration
* @return a new primary-backup proxy session builder
*/
public PrimaryBackupSessionClient.Builder sessionBuilder(String primitiveName, PrimitiveType primitiveType, ServiceConfig serviceConfig) {
byte[] configBytes = Serializer.using(primitiveType.namespace()).encode(serviceConfig);
return new PrimaryBackupSessionClient.Builder() {
@Override
public SessionClient build() {
Supplier<CompletableFuture<SessionClient>> proxyBuilder = () -> sessionIdService.nextSessionId().thenApply(sessionId -> new PrimaryBackupSessionClient(clientName, partitionId, sessionId, primitiveType, new PrimitiveDescriptor(primitiveName, primitiveType.name(), configBytes, numBackups, replication), clusterMembershipService, PrimaryBackupClient.this.protocol, primaryElection, threadContextFactory.createContext()));
SessionClient proxy;
ThreadContext context = threadContextFactory.createContext();
if (recovery == Recovery.RECOVER) {
proxy = new RecoveringSessionClient(clientName, partitionId, primitiveName, primitiveType, proxyBuilder, context);
} else {
proxy = Futures.get(proxyBuilder.get());
}
// If max retries is set, wrap the client in a retrying proxy client.
if (maxRetries > 0) {
proxy = new RetryingSessionClient(proxy, context, maxRetries, retryDelay);
}
return new BlockingAwareSessionClient(proxy, context);
}
};
}
Aggregations