From f95e5533c089353bf365a5b6efd4ff6a4e881501 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <ylecaillez@forgerock.com>
Date: Thu, 15 Oct 2015 15:29:53 +0000
Subject: [PATCH] Fixes from PR #107 comments.
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java | 59 ++++++++++++++++++++---------------------------------------
1 files changed, 20 insertions(+), 39 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
index c91e81f..13f762c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
@@ -90,7 +90,6 @@
import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ResultCode;
-import org.forgerock.opendj.ldap.schema.MatchingRule;
import org.forgerock.opendj.ldap.spi.Indexer;
import org.forgerock.util.Reject;
import org.forgerock.util.Utils;
@@ -115,7 +114,6 @@
import org.opends.server.backends.pluggable.spi.WriteableTransaction;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ServerContext;
-import org.opends.server.types.AttributeType;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.Entry;
@@ -352,18 +350,18 @@
for (String name : rebuildList)
{
final String parts[] = name.split("\\.");
- final AttributeIndex attribute = findAttribute(entryContainer, parts[0]);
+ final AttributeIndex attrIndex = findAttributeIndex(entryContainer, parts[0]);
if (parts.length == 1)
{
// Add all indexes of this attribute
- for (Tree index : attribute.getNameToIndexes().values())
+ for (Tree index : attrIndex.getNameToIndexes().values())
{
indexNames.add(index.getName().getIndexId());
}
}
else if (parts.length == 2)
{
- // First, assume the supplied name is a valid index name.
+ // First, assume the supplied name is a valid index name ...
final SelectIndexName selector = new SelectIndexName();
visitIndexes(entryContainer, visitOnlyIndexes(Arrays.asList(name), selector));
indexNames.addAll(selector.getSelectedIndexNames());
@@ -372,7 +370,7 @@
// ... if not, assume the supplied name identify an attributeType.indexType
try
{
- indexNames.addAll(getIndexNames(IndexType.valueOf(parts[1].toUpperCase()), attribute));
+ indexNames.addAll(getIndexNames(IndexType.valueOf(parts[1].toUpperCase()), attrIndex));
}
catch (IllegalArgumentException e)
{
@@ -388,12 +386,12 @@
return indexNames;
}
- private static final AttributeIndex findAttribute(EntryContainer entryContainer, String name)
+ private static final AttributeIndex findAttributeIndex(EntryContainer entryContainer, String name)
throws InitializationException
{
for (AttributeIndex index : entryContainer.getAttributeIndexes())
{
- if (index.getAttributeType().getNameOrOID().equalsIgnoreCase(name))
+ if (index.getAttributeType().hasNameOrOID(name.toLowerCase()))
{
return index;
}
@@ -401,37 +399,20 @@
throw new InitializationException(ERR_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(name));
}
+
private static Collection<String> getIndexNames(IndexType indexType, AttributeIndex attrIndex)
{
- final Map<String, MatchingRuleIndex> indexes = attrIndex.getNameToIndexes();
-
- final AttributeType attrType = attrIndex.getAttributeType();
- final MatchingRule rule;
- switch (indexType)
+ if (indexType.equals(IndexType.PRESENCE))
{
- case PRESENCE:
+ if (!attrIndex.isIndexed(org.opends.server.types.IndexType.PRESENCE))
+ {
+ throw new IllegalArgumentException("No index found for type " + indexType);
+ }
return Collections.singletonList(IndexType.PRESENCE.toString());
- case APPROXIMATE:
- rule = attrType.getApproximateMatchingRule();
- break;
- case EQUALITY:
- rule = attrType.getEqualityMatchingRule();
- break;
- case ORDERING:
- rule = attrType.getOrderingMatchingRule();
- break;
- case SUBSTRING:
- rule = attrType.getSubstringMatchingRule();
- break;
- default:
- throw new IllegalArgumentException("Not implemented for index type " + indexType);
- }
- if (rule == null)
- {
- throw new IllegalArgumentException("No matching rule for index type " + indexType);
}
final Set<String> indexNames = new HashSet<>();
- for (Indexer indexer : rule.createIndexers(attrIndex.getIndexingOptions()))
+ for (Indexer indexer : AttributeIndex.getMatchingRule(indexType, attrIndex.getAttributeType())
+ .createIndexers(attrIndex.getIndexingOptions()))
{
final Tree indexTree = attrIndex.getNameToIndexes().get(indexer.getIndexID());
if (indexTree == null)
@@ -3366,7 +3347,7 @@
/** Visitor pattern allowing to process all type of indexes. */
private interface IndexVisitor
{
- void visitAttributeIndex(DefaultIndex index);
+ void visitAttributeIndex(Index index);
void visitVLVIndex(VLVIndex index);
@@ -3391,7 +3372,7 @@
}
@Override
- public void visitAttributeIndex(DefaultIndex index)
+ public void visitAttributeIndex(Index index)
{
index.setTrusted(txn, trustValue);
}
@@ -3425,7 +3406,7 @@
}
@Override
- public void visitAttributeIndex(DefaultIndex index)
+ public void visitAttributeIndex(Index index)
{
clearTree(index);
}
@@ -3464,7 +3445,7 @@
}
@Override
- public void visitAttributeIndex(DefaultIndex index)
+ public void visitAttributeIndex(Index index)
{
if (!index.isTrusted())
{
@@ -3504,7 +3485,7 @@
}
@Override
- public void visitAttributeIndex(DefaultIndex index)
+ public void visitAttributeIndex(Index index)
{
addIndex(index);
}
@@ -3549,7 +3530,7 @@
}
@Override
- public void visitAttributeIndex(DefaultIndex index)
+ public void visitAttributeIndex(Index index)
{
if (indexIncluded(index))
{
--
Gitblit v1.10.0