From 557685ab2073785439de1a4e203a6f72641afea7 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Thu, 23 Aug 2007 23:14:02 +0000
Subject: [PATCH] Added the JE backend configuration attribute to enable or disable compression when encoding entries for ID2Entry. When backend-compact-encoding is enabled, attribute type descriptions and object class sets will be encoded using a compressed form. This behavior is enabled by default.
---
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java | 10 ++-
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DataConfig.java | 59 ++++++++++++++++++-
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java | 4
opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/JEBackendConfiguration.xml | 35 +++++++++++
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebFormat.java | 14 ++--
opendj-sdk/opends/resource/schema/02-config.ldif | 7 ++
6 files changed, 110 insertions(+), 19 deletions(-)
diff --git a/opendj-sdk/opends/resource/schema/02-config.ldif b/opendj-sdk/opends/resource/schema/02-config.ldif
index af1d21d..617b7e0 100644
--- a/opendj-sdk/opends/resource/schema/02-config.ldif
+++ b/opendj-sdk/opends/resource/schema/02-config.ldif
@@ -1573,6 +1573,10 @@
attributeTypes: ( 1.3.6.1.4.1.26027.1.1.468
NAME 'ds-cfg-unique-attribute-base-dn' SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.471
+ NAME 'ds-cfg-backend-compact-encoding'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE
+ X-ORIGIN 'OpenDS Directory Server' )
objectClasses: ( 1.3.6.1.4.1.26027.1.2.1
NAME 'ds-cfg-access-control-handler' SUP top STRUCTURAL
MUST ( cn $ ds-cfg-acl-handler-class $ ds-cfg-acl-handler-enabled )
@@ -1619,7 +1623,8 @@
ds-cfg-database-logging-file-handler-on $ ds-cfg-database-logging-level $
ds-cfg-database-checkpointer-bytes-interval $
ds-cfg-database-checkpointer-wakeup-interval $
- ds-cfg-database-lock-num-lock-tables $ ds-cfg-database-cleaner-num-threads )
+ ds-cfg-database-lock-num-lock-tables $ ds-cfg-database-cleaner-num-threads $
+ ds-cfg-backend-compact-encoding )
X-ORIGIN 'OpenDS Directory Server' )
objectClasses: ( 1.3.6.1.4.1.26027.1.2.7 NAME 'ds-cfg-je-database'
SUP top STRUCTURAL MAY ( cn $ ds-cfg-database-cache-percent $
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/JEBackendConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/JEBackendConfiguration.xml
index e799fbe..22ddb35 100644
--- a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/JEBackendConfiguration.xml
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/JEBackendConfiguration.xml
@@ -145,6 +145,41 @@
</ldap:attribute>
</adm:profile>
</adm:property>
+ <adm:property name="backend-compact-encoding"
+ mandatory="false"
+ multi-valued="false">
+ <adm:synopsis>
+ Indicates whether the backend should use a compact form when encoding
+ entries by compressing the attribute descriptions and object class sets.
+ </adm:synopsis>
+ <adm:description>
+ Note that this property applies only to the entries themselves
+ and does not impact the index data.
+ </adm:description>
+ <adm:requires-admin-action>
+ <adm:other>
+ <adm:synopsis>
+ Changes to this setting will only take effect for writes that occur
+ after the change is made. It will not be retroactively applied to
+ existing data.
+ </adm:synopsis>
+ </adm:other>
+ </adm:requires-admin-action>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>true</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
+ <adm:syntax>
+ <adm:boolean />
+ </adm:syntax>
+ <adm:profile name="ldap">
+ <ldap:attribute>
+ <ldap:oid>1.3.6.1.4.1.26027.1.1.471</ldap:oid>
+ <ldap:name>ds-cfg-backend-compact-encoding</ldap:name>
+ </ldap:attribute>
+ </adm:profile>
+ </adm:property>
<adm:property name="backend-entries-compressed"
mandatory="false"
multi-valued="false">
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DataConfig.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DataConfig.java
index 268b337..e1eda2f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DataConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DataConfig.java
@@ -26,6 +26,8 @@
*/
package org.opends.server.backends.jeb;
+import org.opends.server.types.EntryEncodeConfig;
+
/**
* Configuration class to indicate desired compression and cryptographic options
* for the data stored in the database.
@@ -37,7 +39,24 @@
*/
private boolean compressed = false;
+ /**
+ * The configuration to use when encoding entries in the database.
+ */
+ private EntryEncodeConfig encodeConfig = new EntryEncodeConfig();
+ /**
+ * Constrct a new DataConfig object with the specified settings.
+ *
+ * @param compressed true if data should be compressed, false if not.
+ * @param compactEncoding true if data should be encoded in compact form,
+ * false if not.
+ */
+ public DataConfig(boolean compressed, boolean compactEncoding)
+ {
+ this.compressed = compressed;
+ this.encodeConfig = new EntryEncodeConfig(false, compactEncoding,
+ compactEncoding);
+ }
/**
* Determine whether data should be compressed before writing to the database.
@@ -48,6 +67,16 @@
return compressed;
}
+ /**
+ * Determine whether entries should be encoded with the compact form before
+ * writing to the database.
+ * @return true if data should be encoded in the compact form.
+ */
+ public boolean isCompactEncoding()
+ {
+ return encodeConfig.compressAttributeDescriptions();
+ }
+
/**
@@ -60,16 +89,38 @@
}
/**
+ * Configure whether data should be encoded with the compact form before
+ * writing to the database.
+ * @param compactEncoding true if data should be encoded in compact form,
+ * false if not.
+ */
+ public void setCompactEncoding(boolean compactEncoding)
+ {
+ this.encodeConfig = new EntryEncodeConfig(false, compactEncoding,
+ compactEncoding);
+ }
+
+ /**
+ * Get the EntryEncodeConfig object in use by this configuration.
+ * @return the EntryEncodeConfig object in use by this configuration.
+ */
+ public EntryEncodeConfig getEntryEncodeConfig()
+ {
+ return this.encodeConfig;
+ }
+
+ /**
* Get a string representation of this object.
* @return A string representation of this object.
*/
public String toString()
{
StringBuilder builder = new StringBuilder();
- if (compressed)
- {
- builder.append("[compressed]");
- }
+ builder.append("DataConfig(compressed=");
+ builder.append(compressed);
+ builder.append(", ");
+ encodeConfig.toString(builder);
+ builder.append(")");
return builder.toString();
}
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
index c6fe728..0080ff6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
@@ -481,8 +481,9 @@
{
try
{
- DataConfig entryDataConfig = new DataConfig();
- entryDataConfig.setCompressed(config.isBackendEntriesCompressed());
+ DataConfig entryDataConfig =
+ new DataConfig(config.isBackendEntriesCompressed(),
+ config.isBackendCompactEncoding());
id2entry = new ID2Entry(databasePrefix + "_" + ID2ENTRY_DATABASE_NAME,
entryDataConfig, env, this);
@@ -4241,8 +4242,9 @@
}
}
- DataConfig entryDataConfig = new DataConfig();
- entryDataConfig.setCompressed(cfg.isBackendEntriesCompressed());
+ DataConfig entryDataConfig =
+ new DataConfig(cfg.isBackendEntriesCompressed(),
+ cfg.isBackendCompactEncoding());
id2entry.setDataConfig(entryDataConfig);
this.config = cfg;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebFormat.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebFormat.java
index 6c950fb..2e133ae 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebFormat.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebFormat.java
@@ -73,11 +73,6 @@
public static final byte TAG_DIRECTORY_SERVER_ENTRY = 0x61;
/**
- * The configuration to use when encoding entries in the database.
- */
- private static EntryEncodeConfig encodeConfig = new EntryEncodeConfig();
-
- /**
* Decode a DatabaseEntry. The encoded bytes may be compressed and/or
* encrypted.
*
@@ -249,7 +244,8 @@
static public byte[] entryToDatabase(Entry entry, DataConfig dataConfig)
throws DirectoryException
{
- byte[] uncompressedBytes = encodeDirectoryServerEntry(entry);
+ byte[] uncompressedBytes = encodeDirectoryServerEntry(entry,
+ dataConfig.getEntryEncodeConfig());
return encodeDatabaseEntry(uncompressedBytes, dataConfig);
}
@@ -265,19 +261,21 @@
static public byte[] entryToDatabase(Entry entry)
throws DirectoryException
{
- return entryToDatabase(entry, new DataConfig());
+ return entryToDatabase(entry, new DataConfig(false, false));
}
/**
* Encode a ASN1 DirectoryServerEntry.
*
* @param entry The entry to encode.
+ * @encodeConfig The configuration to use when encoding the entry.
* @return A byte array containing the encoded DirectoryServerEntry.
*
* @throws DirectoryException If a problem occurs while attempting to encode
* the entry.
*/
- static private byte[] encodeDirectoryServerEntry(Entry entry)
+ static private byte[] encodeDirectoryServerEntry(Entry entry,
+ EntryEncodeConfig encodeConfig)
throws DirectoryException
{
return entry.encode(encodeConfig);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java
index 6b57090..35099d2 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java
@@ -443,7 +443,7 @@
DatabaseEntry key= new DatabaseEntry(shortBytes);
Entry testEntry=bldStatEntry(junkDN);
byte []entryBytes =
- JebFormat.entryToDatabase(testEntry, new DataConfig());
+ JebFormat.entryToDatabase(testEntry, new DataConfig(false, false));
DatabaseEntry data= new DatabaseEntry(entryBytes);
assertTrue(id2entry.putRaw(txn, key, data));
@@ -773,7 +773,7 @@
DatabaseEntry key= new EntryID(id).getDatabaseEntry();
Entry testEntry=bldStatEntry(dn);
byte []entryBytes =
- JebFormat.entryToDatabase(testEntry, new DataConfig());
+ JebFormat.entryToDatabase(testEntry, new DataConfig(false, false));
if(trashFormat)
entryBytes[0] = 0x67;
DatabaseEntry data= new DatabaseEntry(entryBytes);
--
Gitblit v1.10.0