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

pgamba
19.45.2009 aed4a89f2bbdc326f5df33b6d995a38b8a9560a1
Fix#4261 ECL Virtual attributes should be internal only (and removed from config.ldif)
6 files modified
186 ■■■■ changed files
opends/resource/config/config.ldif 33 ●●●●● patch | view | raw | blame | history
opends/src/messages/messages/replication.properties 2 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java 25 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java 28 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java 37 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ReplicationServer.java 61 ●●●●● patch | view | raw | blame | history
opends/resource/config/config.ldif
@@ -2459,39 +2459,6 @@
ds-cfg-filter: (&(objectClass=groupOfUniqueNames)(objectClass=ds-virtual-static-group))
ds-cfg-allow-retrieving-membership: false
dn: cn=Last External Changelog Cookie,cn=Virtual Attributes,cn=config
objectClass: ds-cfg-virtual-attribute
objectClass: ds-cfg-user-defined-virtual-attribute
objectClass: top
cn: Last External Changelog Cookie
ds-cfg-attribute-type: lastExternalChangelogCookie
ds-cfg-enabled: true
ds-cfg-java-class: org.opends.server.replication.common.LastCookieVirtualProvider
ds-cfg-value: 1
ds-cfg-filter: (objectClass=ds-root-dse)
dn: cn=External Changelog First Draft Change Number,cn=Virtual Attributes,cn=config
objectClass: ds-cfg-virtual-attribute
objectClass: ds-cfg-user-defined-virtual-attribute
objectClass: top
cn: External Changelog First Draft Change Number
ds-cfg-attribute-type: firstChangeNumber
ds-cfg-enabled: true
ds-cfg-java-class: org.opends.server.replication.common.FirstChangeNumberVirtualAttributeProvider
ds-cfg-value: 0
ds-cfg-filter: (objectClass=ds-root-dse)
dn: cn=External Changelog Last Draft Change Number,cn=Virtual Attributes,cn=config
objectClass: ds-cfg-virtual-attribute
objectClass: ds-cfg-user-defined-virtual-attribute
objectClass: top
cn: External Changelog Last Draft Change Number
ds-cfg-attribute-type: lastChangeNumber
ds-cfg-enabled: true
ds-cfg-java-class: org.opends.server.replication.common.LastChangeNumberVirtualAttributeProvider
ds-cfg-value: 0
ds-cfg-filter: (objectClass=ds-root-dse)
dn: cn=Work Queue,cn=config
objectClass: top
objectClass: ds-cfg-work-queue
opends/src/messages/messages/replication.properties
@@ -435,3 +435,5 @@
 server for %s in local server id %s
SEVERE_ERR_SERVER_BADLY_DISCONNECTED_181= %s has badly disconnected from this \
 replication server %s
NOTICE_UNABLE_TO_ENABLE_ECL_VIRTUAL_ATTR_182=Error when loading a virtual \
 attribute for external change log: Attribute: %s , Error: %s
opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -65,9 +65,6 @@
       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  // The current configuration for this virtual attribute provider.
  private UserDefinedVirtualAttributeCfg currentConfig;
  /**
   * Creates a new instance of this member virtual attribute provider.
   */
@@ -89,8 +86,7 @@
                            UserDefinedVirtualAttributeCfg configuration)
         throws ConfigException, InitializationException
  {
    this.currentConfig = configuration;
    configuration.addUserDefinedChangeListener(this);
    // No initialization required
  }
@@ -101,7 +97,7 @@
  @Override()
  public void finalizeVirtualAttributeProvider()
  {
    currentConfig.removeUserDefinedChangeListener(this);
    //
  }
@@ -112,14 +108,7 @@
  @Override()
  public boolean isMultiValued()
  {
    if (currentConfig == null)
    {
      return true;
    }
    else
    {
      return (currentConfig.getValue().size() > 1);
    }
    return false;
  }
@@ -200,8 +189,7 @@
                      UserDefinedVirtualAttributeCfg configuration,
                      List<Message> unacceptableReasons)
  {
    // The new configuration should always be acceptable.
    return true;
    return false;
  }
