/* * 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 * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * 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 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. 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 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. */ public class RSInfo { // Server id of the RS private int id = -1; // Generation Id of the RS private long generationId = -1; // Group id of the RS private byte groupId = (byte) -1; // 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 int weight = 1; // The server URL of the RS private String serverUrl = null; /** * Creates a new instance of RSInfo with every given info. * * @param id The RS id * @param serverUrl 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 id, String serverUrl, long generationId, byte groupId, int weight) { this.id = id; this.serverUrl = serverUrl; this.generationId = generationId; this.groupId = groupId; this.weight = weight; } /** * Get the RS id. * @return the RS id */ public int getId() { return id; } /** * 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) { if (obj.getClass() != this.getClass()) { return false; } RSInfo rsInfo = (RSInfo) obj; return ((id == rsInfo.getId()) && (generationId == rsInfo.getGenerationId()) && (groupId == rsInfo.getGroupId()) && (weight == rsInfo.getWeight()) && (((serverUrl == null) && (rsInfo.getServerUrl() == null)) || ((serverUrl != null) && (rsInfo.getServerUrl() != null) && (serverUrl.equals(rsInfo.getServerUrl()))))); } else { return false; } } /** * 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.id; hash = 17 * hash + (int) (this.generationId ^ (this.generationId >>> 32)); hash = 17 * hash + this.groupId; hash = 17 * hash + this.weight; hash = 17 * hash + (this.serverUrl != null ? this.serverUrl.hashCode() : 0); return hash; } /** * Gets the server URL. * @return the serverUrl */ public String getServerUrl() { return serverUrl; } /** * Returns a string representation of the DS info. * @return A string representation of the DS info */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\nId: "); sb.append(id); sb.append(" ; Server URL: "); sb.append(serverUrl); sb.append(" ; Generation id: "); sb.append(generationId); sb.append(" ; Group id: "); sb.append(groupId); sb.append(" ; Weight: "); sb.append(weight); return sb.toString(); } }