opends/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
@@ -22,16 +22,14 @@ * * * Copyright 2009 Sun Microsystems, Inc. * Portions Copyright 2011-2013 ForgeRock AS * Portions Copyright 2011-2014 ForgeRock AS */ package org.opends.server.replication.common; import java.util.Collections; import java.util.List; import java.util.Set; import org.opends.messages.Message; 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; @@ -46,7 +44,6 @@ */ public class ChangelogBaseDNVirtualAttributeProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg> implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg> { /** @@ -104,21 +101,5 @@ searchOperation.appendErrorMessage(message); } /** {@inheritDoc} */ @Override public boolean isConfigurationChangeAcceptable( UserDefinedVirtualAttributeCfg configuration, List<Message> unacceptableReasons) { return false; } /** {@inheritDoc} */ @Override public ConfigChangeResult applyConfigurationChange( UserDefinedVirtualAttributeCfg configuration) { return new ConfigChangeResult(ResultCode.OTHER, false); } } opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -22,24 +22,20 @@ * * * Copyright 2009 Sun Microsystems, Inc. * Portions Copyright 2011-2013 ForgeRock AS * Portions Copyright 2011-2014 ForgeRock AS */ package org.opends.server.replication.common; import java.util.Collections; import java.util.List; import java.util.Set; import org.opends.messages.Message; 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.loggers.debug.DebugTracer; 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.*; import static org.opends.server.loggers.debug.DebugLogger.*; @@ -49,20 +45,22 @@ */ public class FirstChangeNumberVirtualAttributeProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg> implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg> { /** The tracer object for the debug logger. */ private static final DebugTracer TRACER = getTracer(); 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} */ @@ -87,12 +85,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]); } } @@ -130,21 +125,5 @@ searchOperation.appendErrorMessage(message); } /** {@inheritDoc} */ @Override public boolean isConfigurationChangeAcceptable( UserDefinedVirtualAttributeCfg configuration, List<Message> unacceptableReasons) { return false; } /** {@inheritDoc} */ @Override public ConfigChangeResult applyConfigurationChange( UserDefinedVirtualAttributeCfg configuration) { return new ConfigChangeResult(ResultCode.OTHER, false); } } opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -22,24 +22,20 @@ * * * Copyright 2009 Sun Microsystems, Inc. * Portions Copyright 2011-2013 ForgeRock AS * Portions Copyright 2011-2014 ForgeRock AS */ package org.opends.server.replication.common; import java.util.Collections; import java.util.List; import java.util.Set; import org.opends.messages.Message; 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.loggers.debug.DebugTracer; 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.*; import static org.opends.server.loggers.debug.DebugLogger.*; @@ -49,20 +45,22 @@ */ public class LastChangeNumberVirtualAttributeProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg> implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg> { /** The tracer object for the debug logger. */ private static final DebugTracer TRACER = getTracer(); 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} */ @@ -87,12 +85,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]); } } @@ -130,21 +125,5 @@ searchOperation.appendErrorMessage(message); } /** {@inheritDoc} */ @Override public boolean isConfigurationChangeAcceptable( UserDefinedVirtualAttributeCfg configuration, List<Message> unacceptableReasons) { return false; } /** {@inheritDoc} */ @Override public ConfigChangeResult applyConfigurationChange( UserDefinedVirtualAttributeCfg configuration) { return new ConfigChangeResult(ResultCode.OTHER, false); } } opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -22,26 +22,22 @@ * * * Copyright 2009 Sun Microsystems, Inc. * Portions Copyright 2011-2013 ForgeRock AS * Portions Copyright 2011-2014 ForgeRock AS */ package org.opends.server.replication.common; import java.util.Collections; import java.util.List; import java.util.Set; import org.opends.messages.Message; 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.loggers.debug.DebugTracer; 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.*; import static org.opends.server.loggers.debug.DebugLogger.*; @@ -53,7 +49,6 @@ */ public class LastCookieVirtualProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg> implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg> { /** @@ -61,15 +56,18 @@ */ private static final DebugTracer TRACER = getTracer(); 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} */ @@ -94,17 +92,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(); final ByteString cookie = ByteString.valueOf(newestCookie); return Collections.singleton(AttributeValues.create(cookie, cookie)); } @@ -138,20 +132,4 @@ searchOperation.appendErrorMessage(message); } /** {@inheritDoc} */ @Override public boolean isConfigurationChangeAcceptable( UserDefinedVirtualAttributeCfg configuration, List<Message> unacceptableReasons) { return false; } /** {@inheritDoc} */ @Override public ConfigChangeResult applyConfigurationChange( UserDefinedVirtualAttributeCfg configuration) { return new ConfigChangeResult(ResultCode.OTHER, false); } } opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -498,14 +498,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, @@ -553,24 +579,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();