From dd940ee49f85490f347e1ae53bd16437102e5b7b Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 02 Dec 2014 09:57:47 +0000
Subject: [PATCH] OPENDJ-1602 New pluggable storage based backend
---
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/PluggableStorageBackend.java | 94 ++++++++++++++++++++++++++++++++++++++--------
1 files changed, 77 insertions(+), 17 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/PluggableStorageBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/PluggableStorageBackend.java
index d523b40..70a3e56 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/PluggableStorageBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/PluggableStorageBackend.java
@@ -25,15 +25,20 @@
*/
package org.opends.server.backends.pluggable;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import java.util.List;
import java.util.Set;
+import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.ConditionResult;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.util.Reject;
-import org.opends.server.admin.Configuration;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.std.server.BackendCfg;
import org.opends.server.api.Backend;
import org.opends.server.core.AddOperation;
import org.opends.server.core.DeleteOperation;
@@ -45,6 +50,7 @@
import org.opends.server.types.BackupConfig;
import org.opends.server.types.BackupDirectory;
import org.opends.server.types.CanceledOperationException;
+import org.opends.server.types.ConfigChangeResult;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.Entry;
@@ -64,29 +70,65 @@
* @param <C>
* the type of the BackendCfg for the current backend
*/
-public abstract class PluggableStorageBackend<C extends Configuration> extends Backend<C>
+public abstract class PluggableStorageBackend<C extends BackendCfg>
+ extends Backend<C>
+ implements ConfigurationChangeListener<C>
{
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
+ /** The configuration object. */
+ protected C cfg;
/** The set of base DNs for this backend. */
private DN[] baseDNs;
/** {@inheritDoc} */
@Override
- public void configureBackend(final Configuration cfg) throws ConfigException
+ public void configureBackend(final C cfg) throws ConfigException
{
Reject.ifNull(cfg);
+
+ this.cfg = cfg;
+ baseDNs = this.cfg.getBaseDN().toArray(new DN[0]);
}
/** {@inheritDoc} */
@Override
- public void initializeBackend() throws InitializationException
+ public boolean isConfigurationChangeAcceptable(C cfg, List<LocalizableMessage> unacceptableReasons)
{
- for (DN baseDN : this.baseDNs)
+ return false;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public ConfigChangeResult applyConfigurationChange(C cfg)
+ {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void initializeBackend() throws ConfigException, InitializationException
+ {
+ registerBaseDNs(cfg.getBaseDN());
+ }
+
+ /**
+ * Associates the current backend with the provided baseDNs in the directory
+ * server.
+ *
+ * @param baseDNs
+ * the base DNs to be associated with this backend
+ * @throws InitializationException
+ * If a problem occurs during initialization that is not related to
+ * the server configuration.
+ */
+ public void registerBaseDNs(Collection<DN> baseDNs) throws InitializationException
+ {
+ for (DN baseDN : baseDNs)
{
try
{
- DirectoryServer.registerBaseDN(baseDN, this, true);
+ DirectoryServer.registerBaseDN(baseDN, this, false);
}
catch (final Exception e)
{
@@ -101,7 +143,19 @@
{
super.finalizeBackend();
- for (DN baseDN : this.baseDNs)
+ deregisterBaseDNs(cfg.getBaseDN());
+ }
+
+ /**
+ * Dissociates the current backend from the provided baseDNs in the directory
+ * server.
+ *
+ * @param baseDNs
+ * the base DNs to dissociate from this backend
+ */
+ public void deregisterBaseDNs(Collection<DN> baseDNs)
+ {
+ for (DN baseDN : baseDNs)
{
try
{
@@ -125,7 +179,7 @@
@Override
public void preloadEntryCache() throws UnsupportedOperationException
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@@ -139,7 +193,7 @@
@Override
public boolean isIndexed(final AttributeType attributeType, final IndexType indexType)
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@@ -151,7 +205,7 @@
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
ERR_BACKEND_GET_ENTRY_NULL.get(getBackendID()));
}
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@@ -170,7 +224,7 @@
@Override
public long numSubordinates(final DN entryDN, final boolean subtree) throws DirectoryException
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@@ -210,9 +264,9 @@
/** {@inheritDoc} */
@Override
- public void search(final SearchOperation searchOperation) throws DirectoryException
+ public void search(final SearchOperation searchOperation) throws DirectoryException, CanceledOperationException
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@@ -263,14 +317,14 @@
@Override
public boolean supportsBackup()
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@Override
public boolean supportsBackup(BackupConfig backupConfig, StringBuilder unsupportedReason)
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@@ -293,7 +347,7 @@
@Override
public boolean supportsRestore()
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
/** {@inheritDoc} */
@@ -308,7 +362,13 @@
@Override
public long getEntryCount()
{
- throw new RuntimeException("Not implemented");
+ throw new NotImplementedException();
}
+ /** {@inheritDoc} */
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + " baseDNs=" + Arrays.toString(baseDNs);
+ }
}
--
Gitblit v1.10.0