/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * 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. *
* 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. *
* 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; } }