From 4beea894b2a86570126633b70f2a740b99e86318 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Wed, 23 Mar 2016 16:54:44 +0000
Subject: [PATCH] OPENDJ-2763 Fix upgrade
---
opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeUtils.java | 53 +++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 43 insertions(+), 10 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 7595be1..92e6c0d 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
@@ -24,9 +24,11 @@
import java.io.FilenameFilter;
import java.io.IOException;
import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.forgerock.i18n.LocalizableMessage;
@@ -336,31 +338,32 @@
}
/**
- * Retrieves the backends from the current configuration file. The backends
- * must be enabled to be listed. No operations should be done within a
- * disabled backend.
+ * Return a {@link Map} with backend id as key and associated baseDNs as values.
+ * <p>
+ * Disabled backends are not filtered out.
*
- * @return A backend list.
+ * @return A {@link Map} of all enabled backends of the server with their baseDNs.
*/
- static List<String> getIndexedBackendsFromConfig()
+ static Map<String, Set<String>> getBaseDNsPerBackendsFromConfig()
{
final SearchRequest sr = Requests.newSearchRequest("", SearchScope.WHOLE_SUBTREE,
"(&(objectclass=ds-cfg-pluggable-backend)(ds-cfg-enabled=true))",
- "ds-cfg-base-dn");
- final List<String> listBackends = new LinkedList<>();
+ "ds-cfg-base-dn", "ds-cfg-backend-id");
+ final Map<String, Set<String>> baseDNs = new HashMap<>();
try (final EntryReader entryReader = searchConfigFile(sr))
{
while (entryReader.hasNext())
{
final Entry entry = entryReader.readEntry();
- listBackends.addAll(entry.parseAttribute("ds-cfg-base-dn").asSetOfString());
+ baseDNs.put(entry.parseAttribute("ds-cfg-backend-id").asString(),
+ entry.parseAttribute("ds-cfg-base-dn").asSetOfString());
}
}
catch (Exception ex)
{
logger.error(LocalizableMessage.raw(ex.getMessage()));
}
- return listBackends;
+ return baseDNs;
}
static EntryReader searchConfigFile(final SearchRequest sr) throws FileNotFoundException
@@ -796,6 +799,36 @@
return modifiedLines;
}
+ /** Filter provided list of indexes name to return indexes which are present in the provided backend. */
+ static List<String> filterExistingIndexes(final Set<String> candidateIndexes, final String backendID)
+ {
+ final List<String> indexesToRebuild = new ArrayList<>();
+ try (final LDIFEntryReader entryReader = new LDIFEntryReader(new FileInputStream(CONFIG_FILE_PATH)))
+ {
+ while (entryReader.hasNext())
+ {
+ final Entry entry = entryReader.readEntry();
+ if (entry.containsAttribute("objectClass", "ds-cfg-backend-index")
+ && entry.getName().toString().contains("ds-cfg-backend-id=" + backendID))
+ {
+ for (final String indexName : candidateIndexes)
+ {
+ if (entry.containsAttribute("ds-cfg-attribute", indexName))
+ {
+ indexesToRebuild.add(indexName);
+ }
+ }
+ }
+ }
+ }
+ catch (final IOException unlikely)
+ {
+ logger.error(ERR_UPGRADE_READING_CONF_FILE.get(unlikely.getMessage()));
+ }
+
+ return indexesToRebuild;
+ }
+
/** Prevent instantiation. */
private UpgradeUtils()
{
--
Gitblit v1.10.0