/*
* 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 2007-2009 Sun Microsystems, Inc.
* Portions Copyright 2013-2016 ForgeRock AS.
*/
package org.opends.admin.ads;
import java.util.HashSet;
import java.util.Set;
import org.opends.server.types.HostPort;
/**
* The object of this class represent a Replica, i.e. a suffix in a given server instance.
*
* Note: this does not represent a replication server.
*/
public class ReplicaDescriptor
{
private SuffixDescriptor suffix;
/** Number of entries held by this replica. */
private int nbEntries = -1;
private ServerDescriptor server;
private final Set replicationServers = new HashSet<>();
/** @see InstallerHelper#getReplicationId(Set) */
private int serverId = -1;
private int missingChanges = -1;
private long ageOfOldestMissingChange = -1;
private String backendId;
private Set objectClasses;
/**
* Returns the number of entries contained in the replica.
* @return the number of entries contained in the replica.
*/
public int getEntries()
{
return nbEntries;
}
/**
* Returns whether this replica is replicated or not.
* @return {@code true} if the replica is replicated, {@code false} otherwise.
*/
public boolean isReplicated()
{
return serverId != -1;
}
/**
* Returns whether replication is replicated on this server or not.
* @return {@code true} if replication is enabled, {@code false} otherwise.
*/
public boolean isReplicationEnabled()
{
return server.isReplicationEnabled();
}
/**
* Sets the number of entries contained in the replica.
* @param nbEntries the number of entries contained in the replica.
*/
public void setEntries(int nbEntries)
{
this.nbEntries = nbEntries;
}
/**
* Returns the ServerDescriptor object associated with the server where this
* replica is located.
* @return the ServerDescriptor object associated with the server where this
* replica is located.
*/
public ServerDescriptor getServer()
{
return server;
}
/**
* Sets the server where this replica is located.
* @param server the ServerDescriptor object associated with the server where
* this replica is located.
*/
public void setServer(ServerDescriptor server)
{
this.server = server;
}
/**
* Returns the SuffixDescriptor object representing the suffix topology
* across servers to which this replica belongs.
* @return the SuffixDescriptor object representing the suffix topology
* across servers to which this replica belongs.
*/
public SuffixDescriptor getSuffix()
{
return suffix;
}
/**
* Sets the SuffixDescriptor object representing the suffix topology
* across servers to which this replica belongs.
* @param suffix the SuffixDescriptor object representing the suffix topology
* across servers to which this replica belongs.
*/
public void setSuffix(SuffixDescriptor suffix)
{
this.suffix = suffix;
}
/**
* Returns a set containing the String representation of the replication
* servers that are defined in the replication domain for this replica.
* @return a set containing the String representation of the replication
* servers that are defined in the replication domain for this replica.
*/
public Set getReplicationServers()
{
return new HashSet<>(replicationServers);
}
/**
* Sets the list of replication servers (in their String representation) that
* are defined in the replication domain for this replica.
* @param replicationServers the list of replication servers (in their String
* representation) that are defined in the replication domain for this
* replica.
*/
public void setReplicationServers(Set replicationServers)
{
this.replicationServers.clear();
this.replicationServers.addAll(replicationServers);
}
/**
* Returns the server id for the replication domain associated with this replica.
*
* @return the server id for the replication domain associated with this replica.
*/
public int getServerId()
{
return serverId;
}
/**
* Sets the server id for the replication domain associated with this replica.
*
* @param serverId
* the server id for the replication domain associated with this replica.
*/
public void setServerId(int serverId)
{
this.serverId = serverId;
}
/**
* Returns the age of the oldest missing change.
* @return the age of the oldest missing change.
*/
public long getAgeOfOldestMissingChange()
{
return ageOfOldestMissingChange;
}
/**
* Sets the age of the oldest missing change.
* @param ageOfOldestMissingChange the age of the oldest missing change.
*/
public void setAgeOfOldestMissingChange(long ageOfOldestMissingChange)
{
this.ageOfOldestMissingChange = ageOfOldestMissingChange;
}
/**
* Returns the number of missing changes.
* @return the number of missing changes.
*/
public int getMissingChanges()
{
return missingChanges;
}
/**
* Sets the number of missing changes.
* @param missingChanges the number of missing changes.
*/
public void setMissingChanges(int missingChanges)
{
this.missingChanges = missingChanges;
}
/**
* Returns the name of the backend where this replica is defined.
* @return the name of the backend where this replica is defined.
*/
public String getBackendId()
{
return backendId;
}
/**
* Sets the name of the backend where this replica is defined.
* @param backendId the name of the backend.
*/
public void setBackendId(String backendId)
{
this.backendId = backendId;
}
/**
* Returns object classes of the backend attached to this replica.
*
* @return object classes of the backend attached to this replica.
*/
public Set getObjectClasses()
{
return objectClasses;
}
/**
* Sets the object classes of the backend attached to this replica.
*
* @param objectClasses
* object classes of the backend attached to this replica.
*/
public void setObjectClasses(Set objectClasses)
{
this.objectClasses = objectClasses;
}
@Override
public String toString()
{
return getClass().getSimpleName()
+ "(domain-name=" + suffix.getDN()
+ ", server-id=" + serverId
+ ", host-name=" + server.getReplicationServerHostPort()
+ ", nb-entries=" + nbEntries
+ ", rs-port=" + server.getReplicationServerPort()
+ ", missing-changes=" + missingChanges
+ ", age-of-oldest-missing-change=" + ageOfOldestMissingChange
+ ")";
}
}