From 642e1f844e7b37d2d8306c4d4300123f46f85558 Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Tue, 24 Feb 2015 13:35:36 +0000
Subject: [PATCH] OPENDJ-1800 Find a better way to manage database prefix names in a Storage
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java | 6 +-
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java | 20 +--------
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java | 9 +---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java | 2
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java | 17 +++++++-
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/spi/Storage.java | 9 ----
opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java | 34 +++++++++++------
7 files changed, 47 insertions(+), 50 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
index c7cd72f..3a3a43b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
@@ -231,7 +231,7 @@
{
try
{
- final Tree tree = volume.getTree(treeName.toString(), true);
+ final Tree tree = volume.getTree(mangleTreeName(treeName), true);
trees.put(treeName, tree);
}
catch (final PersistitException e)
@@ -401,8 +401,7 @@
}
@Override
- public void renameTree(final TreeName oldTreeName,
- final TreeName newTreeName)
+ public void renameTree(final TreeName oldTreeName, final TreeName newTreeName)
{
throw new UnsupportedOperationException();
}
@@ -473,6 +472,12 @@
}
exchanges.clear();
}
+
+ private Exchange getNewExchange(final TreeName treeName, final boolean create)
+ throws PersistitException
+ {
+ return db.getExchange(volume, mangleTreeName(treeName), create);
+ }
}
private static void clearAndCreateDbDir(final File dbDir)
@@ -640,10 +645,21 @@
return new ImporterImpl();
}
- /** {@inheritDoc} */
- public String toSafeSuffixName(final String suffix)
+ private String mangleTreeName(final TreeName treeName)
{
- return suffix.replaceAll("[,=]", "_");
+ StringBuilder mangled = new StringBuilder();
+ String name = treeName.toString();
+
+ for (int idx = 0; idx < name.length(); idx++)
+ {
+ char ch = name.charAt(idx);
+ if (ch == '=' || ch == ',')
+ {
+ ch = '_';
+ }
+ mangled.append(ch);
+ }
+ return mangled.toString();
}
/** {@inheritDoc} */
@@ -722,12 +738,6 @@
return value;
}
- private Exchange getNewExchange(final TreeName treeName, final boolean create)
- throws PersistitException
- {
- return db.getExchange(volume, treeName.toString(), create);
- }
-
private ByteString keyToBytes(final Key key)
{
return ByteString.wrap(key.reset().decodeByteArray());
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
index 4ca4025..33aae6a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
@@ -926,7 +926,7 @@
try
{
// The base DN was added.
- EntryContainer ec = rootContainer.openEntryContainer(baseDN, null, txn);
+ EntryContainer ec = rootContainer.openEntryContainer(baseDN, txn);
rootContainer.registerEntryContainer(baseDN, ec);
DirectoryServer.registerBaseDN(baseDN, this, false);
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
index 376e990..567129a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
@@ -431,8 +431,6 @@
*
* @param baseDN The baseDN this entry container will be responsible for
* storing on disk.
- * @param databasePrefix The prefix to use in the database names used by
- * this entry container.
* @param backend A reference to the JE backend that is creating this entry
* container. It is needed by the Directory Server entry cache
* methods.
@@ -441,16 +439,15 @@
* @param rootContainer The root container this entry container is in.
* @throws ConfigException if a configuration related error occurs.
*/
- EntryContainer(DN baseDN, String databasePrefix, Backend<?> backend,
- PluggableBackendCfg config, Storage env, RootContainer rootContainer)
- throws ConfigException
+ EntryContainer(DN baseDN, Backend<?> backend, PluggableBackendCfg config, Storage env, RootContainer rootContainer)
+ throws ConfigException
{
this.backend = backend;
this.baseDN = baseDN;
this.config = config;
this.storage = env;
this.rootContainer = rootContainer;
- this.databasePrefix = databasePrefix;
+ this.databasePrefix = baseDN.toIrreversibleReadableString();
config.addPluggableChangeListener(this);
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
index 214bb71..67a73ea 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
@@ -786,14 +786,27 @@
{
// Create a temp entry container
sourceEntryContainer = entryContainer;
- final String name = baseDN.toIrreversibleReadableString() + "_importTmp";
- entryContainer = rootContainer.openEntryContainer(baseDN, name, txn);
+ entryContainer = createEntryContainer(txn, baseDN);
}
}
}
return new Suffix(entryContainer, sourceEntryContainer, includeBranches, excludeBranches);
}
+ private EntryContainer createEntryContainer(WriteableStorage txn, DN baseDN) throws ConfigException
+ {
+ DN tempDN;
+ try
+ {
+ tempDN = baseDN.child(DN.valueOf("dc=importTmp"));
+ }
+ catch (DirectoryException e)
+ {
+ throw new ConfigException(e.getMessageObject());
+ }
+ return rootContainer.openEntryContainer(tempDN, txn);
+ }
+
private void clearSuffix(EntryContainer entryContainer)
{
entryContainer.lock();
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
index f887025..d9e854a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
@@ -368,9 +368,6 @@
*
* @param baseDN
* The base DN of the entry container to open.
- * @param name
- * The name of the entry container or <CODE>NULL</CODE> to open the
- * default entry container for the given base DN.
* @param txn
* The database transaction
* @return The opened entry container.
@@ -379,21 +376,10 @@
* @throws ConfigException
* If an configuration error occurs while opening the entry container.
*/
- EntryContainer openEntryContainer(DN baseDN, String name, WriteableStorage txn)
+ EntryContainer openEntryContainer(DN baseDN, WriteableStorage txn)
throws StorageRuntimeException, ConfigException
{
- String databasePrefix;
- if (name == null || "".equals(name))
- {
- databasePrefix = baseDN.toIrreversibleReadableString();
- }
- else
- {
- databasePrefix = name;
- }
-
- EntryContainer ec =
- new EntryContainer(baseDN, storage.toSafeSuffixName(databasePrefix), backend, config, storage, this);
+ EntryContainer ec = new EntryContainer(baseDN, backend, config, storage, this);
ec.open(txn);
return ec;
}
@@ -443,7 +429,7 @@
EntryID highestID = null;
for (DN baseDN : baseDNs)
{
- EntryContainer ec = openEntryContainer(baseDN, null, txn);
+ EntryContainer ec = openEntryContainer(baseDN, txn);
EntryID id = ec.getHighestEntryID(txn);
registerEntryContainer(baseDN, ec);
if (highestID == null || id.compareTo(highestID) > 0)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java
index 3c7e447..7280260 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VLVIndex.java
@@ -120,7 +120,7 @@
* @param config The VLV index config object to use for this VLV
* index.
* @param state The state database to persist vlvIndex state info.
- * @param env The JE Storage
+ * @param storage The storage currently in use
* @param entryContainer The database entryContainer holding this vlvIndex. the sort order
* @param txn The transaction to use when creating this object
* @throws StorageRuntimeException
@@ -128,10 +128,10 @@
* @throws ConfigException if a error occurs while reading the VLV index
* configuration
*/
- VLVIndex(BackendVLVIndexCfg config, State state, Storage env, EntryContainer entryContainer, WriteableStorage txn)
+ VLVIndex(BackendVLVIndexCfg config, State state, Storage storage, EntryContainer entryContainer, WriteableStorage txn)
throws StorageRuntimeException, ConfigException
{
- super(new TreeName(entryContainer.getDatabasePrefix(), "vlv." + config.getName()), env, entryContainer);
+ super(new TreeName(entryContainer.getDatabasePrefix(), "vlv." + config.getName()), storage, entryContainer);
this.config = config;
this.baseDN = config.getBaseDN();
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/spi/Storage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/spi/Storage.java
index d556490..004b604 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/spi/Storage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/spi/Storage.java
@@ -122,13 +122,4 @@
* @throws StorageRuntimeException if removal fails
*/
void removeStorageFiles() throws StorageRuntimeException;
-
- /**
- * Replace reserved characters with an underscore character.
- *
- * @param databasePrefix
- * the suffix name to convert
- * @return a new String suitable for use as a suffix name
- */
- String toSafeSuffixName(String databasePrefix);
}
--
Gitblit v1.10.0