opends/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java
@@ -22,7 +22,7 @@ * CDDL HEADER END * * * Copyright 2006-2009 Sun Microsystems, Inc. * Copyright 2006-2010 Sun Microsystems, Inc. */ package org.opends.server.replication.plugin; @@ -37,6 +37,7 @@ import org.opends.server.types.ConfigChangeResult; import org.opends.server.types.DN; import org.opends.server.types.ResultCode; import java.util.HashSet; /** * This class specifies the external changelog feature for a replication @@ -63,8 +64,12 @@ this.isEnabled = configuration.isEnabled(); configuration.addChangeListener(this); if (configuration.getECLInclude() != null) { HashSet<String> attrNames = new HashSet<String>(0); for (AttributeType eclInclude : configuration.getECLInclude()) domain.addEclInclude(eclInclude.getNormalizedPrimaryName()); attrNames.add(eclInclude.getNormalizedPrimaryName()); domain.setEclInclude(domain.getServerId(), attrNames); } } @@ -90,9 +95,10 @@ } this.isEnabled = configuration.isEnabled(); if (configuration.getECLInclude() != null) for (AttributeType eclInclude : configuration.getECLInclude()) domain.addEclInclude(eclInclude.getNormalizedPrimaryName()); HashSet<String> attrNames = new HashSet<String>(0); for (AttributeType eclInclude : configuration.getECLInclude()) attrNames.add(eclInclude.getNormalizedPrimaryName()); domain.setEclInclude(domain.getServerId(), attrNames); return new ConfigChangeResult(ResultCode.SUCCESS, false); } @@ -103,6 +109,12 @@ public ConfigChangeResult applyConfigurationChange( ExternalChangelogDomainCfg configuration) { // How it works with dsconfig : // - after dsconfig set-external-changelog-domain-prop --set ecl-include:xx // configuration contains only attribute xx // - after dsconfig set-external-changelog-domain-prop --add ecl-include:xx // configuration contains attribute xx and the previous list // Hence in all cases, it is the complete list of attributes. try { if (domain==null) @@ -114,9 +126,10 @@ } this.isEnabled = configuration.isEnabled(); if (configuration.getECLInclude() != null) for (AttributeType eclInclude : configuration.getECLInclude()) domain.addEclInclude(eclInclude.getNormalizedPrimaryName()); HashSet<String> attrNames = new HashSet<String>(0); for (AttributeType eclInclude : configuration.getECLInclude()) attrNames.add(eclInclude.getNormalizedPrimaryName()); domain.setEclInclude(domain.getServerId(), attrNames); return new ConfigChangeResult(ResultCode.SUCCESS, false); } catch (Exception e) opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
@@ -1568,7 +1568,7 @@ domain.getAssuredMode(), domain.getAssuredSdLevel()); startSessionMsg.setEclIncludes( domain.getEclInclude()); domain.getEclInclude(domain.getServerId())); } else { startSessionMsg = @@ -3027,12 +3027,7 @@ if (domain != null) { for (DSInfo info : dsList) { for (String attr : info.getEclIncludes()) { domain.addEclInclude(attr); } } domain.setEclInclude(info.getDsId(), info.getEclIncludes()); } } opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -68,6 +68,7 @@ import java.util.List; import java.util.SortedMap; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; @@ -302,8 +303,9 @@ */ private final ChangeNumberGenerator generator; Set<String> cfgEclIncludes = new HashSet<String>(); Set<String> eClIncludes = new HashSet<String>(); private final Map<Integer, Set<String>> eclIncludeByServer = new ConcurrentHashMap<Integer, Set<String>>(); Set<String> crossServersECLIncludes = new HashSet<String>(); /** * Returns the {@link ChangeNumberGenerator} that will be used to @@ -2893,21 +2895,42 @@ } /** * Add an attribute to the list of attributes to include in the ECL. * @param attribute The attribute to add. * Set the attributes configured on a server to be included in the ECL. * @param serverId server where these attributes are configured. * @param attributes the configured attributes. */ synchronized public void addEclInclude(String attribute) synchronized public void setEclInclude(int serverId, Set<String> attributes) { eClIncludes.add(attribute); eclIncludeByServer.put(serverId, attributes); // and rebuild the global list to be ready for usage crossServersECLIncludes.clear(); for (Set<String> attributesByServer : eclIncludeByServer.values()) for (String attribute : attributesByServer) crossServersECLIncludes.add(attribute); } /** * Get the list of attributes to include in the ECL. * @return The list of attributes. * Get the attributes to include in each change for the ECL. * It's a set : an attribute appears once even if configured on more than one * server. * @return The attributes to include in each change for the ECL. */ public Set<String> getEclInclude() { return eClIncludes; System.out.println("cdECLIn=" + crossServersECLIncludes); return crossServersECLIncludes; } /** * Get the attributes to include in each change for the ECL * for a given serverId. * @param serverId The serverId for which we want the include attributes. * @return The attributes. */ public Set<String> getEclInclude(int serverId) { return eclIncludeByServer.get(serverId); } /**