@@ -212,10 +200,7 @@
  public ConfigChangeResult applyConfigurationChange(
                                 UserDefinedVirtualAttributeCfg configuration)
  {
    // Just accept the new configuration as-is.
    currentConfig = configuration;
    return new ConfigChangeResult(ResultCode.SUCCESS, false);
    return new ConfigChangeResult(ResultCode.OTHER, false);
  }
}
opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -25,7 +25,6 @@
 *      Copyright 2009 Sun Microsystems, Inc.
 */
package org.opends.server.replication.common;
import static org.opends.server.loggers.debug.DebugLogger.getTracer;
import java.util.ArrayList;
import java.util.Collections;
@@ -40,7 +39,6 @@
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.replication.plugin.MultimasterReplication;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.types.AttributeValue;
@@ -67,10 +65,6 @@
       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  private static final DebugTracer TRACER = getTracer();
  // The current configuration for this virtual attribute provider.
  private UserDefinedVirtualAttributeCfg currentConfig;
  /**
   * Creates a new instance of this member virtual attribute provider.
   */
@@ -92,8 +86,7 @@
                            UserDefinedVirtualAttributeCfg configuration)
         throws ConfigException, InitializationException
  {
    this.currentConfig = configuration;
    configuration.addUserDefinedChangeListener(this);
    // No initialization required
  }
@@ -104,7 +97,7 @@
  @Override()
  public void finalizeVirtualAttributeProvider()
  {
    currentConfig.removeUserDefinedChangeListener(this);
    //
  }
@@ -115,14 +108,7 @@
  @Override()
  public boolean isMultiValued()
  {
    if (currentConfig == null)
    {
      return true;
    }
    else
    {
      return (currentConfig.getValue().size() > 1);
    }
    return false;
  }
@@ -202,8 +188,7 @@
                      UserDefinedVirtualAttributeCfg configuration,
                      List<Message> unacceptableReasons)
  {
    // The new configuration should always be acceptable.
    return true;
    return false;
  }
