/*
 * JBoss, Home of Professional Open Source.
 * Copyright 2014 Red Hat, Inc., and individual contributors
 * as indicated by the @author tags.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.undertow.server.handlers.proxy.mod_cluster;

import io.undertow.UndertowLogger;

import java.net.URI;
import java.net.URISyntaxException;

The node configuration.
Author:Nabil Benothman, Emanuel Muckenhuber
/** * The node configuration. * * @author <a href="mailto:nbenothm@redhat.com">Nabil Benothman</a> * @author Emanuel Muckenhuber */
public class NodeConfig {
The JVM Route.
/** * The JVM Route. */
private final String jvmRoute;
The connection URI.
/** * The connection URI. */
private final URI connectionURI;
The balancer configuration to use.
/** * The balancer configuration to use. */
private final String balancer;
The failover domain.
/** * The failover domain. */
private final String domain;
Tell how to flush the packets. On: Send immediately, Auto wait for flushwait time before sending, Off don't flush. Default: "Off"
/** * Tell how to flush the packets. On: Send immediately, Auto wait for flushwait time before sending, Off don't flush. * Default: "Off" */
private boolean flushPackets;
Time to wait before flushing. Value in milliseconds. Default: 10
/** * Time to wait before flushing. Value in milliseconds. Default: 10 */
private final int flushwait;
Time to wait for a pong answer to a ping. 0 means we don't try to ping before sending. Value in seconds Default: 10 (10_000 in milliseconds)
/** * Time to wait for a pong answer to a ping. 0 means we don't try to ping before sending. Value in seconds Default: 10 * (10_000 in milliseconds) */
private final int ping;
max time in milliseconds to life for connection above smax. Default 60 seconds (60,000 in milliseconds).
/** * max time in milliseconds to life for connection above smax. Default 60 seconds (60,000 in milliseconds). */
private final long ttl;
Max time the proxy will wait for the backend connection. Default 0 no timeout value in seconds.
/** * Max time the proxy will wait for the backend connection. Default 0 no timeout value in seconds. */
private final int timeout; // Proxy connection pool defaults private final int maxConnections; private final int cacheConnections; private final int requestQueueSize; private final boolean queueNewRequests; private final int waitWorker; NodeConfig(NodeBuilder b, final URI connectionURI) { this.connectionURI = connectionURI; balancer = b.balancer; domain = b.domain; jvmRoute = b.jvmRoute; flushPackets = b.flushPackets; flushwait = b.flushwait; ping = b.ping; ttl = b.ttl; timeout = b.timeout; maxConnections = b.maxConnections; cacheConnections = b.cacheConnections; requestQueueSize = b.requestQueueSize; queueNewRequests = b.queueNewRequests; waitWorker = b.waitWorker; UndertowLogger.ROOT_LOGGER.nodeConfigCreated(this.connectionURI, balancer, domain, jvmRoute, flushPackets, flushwait, ping, ttl, timeout, maxConnections, cacheConnections, requestQueueSize, queueNewRequests); }
Get the connection URI.
Returns:the connection URI
/** * Get the connection URI. * * @return the connection URI */
public URI getConnectionURI() { return connectionURI; }
Getter for domain
Returns:the domain
/** * Getter for domain * * @return the domain */
public String getDomain() { return this.domain; }
Getter for flushwait
Returns:the flushwait
/** * Getter for flushwait * * @return the flushwait */
public int getFlushwait() { return this.flushwait; }
Getter for ping
Returns:the ping
/** * Getter for ping * * @return the ping */
public int getPing() { return this.ping; }
Getter for smax
Returns:the smax
/** * Getter for smax * * @return the smax */
public int getSmax() { return this.cacheConnections; }
Getter for ttl
Returns:the ttl
/** * Getter for ttl * * @return the ttl */
public long getTtl() { return this.ttl; }
Getter for timeout
Returns:the timeout
/** * Getter for timeout * * @return the timeout */
public int getTimeout() { return this.timeout; }
Getter for balancer
Returns:the balancer
/** * Getter for balancer * * @return the balancer */
public String getBalancer() { return this.balancer; } public boolean isFlushPackets() { return flushPackets; } public void setFlushPackets(boolean flushPackets) { this.flushPackets = flushPackets; } public String getJvmRoute() { return jvmRoute; }
Get the maximum connection limit for a nodes thread-pool.
Returns:the max connections limit
/** * Get the maximum connection limit for a nodes thread-pool. * * @return the max connections limit */
public int getMaxConnections() { return maxConnections; }
Get the amount of connections which should be kept alive in the connection pool.
Returns:the number of cached connections
/** * Get the amount of connections which should be kept alive in the connection pool. * * @return the number of cached connections */
public int getCacheConnections() { return cacheConnections; }
Get the max queue size for requests.
Returns:the queue size for requests
/** * Get the max queue size for requests. * * @return the queue size for requests */
public int getRequestQueueSize() { return requestQueueSize; }
Flag indicating whether requests without a session can be queued.
Returns:true if requests without a session id can be queued
/** * Flag indicating whether requests without a session can be queued. * * @return true if requests without a session id can be queued */
public boolean isQueueNewRequests() { return queueNewRequests; } public static NodeBuilder builder(ModCluster modCluster) { return new NodeBuilder(modCluster); } public static class NodeBuilder { private String jvmRoute; private String balancer = "mycluster"; private String domain = null; private String type = "http"; private String hostname; private int port; private boolean flushPackets = false; private int flushwait = 10; private int ping = 10000; private int maxConnections; private int cacheConnections; private int requestQueueSize; private boolean queueNewRequests; private long ttl; private int timeout = 0; private int waitWorker = -1; NodeBuilder(final ModCluster modCluster) { this.maxConnections = modCluster.getMaxConnections(); this.cacheConnections = modCluster.getCacheConnections(); this.requestQueueSize = modCluster.getRequestQueueSize(); this.queueNewRequests = modCluster.isQueueNewRequests(); this.ttl = modCluster.getTtl(); } public NodeBuilder setHostname(String hostname) { this.hostname = hostname; return this; } public NodeBuilder setPort(int port) { this.port = port; return this; } public NodeBuilder setType(String type) { this.type = type; return this; } public NodeBuilder setBalancer(String balancer) { this.balancer = balancer; return this; } public NodeBuilder setDomain(String domain) { this.domain = domain; return this; } public NodeBuilder setJvmRoute(String jvmRoute) { this.jvmRoute = jvmRoute; return this; } public NodeBuilder setFlushPackets(boolean flushPackets) { this.flushPackets = flushPackets; return this; } public NodeBuilder setFlushwait(int flushwait) { this.flushwait = flushwait; return this; } public NodeBuilder setPing(int ping) { this.ping = ping; return this; } public NodeBuilder setSmax(int smax) { this.cacheConnections = smax; return this; } public NodeBuilder setMaxConnections(int maxConnections) { this.maxConnections = maxConnections; return this; } public NodeBuilder setCacheConnections(int cacheConnections) { this.cacheConnections = cacheConnections; return this; } public NodeBuilder setRequestQueueSize(int requestQueueSize) { this.requestQueueSize = requestQueueSize; return this; } public NodeBuilder setQueueNewRequests(boolean queueNewRequests) { this.queueNewRequests = queueNewRequests; return this; } public NodeBuilder setTtl(long ttl) { this.ttl = ttl; return this; } public NodeBuilder setTimeout(int timeout) { this.timeout = timeout; return this; } public NodeConfig build() throws URISyntaxException { final URI uri = new URI(type, null, hostname, port, "/", "", ""); return new NodeConfig(this, uri); } public void setWaitWorker(int waitWorker) { this.waitWorker = waitWorker; } public int getWaitWorker() { return waitWorker; } } }