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

Nicolas Capponi
22.26.2014 fc2267b6e73ca9707f8eaaf37f3c6d730944f1ae
opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
@@ -26,11 +26,8 @@
 */
package org.opends.server.replication.common;
import java.util.List;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.core.SearchOperation;
@@ -45,7 +42,6 @@
 */
public class ChangelogBaseDNVirtualAttributeProvider
       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  /**
@@ -104,21 +100,5 @@
    searchOperation.appendErrorMessage(message);
  }
  /** {@inheritDoc} */
  @Override
  public boolean isConfigurationChangeAcceptable(
                      UserDefinedVirtualAttributeCfg configuration,
                      List<LocalizableMessage> unacceptableReasons)
  {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public ConfigChangeResult applyConfigurationChange(
                                 UserDefinedVirtualAttributeCfg configuration)
  {
    return new ConfigChangeResult(ResultCode.OTHER, false);
  }
}
opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -26,19 +26,14 @@
 */
package org.opends.server.replication.common;
import java.util.List;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.types.*;
import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
import static org.opends.messages.ExtensionMessages.*;
@@ -47,20 +42,22 @@
 */
public class FirstChangeNumberVirtualAttributeProvider
       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  /** The tracer object for the debug logger. */
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  private final ReplicationServer replicationServer;
  /**
   * Creates a new instance of this member virtual attribute provider.
   *
   * @param replicationServer
   *          The replication server.
   */
  public FirstChangeNumberVirtualAttributeProvider()
  public FirstChangeNumberVirtualAttributeProvider(ReplicationServer replicationServer)
  {
    super();
    // All initialization should be performed in the
    // initializeVirtualAttributeProvider method.
    this.replicationServer = replicationServer;
  }
  /** {@inheritDoc} */
@@ -85,12 +82,9 @@
    String value = "0";
    try
    {
      ECLWorkflowElement eclwe = (ECLWorkflowElement)
      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
      if (eclwe != null)
      if (replicationServer != null)
      {
        final ReplicationServer rs = eclwe.getReplicationServer();
        final long[] limits = rs.getECLChangeNumberLimits();
        final long[] limits = replicationServer.getECLChangeNumberLimits();
        value = String.valueOf(limits[0]);
      }
    }
@@ -127,21 +121,5 @@
    searchOperation.appendErrorMessage(message);
  }
  /** {@inheritDoc} */
  @Override
  public boolean isConfigurationChangeAcceptable(
                      UserDefinedVirtualAttributeCfg configuration,
                      List<LocalizableMessage> unacceptableReasons)
  {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public ConfigChangeResult applyConfigurationChange(
                                 UserDefinedVirtualAttributeCfg configuration)
  {
    return new ConfigChangeResult(ResultCode.OTHER, false);
  }
}
opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -26,19 +26,14 @@
 */
package org.opends.server.replication.common;
import java.util.List;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.types.*;
import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
import static org.opends.messages.ExtensionMessages.*;
@@ -47,20 +42,22 @@
 */
public class LastChangeNumberVirtualAttributeProvider
       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  /** The tracer object for the debug logger. */
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  private final ReplicationServer replicationServer;
  /**
   * Creates a new instance of this member virtual attribute provider.
   *
   * @param replicationServer
   *            The replication server.
   */
  public LastChangeNumberVirtualAttributeProvider()
  public LastChangeNumberVirtualAttributeProvider(ReplicationServer replicationServer)
  {
    super();
    // All initialization should be performed in the
    // initializeVirtualAttributeProvider method.
    this.replicationServer = replicationServer;
  }
  /** {@inheritDoc} */
@@ -85,12 +82,9 @@
    String value = "0";
    try
    {
      ECLWorkflowElement eclwe = (ECLWorkflowElement)
      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
      if (eclwe != null)
      if (replicationServer != null)
      {
        final ReplicationServer rs = eclwe.getReplicationServer();
        final long[] limits = rs.getECLChangeNumberLimits();
        final long[] limits = replicationServer.getECLChangeNumberLimits();
        value = String.valueOf(limits[1]);
      }
    }
@@ -127,21 +121,5 @@
    searchOperation.appendErrorMessage(message);
  }
  /** {@inheritDoc} */
  @Override
  public boolean isConfigurationChangeAcceptable(
                      UserDefinedVirtualAttributeCfg configuration,
                      List<LocalizableMessage> unacceptableReasons)
  {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public ConfigChangeResult applyConfigurationChange(
                                 UserDefinedVirtualAttributeCfg configuration)
  {
    return new ConfigChangeResult(ResultCode.OTHER, false);
  }
}
opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -26,22 +26,18 @@
 */
package org.opends.server.replication.common;
import java.util.List;
import java.util.Set;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
import org.opends.server.replication.plugin.MultimasterReplication;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.types.*;
import org.opends.server.util.ServerConstants;
import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
import static org.opends.messages.ExtensionMessages.*;
@@ -52,19 +48,21 @@
 */