@@ -214,10 +199,7 @@
  public ConfigChangeResult applyConfigurationChange(
                                 UserDefinedVirtualAttributeCfg configuration)
  {
    // Just accept the new configuration as-is.
    currentConfig = configuration;
    return new ConfigChangeResult(ResultCode.SUCCESS, false);
    return new ConfigChangeResult(ResultCode.OTHER, false);
  }
}
opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -62,10 +62,6 @@
   extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
   implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
{
  // The current configuration for this virtual attribute provider.
  private UserDefinedVirtualAttributeCfg currentConfig;
  /**
   * Creates a new instance of this member virtual attribute provider.
@@ -88,8 +84,7 @@
                            UserDefinedVirtualAttributeCfg configuration)
         throws ConfigException, InitializationException
  {
    this.currentConfig = configuration;
    configuration.addUserDefinedChangeListener(this);
    // No initialization required
  }
@@ -100,10 +95,21 @@
  @Override()
  public void finalizeVirtualAttributeProvider()
  {
    currentConfig.removeUserDefinedChangeListener(this);
    //
  }
  /**
   * {@inheritDoc}
   */
  @Override()
  public boolean hasValue(Entry entry, VirtualAttributeRule rule)
  {
    // Indicates whether this virtual attribute provider will generate
    // at least one value for the provided entry.
    // True is the DN is the one of the root DSE : "".
    return entry.getDN().toNormalizedString().equalsIgnoreCase("");
  }
  /**
   * {@inheritDoc}
@@ -111,14 +117,7 @@
  @Override()
  public boolean isMultiValued()
  {
    if (currentConfig == null)
    {
      return true;
    }
    else
    {
      return (currentConfig.getValue().size() > 1);
    }
    return false;
  }
@@ -194,8 +193,7 @@
                      UserDefinedVirtualAttributeCfg configuration,
                      List<Message> unacceptableReasons)
  {
    // The new configuration should always be acceptable.
    return true;
    return false;
  }
@@ -206,9 +204,6 @@
  public ConfigChangeResult applyConfigurationChange(
                                 UserDefinedVirtualAttributeCfg configuration)
  {
    // Just accept the new configuration as-is.
    currentConfig = configuration;
    return new ConfigChangeResult(ResultCode.SUCCESS, false);
    return new ConfigChangeResult(ResultCode.OTHER, false);
  }
}
opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -57,22 +57,23 @@
import org.opends.messages.MessageBuilder;
import org.opends.messages.Severity;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn;
import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.*;
import org.opends.server.admin.std.server.ReplicationServerCfg;
import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
import org.opends.server.api.Backend;
import org.opends.server.api.BackupTaskListener;
import org.opends.server.api.ExportTaskListener;
import org.opends.server.api.ImportTaskListener;
import org.opends.server.api.RestoreTaskListener;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.WorkflowImpl;
import org.opends.server.core.networkgroups.NetworkGroup;
import org.opends.server.loggers.LogLevel;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.replication.common.ChangeNumber;
import org.opends.server.replication.common.ExternalChangeLogSession;
import org.opends.server.replication.common.MultiDomainServerState;
import org.opends.server.replication.common.ServerState;
import org.opends.server.replication.common.*;
import org.opends.server.replication.protocol.ProtocolSession;
import org.opends.server.replication.protocol.ReplServerStartMsg;
import org.opends.server.replication.protocol.ReplSessionSecurity;
@@ -81,6 +82,7 @@
import org.opends.server.replication.protocol.ServerStartMsg;
import org.opends.server.replication.protocol.StartECLSessionMsg;
import org.opends.server.replication.protocol.StartMsg;
import org.opends.server.types.AttributeType;
import org.opends.server.types.BackupConfig;
import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DN;
@@ -91,6 +93,8 @@
import org.opends.server.types.LDIFImportConfig;
import org.opends.server.types.RestoreConfig;
import org.opends.server.types.ResultCode;
import org.opends.server.types.SearchFilter;
import org.opends.server.types.VirtualAttributeRule;
import org.opends.server.util.LDIFReader;
import org.opends.server.util.ServerConstants;
import org.opends.server.util.TimeThread;
@@ -648,7 +652,53 @@
    NetworkGroup internalNetworkGroup = NetworkGroup.getInternalNetworkGroup();
    internalNetworkGroup.registerWorkflow(externalChangeLogWorkflow);
}
    enableECLVirtualAttr("lastexternalchangelogcookie",
        new LastCookieVirtualProvider());
    enableECLVirtualAttr("firstchangenumber",
        new FirstChangeNumberVirtualAttributeProvider());
    enableECLVirtualAttr("lastchangenumber",
        new LastChangeNumberVirtualAttributeProvider());
  }
  private void enableECLVirtualAttr(String attrName,
      VirtualAttributeProvider<UserDefinedVirtualAttributeCfg> provider)
  {
    Set<DN> baseDNs = new HashSet<DN>(0);
    Set<DN> groupDNs = new HashSet<DN>(0);
    Set<SearchFilter> filters = new HashSet<SearchFilter>(0);
    VirtualAttributeCfgDefn.ConflictBehavior conflictBehavior =
      ConflictBehavior.VIRTUAL_OVERRIDES_REAL;
    try
    {
      // To avoid the configuration in cn=config just
      // create a rule and register it into the DirectoryServer
      provider.initializeVirtualAttributeProvider(null);
      AttributeType attributeType = DirectoryServer.getAttributeType(
          attrName, false);
      SearchFilter filter =
        SearchFilter.createFilterFromString("objectclass=*");
      filters.add(filter);
      baseDNs.add(DN.decode(""));
      VirtualAttributeRule rule =
        new VirtualAttributeRule(attributeType, provider,
            baseDNs, groupDNs, filters, conflictBehavior);
      DirectoryServer.registerVirtualAttribute(rule);
    }
    catch (Exception e)
    {
      Message message =
        NOTE_UNABLE_TO_ENABLE_ECL_VIRTUAL_ATTR.get(attrName, e.toString());
      logError(message);
    }
  }
  private void shutdownECL()
  {
@@ -1846,4 +1896,5 @@
  {
    return weight;
  }
}