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