From b5acb25ee2ad9bf8b166b9de1a34e6aab6ea23b7 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Fri, 01 Sep 2006 12:04:47 +0000
Subject: [PATCH] issue 604 : solve the naming conflict that might happen when several masters are used there are 3 main parts in this commit : - attach the replication context in an OperationContext - if operation replay fails then fix the problem  - in the pre-op checks for conflict and cause failure if necessary most of the time there should be no conflict and the operation should be processed normally

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ModifyConflictTest.java |  101 +++++++++++++++++++++++++-------------------------
 1 files changed, 51 insertions(+), 50 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ModifyConflictTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ModifyConflictTest.java
index 4d05a7a..2ed2b54 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ModifyConflictTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ModifyConflictTest.java
@@ -36,6 +36,8 @@
 import org.testng.annotations.Test;
 import static org.testng.Assert.*;
 
+import static org.opends.server.synchronization.OperationContext.*;
+
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.ModifyOperation;
 import org.opends.server.protocols.internal.InternalClientConnection;
@@ -47,13 +49,12 @@
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.ObjectClass;
-import static org.opends.server.synchronization.SynchMessages.SYNCHRONIZATION;
 
 /*
  * Test the conflict resolution for modify operations
  * This is still a work in progress.
  * currently implemented tests
- *  - check that an replace with a smaller csn is ignored 
+ *  - check that an replace with a smaller csn is ignored
  * should test :
  *  - conflict with multi-valued attributes
  *  - conflict with single-valued attributes
@@ -74,53 +75,53 @@
   @Test()
   public void replaceAndAdd()
          throws Exception
-  { 
+  {
     /*
      * Objectclass and DN do not have any impact on the modifty conflict
      * resolution for the description attribute.
      * Always use the same values for all these tests.
      */
-    DN dn = DN.decode("dc=com");    
+    DN dn = DN.decode("dc=com");
     Map<ObjectClass, String> objectClasses = new HashMap<ObjectClass, String>();
     ObjectClass org = DirectoryServer.getObjectClass("organization");
     objectClasses.put(org, "organization");
-    
+
     /*
      * start with a new entry with an empty description
      */
     Entry entry = new Entry(dn, objectClasses, null, null);
     Historical hist = Historical.load(entry);
-    
+
     /*
      * simulate a modify-replace done at time t10
      */
     testModify(entry, hist, "description", ModificationType.REPLACE,
                "init value", 10, true);
-    
+
     /*
      * Now simulate an add at an earlier date that the previous replace
      * conflict resolution should remove it.
-     */ 
+     */
     testModify(entry, hist, "description", ModificationType.ADD,
                "older value", 1, false);
-  
+
     /*
      * Now simulate an add at an earlier date that the previous replace
      * conflict resolution should remove it.
      * (a second time to make sure...)
-     */   
+     */
     testModify(entry, hist, "description", ModificationType.ADD,
                "older value", 2, false);
-    
+
     /*
      * Now simulate an add at a later date that the previous replace.
      * conflict resolution should keep it
-     */ 
+     */
     testModify(entry, hist, "description", ModificationType.ADD,
                "new value", 11, true);
-    
+
   }
-  
+
   /**
    * Test that conflict between a modify-delete-attribute and modify-add
    * for multi-valued attributes are handled correctly.
@@ -128,53 +129,53 @@
   @Test()
   public void deleteAndAdd()
          throws Exception
-  { 
+  {
     /*
      * Objectclass and DN do not have any impact on the modifty conflict
      * resolution for the description attribute.
      * Always use the same values for all these tests.
      */
-    DN dn = DN.decode("dc=com");    
+    DN dn = DN.decode("dc=com");
     Map<ObjectClass, String> objectClasses = new HashMap<ObjectClass, String>();
     ObjectClass org = DirectoryServer.getObjectClass("organization");
     objectClasses.put(org, "organization");
-    
+
     /*
      * start with a new entry with an empty description
      */
     Entry entry = new Entry(dn, objectClasses, null, null);
     Historical hist = Historical.load(entry);
-    
+
     /*
      * simulate a delete of the whole description attribute done at time t10
      */
     testModify(entry, hist, "description", ModificationType.DELETE,
                null, 10, true);
