From 75432250fa1b8598fcfecb273672416b141b09b7 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 11 Feb 2015 14:44:31 +0000
Subject: [PATCH] OPENDJ-1707 Persistit: various import problems

---
 opendj3-server-dev/src/server/org/opends/server/backends/pluggable/Importer.java |  105 ++++++++++++++++------------------------------------
 1 files changed, 32 insertions(+), 73 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/Importer.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/Importer.java
index dd164f9..6a323f0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/Importer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/Importer.java
@@ -27,7 +27,7 @@
 package org.opends.server.backends.pluggable;
 
 import static org.opends.messages.JebMessages.*;
-import static org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType.*;
+import static org.opends.server.admin.std.meta.BackendIndexCfgDefn.IndexType.*;
 import static org.opends.server.backends.pluggable.IndexOutputBuffer.*;
 import static org.opends.server.util.DynamicConstants.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -94,10 +94,10 @@
 import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.spi.IndexingOptions;
 import org.forgerock.util.Utils;
-import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType;
-import org.opends.server.admin.std.server.LocalDBBackendCfg;
-import org.opends.server.admin.std.server.LocalDBIndexCfg;
+import org.opends.server.admin.std.meta.BackendIndexCfgDefn.IndexType;
+import org.opends.server.admin.std.server.BackendIndexCfg;
 import org.opends.server.admin.std.server.PersistitBackendCfg;
+import org.opends.server.admin.std.server.PluggableBackendCfg;
 import org.opends.server.api.DiskSpaceMonitorHandler;
 import org.opends.server.backends.RebuildConfig;
 import org.opends.server.backends.RebuildConfig.RebuildMode;
@@ -192,7 +192,7 @@
   /** Import configuration. */
   private final LDIFImportConfig importConfiguration;
   /** Backend configuration. */
-  private final LocalDBBackendCfg backendConfiguration;
+  private final PersistitBackendCfg backendConfiguration;
 
   /** LDIF reader. */
   private ImportLDIFReader reader;
@@ -289,7 +289,7 @@
    * @throws ConfigException
    *           If a problem occurs during initialization.
    */
