package org.infinispan.server.hotrod.configuration;
import org.infinispan.commons.configuration.Builder;
import org.infinispan.configuration.cache.LockingConfigurationBuilder;
import org.infinispan.configuration.cache.StateTransferConfigurationBuilder;
import org.infinispan.configuration.cache.SyncConfigurationBuilder;
import org.infinispan.server.core.configuration.ProtocolServerConfigurationBuilder;
/**
* HotRodServerConfigurationBuilder.
*
* @author Tristan Tarrant
* @since 5.3
*/
public class HotRodServerConfigurationBuilder extends ProtocolServerConfigurationBuilder<HotRodServerConfiguration, HotRodServerConfigurationBuilder> implements
Builder<HotRodServerConfiguration>, HotRodServerChildConfigurationBuilder {
private final AuthenticationConfigurationBuilder authentication = new AuthenticationConfigurationBuilder(this);
private String proxyHost;
private int proxyPort = -1;
private long topologyLockTimeout = 10000L;
private long topologyReplTimeout = 10000L;
private boolean topologyAwaitInitialTransfer = true;
private boolean topologyStateTransfer = true;
public HotRodServerConfigurationBuilder() {
super(11222);
}
@Override
public HotRodServerConfigurationBuilder self() {
return this;
}
@Override
public AuthenticationConfigurationBuilder authentication() {
return authentication;
}
/**
* Sets the external address of this node, i.e. the address which clients will connect to
*/
@Override
public HotRodServerConfigurationBuilder proxyHost(String proxyHost) {
this.proxyHost = proxyHost;
return this;
}
/**
* Sets the external port of this node, i.e. the port which clients will connect to
*/
@Override
public HotRodServerConfigurationBuilder proxyPort(int proxyPort) {
this.proxyPort = proxyPort;
return this;
}
/**
* Configures the lock acquisition timeout for the topology cache. See {@link LockingConfigurationBuilder#lockAcquisitionTimeout(long)}.
* Defaults to 10 seconds
*/
@Override
public HotRodServerConfigurationBuilder topologyLockTimeout(long topologyLockTimeout) {
this.topologyLockTimeout = topologyLockTimeout;
return this;
}
/**
* Configures the replication timeout for the topology cache. See {@link SyncConfigurationBuilder#replTimeout(long)}.
* Defaults to 10 seconds
*/
@Override
public HotRodServerConfigurationBuilder topologyReplTimeout(long topologyReplTimeout) {
this.topologyReplTimeout = topologyReplTimeout;
return this;
}
/**
* Configures whether to enable waiting for initial state transfer for the topology cache. See {@link
* StateTransferConfigurationBuilder#awaitInitialTransfer(boolean)}
*/
@Override
public HotRodServerConfigurationBuilder topologyAwaitInitialTransfer(boolean topologyAwaitInitialTransfer) {
this.topologyAwaitInitialTransfer = topologyAwaitInitialTransfer;
return this;
}
/**
* Configures whether to enable state transfer for the topology cache. If disabled, a {@link
* org.infinispan.persistence.cluster.ClusterLoader} will be used to lazily retrieve topology information from the
* other nodes. Defaults to true.
*/
@Override
public HotRodServerConfigurationBuilder topologyStateTransfer(boolean topologyStateTransfer) {
this.topologyStateTransfer = topologyStateTransfer;
return this;
}
@Override
public HotRodServerConfiguration create() {
return new HotRodServerConfiguration(defaultCacheName, proxyHost == null ? host : proxyHost, proxyPort < 0 ? port : proxyPort, topologyLockTimeout, topologyReplTimeout, topologyAwaitInitialTransfer, topologyStateTransfer, name, host, port, idleTimeout,
recvBufSize, sendBufSize, ssl.create(), tcpNoDelay, workerThreads, authentication.create(), ignoredCaches, startTransport);
}
@Override
public HotRodServerConfigurationBuilder read(HotRodServerConfiguration template) {
super.read(template);
this.proxyHost = template.proxyHost();
this.proxyPort = template.proxyPort();
this.topologyLockTimeout = template.topologyLockTimeout();
this.topologyReplTimeout = template.topologyReplTimeout();
this.topologyAwaitInitialTransfer = template.topologyAwaitInitialTransfer();
this.topologyStateTransfer = template.topologyStateTransfer();
return this;
}
@Override
public void validate() {
super.validate();
authentication.validate();
}
public HotRodServerConfiguration build(boolean validate) {
if (validate) {
validate();
}
return create();
}
@Override
public HotRodServerConfiguration build() {
return build(true);
}
}