From a997a5af5785ee040a9ef2bca66904c7624c0b60 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 29 Feb 2016 12:57:49 +0000
Subject: [PATCH] OPENDJ-2688 Upgrade: Error in matching rule when starting server after upgrade

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java |   42 +++++++++++++++++++++++++++++++-----------
 1 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
index b3d87e0..6699965 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java
@@ -23,8 +23,10 @@
 import java.io.FileReader;
 import java.io.FilenameFilter;
 import java.io.IOException;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -401,13 +403,29 @@
       writer.writeComment(INFO_CONFIG_FILE_HEADER.get());
       writer.setWrapColumn(0);
 
-      boolean entryAlreadyExist = false;
       DN ldifDN = null;
-      if (filter == null && (changeType == ADD || changeType == DELETE))
+      Set<DN> ldifDNs = new HashSet<>();
+      if (filter == null)
       {
-        // The first line should start with dn:
-        ldifDN = DN.valueOf(ldifLines[0].replaceFirst("dn: ", ""));
+        switch (changeType)
+        {
+        case ADD:
+          // The first line should start with dn:
+          ldifDN = DN.valueOf(removeDnPrefix(ldifLines[0]));
+          ldifDNs.add(ldifDN);
+          break;
+
+        case DELETE:
+          // All lines represent dns
+          for (String dnLine : ldifLines)
+          {
+            ldifDNs.add(DN.valueOf(removeDnPrefix(dnLine)));
+          }
+          break;
+        }
       }
+
+      boolean entryAlreadyExist = false;
       final Filter f = filter != null ? filter : Filter.alwaysFalse();
       final Matcher matcher = f.matcher(schema);
       while (entryReader.hasNext())
@@ -424,8 +442,7 @@
                 readLDIFLines(entryDN, changeType, ldifLines));
             entry = Entries.modifyEntryPermissive(entry, mr.getModifications());
             changeCount++;
-            logger.debug(LocalizableMessage.raw(
-                "The following entry has been modified : %s", entryDN));
+            logger.debug(LocalizableMessage.raw("The following entry has been modified : %s", entryDN));
           }
           catch (Exception ex)
           {
@@ -433,7 +450,7 @@
           }
         }
 
-        if (entryDN.equals(ldifDN))
+        if (ldifDNs.remove(entryDN))
         {
           logger.debug(LocalizableMessage.raw("Entry %s found", entryDN));
           entryAlreadyExist = true;
@@ -442,8 +459,7 @@
           {
             entry = null;
             changeCount++;
-            logger.debug(LocalizableMessage.raw(
-                "The following entry has been deleted : %s", entryDN));
+            logger.debug(LocalizableMessage.raw("The following entry has been deleted : %s", entryDN));
           }
         }
 
@@ -457,8 +473,7 @@
       {
         final AddRequest ar = Requests.newAddRequest(ldifLines);
         writer.writeEntry(ar);
-        logger.debug(LocalizableMessage.raw("Entry successfully added %s in %s",
-            ldifDN, original.getAbsolutePath()));
+        logger.debug(LocalizableMessage.raw("Entry successfully added %s in %s", ldifDN, original.getAbsolutePath()));
         changeCount++;
       }
     }
@@ -485,6 +500,11 @@
     return changeCount;
   }
 
+  private static String removeDnPrefix(String dnLine)
+  {
+    return dnLine.replaceFirst("dn: ", "");
+  }
+
   /**
    * This task adds new attributes / object classes to the specified destination
    * file. The new attributes and object classes must be originally defined in

--
Gitblit v1.10.0