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; } }