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