mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

ludovicp
27.52.2010 a7fc5cad6ece730cacbfd2dd7c2dff4885c68c73
Enhance the way ECL configuration changes are handled.
3 files modified
79 ■■■■■ changed files
opends/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java 29 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/service/ReplicationBroker.java 9 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/service/ReplicationDomain.java 41 ●●●● patch | view | raw | blame | history
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);
  }
  /**