From 0307cf849073c6710dea6f2fc7723f1199db601f Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 18 Dec 2014 15:04:55 +0000
Subject: [PATCH] OPENDJ-1602 (CR-5566) New pluggable storage based backend
---
opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendIndexConfiguration.xml | 232 +++++++++++++++++++++++++
opendj-sdk/opendj-server3x-adapter/src/test/resources/config/schema/02-config.ldif | 21 ++
opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PluggableBackendConfiguration.xml | 8
opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendVLVIndexConfiguration.xml | 232 +++++++++++++++++++++++++
4 files changed, 489 insertions(+), 4 deletions(-)
diff --git a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendIndexConfiguration.xml b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendIndexConfiguration.xml
new file mode 100644
index 0000000..67d100f
--- /dev/null
+++ b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendIndexConfiguration.xml
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ! 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 legal-notices/CDDLv1_0.txt
+ ! or http://forgerock.org/license/CDDLv1.0.html.
+ ! 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 legal-notices/CDDLv1_0.txt.
+ ! 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 2007-2009 Sun Microsystems, Inc.
+ ! Portions copyright 2014 ForgeRock AS.
+ ! -->
+<adm:managed-object name="backend-index" plural-name="backend-indexes"
+ package="org.forgerock.opendj.server.config"
+ xmlns:adm="http://opendj.forgerock.org/admin"
+ xmlns:ldap="http://opendj.forgerock.org/admin-ldap">
+ <adm:synopsis>
+ <adm:user-friendly-plural-name />
+ are used to store information that makes it possible to locate
+ entries very quickly when processing search operations.
+ </adm:synopsis>
+ <adm:description>
+ Indexing is performed on a per-attribute level and different types
+ of indexing may be performed for different kinds of attributes, based
+ on how they are expected to be accessed during search operations.
+ </adm:description>
+ <adm:tag name="database" />
+ <adm:profile name="ldap">
+ <ldap:object-class>
+ <ldap:name>ds-cfg-backend-index</ldap:name>
+ <ldap:superior>top</ldap:superior>
+ </ldap:object-class>
+ </adm:profile>
+ <adm:property name="attribute" mandatory="true" read-only="true">
+ <adm:synopsis>
+ Specifies the name of the attribute for which the index is to
+ be maintained.
+ </adm:synopsis>
+ <adm:syntax>
+ <adm:attribute-type />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-attribute</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="index-entry-limit">
+ <adm:synopsis>
+ Specifies the maximum number of entries that are allowed
+ to match a given index key before that particular index key is no
+ longer maintained.
+ </adm:synopsis>
+ <adm:description>
+ This is analogous to the ALL IDs threshold in the Sun Java System
+ Directory Server. If this is specified, its value overrides the JE
+ backend-wide configuration. For no limit, use 0 for the value.
+ </adm:description>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ If any index keys have already reached this limit, indexes
+ must be rebuilt before they will be allowed to use the
+ new limit.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:default-behavior>
+ <adm:inherited>
+ <adm:relative property-name="index-entry-limit" offset="1"
+ managed-object-name="local-db-backend" />
+ </adm:inherited>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:integer lower-limit="0" upper-limit="2147483647">
+ <adm:unit-synopsis>Number of entries</adm:unit-synopsis>
+ </adm:integer>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-index-entry-limit</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="index-type" mandatory="true"
+ multi-valued="true">
+ <adm:synopsis>
+ Specifies the type(s) of indexing that should be performed
+ for the associated attribute.
+ </adm:synopsis>
+ <adm:description>
+ For equality, presence, and substring index types, the associated
+ attribute type must have a corresponding matching rule.
+ </adm:description>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ If any new index types are added for an attribute, and
+ values for that attribute already exist in the
+ database, the index must be rebuilt before it
+ will be accurate.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:syntax>
+ <adm:enumeration>
+ <adm:value name="equality">
+ <adm:synopsis>
+ This index type is used to improve the efficiency
+ of searches using equality search filters.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="ordering">
+ <adm:synopsis>
+ This index type is used to improve the efficiency
+ of searches using "greater than or equal to" or "less then
+ or equal to" search filters.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="presence">
+ <adm:synopsis>
+ This index type is used to improve the efficiency
+ of searches using the presence search filters.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="substring">
+ <adm:synopsis>
+ This index type is used to improve the efficiency
+ of searches using substring search filters.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="approximate">
+ <adm:synopsis>
+ This index type is used to improve the efficiency
+ of searches using approximate matching search filters.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="extensible">
+ <adm:synopsis>
+ This index type is used to improve the efficiency
+ of searches using extensible matching search filters.
+ </adm:synopsis>
+ </adm:value>
+ </adm:enumeration>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-index-type</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="substring-length" advanced="true">
+ <adm:synopsis>
+ The length of substrings in a substring index.
+ </adm:synopsis>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ The index must be rebuilt before it will reflect the
+ new value.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>6</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:integer lower-limit="3" />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-substring-length</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="index-extensible-matching-rule" multi-valued="true">
+ <adm:synopsis>
+ The extensible matching rule in an extensible index.
+ </adm:synopsis>
+ <adm:description>
+ An extensible matching rule must be specified using either LOCALE or OID of the matching rule.
+ </adm:description>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ The index must be rebuilt before it will reflect the
+ new value.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:default-behavior>
+ <adm:alias>
+ <adm:synopsis>
+ No extensible matching rules will be indexed.
+ </adm:synopsis>
+ </adm:alias>
+ </adm:default-behavior>
+ <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>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+</adm:managed-object>
diff --git a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendVLVIndexConfiguration.xml b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendVLVIndexConfiguration.xml
new file mode 100644
index 0000000..670d09f
--- /dev/null
+++ b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/BackendVLVIndexConfiguration.xml
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ! 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 legal-notices/CDDLv1_0.txt
+ ! or http://forgerock.org/license/CDDLv1.0.html.
+ ! 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 legal-notices/CDDLv1_0.txt.
+ ! 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 2007-2008 Sun Microsystems, Inc.
+ ! Portions copyright 2014 ForgeRock AS.
+ ! -->
+<adm:managed-object name="backend-vlv-index"
+ plural-name="backend-vlv-indexes"
+ package="org.forgerock.opendj.server.config"
+ xmlns:adm="http://opendj.forgerock.org/admin"
+ xmlns:ldap="http://opendj.forgerock.org/admin-ldap">
+ <adm:synopsis>
+ <adm:user-friendly-plural-name />
+ are used to store information about a specific search request that
+ makes it possible to efficiently process them using the VLV control.
+ </adm:synopsis>
+ <adm:description>
+ A VLV index effectively notifies the server that a virtual list
+ view, with specific query and sort parameters, will be performed.
+ This index also allows the server to collect and maintain the
+ information required to make using the virtual list view faster.
+ </adm:description>
+ <adm:tag name="database" />
+ <adm:profile name="ldap">
+ <ldap:object-class>
+ <ldap:name>ds-cfg-backend-vlv-index</ldap:name>
+ <ldap:superior>top</ldap:superior>
+ </ldap:object-class>
+ </adm:profile>
+ <adm:property name="base-dn" mandatory="true">
+ <adm:synopsis>
+ Specifies the base DN used in the search query that is being
+ indexed.
+ </adm:synopsis>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ The index must be rebuilt after modifying this
+ property.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:syntax>
+ <adm:dn />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-base-dn</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="scope" mandatory="true">
+ <adm:synopsis>
+ Specifies the LDAP scope of the query that is being indexed.
+ </adm:synopsis>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ The index must be rebuilt after modifying this
+ property.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:syntax>
+ <adm:enumeration>
+ <adm:value name="base-object">
+ <adm:synopsis>Search the base object only.</adm:synopsis>
+ </adm:value>
+ <adm:value name="single-level">
+ <adm:synopsis>
+ Search the immediate children of the base object but do not
+ include any of their descendants or the base object itself.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="subordinate-subtree">
+ <adm:synopsis>
+ Search the entire subtree below the base object but do not
+ include the base object itself.
+ </adm:synopsis>
+ </adm:value>
+ <adm:value name="whole-subtree">
+ <adm:synopsis>
+ Search the base object and the entire subtree below the base
+ object.
+ </adm:synopsis>
+ </adm:value>
+ </adm:enumeration>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-scope</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="filter" mandatory="true">
+ <adm:synopsis>
+ Specifies the LDAP filter used in the query that is being indexed.
+ </adm:synopsis>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ The index must be rebuilt after modifying this
+ property.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:syntax>
+ <adm:string>
+ <adm:pattern>
+ <adm:regex>.*</adm:regex>
+ <adm:usage>STRING</adm:usage>
+ <adm:synopsis>
+ A valid LDAP search filter.
+ </adm:synopsis>
+ </adm:pattern>
+ </adm:string>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-filter</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="sort-order" mandatory="true">
+ <adm:synopsis>
+ Specifies the names of the attributes that are used to sort the
+ entries for the query being indexed.
+ </adm:synopsis>
+ <adm:description>
+ Multiple attributes can be used to determine the sort order by
+ listing the attribute names from highest to lowest precedence.
+ Optionally, + or - can be prefixed to the attribute name to sort
+ the attribute in ascending order or descending order respectively.
+ </adm:description>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ The index must be rebuilt after modifying this
+ property.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:syntax>
+ <adm:string>
+ <adm:pattern>
+ <adm:regex>.*</adm:regex>
+ <adm:usage>STRING</adm:usage>
+ <adm:synopsis>
+ Valid attribute types defined in the schema, separated by a
+ space and optionally prefixed by + or -.
+ </adm:synopsis>
+ </adm:pattern>
+ </adm:string>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-sort-order</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="name" mandatory="true" read-only="true">
+ <adm:synopsis>
+ Specifies a unique name for this VLV index.
+ </adm:synopsis>
+ <adm:requires-admin-action>
+ <adm:none>
+ <adm:synopsis>
+ The VLV index name cannot be altered after the index is created.
+ </adm:synopsis>
+ </adm:none>
+ </adm:requires-admin-action>
+ <adm:syntax>
+ <adm:string />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-name</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+ <adm:property name="max-block-size" read-only="true"
+ advanced="true">
+ <adm:synopsis>
+ Specifies the number of entry IDs to store in a single sorted
+ set before it must be split.
+ </adm:synopsis>
+ <adm:requires-admin-action>
+ <adm:none>
+ <adm:synopsis>
+ The blocks are resized lazily the next time the index is
+ modified.
+ </adm:synopsis>
+ </adm:none>
+ </adm:requires-admin-action>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>4000</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:integer>
+ <adm:unit-synopsis>Number of entry IDs</adm:unit-synopsis>
+ </adm:integer>
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:name>ds-cfg-max-block-size</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
+</adm:managed-object>
diff --git a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PluggableBackendConfiguration.xml b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PluggableBackendConfiguration.xml
index 882f836..b3be01a 100644
--- a/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PluggableBackendConfiguration.xml
+++ b/opendj-sdk/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PluggableBackendConfiguration.xml
@@ -39,8 +39,8 @@
<ldap:superior>ds-cfg-backend</ldap:superior>
</ldap:object-class>
</adm:profile>
- <adm:relation name="backend-index" managed-object-name="local-db-index">
- <adm:one-to-many naming-property="attribute" plural-name="backend-indexes">
+ <adm:relation name="backend-index">
+ <adm:one-to-many naming-property="attribute">
<adm:default-managed-object name="aci">
<adm:property name="index-type">
<adm:value>presence</adm:value>
@@ -93,8 +93,8 @@
</cli:relation>
</adm:profile>
</adm:relation>
- <adm:relation name="backend-vlv-index" managed-object-name="local-db-vlv-index">
- <adm:one-to-many naming-property="name" plural-name="backend-vlv-indexes"/>
+ <adm:relation name="backend-vlv-index">
+ <adm:one-to-many naming-property="name"/>
<adm:profile name="ldap">
<ldap:rdn-sequence>cn=VLV Index</ldap:rdn-sequence>
</adm:profile>
diff --git a/opendj-sdk/opendj-server3x-adapter/src/test/resources/config/schema/02-config.ldif b/opendj-sdk/opendj-server3x-adapter/src/test/resources/config/schema/02-config.ldif
index 3cdbe64..9df4060 100644
--- a/opendj-sdk/opendj-server3x-adapter/src/test/resources/config/schema/02-config.ldif
+++ b/opendj-sdk/opendj-server3x-adapter/src/test/resources/config/schema/02-config.ldif
@@ -5774,4 +5774,25 @@
ds-cfg-disk-full-threshold $
ds-cfg-disk-low-threshold )
X-ORIGIN 'OpenDJ Directory Server' )
+objectClasses: ( 1.3.6.1.4.1.36733.2.1.2.24
+ NAME 'ds-cfg-backend-index'
+ SUP top
+ STRUCTURAL
+ MUST ( ds-cfg-attribute $
+ ds-cfg-index-type )
+ MAY ( ds-cfg-index-entry-limit $
+ ds-cfg-substring-length $
+ ds-cfg-index-extensible-matching-rule )
+ X-ORIGIN 'OpenDJ Directory Server' )
+objectClasses: ( 1.3.6.1.4.1.36733.2.1.2.25
+ NAME 'ds-cfg-backend-vlv-index'
+ SUP top
+ STRUCTURAL
+ MUST ( ds-cfg-base-dn $
+ ds-cfg-scope $
+ ds-cfg-filter $
+ ds-cfg-sort-order $
+ ds-cfg-name )
+ MAY ds-cfg-max-block-size
+ X-ORIGIN 'OpenDJ Directory Server' )
--
Gitblit v1.10.0