From b0bd40fa373c990e1f1d8619b45ffb1425e5b85d Mon Sep 17 00:00:00 2001
From: sin <sin@localhost>
Date: Mon, 30 Mar 2009 17:06:50 +0000
Subject: [PATCH] Issue# 3793: Can not create extensible indexes using the dsconfig
---
opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java | 50 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java b/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
index aa08a28..dfcfa8e 100644
--- a/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
+++ b/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
@@ -47,6 +47,8 @@
import org.opends.server.config.ConfigException;
import static org.opends.messages.JebMessages.*;
import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.util.StaticUtils.toLowerCase;
import org.opends.server.core.DirectoryServer;
import org.opends.server.util.StaticUtils;
@@ -250,7 +252,7 @@
if (indexConfig.getIndexType().contains(
LocalDBIndexCfgDefn.IndexType.EXTENSIBLE))
{
- Set<ExtensibleMatchingRule> extensibleRules =
+ Set<String> extensibleRules =
indexConfig.getIndexExtensibleMatchingRule();
if(extensibleRules == null || extensibleRules.size() == 0)
{
@@ -264,8 +266,19 @@
//indexer and index. A Collation substring matching rule is treated
// differently as it uses a separate indexer and index.
IndexConfig config = new JEIndexConfig(indexConfig.getSubstringLength());
- for(ExtensibleMatchingRule rule:extensibleRules)
+ for(String ruleName:extensibleRules)
{
+ ExtensibleMatchingRule rule =
+ DirectoryServer.getExtensibleMatchingRule(
+ toLowerCase(ruleName));
+ if(rule == null)
+ {
+ Message message =
+ ERR_CONFIG_INDEX_TYPE_NEEDS_VALID_MATCHING_RULE.get(
+ String.valueOf(attrType),ruleName);
+ logError(message);
+ continue;
+ }
Map<String,Index> indexMap = new HashMap<String,Index>();
for(ExtensibleIndexer indexer : rule.getIndexers(config))
{
@@ -1485,6 +1498,7 @@
* Get a string representation of this object.
* @return return A string representation of this object.
*/
+ @Override
public String toString()
{
return getName();
@@ -1545,7 +1559,7 @@
}
if (cfg.getIndexType().contains(LocalDBIndexCfgDefn.IndexType.EXTENSIBLE))
{
- Set<ExtensibleMatchingRule> newRules =
+ Set<String> newRules =
cfg.getIndexExtensibleMatchingRule();
if (newRules == null || newRules.size() == 0)
{
@@ -1895,15 +1909,29 @@
if (cfg.getIndexType().contains(
LocalDBIndexCfgDefn.IndexType.EXTENSIBLE))
{
- Set<ExtensibleMatchingRule> extensibleRules =
+ Set<String> extensibleRules =
cfg.getIndexExtensibleMatchingRule();
+ Set<ExtensibleMatchingRule> validRules =
+ new HashSet<ExtensibleMatchingRule>();
if(extensibleIndexes == null)
{
extensibleIndexes = new ExtensibleMatchingRuleIndex();
}
IndexConfig config = new JEIndexConfig(cfg.getSubstringLength());
- for(ExtensibleMatchingRule rule:extensibleRules)
+ for(String ruleName:extensibleRules)
{
+ ExtensibleMatchingRule rule =
+ DirectoryServer.getExtensibleMatchingRule(
+ toLowerCase(ruleName));
+ if(rule == null)
+ {
+ Message message =
+ ERR_CONFIG_INDEX_TYPE_NEEDS_VALID_MATCHING_RULE.get(
+ String.valueOf(attrType),ruleName);
+ logError(message);
+ continue;
+ }
+ validRules.add(rule);
Map<String,Index> indexMap = new HashMap<String,Index>();
for(ExtensibleIndexer indexer: rule.getIndexers(config))
{
@@ -1929,6 +1957,14 @@
env,
entryContainer);
extensibleIndexes.addIndex(extensibleIndex,indexID);
+ extensibleIndex.open();
+
+ if(!extensibleIndex.isTrusted())
+ {
+ adminActionRequired = true;
+ messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+ extensibleIndex.getName()));
+ }
}
else
{
@@ -1946,7 +1982,7 @@
{
Indexer extensibleIndexer =
new JEExtensibleIndexer(attrType,
- rule,
+ rule,
indexer);
extensibleIndex.setIndexer(extensibleIndexer);
}
@@ -1963,7 +1999,7 @@
new HashSet<ExtensibleMatchingRule>();
for(ExtensibleMatchingRule r:extensibleIndexes.getRules())
{
- if(!extensibleRules.contains(r))
+ if(!validRules.contains(r))
{
deletedRules.add(r);
}
--
Gitblit v1.10.0