com.yahoo.vespa.hosted.provision.lb.Real Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of node-repository Show documentation
Show all versions of node-repository Show documentation
Keeps track of node assignment in a multi-application setup.
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.lb;
import ai.vespa.http.DomainName;
import com.google.common.net.InetAddresses;
import java.util.Objects;
/**
* Represents a server behind a load balancer.
*
* @author mpolden
*/
public class Real implements Comparable {
public static final int defaultPort = 4443;
private final DomainName hostname;
private final String ipAddress;
private final int port;
public Real(DomainName hostname, String ipAddress) {
this(hostname, ipAddress, defaultPort);
}
public Real(DomainName hostname, String ipAddress, int port) {
this.hostname = hostname;
this.ipAddress = requireIpAddress(ipAddress);
if (port < 1 || port > 65535) {
throw new IllegalArgumentException("port number must be >= 1 and <= 65535");
}
this.port = port;
}
/** The hostname of this real */
public DomainName hostname() {
return hostname;
}
/** Target IP address for this real */
public String ipAddress() {
return ipAddress;
}
/** Target port for this real */
public int port() {
return port;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Real real = (Real) o;
return port == real.port &&
Objects.equals(hostname, real.hostname) &&
Objects.equals(ipAddress, real.ipAddress);
}
@Override
public int hashCode() {
return Objects.hash(hostname, ipAddress, port);
}
@Override
public String toString() {
return "real server " + hostname + " (" + ipAddress + ":" + port + ")";
}
private static String requireIpAddress(String ipAddress) {
Objects.requireNonNull(ipAddress, "ipAddress must be non-null");
try {
InetAddresses.forString(ipAddress);
return ipAddress;
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("ipAddress must be a valid IP address", e);
}
}
@Override
public int compareTo(Real that) {
return hostname.compareTo(that.hostname());
}
}