-    
+
     /*
      * Now simulate an add at an earlier date that the previous delete.
      * The conflict resolution should detect that this add must be ignored.
-     */ 
+     */
     testModify(entry, hist, "description",  ModificationType.ADD,
                "older value", 1, false);
-  
+
     /*
      * Now simulate an add at an earlier date that the previous delete.
      * The conflict resolution should detect that this add must be ignored.
      * (a second time to make sure that historical information is kept...)
-     */   
+     */
     testModify(entry, hist, "description", ModificationType.ADD,
                "older value", 2, false);
-    
+
     /*
      * Now simulate an add at a later date that the previous delete.
      * conflict resolution should keep it
-     */ 
+     */
     testModify(entry, hist, "description", ModificationType.ADD,
                "new value", 11, true);
-    
+
   }
-  
+
   /**
   * Test that conflict between a modify-add and modify-add
   * for multi-valued attributes are handled correctly.
@@ -182,67 +183,67 @@
  @Test()
  public void addAndAdd()
         throws Exception
- { 
+ {
    /*
     * Objectclass and DN do not have any impact on the modifty conflict
     * resolution for the description attribute.
     * Always use the same values for all these tests.
     */
-   DN dn = DN.decode("dc=com");    
+   DN dn = DN.decode("dc=com");
    Map<ObjectClass, String> objectClasses = new HashMap<ObjectClass, String>();
    ObjectClass org = DirectoryServer.getObjectClass("organization");
    objectClasses.put(org, "organization");
-   
+
    /*
     * start with a new entry with an empty description
     */
    Entry entry = new Entry(dn, objectClasses, null, null);
    Historical hist = Historical.load(entry);
-   
+
    /*
     * simulate a add of the description attribute done at time t10
     */
    testModify(entry, hist, "description", ModificationType.ADD,
               "init value", 10, true);
-   
+
    /*
     * Now simulate an add at an earlier date that the previous add.
     * The conflict resolution should detect that this add must be kept.
-    */ 
-   testModify(entry, hist, "description", ModificationType.ADD, 
+    */
+   testModify(entry, hist, "description", ModificationType.ADD,
               "older value", 1, true);
- 
+
    /*
     * Now simulate an add at an earlier date that the previous add.
     * The conflict resolution should detect that this add must be kept.
     * (a second time to make sure that historical information is kept...)
-    */   
+    */
    testModify(entry, hist, "description", ModificationType.ADD,
               "older value", 2, false);
-   
+
    /*
     * Now simulate an add at a later date that the previous add.
     * conflict resolution should keep it
-    */ 
+    */
    testModify(entry, hist, "description", ModificationType.ADD,
-              "new value", 11, true); 
+              "new value", 11, true);
  }
- 
+
   /*
    * helper function.
    */
-  private static void testModify(Entry entry, 
-      Historical hist, String attrName, 
+  private static void testModify(Entry entry,
+      Historical hist, String attrName,
       ModificationType modType, String value,
       int date, boolean keepChangeResult)
   {
     InternalClientConnection connection = new InternalClientConnection();
     ChangeNumber t = new ChangeNumber(date, (short) 0, (short) 0);
-    
+
     /* create AttributeType description that will be usedfor this test */
     AttributeType attrType =
       DirectoryServer.getAttributeType(attrName, true);
-    
+
     LinkedHashSet<AttributeValue> values = new LinkedHashSet<AttributeValue>();
     if (value != null)
       values.add(new AttributeValue(attrType, value));
@@ -250,17 +251,17 @@
     List<Modification> mods = new ArrayList<Modification>();
     Modification mod = new Modification(modType, attr);
     mods.add(mod);
-    
+
     ModifyOperation modOp = new ModifyOperation(connection, 1, 1, null,
                                               entry.getDN(), mods);
-    
-    modOp.setAttachment(SYNCHRONIZATION, t);
-    
+    ModifyContext ctx = new ModifyContext(t, "uniqueId");
+    modOp.setAttachment(SYNCHROCONTEXT, ctx);
+
     hist.replayOperation(modOp, entry);
-    
+
     /*
-     * The last older change should have been detected as conflicting 
-     * and should be removed by the conflict resolution code. 
+     * The last older change should have been detected as conflicting
+     * and should be removed by the conflict resolution code.
      */
     if (keepChangeResult)
     {

--
Gitblit v1.10.0