From b0f31909d49c1c97b5ced0d0fef0117a8073ab17 Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Fri, 06 Feb 2015 14:44:59 +0000
Subject: [PATCH] OPENDJ-1716 CR-5915 Changes in Pluggable backend configuration and preparatory work for OPENDJ-1750 Prepares for a fix in Backup restore for pluggable backends, keeping a single parameter (ds-cfg-java-class) in the configuration. Pluggable backends will need to Extend BackendImpl to be able to be referenced in the configuration. PitBackend is the backend using PersistIt as storage, until a better name comes up.

---
 opendj3-server-dev/src/server/org/opends/server/backends/persistit/PitBackend.java                                            |   44 ++++++++++++++++++++++
 opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PersistitBackendConfiguration.xml |    6 +-
 opendj3-server-dev/src/server/org/opends/server/backends/pluggable/RootContainer.java                                         |   10 ++--
 opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/PersistitBackendConfiguration.xml                               |    4 +-
 opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java                                           |   10 ++++
 5 files changed, 63 insertions(+), 11 deletions(-)

diff --git a/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PersistitBackendConfiguration.xml b/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PersistitBackendConfiguration.xml
index a6faebf..de91eaf 100644
--- a/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PersistitBackendConfiguration.xml
+++ b/opendj-config-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/PersistitBackendConfiguration.xml
@@ -22,7 +22,7 @@
   ! CDDL HEADER END
   !
   !
-  !      Copyright 2014 ForgeRock AS.
+  !      Copyright 2014-2015 ForgeRock AS.
   ! -->
 <adm:managed-object name="persistit-backend"
   plural-name="persistit-backends" package="org.forgerock.opendj.server.config"
@@ -43,7 +43,7 @@
     <adm:default-behavior>
       <adm:defined>
         <adm:value>
-          org.opends.server.backends.pluggable.BackendImpl
+          org.opends.server.backends.persistit.PitBackend
         </adm:value>
       </adm:defined>
     </adm:default-behavior>
@@ -185,7 +185,7 @@
     </adm:description>
     <adm:default-behavior>
       <adm:defined>
-        <adm:value>false</adm:value>
+        <adm:value>true</adm:value>
       </adm:defined>
     </adm:default-behavior>
     <adm:syntax>
diff --git a/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/PersistitBackendConfiguration.xml b/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/PersistitBackendConfiguration.xml
index 50035f8..852b41d 100644
--- a/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/PersistitBackendConfiguration.xml
+++ b/opendj3-server-dev/src/admin/defn/org/opends/server/admin/std/PersistitBackendConfiguration.xml
@@ -22,7 +22,7 @@
   ! CDDL HEADER END
   !
   !
-  !      Copyright 2014 ForgeRock AS.
+  !      Copyright 2014-2015 ForgeRock AS.
   ! -->
 <adm:managed-object name="persistit-backend"
   plural-name="persistit-backends" package="org.opends.server.admin.std"
@@ -43,7 +43,7 @@
     <adm:default-behavior>
       <adm:defined>
         <adm:value>
-          org.opends.server.backends.pluggable.BackendImpl
+          org.opends.server.backends.persistit.PitBackend
         </adm:value>
       </adm:defined>
     </adm:default-behavior>
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PitBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PitBackend.java
new file mode 100644
index 0000000..b83572f
--- /dev/null
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PitBackend.java
@@ -0,0 +1,44 @@
+/*
+ * 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 2015 ForgeRock AS
+ */
+
+package org.opends.server.backends.persistit;
+
+import org.opends.server.backends.pluggable.BackendImpl;
+import org.opends.server.backends.pluggable.spi.Storage;
+
+/**
+ * Class defined in the configuration for this backend type.
+ */
+public class PitBackend extends BackendImpl
+{
+
+  /** {@inheritDoc} */
+  @Override
+  protected Storage newStorageInstance()
+  {
+    return new PersistItStorage();
+  }
+}
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java
index 9d0d92d..82af2ca 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java
@@ -53,6 +53,7 @@
 import org.opends.server.api.DiskSpaceMonitorHandler;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.backends.VerifyConfig;
+import org.opends.server.backends.pluggable.spi.Storage;
 import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
 import org.opends.server.backends.pluggable.spi.WriteOperation;
 import org.opends.server.backends.pluggable.spi.WriteableStorage;
@@ -64,7 +65,7 @@
  * This is an implementation of a Directory Server Backend which stores entries
  * locally in a Berkeley DB JE database.
  */
-public class BackendImpl extends Backend<PersistitBackendCfg> implements
+public abstract class BackendImpl extends Backend<PersistitBackendCfg> implements
     ConfigurationChangeListener<PersistitBackendCfg>, AlertGenerator,
     DiskSpaceMonitorHandler
 {
@@ -758,9 +759,16 @@
     BackupManager backupManager = new BackupManager(getBackendID());
     File parentDir = getFileForPath(cfg.getDBDirectory());
     File backendDir = new File(parentDir, cfg.getBackendId());
+    // Storage storage = newStorageInstance();
+    // backupConfig.setFilesToBackupFilter(storage.getFilesToBackupFilter());
     backupManager.createBackup(backendDir, backupConfig);
   }
 
+  /**
+   * Returns the storage corresponding to the backend class defined in the configuration.
+   * @return the storage corresponding to the backend class defined in the configuration
+   */
+  protected abstract Storage newStorageInstance();
 
 
   /** {@inheritDoc} */
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/RootContainer.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/RootContainer.java
index 1f1fc2b..371c1cb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/RootContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/RootContainer.java
@@ -46,11 +46,11 @@
 import org.forgerock.opendj.config.server.ConfigException;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.PersistitBackendCfg;
-import org.opends.server.api.Backend;
 import org.opends.server.api.CompressedSchema;
 import org.opends.server.backends.persistit.PersistItStorage;
 import org.opends.server.backends.pluggable.spi.ReadOperation;
 import org.opends.server.backends.pluggable.spi.ReadableStorage;
+import org.opends.server.backends.pluggable.spi.Storage;
 import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
 import org.opends.server.backends.pluggable.spi.WriteOperation;
 import org.opends.server.backends.pluggable.spi.WriteableStorage;
@@ -119,7 +119,7 @@
 
   private final File backendDirectory;
   /** The backend to which this entry root container belongs. */
-  private final Backend<?> backend;
+  private final BackendImpl backend;
   /** The backend configuration. */
   private PersistitBackendCfg config;
   /** The database environment monitor for this JE environment. */
@@ -143,7 +143,7 @@
    * @param backend A reference to the JE back end that is creating this
    *                root container.
    */
-  public RootContainer(Backend<?> backend, PersistitBackendCfg config)
+  public RootContainer(BackendImpl backend, PersistitBackendCfg config)
   {
     this.backend = backend;
     this.config = config;
@@ -161,7 +161,7 @@
    *
    * @return the underlying storage engine
    */
-  PersistItStorage getStorage()
+  Storage getStorage()
   {
     return storage;
   }
@@ -401,7 +401,7 @@
 
     try
     {
-      storage = new PersistItStorage();
+      storage = (PersistItStorage) backend.newStorageInstance();
       storage.initialize(config);
       storage.open();
       storage.write(new WriteOperation()

--
Gitblit v1.10.0