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();