From 9dea9b99c7ee9acd02ad2e15dfa7a7dd8fc97c80 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 13 May 2015 12:33:54 +0000
Subject: [PATCH] More code simplifications.
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java | 160 ++++++++++++++++++++++++-----------------------------
1 files changed, 72 insertions(+), 88 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
index 8f768bc..b4e3ad9 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
@@ -681,92 +681,89 @@
private Suffix getSuffix(WriteableTransaction txn, EntryContainer entryContainer)
throws ConfigException, DirectoryException
{
- DN baseDN = entryContainer.getBaseDN();
- EntryContainer sourceEntryContainer = null;
- List<DN> includeBranches = new ArrayList<>();
- List<DN> excludeBranches = new ArrayList<>();
-
- if (!importCfg.appendToExistingData()
- && !importCfg.clearBackend())
+ if (importCfg.appendToExistingData() || importCfg.clearBackend())
{
- for (DN dn : importCfg.getExcludeBranches())
+ return new Suffix(entryContainer);
+ }
+
+ final DN baseDN = entryContainer.getBaseDN();
+ if (importCfg.getExcludeBranches().contains(baseDN))
+ {
+ // This entire base DN was explicitly excluded. Skip.
+ return null;
+ }
+
+ EntryContainer sourceEntryContainer = null;
+ List<DN> excludeBranches = getDescendants(baseDN, importCfg.getExcludeBranches());
+ List<DN> includeBranches = null;
+ if (!importCfg.getIncludeBranches().isEmpty())
+ {
+ includeBranches = getDescendants(baseDN, importCfg.getIncludeBranches());
+ if (includeBranches.isEmpty())
{
- if (baseDN.equals(dn))
+ // There are no branches in the explicitly defined include list under this base DN.
+ // Skip this base DN altogether.
+ return null;
+ }
+
+ // Remove any overlapping include branches.
+ Iterator<DN> includeBranchIterator = includeBranches.iterator();
+ while (includeBranchIterator.hasNext())
+ {
+ DN includeDN = includeBranchIterator.next();
+ if (!isAnyNotEqualAndAncestorOf(includeBranches, includeDN))
{
- // This entire base DN was explicitly excluded. Skip.
- return null;
- }
- if (baseDN.isAncestorOf(dn))
- {
- excludeBranches.add(dn);
+ includeBranchIterator.remove();
}
}
- if (!importCfg.getIncludeBranches().isEmpty())
+ // Remove any exclude branches that are not are not under a include branch
+ // since they will be migrated as part of the existing entries
+ // outside of the include branches anyways.
+ Iterator<DN> excludeBranchIterator = excludeBranches.iterator();
+ while (excludeBranchIterator.hasNext())
{
- for (DN dn : importCfg.getIncludeBranches())
+ DN excludeDN = excludeBranchIterator.next();
+ if (!isAnyAncestorOf(includeBranches, excludeDN))
{
- if (baseDN.isAncestorOf(dn))
- {
- includeBranches.add(dn);
- }
+ excludeBranchIterator.remove();
}
+ }
- if (includeBranches.isEmpty())
- {
- /*
- * There are no branches in the explicitly defined include list under
- * this base DN. Skip this base DN all together.
- */
- return null;
- }
+ if (excludeBranches.isEmpty()
+ && includeBranches.size() == 1
+ && includeBranches.get(0).equals(baseDN))
+ {
+ // This entire base DN is explicitly included in the import with
+ // no exclude branches that we need to migrate.
+ // Just clear the entry container.
+ clearSuffix(entryContainer);
+ }
+ else
+ {
+ sourceEntryContainer = entryContainer;
- // Remove any overlapping include branches.
- Iterator<DN> includeBranchIterator = includeBranches.iterator();
- while (includeBranchIterator.hasNext())
- {
- DN includeDN = includeBranchIterator.next();
- if (!isAnyNotEqualAndAncestorOf(includeBranches, includeDN))
- {
- includeBranchIterator.remove();
- }
- }
-
- // Remove any exclude branches that are not are not under a include
- // branch since they will be migrated as part of the existing entries
- // outside of the include branches anyways.
- Iterator<DN> excludeBranchIterator = excludeBranches.iterator();
- while (excludeBranchIterator.hasNext())
- {
- DN excludeDN = excludeBranchIterator.next();
- if (!isAnyAncestorOf(includeBranches, excludeDN))
- {
- excludeBranchIterator.remove();
- }
- }
-
- if (excludeBranches.isEmpty()
- && includeBranches.size() == 1
- && includeBranches.get(0).equals(baseDN))
- {
- // This entire base DN is explicitly included in the import with
- // no exclude branches that we need to migrate.
- // Just clear the entry container.
- clearSuffix(entryContainer);
- }
- else
- {
- sourceEntryContainer = entryContainer;
-
- // Create a temp entry container
- DN tempDN = baseDN.child(DN.valueOf("dc=importTmp"));
- entryContainer = rootContainer.openEntryContainer(tempDN, txn);
- }
+ // Create a temp entry container
+ DN tempDN = baseDN.child(DN.valueOf("dc=importTmp"));
+ entryContainer = rootContainer.openEntryContainer(tempDN, txn);
}
}
return new Suffix(entryContainer, sourceEntryContainer, includeBranches, excludeBranches);
}
+ private List<DN> getDescendants(DN baseDN, Set<DN> dns)
+ {
+ final List<DN> results = new ArrayList<>();
+ for (DN dn : dns)
+ {
+ if (baseDN.isAncestorOf(dn))
+ {
+ results.add(dn);
+ }
+ }
+ return results;
+ }
+
private static void clearSuffix(EntryContainer entryContainer)
{
entryContainer.lock();
@@ -1418,14 +1415,15 @@
}
suffix.removePending(entryDN);
processDN2ID(suffix, entryDN, entryID);
+ suffix.getDN2URI().addEntry(txn, entry);
}
else
{
suffix.removePending(entryDN);
entryID = oldID;
+ suffix.getDN2URI().replaceEntry(txn, oldEntry, entry);
}
- processDN2URI(txn, suffix, oldEntry, entry);
suffix.getID2Entry().put(txn, entryID, entry);
if (oldEntry != null)
{
@@ -1543,7 +1541,7 @@
}
suffix.removePending(entryDN);
processDN2ID(suffix, entryDN, entryID);
- processDN2URI(txn, suffix, null, entry);
+ suffix.getDN2URI().addEntry(txn, entry);
processIndexes(suffix, entry, entryID);
processVLVIndexes(txn, suffix, entry, entryID);
suffix.getID2Entry().put(txn, entryID, entry);
@@ -1709,20 +1707,6 @@
int indexID = processKey(dn2id, dnBytes, entryID, dnIndexKey, true);
indexIDToECMap.putIfAbsent(indexID, suffix.getEntryContainer());
}
-
- void processDN2URI(WriteableTransaction txn, Suffix suffix, Entry oldEntry, Entry newEntry)
- throws StorageRuntimeException
- {
- DN2URI dn2uri = suffix.getDN2URI();
- if (oldEntry != null)
- {
- dn2uri.replaceEntry(txn, oldEntry, newEntry);
- }
- else
- {
- dn2uri.addEntry(txn, newEntry);
- }
- }
}
/**
@@ -2707,7 +2691,7 @@
void initialize() throws ConfigException, InitializationException
{
entryContainer = rootContainer.getEntryContainer(rebuildConfig.getBaseDN());
- suffix = new Suffix(entryContainer, null, null, null);
+ suffix = new Suffix(entryContainer);
}
private void printStartMessage(WriteableTransaction txn) throws StorageRuntimeException
@@ -3176,7 +3160,7 @@
}
if (rebuildDn2uri)
{
- processDN2URI(txn, suffix, null, entry);
+ suffix.getDN2URI().addEntry(txn, entry);
}
processIndexes(entry, entryID);
processVLVIndexes(txn, entry, entryID);
--
Gitblit v1.10.0