public class LastCookieVirtualProvider
   extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
   implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
  private final ReplicationServer replicationServer;
  /**
   * Creates a new instance of this member virtual attribute provider.
   *
   * @param replicationServer
   *            The replication server.
   */
  public LastCookieVirtualProvider()
  public LastCookieVirtualProvider(ReplicationServer replicationServer)
  {
    super();
    // All initialization should be performed in the
    // initializeVirtualAttributeProvider method.
    this.replicationServer = replicationServer;
  }
  /** {@inheritDoc} */
@@ -89,17 +87,13 @@
  {
    try
    {
      ECLWorkflowElement eclwe = (ECLWorkflowElement)
      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
      if (eclwe!=null)
      if (replicationServer != null)
      {
        // Set a list of excluded domains (also exclude 'cn=changelog' itself)
        Set<String> excludedDomains =
          MultimasterReplication.getECLDisabledDomains();
        Set<String> excludedDomains = MultimasterReplication.getECLDisabledDomains();
        excludedDomains.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
        final ReplicationServer rs = eclwe.getReplicationServer();
        String newestCookie = rs.getNewestECLCookie(excludedDomains).toString();
        String newestCookie = replicationServer.getNewestECLCookie(excludedDomains).toString();
        return Attributes.create(rule.getAttributeType(), newestCookie);
      }
    }
@@ -132,20 +126,4 @@
    searchOperation.appendErrorMessage(message);
  }
  /** {@inheritDoc} */
  @Override
  public boolean isConfigurationChangeAcceptable(
                      UserDefinedVirtualAttributeCfg configuration,
                      List<LocalizableMessage> unacceptableReasons)
  {
    return false;
  }
  /** {@inheritDoc} */
  @Override
  public ConfigChangeResult applyConfigurationChange(
                                 UserDefinedVirtualAttributeCfg configuration)
  {
    return new ConfigChangeResult(ResultCode.OTHER, false);
  }
}
opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -490,14 +490,40 @@
    NetworkGroup.getAdminNetworkGroup().registerWorkflow(workflowImpl);
    NetworkGroup.getInternalNetworkGroup().registerWorkflow(workflowImpl);
    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
        "lastexternalchangelogcookie", new LastCookieVirtualProvider()));
    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
        "firstchangenumber", new FirstChangeNumberVirtualAttributeProvider()));
    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
        "lastchangenumber", new LastChangeNumberVirtualAttributeProvider()));
    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
        "changelog", new ChangelogBaseDNVirtualAttributeProvider()));
    registerVirtualAttributeRules();
  }
  private List<VirtualAttributeRule> getVirtualAttributesRules() throws DirectoryException
  {
    final List<VirtualAttributeRule> rules = new ArrayList<VirtualAttributeRule>();
    rules.add(buildVirtualAttributeRule("lastexternalchangelogcookie", new LastCookieVirtualProvider(this)));
    rules.add(buildVirtualAttributeRule("firstchangenumber", new FirstChangeNumberVirtualAttributeProvider(this)));
    rules.add(buildVirtualAttributeRule("lastchangenumber", new LastChangeNumberVirtualAttributeProvider(this)));
    rules.add(buildVirtualAttributeRule("changelog", new ChangelogBaseDNVirtualAttributeProvider()));
    return rules;
  }
  private void registerVirtualAttributeRules() throws DirectoryException {
    for (VirtualAttributeRule rule : getVirtualAttributesRules())
    {
      DirectoryServer.registerVirtualAttribute(rule);
    }
  }
  private void deregisterVirtualAttributeRules()
  {
    try
    {
      for (VirtualAttributeRule rule : getVirtualAttributesRules())
      {
        DirectoryServer.deregisterVirtualAttribute(rule);
      }
    }
    catch (DirectoryException e)
    {
      // Should never happen
      throw new RuntimeException(e);
    }
  }
  private static VirtualAttributeRule buildVirtualAttributeRule(String attrName,
@@ -545,24 +571,7 @@
      NetworkGroup.getDefaultNetworkGroup().deregisterWorkflow(eclWorkflowID);
      try
      {
        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
            "lastexternalchangelogcookie", new LastCookieVirtualProvider()));
        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
            "firstchangenumber",
            new FirstChangeNumberVirtualAttributeProvider()));
        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
            "lastchangenumber",
            new LastChangeNumberVirtualAttributeProvider()));
        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
            "changelog", new ChangelogBaseDNVirtualAttributeProvider()));
      }
      catch (DirectoryException e)
      {
        // Should never happen
        throw new RuntimeException(e);
      }
      deregisterVirtualAttributeRules();
      eclwf.deregister();
      eclwf.finalizeWorkflow();