From c64b052d2fc60dcadbc8afcf1ef5b82b6857e512 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 04 Sep 2013 08:20:44 +0000
Subject: [PATCH] FractionalLDIFImportPlugin.java: In flushFractionalConfigIntoEntry(), changed code to fix build break from r9497. In doLDIFImport(), extracted method getAttribute() + used early exit . Used javadocs instead of comments. Removed redundant comments. Used static imports.
---
opends/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java | 239 ++++++++++++++++++++++++++---------------------------------
1 files changed, 105 insertions(+), 134 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java b/opends/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
index 21b4132..47c3d74 100644
--- a/opends/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
+++ b/opends/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
@@ -23,35 +23,26 @@
*
*
* Copyright 2009 Sun Microsystems, Inc.
- * Portions copyright 2011 ForgeRock AS
+ * Portions copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.replication.plugin;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import org.opends.messages.Message;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.server.ServerManagementContext;
-import org.opends.server.admin.std.server.FractionalLDIFImportPluginCfg;
-import org.opends.server.admin.std.server.PluginCfg;
-import org.opends.server.admin.std.server.ReplicationDomainCfg;
-import org.opends.server.admin.std.server.ReplicationSynchronizationProviderCfg;
-import org.opends.server.admin.std.server.RootCfg;
-import org.opends.server.api.plugin.*;
+import org.opends.server.admin.std.server.*;
+import org.opends.server.api.plugin.DirectoryServerPlugin;
+import org.opends.server.api.plugin.PluginResult;
+import org.opends.server.api.plugin.PluginType;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
-import org.opends.server.replication.plugin.LDAPReplicationDomain.
- AttributeValueStringIterator;
-import org.opends.server.replication.plugin.LDAPReplicationDomain.
- FractionalConfig;
+import org.opends.server.replication.plugin.LDAPReplicationDomain.*;
import org.opends.server.types.*;
import static org.opends.messages.ReplicationMessages.*;
+import static org.opends.server.replication.plugin.LDAPReplicationDomain.*;
/**
* This class implements a Directory Server plugin that is used in fractional
@@ -69,13 +60,15 @@
extends DirectoryServerPlugin<FractionalLDIFImportPluginCfg>
implements ConfigurationChangeListener<FractionalLDIFImportPluginCfg>
{
- // Holds the fractional configuration and if available the replication domain
- // matching this import session (they form the importfractional context).
- // Domain is available if the server is online (import-ldif, online full
- // update..) otherwise, this is an import-ldif with server off. The key is the
- // ImportConfig object of the session which acts as a cookie for the whole
- // session. This allows to potentially run man imports at the same time.
- private final Hashtable<LDIFImportConfig, ImportFractionalContext>
+ /**
+ * Holds the fractional configuration and if available the replication domain
+ * matching this import session (they form the importfractional context).
+ * Domain is available if the server is online (import-ldif, online full
+ * update..) otherwise, this is an import-ldif with server off. The key is the
+ * ImportConfig object of the session which acts as a cookie for the whole
+ * session. This allows to potentially run man imports at the same time.
+ */
+ private final Map<LDIFImportConfig, ImportFractionalContext>
importSessionContexts = new Hashtable<LDIFImportConfig,
ImportFractionalContext>();
@@ -84,11 +77,13 @@
*/
private static class ImportFractionalContext
{
- // Fractional configuration of the local domain (may be null if import on a
- // not replicated domain)
- private FractionalConfig fractionalConfig = null;
- // The local domain object (may stay null if server is offline)
- private LDAPReplicationDomain domain = null;
+ /**
+ * Fractional configuration of the local domain (may be null if import on a
+ * not replicated domain).
+ */
+ private FractionalConfig fractionalConfig;
+ /** The local domain object (may stay null if server is offline). */
+ private LDAPReplicationDomain domain;
/**
* Constructor.
@@ -199,9 +194,8 @@
ReplicationDomainCfg matchingReplicatedDomainCfg = null;
for (String domainName : domainNames)
{
- // Get the domain configuration object
ReplicationDomainCfg replicationDomainCfg =
- sync.getReplicationDomain(domainName);
+ sync.getReplicationDomain(domainName);
// Is the entry a sub entry of the replicated domain main entry ?
DN replicatedDn = replicationDomainCfg.getBaseDN();
DN entryDn = entry.getDN();
@@ -228,8 +222,7 @@
* {@inheritDoc}
*/
@Override()
- public final void doLDIFImportEnd(
- LDIFImportConfig importConfig)
+ public final void doLDIFImportEnd(LDIFImportConfig importConfig)
{
// Remove the cookie of this import session
synchronized(importSessionContexts)
@@ -263,7 +256,7 @@
{
synchronized(importSessionContexts)
{
- // Insure antoher thread was not creating the context at the same time
+ // Insure another thread was not creating the context at the same time
// (we would create it for the second time which is useless)
importFractionalContext = importSessionContexts.get(importConfig);
if (importFractionalContext == null)
@@ -335,43 +328,23 @@
DN replicatedDomainBaseDn = localFractionalConfig.getBaseDn();
if (replicatedDomainBaseDn.equals(entryDn))
{
- /*
- * This is the root entry, try to read a fractional configuration from it
- */
+ // This is the root entry, try to read a fractional configuration from it
+ Attribute exclAttr = getAttribute(REPLICATION_FRACTIONAL_EXCLUDE, entry);
Iterator<String> exclIt = null;
- AttributeType fractionalExcludeType =
- DirectoryServer.getAttributeType(
- LDAPReplicationDomain.REPLICATION_FRACTIONAL_EXCLUDE);
- List<Attribute> exclAttrs =
- entry.getAttribute(fractionalExcludeType);
- Attribute exclAttr = null;
- if (exclAttrs != null)
+ if (exclAttr != null)
{
- exclAttr = exclAttrs.get(0);
- if (exclAttr != null)
- {
- exclIt = new AttributeValueStringIterator(exclAttr.iterator());
- }
+ exclIt = new AttributeValueStringIterator(exclAttr.iterator());
}
+ Attribute inclAttr = getAttribute(REPLICATION_FRACTIONAL_INCLUDE, entry);
Iterator<String> inclIt = null;
- AttributeType fractionalIncludeType =
- DirectoryServer.getAttributeType(
- LDAPReplicationDomain.REPLICATION_FRACTIONAL_INCLUDE);
- List<Attribute> inclAttrs =
- entry.getAttribute(fractionalIncludeType);
- Attribute inclAttr = null;
- if (inclAttrs != null)
+ if (inclAttr != null)
{
- inclAttr = inclAttrs.get(0);
- if (inclAttr != null)
- {
- inclIt = new AttributeValueStringIterator(inclAttr.iterator());
- }
+ inclIt = new AttributeValueStringIterator(inclAttr.iterator());
}
// Compare backend and local fractional configuration
- boolean sameConfig = LDAPReplicationDomain.
+ boolean sameConfig =
isFractionalConfigConsistent(localFractionalConfig, exclIt, inclIt);
if (localFractionalConfig.isFractional())
{
@@ -382,41 +355,36 @@
// follow import, no need to go with filtering as remote backend
// should be ok
return PluginResult.ImportLDIF.continueEntryProcessing();
- } else
- {
- // Local domain is fractional, remote domain has not same config
- boolean remoteDomainHasSomeConfig = false;
- if ((exclAttr != null && (exclAttr.size() > 0)) ||
- (inclAttr != null && (inclAttr.size() > 0)))
- {
- remoteDomainHasSomeConfig = true;
- }
- if (remoteDomainHasSomeConfig)
- {
- LDAPReplicationDomain domain = importFractionalContext.getDomain();
- if (domain != null)
- {
- // Local domain is fractional, remote domain has some config which
- // is different : stop import (error will be logged when import is
- // stopped)
- domain.setImportErrorMessageId(
- LDAPReplicationDomain.IMPORT_ERROR_MESSAGE_BAD_REMOTE);
- domain.setFollowImport(false);
- return PluginResult.ImportLDIF.stopEntryProcessing(null);
- } else
- {
- Message message = NOTE_ERR_LDIF_IMPORT_FRACTIONAL_BAD_DATA_SET.
- get(replicatedDomainBaseDn.toString());
- return PluginResult.ImportLDIF.stopEntryProcessing(message);
- }
- } else
- {
- // Local domain is fractional but remote domain has no config :
- // flush local config into root entry and follow import with
- // filtering
- flushFractionalConfigIntoEntry(localFractionalConfig, entry);
- }
}
+
+ // Local domain is fractional, remote domain has not same config
+ boolean remoteDomainHasSomeConfig = false;
+ if ((exclAttr != null && (exclAttr.size() > 0))
+ || (inclAttr != null && (inclAttr.size() > 0)))
+ {
+ remoteDomainHasSomeConfig = true;
+ }
+ if (remoteDomainHasSomeConfig)
+ {
+ LDAPReplicationDomain domain = importFractionalContext.getDomain();
+ if (domain != null)
+ {
+ // Local domain is fractional, remote domain has some config which
+ // is different : stop import (error will be logged when import is
+ // stopped)
+ domain.setImportErrorMessageId(IMPORT_ERROR_MESSAGE_BAD_REMOTE);
+ domain.setFollowImport(false);
+ return PluginResult.ImportLDIF.stopEntryProcessing(null);
+ }
+
+ Message message = NOTE_ERR_LDIF_IMPORT_FRACTIONAL_BAD_DATA_SET
+ .get(replicatedDomainBaseDn.toString());
+ return PluginResult.ImportLDIF.stopEntryProcessing(message);
+ }
+
+ // Local domain is fractional but remote domain has no config :
+ // flush local config into root entry and follow import with filtering
+ flushFractionalConfigIntoEntry(localFractionalConfig, entry);
} else
{
// Local domain is not fractional
@@ -425,27 +393,22 @@
// None of the local or remote domain has fractional config : nothing
// more to do : let import finish
return PluginResult.ImportLDIF.continueEntryProcessing();
- } else
- {
- LDAPReplicationDomain domain = importFractionalContext.getDomain();
- if (domain != null)
- {
- // Local domain is not fractional but remote one is : stop import :
- // local domain should be configured with the same config as remote
- // one
- domain.setImportErrorMessageId(
- LDAPReplicationDomain.
- IMPORT_ERROR_MESSAGE_REMOTE_IS_FRACTIONAL);
- domain.setFollowImport(false);
- return PluginResult.ImportLDIF.stopEntryProcessing(null);
- } else
- {
- Message message =
- NOTE_ERR_LDIF_IMPORT_FRACTIONAL_DATA_SET_IS_FRACTIONAL.get(
- replicatedDomainBaseDn.toString());
- return PluginResult.ImportLDIF.stopEntryProcessing(message);
- }
}
+
+ LDAPReplicationDomain domain = importFractionalContext.getDomain();
+ if (domain != null)
+ {
+ // Local domain is not fractional but remote one is : stop import :
+ //local domain should be configured with the same config as remote one
+ domain.setImportErrorMessageId(
+ IMPORT_ERROR_MESSAGE_REMOTE_IS_FRACTIONAL);
+ domain.setFollowImport(false);
+ return PluginResult.ImportLDIF.stopEntryProcessing(null);
+ }
+
+ Message message = NOTE_ERR_LDIF_IMPORT_FRACTIONAL_DATA_SET_IS_FRACTIONAL
+ .get(replicatedDomainBaseDn.toString());
+ return PluginResult.ImportLDIF.stopEntryProcessing(message);
}
}
@@ -458,14 +421,27 @@
return PluginResult.ImportLDIF.continueEntryProcessing();
}
+ private Attribute getAttribute(String attributeName, Entry entry)
+ {
+ AttributeType attrType = DirectoryServer.getAttributeType(attributeName);
+ List<Attribute> inclAttrs = entry.getAttribute(attrType);
+ if (inclAttrs != null)
+ {
+ return inclAttrs.get(0);
+ }
+ return null;
+ }
+
/**
* Write the fractional configuration in the passed domain into the passed
- * entry.
- * WARNING: assumption is that no fractional attributes at all is already
- * present in the passed entry. Also assumption is that domain fractional
- * configuration is on.
- * @param localFractionalConfig The local domain fractional configuration
- * @param entry The entry to modify
+ * entry. WARNING: assumption is that no fractional attributes at all is
+ * already present in the passed entry. Also assumption is that domain
+ * fractional configuration is on.
+ *
+ * @param localFractionalConfig
+ * The local domain fractional configuration
+ * @param entry
+ * The entry to modify
*/
private static void flushFractionalConfigIntoEntry(FractionalConfig
localFractionalConfig, Entry entry)
@@ -475,20 +451,14 @@
// Get the fractional configuration of the domain
boolean fractionalExclusive =
localFractionalConfig.isFractionalExclusive();
- Map<String, List<String>> fractionalSpecificClassesAttributes =
+ Map<String, Set<String>> fractionalSpecificClassesAttributes =
localFractionalConfig.getFractionalSpecificClassesAttributes();
- List<String> fractionalAllClassesAttributes =
+ Set<String> fractionalAllClassesAttributes =
localFractionalConfig.getFractionalAllClassesAttributes();
- // Create attribute builder for the rigth fractional mode
- String fractAttribute = null;
- if (fractionalExclusive)
- {
- fractAttribute = LDAPReplicationDomain.REPLICATION_FRACTIONAL_EXCLUDE;
- } else
- {
- fractAttribute = LDAPReplicationDomain.REPLICATION_FRACTIONAL_INCLUDE;
- }
+ // Create attribute builder for the right fractional mode
+ String fractAttribute = fractionalExclusive ?
+ REPLICATION_FRACTIONAL_EXCLUDE : REPLICATION_FRACTIONAL_INCLUDE;
AttributeBuilder attrBuilder = new AttributeBuilder(fractAttribute);
boolean somethingToFlush = false;
@@ -561,6 +531,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean isConfigurationChangeAcceptable(
FractionalLDIFImportPluginCfg configuration,
List<Message> unacceptableReasons)
@@ -571,10 +542,10 @@
/**
* {@inheritDoc}
*/
+ @Override
public ConfigChangeResult applyConfigurationChange(
FractionalLDIFImportPluginCfg configuration)
{
return new ConfigChangeResult(ResultCode.SUCCESS, false);
}
}
-
--
Gitblit v1.10.0