/* * 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 2011-2013 ForgeRock AS */ package org.opends.server.replication.common; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * This class holds information about a DS connected to the topology. This * information is to be exchanged through the replication protocol in * topology messages, to keep every member (RS or DS) of the topology aware of * the DS topology. */ public class DSInfo { // DS server id private int dsId = -1; // DS server url private String dsUrl; // Server id of the RS the DS is connected to private int rsId = -1; // DS Generation Id private long generationId = -1; // DS Status private ServerStatus status = ServerStatus.INVALID_STATUS; // Assured replication enabled on DS or not private boolean assuredFlag = false; // DS assured mode (relevant if assured replication enabled) private AssuredMode assuredMode = AssuredMode.SAFE_DATA_MODE; // DS safe data level (relevant if assured mode is safe data) private byte safeDataLevel = (byte) -1; // List of referrals URLs exported by the DS private List<String> refUrls = new ArrayList<String>(0); // Group id private byte groupId = (byte) -1; // Protocol version private short protocolVersion = -1; private Set<String> eclIncludes = new HashSet<String>(); private Set<String> eclIncludesForDeletes = new HashSet<String>(); /** * Creates a new instance of DSInfo with every given info. * * @param dsId * The DS id * @param dsUrl Url of the DS * @param rsId * The RS id the DS is connected to * @param generationId * The generation id the DS is using * @param status * The DS status * @param assuredFlag * DS assured replication enabled or not * @param assuredMode * DS assured mode * @param safeDataLevel * DS safe data level * @param groupId * DS group id * @param refUrls * DS exported referrals URLs * @param eclIncludes * The list of entry attributes to include in the ECL. * @param eclIncludesForDeletes * The list of entry attributes to include in the ECL for deletes. * @param protocolVersion * Protocol version supported by this server. */ public DSInfo(int dsId, String dsUrl, int rsId, long generationId, ServerStatus status, boolean assuredFlag, AssuredMode assuredMode, byte safeDataLevel, byte groupId, List<String> refUrls, Set<String> eclIncludes, Set<String> eclIncludesForDeletes, short protocolVersion) { this.dsId = dsId; this.dsUrl = dsUrl; this.rsId = rsId; this.generationId = generationId; this.status = status; this.assuredFlag = assuredFlag; this.assuredMode = assuredMode; this.safeDataLevel = safeDataLevel; this.groupId = groupId; this.refUrls = refUrls; this.eclIncludes = eclIncludes; this.eclIncludesForDeletes = eclIncludesForDeletes; this.protocolVersion = protocolVersion; } /** * Get the DS id. * @return the DS id */ public int getDsId() { return dsId; } /** * Get the DS URL. * @return the DS URL */ public String getDsUrl() { return dsUrl; } /** * Get the RS id the DS is connected to. * @return the RS id the DS is connected to */ public int getRsId() { return rsId; } /** * Get the generation id DS is using. * @return the generation id DS is using. */ public long getGenerationId() { return generationId; } /** * Get the DS status. * @return the DS status */ public ServerStatus getStatus() { return status; } /** * Tells if the DS has assured replication enabled. * @return True if the DS has assured replication enabled */ public boolean isAssured() { return assuredFlag; } /** * Get the DS assured mode (relevant if DS has assured replication enabled). * @return The DS assured mode */ public AssuredMode getAssuredMode() { return assuredMode; } /** * Get the DS safe data level (relevant if assured mode is safe data). * @return The DS safe data level */ public byte getSafeDataLevel() { return safeDataLevel; } /** * Get the DS group id. * @return The DS group id */ public byte getGroupId() { return groupId; } /** * Get the DS exported URLs for referrals. * @return The DS exported URLs for referrals */ public List<String> getRefUrls() { return refUrls; } /** * Get the entry attributes to be included in the ECL. * @return The entry attributes to be included in the ECL. */ public Set<String> getEclIncludes() { return eclIncludes; } /** * Get the entry attributes to be included in the ECL for delete operations. * @return The entry attributes to be included in the ECL. */ public Set<String> getEclIncludesForDeletes() { return eclIncludesForDeletes; } /** * Get the protocol version supported by this server. * Returns -1 when the protocol version is not known (too old version). * @return The protocol version. */ public short getProtocolVersion() { return protocolVersion; } /** * 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; } DSInfo dsInfo = (DSInfo) obj; return ((dsId == dsInfo.getDsId()) && (rsId == dsInfo.getRsId()) && (generationId == dsInfo.getGenerationId()) && (status == dsInfo.getStatus()) && (assuredFlag == dsInfo.isAssured()) && (assuredMode == dsInfo.getAssuredMode()) && (safeDataLevel == dsInfo.getSafeDataLevel()) && (groupId == dsInfo.getGroupId()) && (protocolVersion == dsInfo.getProtocolVersion()) && (refUrls.equals(dsInfo.getRefUrls())) && (((eclIncludes == null) && (dsInfo.getEclIncludes() == null)) || ((eclIncludes != null) && (eclIncludes.equals(dsInfo.getEclIncludes())))) && (((eclIncludesForDeletes == null) && (dsInfo.getEclIncludesForDeletes() == null)) || ((eclIncludesForDeletes != null) && (eclIncludesForDeletes.equals(dsInfo.getEclIncludesForDeletes()))))); } 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 = 73 * hash + this.dsId; hash = 73 * hash + this.rsId; hash = 73 * hash + (int) (this.generationId ^ (this.generationId >>> 32)); hash = 73 * hash + (this.status != null ? this.status.hashCode() : 0); hash = 73 * hash + (this.assuredFlag ? 1 : 0); hash = 73 * hash + (this.assuredMode != null ? this.assuredMode.hashCode() : 0); hash = 73 * hash + this.safeDataLevel; hash = 73 * hash + (this.refUrls != null ? this.refUrls.hashCode() : 0); hash = 73 * hash + (this.eclIncludes != null ? eclIncludes.hashCode() : 0); hash = 73 * hash + (this.eclIncludesForDeletes != null ? eclIncludesForDeletes.hashCode() : 0); hash = 73 * hash + this.groupId; hash = 73 * hash + this.protocolVersion; return hash; } /** * 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("\nDS id: "); sb.append(dsId); sb.append(" ; DS url: "); sb.append(dsUrl); sb.append(" ; RS id: "); sb.append(rsId); sb.append(" ; Generation id: "); sb.append(generationId); sb.append(" ; Status: "); sb.append(status); sb.append(" ; Assured replication: "); sb.append(assuredFlag); sb.append(" ; Assured mode: "); sb.append(assuredMode); sb.append(" ; Safe data level: "); sb.append(safeDataLevel); sb.append(" ; Group id: "); sb.append(groupId); sb.append(" ; Protocol version: "); sb.append(protocolVersion); sb.append(" ; Referral URLs: "); sb.append(refUrls); sb.append(" ; ECL Include: "); sb.append(eclIncludes); sb.append(" ; ECL Include for Deletes: "); sb.append(eclIncludesForDeletes); return sb.toString(); } }