From c36a6780c20f526df1bc6e1a3a3b71dfa8b9ec3d Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Wed, 28 Feb 2007 14:06:57 +0000
Subject: [PATCH] This set of changes allow to have the schema synchronization working by configuring synchronization for suffix cn=schema (issue 613) .

---
 opends/src/server/org/opends/server/synchronization/plugin/MultimasterSynchronization.java |   54 +++++++++++++++++++++++-------------------------------
 1 files changed, 23 insertions(+), 31 deletions(-)

diff --git a/opends/src/server/org/opends/server/synchronization/plugin/MultimasterSynchronization.java b/opends/src/server/org/opends/server/synchronization/plugin/MultimasterSynchronization.java
index 0143f89..2a3210d 100644
--- a/opends/src/server/org/opends/server/synchronization/plugin/MultimasterSynchronization.java
+++ b/opends/src/server/org/opends/server/synchronization/plugin/MultimasterSynchronization.java
@@ -38,7 +38,6 @@
 import org.opends.server.core.AddOperation;
 import org.opends.server.synchronization.changelog.Changelog;
 import org.opends.server.synchronization.common.LogMessages;
-import org.opends.server.synchronization.common.ServerState;
 import org.opends.server.types.DN;
 import org.opends.server.core.DeleteOperation;
 import org.opends.server.types.DirectoryException;
@@ -74,20 +73,6 @@
   private static Map<DN, SynchronizationDomain> domains =
     new HashMap<DN, SynchronizationDomain>() ;
 
-  /**
-   * Get the ServerState associated to the SynchronizationDomain
-   * with a given DN.
-   *
-   * @param baseDn The DN of the Synchronization Domain for which the
-   *               ServerState must be returned.
-   * @return the ServerState associated to the SynchronizationDomain
-   *         with the DN in parameter.
-   */
-  public static ServerState getServerState(DN baseDn)
-  {
-    SynchronizationDomain domain = findDomain(baseDn);
-    return domain.getServerState();
-  }
 
   /**
    * {@inheritDoc}
@@ -323,7 +308,8 @@
   public SynchronizationProviderResult handleConflictResolution(
                                                 ModifyOperation modifyOperation)
   {
-    SynchronizationDomain domain = findDomain(modifyOperation.getEntryDN());
+    SynchronizationDomain domain =
+      findDomain(modifyOperation.getEntryDN(), modifyOperation);
     if (domain == null)
       return new SynchronizationProviderResult(true);
 
@@ -337,7 +323,8 @@
   public SynchronizationProviderResult handleConflictResolution(
       AddOperation addOperation) throws DirectoryException
   {
-    SynchronizationDomain domain = findDomain(addOperation.getEntryDN());
+    SynchronizationDomain domain =
+      findDomain(addOperation.getEntryDN(), addOperation);
     if (domain == null)
       return new SynchronizationProviderResult(true);
 
@@ -351,7 +338,8 @@
   public SynchronizationProviderResult handleConflictResolution(
       DeleteOperation deleteOperation) throws DirectoryException
   {
-    SynchronizationDomain domain = findDomain(deleteOperation.getEntryDN());
+    SynchronizationDomain domain =
+      findDomain(deleteOperation.getEntryDN(), deleteOperation);
     if (domain == null)
       return new SynchronizationProviderResult(true);
 
@@ -365,7 +353,8 @@
   public SynchronizationProviderResult handleConflictResolution(
       ModifyDNOperation modifyDNOperation) throws DirectoryException
   {
-    SynchronizationDomain domain = findDomain(modifyDNOperation.getEntryDN());
+    SynchronizationDomain domain =
+      findDomain(modifyDNOperation.getEntryDN(), modifyDNOperation);
     if (domain == null)
       return new SynchronizationProviderResult(true);
 
@@ -379,8 +368,10 @@
   public SynchronizationProviderResult
       doPreOperation(ModifyOperation modifyOperation)
   {
-    SynchronizationDomain domain = findDomain(modifyOperation.getEntryDN());
-    if (domain == null)
+    DN operationDN = modifyOperation.getEntryDN();
+    SynchronizationDomain domain = findDomain(operationDN, modifyOperation);
+
+    if ((domain == null) || (!domain.solveConflict()))
       return new SynchronizationProviderResult(true);
 
     Historical historicalInformation = (Historical)
@@ -423,7 +414,8 @@
   @Override
   public SynchronizationProviderResult doPreOperation(AddOperation addOperation)
   {
-    SynchronizationDomain domain = findDomain(addOperation.getEntryDN());
+    SynchronizationDomain domain =
+      findDomain(addOperation.getEntryDN(), addOperation);
     if (domain == null)
       return new SynchronizationProviderResult(true);
 
@@ -457,8 +449,15 @@
    * @param dn The DN for which the domain must be returned.
    * @return The Synchronization domain for this DN.
    */
-  private static SynchronizationDomain findDomain(DN dn)
+  private static SynchronizationDomain findDomain(DN dn, Operation op)
   {
+    /*
+     * Don't run the special synchronization code on Operation that are
+     * specifically marked as don't synchronize.
+     */
+    if (op.dontSynchronize())
+      return null;
+
     SynchronizationDomain domain = null;
     DN temp = dn;
     do
@@ -471,13 +470,6 @@
       }
     } while (domain == null);
 
-    /*
-     * Don't apply synchronization to the special entry where the ServerState
-     * is stored.
-     */
-    if ((domain!= null) && (domain.getServerStateDN().equals(dn)))
-      return null;
-
     return domain;
   }
 
@@ -489,7 +481,7 @@
    */
   private void genericPostOperation(Operation operation, DN dn)
   {
-    SynchronizationDomain domain = findDomain(dn);
+    SynchronizationDomain domain = findDomain(dn, operation);
     if (domain == null)
       return;
 

--
Gitblit v1.10.0