From e4437177e635426c1db490626005a4a3f500835d 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
---
/dev/null | 185 ------------------------------
opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java | 11 -
opendj-sdk/opends/src/messages/messages/jeb.properties | 2
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java | 50 +++++++-
opendj-sdk/opends/src/server/org/opends/server/admin/PropertyValueVisitor.java | 20 ---
opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBIndexConfiguration.xml | 14 +
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java | 10 +
opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionVisitor.java | 16 --
8 files changed, 64 insertions(+), 244 deletions(-)
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBIndexConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBIndexConfiguration.xml
index cfb2ad9..5768672 100644
--- a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBIndexConfiguration.xml
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBIndexConfiguration.xml
@@ -212,9 +212,17 @@
</adm:synopsis>
</adm:alias>
</adm:default-behavior>
- <adm:syntax>
- <adm:extensible-matching-rule-type/>
- </adm:syntax>
+ <adm:syntax>
+ <adm:string>
+ <adm:pattern>
+ <adm:regex>([a-z][a-z](-[A-Z][A-Z]){0,2}(.(([a-z]{2,3})|\\d))?)|(^\\d.((\\d)+.)+\\d$)</adm:regex>
+ <adm:usage>LOCALE | OID</adm:usage>
+ <adm:synopsis>
+ A Locale or an OID.
+ </adm:synopsis>
+ </adm:pattern>
+ </adm:string>
+ </adm:syntax>
<adm:profile name="ldap">
<ldap:attribute>
<ldap:name>ds-cfg-index-extensible-matching-rule</ldap:name>
diff --git a/opendj-sdk/opends/src/messages/messages/jeb.properties b/opendj-sdk/opends/src/messages/messages/jeb.properties
index e915037..8f658d9 100644
--- a/opendj-sdk/opends/src/messages/messages/jeb.properties
+++ b/opendj-sdk/opends/src/messages/messages/jeb.properties
@@ -356,3 +356,5 @@
%d entries
MILD_WARN_BACKUPDB_INCREMENTAL_NOT_FOUND_DOING_NORMAL_191=Could not find any \
backup in '%s'. A full backup will be executed
+SEVERE_ERR_CONFIG_INDEX_TYPE_NEEDS_VALID_MATCHING_RULE_192=The attribute '%s' \
+cannot have extensible index type for invalid matching rule name '%s'
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/ExtensibleMatchingRuleTypePropertyDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/ExtensibleMatchingRuleTypePropertyDefinition.java
deleted file mode 100644
index 25dbde0..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/ExtensibleMatchingRuleTypePropertyDefinition.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- * Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- * Copyright 2009 Sun Microsystems, Inc.
- */
-
-package org.opends.server.admin;
-
-import java.util.EnumSet;
-import org.opends.server.api.ExtensibleMatchingRule;
-
-import org.opends.server.core.DirectoryServer;
-import static org.opends.server.util.Validator.ensureNotNull;
-
-/**
- * Extensible Matching Rule Type Propertiy Definition.
- */
-public final class ExtensibleMatchingRuleTypePropertyDefinition
- extends PropertyDefinition<ExtensibleMatchingRule>
-{
-
- /**
- * An interface for incrementally constructing attribute type
- * property definitions.
- */
- public static class Builder extends
- AbstractBuilder<ExtensibleMatchingRule,
- ExtensibleMatchingRuleTypePropertyDefinition> {
-
- // Private constructor
- private Builder(AbstractManagedObjectDefinition<?, ?> d,
- String propertyName) {
- super(d, propertyName);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected ExtensibleMatchingRuleTypePropertyDefinition buildInstance(
- AbstractManagedObjectDefinition<?, ?> d, String propertyName,
- EnumSet<PropertyOption> options,
- AdministratorAction adminAction,
- DefaultBehaviorProvider<ExtensibleMatchingRule> defaultBehavior) {
- return new ExtensibleMatchingRuleTypePropertyDefinition(d, propertyName,
- options, adminAction, defaultBehavior);
- }
- }
-
-
- /**
- * Create an extensible matching rule type property definition builder.
- *
- * @param d
- * The managed object definition associated with this
- * property definition.
- * @param propertyName
- * The property name.
- * @return Returns the new attribute type property definition
- * builder.
- */
- public static Builder createBuilder(
- AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
- return new Builder(d, propertyName);
- }
-
-
-
- /**
- * Creates a new insantce of this class.
- */
- private ExtensibleMatchingRuleTypePropertyDefinition(
- AbstractManagedObjectDefinition<?, ?> d, String propertyName,
- EnumSet<PropertyOption> options,
- AdministratorAction adminAction,
- DefaultBehaviorProvider<ExtensibleMatchingRule> defaultBehavior) {
- super(d, ExtensibleMatchingRule.class, propertyName, options,
- adminAction, defaultBehavior);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public <R, P> R accept(PropertyDefinitionVisitor<R, P> v, P p) {
- return v.visitExtensibleMatchingRuleType(this, p);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public <R, P> R accept(PropertyValueVisitor<R, P> v,
- ExtensibleMatchingRule value, P p) {
- return v.visitExtensibleMatchingRuleType(this, value, p);
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int compare(ExtensibleMatchingRule o1, ExtensibleMatchingRule o2) {
- return o1.getOID().compareToIgnoreCase(o2.getOID());
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public ExtensibleMatchingRule decodeValue(String value)
- throws IllegalPropertyValueStringException {
- ensureNotNull(value);
-
- String name = value.trim().toLowerCase();
- //Check if the name is a valid Matching rule OID or a Locale value.
- ExtensibleMatchingRule rule =
- DirectoryServer.getExtensibleMatchingRule(name);
-
- if (rule == null) {
- throw new IllegalPropertyValueStringException(this, value);
- } else {
- try {
- validateValue(rule);
- return rule;
- } catch (IllegalPropertyValueException e) {
- throw new IllegalPropertyValueStringException(this, value);
- }
- }
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String encodeValue(ExtensibleMatchingRule value)
- throws IllegalPropertyValueException {
- return value.getNameOrOID();
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void validateValue(ExtensibleMatchingRule value)
- throws IllegalPropertyValueException {
- ensureNotNull(value);
-
- // No implementation required.
- }
-}
\ No newline at end of file
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
index ee38963..ecb17af 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
@@ -338,17 +338,6 @@
* {@inheritDoc}
*/
@Override
- public Message visitExtensibleMatchingRuleType(
- ExtensibleMatchingRuleTypePropertyDefinition d, Void p) {
- return Message.raw("LOCALE | OID");
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- @Override
public <T> Message visitUnknown(PropertyDefinition<T> d, Void p)
throws UnknownPropertyDefinitionException {
return Message.raw("?");
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionVisitor.java b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionVisitor.java
index 67ab9a9..5f0f9cb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionVisitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionVisitor.java
@@ -268,22 +268,6 @@
- /**
- * Visit an extensible matching rule property definition.
- *
- * @param pd
- * The string property definition to visit.
- * @param p
- * A visitor specified parameter.
- * @return Returns a visitor specified result.
- */
- public R visitExtensibleMatchingRuleType(
- ExtensibleMatchingRuleTypePropertyDefinition pd, P p) {
- return visitUnknown(pd, p);
- }
-
-
-
/**
* Visit an unknown type of property definition. Implementations of
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyValueVisitor.java b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyValueVisitor.java
index c7b42be..61b881e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyValueVisitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyValueVisitor.java
@@ -35,7 +35,6 @@
import org.opends.server.types.AttributeType;
import org.opends.server.types.DN;
import org.opends.server.authorization.dseecompat.Aci;
-import org.opends.server.api.ExtensibleMatchingRule;
/**
@@ -309,25 +308,6 @@
/**
- * Visit an extensible matching rule type.
- *
- * @param pd
- * The extensible matching rule type property definition.
- * @param v
- * The property value to visit.
- * @param p
- * A visitor specified parameter.
- * @return Returns a visitor specified result.
- */
- public R visitExtensibleMatchingRuleType(
- ExtensibleMatchingRuleTypePropertyDefinition pd,
- ExtensibleMatchingRule v, P p) {
- return visitUnknown(pd, v, p);
- }
-
-
-
- /**
* Visit an unknown type of property value. Implementations of this
* method can provide default behavior for unknown types of
* property.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
index aa08a28..dfcfa8e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
+++ b/opendj-sdk/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);
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
index ed68cc0..4d9a025 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -1142,10 +1142,16 @@
hasSubIndex = true;
break;
}
- Set<ExtensibleMatchingRule> matchingRules =
+ Set<String> matchingRules =
indexCfg.getIndexExtensibleMatchingRule();
- for(ExtensibleMatchingRule rule: matchingRules)
+ for(String ruleName: matchingRules)
{
+ ExtensibleMatchingRule rule =
+ DirectoryServer.getExtensibleMatchingRule(ruleName);
+ if(rule == null)
+ {
+ continue;
+ }
for(ExtensibleIndexer indexer: rule.getIndexers(null))
{
String indexID = indexer.getExtensibleIndexID();
--
Gitblit v1.10.0