From 1345ac0dfae9a555abb7b74ed48452d9bc92b8c3 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 22 Jul 2014 13:44:30 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend to support cn=changelog
---
opends/src/server/org/opends/server/backends/ChangelogBackend.java | 121 +++++++++++++++++++++++++++++++++------
1 files changed, 101 insertions(+), 20 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/ChangelogBackend.java b/opends/src/server/org/opends/server/backends/ChangelogBackend.java
index 63a17d3..f281c8c 100644
--- a/opends/src/server/org/opends/server/backends/ChangelogBackend.java
+++ b/opends/src/server/org/opends/server/backends/ChangelogBackend.java
@@ -25,21 +25,26 @@
*/
package org.opends.server.backends;
+import java.util.Collections;
import java.util.Set;
import org.opends.server.admin.Configuration;
import org.opends.server.api.Backend;
+import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.AddOperation;
import org.opends.server.core.DeleteOperation;
+import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ModifyDNOperation;
import org.opends.server.core.ModifyOperation;
import org.opends.server.core.SearchOperation;
+import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.AttributeType;
import org.opends.server.types.BackupConfig;
import org.opends.server.types.BackupDirectory;
import org.opends.server.types.CanceledOperationException;
import org.opends.server.types.ConditionResult;
+import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.Entry;
@@ -49,6 +54,13 @@
import org.opends.server.types.LDIFImportConfig;
import org.opends.server.types.LDIFImportResult;
import org.opends.server.types.RestoreConfig;
+import org.opends.server.types.ResultCode;
+import org.opends.server.util.Validator;
+
+import static org.opends.messages.BackendMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.StaticUtils.*;
/**
* A backend that provides access to the changelog, ie the "cn=changelog" suffix.
@@ -56,34 +68,89 @@
*/
public class ChangelogBackend extends Backend
{
+ private static final DebugTracer TRACER = getTracer();
+
+ /** The DN for the base changelog entry. */
+ private DN baseChangelogDN;
+
+ /** The set of base DNs for this backend. */
+ private DN[] baseDNs;
+
+ /** The set of supported controls for this backend. */
+ private final Set<String> supportedControls =
+ Collections.singleton(OID_ECL_COOKIE_EXCHANGE_CONTROL);
/** {@inheritDoc} */
@Override
- public void configureBackend(Configuration cfg) throws ConfigException
+ public void configureBackend(final Configuration cfg) throws ConfigException
{
- throw new RuntimeException("Not implemented");
+ Validator.ensureNotNull(cfg);
+
+ final ConfigEntry configEntry = DirectoryServer.getConfigEntry(cfg.dn());
+
+ // Make sure that a configuration entry was provided. If not, then we will
+ // not be able to complete initialization.
+ if (configEntry == null)
+ {
+ throw new ConfigException(ERR_BACKEND_CONFIG_ENTRY_NULL.get(getBackendID()));
+ }
+
+ // Create the set of base DNs that we will handle. In this case, it's just
+ // the DN of the base changelog entry.
+ try
+ {
+ baseChangelogDN = DN.decode(DN_EXTERNAL_CHANGELOG_ROOT);
+ }
+ catch (final Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+ throw new ConfigException(
+ ERR_BACKEND_CANNOT_DECODE_BACKEND_ROOT_DN.get(getBackendID(), getExceptionMessage(e)), e);
+ }
+
+ this.baseDNs = new DN[] { baseChangelogDN };
}
/** {@inheritDoc} */
@Override
- public void initializeBackend() throws ConfigException,
- InitializationException
+ public void initializeBackend() throws ConfigException, InitializationException
{
- throw new RuntimeException("Not implemented");
+ try
+ {
+ DirectoryServer.registerBaseDN(baseChangelogDN, this, true);
+ }
+ catch (final Exception e)
+ {
+ throw new InitializationException(
+ ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(baseChangelogDN.toString(), getExceptionMessage(e)), e);
+ }
}
/** {@inheritDoc} */
@Override
public void finalizeBackend()
{
- throw new RuntimeException("Not implemented");
+ try
+ {
+ DirectoryServer.deregisterBaseDN(baseChangelogDN);
+ }
+ catch (final Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+ }
}
/** {@inheritDoc} */
@Override
public DN[] getBaseDNs()
{
- throw new RuntimeException("Not implemented");
+ return baseDNs;
}
/** {@inheritDoc} */
@@ -111,6 +178,11 @@
@Override
public Entry getEntry(DN entryDN) throws DirectoryException
{
+ if (entryDN == null)
+ {
+ throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ ERR_BACKEND_GET_ENTRY_NULL.get(getBackendID()));
+ }
throw new RuntimeException("Not implemented");
}
@@ -134,7 +206,8 @@
public void addEntry(Entry entry, AddOperation addOperation)
throws DirectoryException, CanceledOperationException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_ADD_NOT_SUPPORTED.get(String.valueOf(entry.getDN()), getBackendID()));
}
/** {@inheritDoc} */
@@ -142,7 +215,8 @@
public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
throws DirectoryException, CanceledOperationException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_DELETE_NOT_SUPPORTED.get(String.valueOf(entryDN), getBackendID()));
}
/** {@inheritDoc} */
@@ -151,7 +225,8 @@
ModifyOperation modifyOperation) throws DirectoryException,
CanceledOperationException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_MODIFY_NOT_SUPPORTED.get(String.valueOf(newEntry.getDN()), getBackendID()));
}
/** {@inheritDoc} */
@@ -160,7 +235,8 @@
ModifyDNOperation modifyDNOperation) throws DirectoryException,
CanceledOperationException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(String.valueOf(currentDN), getBackendID()));
}
/** {@inheritDoc} */
@@ -175,21 +251,21 @@
@Override
public Set<String> getSupportedControls()
{
- throw new RuntimeException("Not implemented");
+ return supportedControls;
}
/** {@inheritDoc} */
@Override
public Set<String> getSupportedFeatures()
{
- throw new RuntimeException("Not implemented");
+ return Collections.emptySet();
}
/** {@inheritDoc} */
@Override
public boolean supportsLDIFExport()
{
- throw new RuntimeException("Not implemented");
+ return false;
}
/** {@inheritDoc} */
@@ -197,14 +273,15 @@
public void exportLDIF(LDIFExportConfig exportConfig)
throws DirectoryException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(getBackendID()));
}
/** {@inheritDoc} */
@Override
public boolean supportsLDIFImport()
{
- throw new RuntimeException("Not implemented");
+ return false;
}
/** {@inheritDoc} */
@@ -212,7 +289,8 @@
public LDIFImportResult importLDIF(LDIFImportConfig importConfig)
throws DirectoryException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(getBackendID()));
}
/** {@inheritDoc} */
@@ -234,7 +312,8 @@
@Override
public void createBackup(BackupConfig backupConfig) throws DirectoryException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID()));
}
/** {@inheritDoc} */
@@ -242,7 +321,8 @@
public void removeBackup(BackupDirectory backupDirectory, String backupID)
throws DirectoryException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID()));
}
/** {@inheritDoc} */
@@ -257,7 +337,8 @@
public void restoreBackup(RestoreConfig restoreConfig)
throws DirectoryException
{
- throw new RuntimeException("Not implemented");
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID()));
}
/** {@inheritDoc} */
--
Gitblit v1.10.0