/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2012-2014 ForgeRock AS */ package org.opends.server.replication.common; /** * This class holds information about a RS connected to the topology. This * information is to be exchanged through the replication protocol in topology * messages, to keep every member DS of the topology aware of the RS topology. * <p> * This class is immutable. */ public final class RSInfo { /** Server id of the RS. */ private final int rsServerId; /** Generation Id of the RS. */ private final long generationId; /** Group id of the RS. */ private final byte groupId; /** * The weight of the RS. * <p> * It is important to keep the default value to 1 so that it is used as * default value for a RS using protocol V3: this default value will be used * in algorithms that use weight. */ private final int weight; /** The server URL of the RS. */ private final String rsServerURL; /** * Creates a new instance of RSInfo with every given info. * * @param rsServerId The RS id * @param rsServerURL Url of the RS * @param generationId The generation id the RS is using * @param groupId RS group id * @param weight RS weight */ public RSInfo(int rsServerId, String rsServerURL, long generationId, byte groupId, int weight) { this.rsServerId = rsServerId; this.rsServerURL = rsServerURL; this.generationId = generationId; this.groupId = groupId; this.weight = weight; } /** * Get the RS id. * @return the RS id */ public int getId() { return rsServerId; } /** * Get the generation id RS is using. * @return the generation id RS is using. */ public long getGenerationId() { return generationId; } /** * Get the RS group id. * @return The RS group id */ public byte getGroupId() { return groupId; } /** * Get the RS weight. * @return The RS weight */ public int getWeight() { return weight; } /** * Test if the passed object is equal to this one. * @param obj The object to test * @return True if both objects are equal */ @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj.getClass() != getClass()) { return false; } final RSInfo rsInfo = (RSInfo) obj; return rsServerId == rsInfo.getId() && generationId == rsInfo.getGenerationId() && groupId == rsInfo.getGroupId() && weight == rsInfo.getWeight(); } /** * Computes hash code for this object instance. * @return Hash code for this object instance. */ @Override public int hashCode() { int hash = 7; hash = 17 * hash + this.rsServerId; hash = 17 * hash + (int) (this.generationId ^ (this.generationId >>> 32)); hash = 17 * hash + this.groupId; hash = 17 * hash + this.weight; return hash; } /** * Gets the server URL. * @return the serverUrl */ public String getServerUrl() { return rsServerURL; } /** * Returns a string representation of the DS info. * @return A string representation of the DS info */ @Override public String toString() { return "RS id: " + rsServerId + " ; RS URL: " + rsServerURL + " ; Generation id: " + generationId + " ; Group id: " + groupId + " ; Weight: " + weight; } }