-  public Importer(RebuildConfig rebuildConfig, LocalDBBackendCfg cfg) throws InitializationException,
+  public Importer(RebuildConfig rebuildConfig, PersistitBackendCfg cfg) throws InitializationException,
       StorageRuntimeException, ConfigException
   {
     this.importConfiguration = null;
@@ -318,7 +318,7 @@
    *
    * @param importConfiguration
    *          The LDIF import configuration.
-   * @param localDBBackendCfg
+   * @param backendCfg
    *          The local DB back-end configuration.
    * @throws InitializationException
    *           If a problem occurs during initialization.
@@ -327,12 +327,12 @@
    * @throws StorageRuntimeException
    *           If an error occurred when opening the DB.
    */
-  public Importer(LDIFImportConfig importConfiguration, LocalDBBackendCfg localDBBackendCfg)
+  public Importer(LDIFImportConfig importConfiguration, PersistitBackendCfg backendCfg)
       throws InitializationException, ConfigException, StorageRuntimeException
   {
     this.rebuildManager = null;
     this.importConfiguration = importConfiguration;
-    this.backendConfiguration = localDBBackendCfg;
+    this.backendConfiguration = backendCfg;
 
     if (importConfiguration.getThreadCount() == 0)
     {
@@ -344,14 +344,14 @@
     }
 
     // Determine the number of indexes.
-    this.indexCount = getTotalIndexCount(localDBBackendCfg);
+    this.indexCount = getTotalIndexCount(backendCfg);
 
-    this.clearedBackend = mustClearBackend(importConfiguration, localDBBackendCfg);
+    this.clearedBackend = mustClearBackend(importConfiguration, backendCfg);
     this.scratchFileWriterList =
         new ArrayList<ScratchFileWriterTask>(indexCount);
     this.scratchFileWriterFutures = new CopyOnWriteArrayList<Future<Void>>();
 
-    this.tempDir = getTempDir(localDBBackendCfg, importConfiguration.getTmpDirectory());
+    this.tempDir = getTempDir(backendCfg, importConfiguration.getTmpDirectory());
     recursiveDelete(tempDir);
     if (!tempDir.exists() && !tempDir.mkdirs())
     {
@@ -376,17 +376,20 @@
   /**
    * Returns whether the backend must be cleared.
    *
-   * @param importCfg the import configuration object
-   * @param backendCfg the backend configuration object
+   * @param importCfg
+   *          the import configuration object
+   * @param backendCfg
+   *          the backend configuration object
    * @return true if the backend must be cleared, false otherwise
+   * @see Importer#getSuffix(WriteableStorage, EntryContainer) for per-suffix cleanups.
    */
-  public static boolean mustClearBackend(LDIFImportConfig importCfg, LocalDBBackendCfg backendCfg)
+  static boolean mustClearBackend(LDIFImportConfig importCfg, PluggableBackendCfg backendCfg)
   {
     return !importCfg.appendToExistingData()
         && (importCfg.clearBackend() || backendCfg.getBaseDN().size() <= 1);
   }
 
-  private File getTempDir(LocalDBBackendCfg localDBBackendCfg, String tmpDirectory)
+  private File getTempDir(PluggableBackendCfg backendCfg, String tmpDirectory)
   {
     File parentDir;
     if (tmpDirectory != null)
@@ -397,16 +400,16 @@
     {
       parentDir = getFileForPath(DEFAULT_TMP_DIR);
     }
-    return new File(parentDir, localDBBackendCfg.getBackendId());
+    return new File(parentDir, backendCfg.getBackendId());
   }
 
-  private int getTotalIndexCount(LocalDBBackendCfg localDBBackendCfg)
+  private int getTotalIndexCount(PluggableBackendCfg backendCfg)
       throws ConfigException
   {
     int indexes = 2; // dn2id, dn2uri
-    for (String indexName : localDBBackendCfg.listLocalDBIndexes())
+    for (String indexName : backendCfg.listBackendIndexes())
     {
-      LocalDBIndexCfg index = localDBBackendCfg.getLocalDBIndex(indexName);
+      BackendIndexCfg index = backendCfg.getBackendIndex(indexName);
       SortedSet<IndexType> types = index.getIndexType();
       if (types.contains(IndexType.EXTENSIBLE))
       {
@@ -846,15 +849,6 @@
     this.rootContainer = rootContainer;
     final long startTime = System.currentTimeMillis();
 
-    DiskSpaceMonitor tmpMonitor = createDiskSpaceMonitor(tempDir, "backend index rebuild tmp directory");
-    tmpMonitor.initializeMonitorProvider(null);
-    DirectoryServer.registerMonitorProvider(tmpMonitor);
-    File parentDirectory = getFileForPath(backendConfiguration.getDBDirectory());
-    File backendDirectory = new File(parentDirectory, backendConfiguration.getBackendId());
-    DiskSpaceMonitor dbMonitor = createDiskSpaceMonitor(backendDirectory, "backend index rebuild DB directory");
-    dbMonitor.initializeMonitorProvider(null);
-    DirectoryServer.registerMonitorProvider(dbMonitor);
-
     try
     {
       rootContainer.getStorage().write(new WriteOperation()
@@ -874,13 +868,6 @@
     {
       logger.traceException(e);
     }
-    finally
-    {
-      DirectoryServer.deregisterMonitorProvider(tmpMonitor);
-      DirectoryServer.deregisterMonitorProvider(dbMonitor);
-      tmpMonitor.finalizeMonitorProvider();
-      dbMonitor.finalizeMonitorProvider();
-    }
   }
 
   /**
@@ -907,8 +894,6 @@
       InterruptedException, ExecutionException
   {
     this.rootContainer = rootContainer;
-    DiskSpaceMonitor tmpMonitor = null;
-    DiskSpaceMonitor dbMonitor = null;
     try {
       try
       {
@@ -920,15 +905,6 @@
         throw new InitializationException(message, ioe);
       }
 
-      tmpMonitor = createDiskSpaceMonitor(tempDir, "backend import tmp directory");
-      tmpMonitor.initializeMonitorProvider(null);
-      DirectoryServer.registerMonitorProvider(tmpMonitor);
-      File parentDirectory = getFileForPath(backendConfiguration.getDBDirectory());
-      File backendDirectory = new File(parentDirectory, backendConfiguration.getBackendId());
-      dbMonitor = createDiskSpaceMonitor(backendDirectory, "backend import DB directory");
-      dbMonitor.initializeMonitorProvider(null);
-      DirectoryServer.registerMonitorProvider(dbMonitor);
-
       logger.info(NOTE_JEB_IMPORT_STARTING, DirectoryServer.getVersionString(),
               BUILD_ID, REVISION_NUMBER);
       logger.info(NOTE_JEB_IMPORT_THREAD_COUNT, threadCount);
@@ -990,26 +966,9 @@
           // Do nothing.
         }
       }
-      if (tmpMonitor != null)
-      {
-        DirectoryServer.deregisterMonitorProvider(tmpMonitor);
-        tmpMonitor.finalizeMonitorProvider();
-      }
-      if (dbMonitor != null)
-      {
-        DirectoryServer.deregisterMonitorProvider(dbMonitor);
-        dbMonitor.finalizeMonitorProvider();
-      }
     }
   }
 
-  private DiskSpaceMonitor createDiskSpaceMonitor(File dir, String backendSuffix)
-  {
-    final LocalDBBackendCfg cfg = backendConfiguration;
-    return new DiskSpaceMonitor(cfg.getBackendId() + " " + backendSuffix, dir,
-        cfg.getDiskLowThreshold(), cfg.getDiskFullThreshold(), 5, TimeUnit.SECONDS, this);
-  }
-
   private void recursiveDelete(File dir)
   {
     if (dir.listFiles() != null)
@@ -2890,7 +2849,7 @@
     private final RebuildConfig rebuildConfig;
 
     /** Local DB backend configuration. */
-    private final LocalDBBackendCfg cfg;
+    private final PluggableBackendCfg cfg;
 
     /** Map of index keys to indexes. */
     private final Map<IndexKey, Index> indexMap =
@@ -2930,7 +2889,7 @@
      * @param cfg
      *          The local DB configuration to use.
      */
-    public RebuildIndexManager(RebuildConfig rebuildConfig, LocalDBBackendCfg cfg)
+    public RebuildIndexManager(RebuildConfig rebuildConfig, PluggableBackendCfg cfg)
     {
       super(null);
       this.rebuildConfig = rebuildConfig;
@@ -3375,7 +3334,7 @@
       }
     }
 
-    private int getRebuildListIndexCount(LocalDBBackendCfg cfg)
+    private int getRebuildListIndexCount(PluggableBackendCfg cfg)
         throws StorageRuntimeException, ConfigException, InitializationException
     {
       final List<String> rebuildList = rebuildConfig.getRebuildList();
@@ -3451,12 +3410,12 @@
           else
           {
             boolean found = false;
-            for (final String idx : cfg.listLocalDBIndexes())
+            for (final String idx : cfg.listBackendIndexes())
             {
               if (idx.equalsIgnoreCase(index))
               {
                 found = true;
-                final LocalDBIndexCfg indexCfg = cfg.getLocalDBIndex(idx);
+                final BackendIndexCfg indexCfg = cfg.getBackendIndex(idx);
                 indexCount += getAttributeIndexCount(indexCfg.getIndexType(),
                     PRESENCE, EQUALITY, ORDERING, SUBSTRING, APPROXIMATE);
                 indexCount += getExtensibleIndexCount(indexCfg);
@@ -3477,11 +3436,11 @@
       return new InitializationException(ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index));
     }
 
-    private boolean findExtensibleMatchingRule(LocalDBBackendCfg cfg, String indexExRuleName) throws ConfigException
+    private boolean findExtensibleMatchingRule(PluggableBackendCfg cfg, String indexExRuleName) throws ConfigException
     {
-      for (String idx : cfg.listLocalDBIndexes())
+      for (String idx : cfg.listBackendIndexes())
       {
-        LocalDBIndexCfg indexCfg = cfg.getLocalDBIndex(idx);
+        BackendIndexCfg indexCfg = cfg.getBackendIndex(idx);
         if (indexCfg.getIndexType().contains(EXTENSIBLE))
         {
           for (String exRule : indexCfg.getIndexExtensibleMatchingRule())
@@ -3509,7 +3468,7 @@
       return result;
     }
 
-    private int getExtensibleIndexCount(LocalDBIndexCfg indexCfg)
+    private int getExtensibleIndexCount(BackendIndexCfg indexCfg)
     {
       int result = 0;
       if (indexCfg.getIndexType().contains(EXTENSIBLE))

--
Gitblit v1.10.0