| | |
| | | * |
| | | * |
| | | * Copyright 2007-2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2011 ForgeRock AS |
| | | * Portions copyright 2011-2013 ForgeRock AS |
| | | */ |
| | | package org.opends.server.replication.plugin; |
| | | |
| | |
| | | import java.util.SortedSet; |
| | | import java.util.TreeSet; |
| | | |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationAddListener; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.server.ConfigurationDeleteListener; |
| | | import org.opends.server.admin.server.ServerManagedObject; |
| | | import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.AssuredType; |
| | | import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.IsolationPolicy; |
| | | import org.opends.server.admin.std.server.ExternalChangelogDomainCfg; |
| | |
| | | */ |
| | | public class DomainFakeCfg implements ReplicationDomainCfg |
| | | { |
| | | private DN baseDn; |
| | | private DN baseDN; |
| | | private int serverId; |
| | | private SortedSet<String> replicationServers; |
| | | private long heartbeatInterval = 1000; |
| | | |
| | | // By default changeTimeHeartbeatInterval is set to 0 in order to disable |
| | | // this feature and not kill the tests that expect to receive special |
| | | // messages. |
| | | /** |
| | | * By default changeTimeHeartbeatInterval is set to 0 in order to disable this |
| | | * feature and not kill the tests that expect to receive special messages. |
| | | */ |
| | | private long changeTimeHeartbeatInterval = 0; |
| | | |
| | | private IsolationPolicy policy = IsolationPolicy.REJECT_ALL_UPDATES; |
| | | |
| | | // Is assured mode enabled or not ? |
| | | private boolean assured = false; |
| | | // Assured sub mode (used when assured is true) |
| | | /** Assured sub mode (used when assured is true) */ |
| | | private AssuredType assuredType = AssuredType.NOT_ASSURED; |
| | | // Safe Data level (used when assuredType is safe data) |
| | | /** Safe Data level (used when assuredType is safe data) */ |
| | | private int assuredSdLevel = 1; |
| | | // Timeout (in milliseconds) when waiting for acknowledgments |
| | | /** Timeout (in milliseconds) when waiting for acknowledgments */ |
| | | private long assuredTimeout = 1000; |
| | | // Group id |
| | | /** Group id */ |
| | | private int groupId = 1; |
| | | // Referrals urls to be published to other servers of the topology |
| | | SortedSet<String> refUrls = new TreeSet<String>(); |
| | | /** Referrals urls to be published to other servers of the topology */ |
| | | private SortedSet<String> refUrls = new TreeSet<String>(); |
| | | |
| | | private SortedSet<String> fractionalExcludes = new TreeSet<String>(); |
| | | private SortedSet<String> fractionalIncludes = new TreeSet<String>(); |
| | | |
| | | private ExternalChangelogDomainCfg eclCfg = |
| | | new ExternalChangelogDomainFakeCfg(true, null, null); |
| | | private int windowSize = 100; |
| | | |
| | | /** |
| | | * Creates a new Domain with the provided information |
| | | * (assured mode disabled, default group id) |
| | | */ |
| | | public DomainFakeCfg(DN baseDn, int serverId, SortedSet<String> replServers) |
| | | public DomainFakeCfg(DN baseDN, int serverId, SortedSet<String> replServers) |
| | | { |
| | | this.baseDn = baseDn; |
| | | this.baseDN = baseDN; |
| | | this.serverId = serverId; |
| | | this.replicationServers = replServers; |
| | | } |
| | |
| | | * Creates a new Domain with the provided information |
| | | * (with some fractional configuration provided) |
| | | */ |
| | | public DomainFakeCfg(DN baseDn, int serverId, SortedSet<String> replServers, |
| | | public DomainFakeCfg(DN baseDN, int serverId, SortedSet<String> replServers, |
| | | List<String> fractionalExcludes, List<String> fractionalIncludes) |
| | | { |
| | | this(baseDn, serverId, replServers); |
| | | this(baseDN, serverId, replServers); |
| | | if (fractionalExcludes != null) |
| | | { |
| | | for (String str : fractionalExcludes) |
| | |
| | | * Creates a new Domain with the provided information |
| | | * (assured mode disabled, group id provided) |
| | | */ |
| | | public DomainFakeCfg(DN baseDn, int serverId, SortedSet<String> replServers, |
| | | public DomainFakeCfg(DN baseDN, int serverId, SortedSet<String> replServers, |
| | | int groupId) |
| | | { |
| | | this(baseDn, serverId, replServers); |
| | | this(baseDN, serverId, replServers); |
| | | this.groupId = groupId; |
| | | } |
| | | |
| | |
| | | * Creates a new Domain with the provided information |
| | | * (assured mode info provided as well as group id) |
| | | */ |
| | | public DomainFakeCfg(DN baseDn, int serverId, SortedSet<String> replServers, |
| | | public DomainFakeCfg(DN baseDN, int serverId, SortedSet<String> replServers, |
| | | AssuredType assuredType, int assuredSdLevel, int groupId, |
| | | long assuredTimeout, SortedSet<String> refUrls) |
| | | { |
| | | this(baseDn, serverId, replServers); |
| | | this(baseDN, serverId, replServers); |
| | | switch(assuredType) |
| | | { |
| | | case NOT_ASSURED: |
| | | assured = false; |
| | | break; |
| | | case SAFE_DATA: |
| | | case SAFE_READ: |
| | | assured = true; |
| | | this.assuredType = assuredType; |
| | | break; |
| | | } |
| | |
| | | /** |
| | | * Create a new Domain from the provided arguments. |
| | | * |
| | | * @param string The baseDN in string form. |
| | | * @param baseDN The baseDN in string form. |
| | | * @param serverId The serverID. |
| | | * @param replServer The replication Server that will be used. |
| | | * |
| | | * @throws DirectoryException When the provided string is not a valid DN. |
| | | */ |
| | | public DomainFakeCfg(String string, int serverId, String replServer) |
| | | public DomainFakeCfg(String baseDN, int serverId, String replServer) |
| | | throws DirectoryException |
| | | { |
| | | this.replicationServers = new TreeSet<String>(); |
| | | this.replicationServers.add(replServer); |
| | | this.baseDn = DN.decode(string); |
| | | this.baseDN = DN.decode(baseDN); |
| | | this.serverId = serverId; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public void addChangeListener( |
| | | ConfigurationChangeListener<ReplicationDomainCfg> listener) |
| | | { |
| | | |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public Class<? extends ReplicationDomainCfg> configurationClass() |
| | | { |
| | | return null; |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public long getHeartbeatInterval() |
| | | { |
| | | return heartbeatInterval ; |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public long getChangetimeHeartbeatInterval() |
| | | { |
| | | return changeTimeHeartbeatInterval; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void setChangetimeHeartbeatInterval(long changeTimeHeartbeatInterval) |
| | | { |
| | | this.changeTimeHeartbeatInterval = changeTimeHeartbeatInterval; |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public long getMaxReceiveDelay() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public int getMaxReceiveQueue() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public long getMaxSendDelay() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public int getMaxSendQueue() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public DN getBaseDN() |
| | | { |
| | | return baseDn; |
| | | return baseDN; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public SortedSet<String> getReplicationServer() |
| | | { |
| | | return replicationServers; |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public int getServerId() |
| | | { |
| | | return serverId; |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public int getWindowSize() |
| | | { |
| | | return 100; |
| | | return this.windowSize; |
| | | } |
| | | |
| | | public void setWindowSize(int windowSize) |
| | | { |
| | | this.windowSize = windowSize; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public void removeChangeListener( |
| | | ConfigurationChangeListener<ReplicationDomainCfg> listener) |
| | | { |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public DN dn() |
| | | { |
| | | try |
| | |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ServerManagedObject<? extends Configuration> managedObject() { |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * Set the heartbeat interval. |
| | | * |
| | | * @param interval |
| | | */ |
| | | public void setHeartbeatInterval(long interval) |
| | | { |
| | |
| | | /** |
| | | * Get the isolation policy. |
| | | */ |
| | | @Override |
| | | public IsolationPolicy getIsolationPolicy() |
| | | { |
| | | return policy; |
| | |
| | | this.policy = policy; |
| | | } |
| | | |
| | | @Override |
| | | public int getAssuredSdLevel() |
| | | { |
| | | return assuredSdLevel; |
| | | } |
| | | |
| | | @Override |
| | | public int getGroupId() |
| | | { |
| | | return groupId; |
| | | } |
| | | |
| | | @Override |
| | | public long getAssuredTimeout() |
| | | { |
| | | return assuredTimeout; |
| | | } |
| | | |
| | | @Override |
| | | public AssuredType getAssuredType() |
| | | { |
| | | return assuredType; |
| | | } |
| | | |
| | | public boolean isAssured() |
| | | { |
| | | return assured; |
| | | } |
| | | |
| | | @Override |
| | | public SortedSet<String> getReferralsUrl() |
| | | { |
| | | return refUrls; |
| | | } |
| | | |
| | | @Override |
| | | public SortedSet<String> getFractionalExclude() |
| | | { |
| | | return fractionalExcludes; |
| | | } |
| | | |
| | | @Override |
| | | public SortedSet<String> getFractionalInclude() |
| | | { |
| | | return fractionalIncludes; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isSolveConflicts() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | public long getInitializationHeartbeatInterval() |
| | | { |
| | | return 180; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public int getInitializationWindowSize() |
| | | { |
| | | return 100; |
| | | } |
| | | |
| | | public boolean hasExternalChangelogDomain() { return true; } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Gets the ECL Domain if it is present. |
| | | * |
| | |
| | | * If the ECL Domain does not exist or it could not |
| | | * be successfully decoded. |
| | | */ |
| | | @Override |
| | | public ExternalChangelogDomainCfg getExternalChangelogDomain() |
| | | throws ConfigException |
| | | { return eclCfg; } |
| | |
| | | /** |
| | | * Sets the ECL Domain if it is present. |
| | | * |
| | | * @return Returns the ECL Domain if it is present. |
| | | * @throws ConfigException |
| | | * If the ECL Domain does not exist or it could not |
| | | * be successfully decoded. |
| | |
| | | ConfigurationDeleteListener<ExternalChangelogDomainCfg> listener) |
| | | {} |
| | | |
| | | @Override |
| | | public boolean isLogChangenumber() |
| | | { |
| | | return true; |
| | |
| | | * historical information necessary to solve conflicts. |
| | | * |
| | | * @return Returns the value of the "conflicts-historical-purge-delay" property. |
| | | **/ |
| | | */ |
| | | @Override |
| | | public long getConflictsHistoricalPurgeDelay() |
| | | { |
| | | return 1440; |