From a714dc56fbe8419a6f0e4e8ffd36384009a89557 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Fri, 11 May 2007 13:19:28 +0000
Subject: [PATCH] This code allows the replication code to replay operation in the correct order when operation have dependencies (like adding child entry after parent)
---
opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java | 150 ++++++++++++++++++++++++++-----------------------
1 files changed, 80 insertions(+), 70 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
index 6313387..27a2466 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
@@ -82,6 +82,68 @@
/**
+ * Finds the domain for a given DN.
+ *
+ * @param dn The DN for which the domain must be returned.
+ * @param op An optional operation for which the check is done.
+ * Can be null is the request has no associated operation.
+ * @return The domain for this DN.
+ */
+ public static ReplicationDomain findDomain(DN dn, Operation op)
+ {
+ /*
+ * Don't run the special replication code on Operation that are
+ * specifically marked as don't synchronize.
+ */
+ if ((op != null) && op.dontSynchronize())
+ return null;
+
+ ReplicationDomain domain = null;
+ DN temp = dn;
+ do
+ {
+ domain = domains.get(temp);
+ temp = temp.getParentDNInSuffix();
+ if (temp == null)
+ {
+ break;
+ }
+ } while (domain == null);
+
+ return domain;
+ }
+
+ /**
+ * Creates a new domain from its configEntry, do the
+ * necessary initialization and starts it so that it is
+ * fully operational when this method returns.
+ * @param configuration The entry whith the configuration of this domain.
+ * @return The domain created.
+ * @throws ConfigException When the configuration is not valid.
+ */
+ public static ReplicationDomain createNewDomain(
+ MultimasterDomainCfg configuration)
+ throws ConfigException
+ {
+ ReplicationDomain domain;
+ domain = new ReplicationDomain(configuration);
+ domains.put(domain.getBaseDN(), domain);
+ domain.start();
+ return domain;
+ }
+
+ /**
+ * Deletes a domain.
+ * @param dn : the base DN of the domain to delete.
+ */
+ public static void deleteDomain(DN dn)
+ {
+ ReplicationDomain domain = domains.remove(dn);
+ if (domain != null)
+ domain.shutdown();
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
@@ -149,23 +211,6 @@
}
/**
- * Creates a new domain from its configEntry, do the
- * necessary initialization and starts it so that it is
- * fully operational when this method returns.
- * @param configuration The entry whith the configuration of this domain.
- * @throws ConfigException When the configuration is not valid.
- */
- private void createNewDomain(
- MultimasterDomainCfg configuration)
- throws ConfigException
- {
- ReplicationDomain domain;
- domain = new ReplicationDomain(configuration);
- domains.put(domain.getBaseDN(), domain);
- domain.start();
- }
-
- /**
* {@inheritDoc}
*/
@Override
@@ -354,55 +399,6 @@
}
/**
- * Finds the domain for a given DN.
- *
- * @param dn The DN for which the domain must be returned.
- * @param op An optional operation for which the check is done.
- * Can be null is the request has no associated operation.
- * @return The domain for this DN.
- */
- public static ReplicationDomain findDomain(DN dn, Operation op)
- {
- /*
- * Don't run the special replication code on Operation that are
- * specifically marked as don't synchronize.
- */
- if ((op != null) && op.dontSynchronize())
- return null;
-
- ReplicationDomain domain = null;
- DN temp = dn;
- do
- {
- domain = domains.get(temp);
- temp = temp.getParentDNInSuffix();
- if (temp == null)
- {
- break;
- }
- } while (domain == null);
-
- return domain;
- }
-
- /**
- * Generic code for all the postOperation entry point.
- *
- * @param operation The Operation for which the post-operation is called.
- * @param dn The Dn for which the post-operation is called.
- */
- private void genericPostOperation(Operation operation, DN dn)
- {
- ReplicationDomain domain = findDomain(dn, operation);
- if (domain == null)
- return;
-
- domain.synchronize(operation);
-
- return;
- }
-
- /**
* This method is called whenever the server detects a modification
* of the schema done by directly modifying the backing files
* of the schema backend.
@@ -535,10 +531,7 @@
public ConfigChangeResult applyConfigurationDelete(
MultimasterDomainCfg configuration)
{
- DN dn = configuration.getReplicationDN();
- ReplicationDomain domain = domains.remove(dn);
- if (domain != null)
- domain.shutdown();
+ deleteDomain(configuration.getReplicationDN());
return new ConfigChangeResult(ResultCode.SUCCESS, false);
}
@@ -551,6 +544,23 @@
{
return true;
}
+
+ /**
+ * Generic code for all the postOperation entry point.
+ *
+ * @param operation The Operation for which the post-operation is called.
+ * @param dn The Dn for which the post-operation is called.
+ */
+ private void genericPostOperation(Operation operation, DN dn)
+ {
+ ReplicationDomain domain = findDomain(dn, operation);
+ if (domain == null)
+ return;
+
+ domain.synchronize(operation);
+
+ return;
+ }
}
--
Gitblit v1.10.0