From 6cff6e50e589ff91df76fafac8e0f72918b5ce5c Mon Sep 17 00:00:00 2001
From: coulbeck <coulbeck@localhost>
Date: Wed, 12 Jul 2006 22:23:35 +0000
Subject: [PATCH] The backends should interpret relative pathnames in the configuration file as relative to the server root rather than the current working directory.

---
 opends/src/server/org/opends/server/backends/jeb/Config.java        |   14 +++++--
 opends/src/server/org/opends/server/backends/jeb/BackendImpl.java   |   24 +++++-------
 opends/src/server/org/opends/server/backends/jeb/ImportJob.java     |    9 ++--
 opends/src/server/org/opends/server/backends/jeb/BackupManager.java |    7 +--
 opends/src/server/org/opends/server/backends/jeb/VerifyJob.java     |    4 +-
 opends/src/server/org/opends/server/backends/task/TaskBackend.java  |   15 +++++++
 6 files changed, 43 insertions(+), 30 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
index 3eefdc9..6951609 100644
--- a/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -116,10 +116,9 @@
   private Config config;
 
   /**
-   * The pathname of the directory containing persistent storage for the
-   * backend.
+   * The directory containing persistent storage for the backend.
    */
-  private String backendDirectory;
+  private File backendDirectory;
 
   /**
    * The base DNs contained in this backend.
@@ -367,12 +366,10 @@
 
     // Get the backend database directory.
     backendDirectory = config.getBackendDirectory();
-
-    File dir = new File(backendDirectory);
-    if (!dir.isDirectory())
+    if (!backendDirectory.isDirectory())
     {
       String message = getMessage(MSGID_JEB_DIRECTORY_INVALID,
-                                  backendDirectory);
+                                  backendDirectory.getPath());
       throw new InitializationException(MSGID_JEB_DIRECTORY_INVALID,
                                         message);
     }
@@ -394,7 +391,7 @@
     // Open the database environment
     try
     {
-      dbEnv = new Environment(new File(backendDirectory),
+      dbEnv = new Environment(backendDirectory,
                               config.getEnvironmentConfig());
 
       Debug.debugMessage(DebugLogCategory.BACKEND, DebugLogSeverity.INFO,
@@ -511,11 +508,10 @@
       }
     };
 
-    File f = new File(backendDirectory);
-    int beforeLogfileCount = f.list(filenameFilter).length;
+    int beforeLogfileCount = backendDirectory.list(filenameFilter).length;
 
     msgID = MSGID_JEB_CLEAN_DATABASE_START;
-    message = getMessage(msgID, beforeLogfileCount, backendDirectory);
+    message = getMessage(msgID, beforeLogfileCount, backendDirectory.getPath());
     logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
              msgID);
 
@@ -538,7 +534,7 @@
       dbEnv.checkpoint(force);
     }
 
-    int afterLogfileCount = f.list(filenameFilter).length;
+    int afterLogfileCount = backendDirectory.list(filenameFilter).length;
 
     msgID = MSGID_JEB_CLEAN_DATABASE_FINISH;
     message = getMessage(msgID, afterLogfileCount);
@@ -1164,8 +1160,8 @@
       }
 
       // Open a new environment handle.
-      String backendDirectory = config.getBackendDirectory();
-      env = new Environment(new File(backendDirectory), envConfig);
+      File backendDirectory = config.getBackendDirectory();
+      env = new Environment(backendDirectory, envConfig);
 
       Debug.debugMessage(DebugLogCategory.BACKEND, DebugLogSeverity.INFO,
                          CLASS_NAME, "exportLDIF",
diff --git a/opends/src/server/org/opends/server/backends/jeb/BackupManager.java b/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
index 8685a57..f49d7a9 100644
--- a/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
+++ b/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
@@ -236,7 +236,7 @@
     // If this is an incremental, determine the base backup for this backup.
     HashSet<String> dependencies = new HashSet<String>();
     BackupInfo baseBackup = null;
-    File backendDir = new File(config.getBackendDirectory());
+    File backendDir = config.getBackendDirectory();
 /*
     FilenameFilter backupTagFilter = new FilenameFilter()
     {
@@ -717,9 +717,8 @@
 
     // Create a restore directory with a different name to the backend
     // directory.
-    String backendDirectory = config.getBackendDirectory();
-    File currentDir = new File(backendDirectory);
-    File restoreDir = new File(backendDirectory + "-restore-" + backupID);
+    File currentDir = config.getBackendDirectory();
+    File restoreDir = new File(currentDir.getPath() + "-restore-" + backupID);
     if (!verifyOnly)
     {
       File[] files = restoreDir.listFiles();
diff --git a/opends/src/server/org/opends/server/backends/jeb/Config.java b/opends/src/server/org/opends/server/backends/jeb/Config.java
index 0838f55..021afde 100644
--- a/opends/src/server/org/opends/server/backends/jeb/Config.java
+++ b/opends/src/server/org/opends/server/backends/jeb/Config.java
@@ -57,6 +57,7 @@
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.concurrent.ConcurrentHashMap;
+import java.io.File;
 
 import static org.opends.server.loggers.Debug.debugException;
 
@@ -223,7 +224,7 @@
   /**
    * The backend directory (file system pathname).
    */
-  private String backendDirectory = null;
+  private File backendDirectory = null;
 
   /**
    * Number of times we should retry database transactions that get aborted
@@ -327,7 +328,12 @@
       String message = getMessage(msgID, configEntry.getDN().toString());
       throw new ConfigException(msgID, message);
     }
-    backendDirectory = backendDirectoryAttr.activeValue();
+    backendDirectory = new File(backendDirectoryAttr.activeValue());
+    if (!backendDirectory.isAbsolute())
+    {
+      backendDirectory = new File(DirectoryServer.getServerRoot(),
+                                  backendDirectoryAttr.activeValue());
+    }
 
     // ds-cfg-backendIndexEntryLimit
     // Optional, single-valued config attribute requiring admin action on change
@@ -701,9 +707,9 @@
   /**
    * Get the backend directory.
    *
-   * @return A string containing the pathname to the backend directory
+   * @return A file representing the backend directory
    */
-  public String getBackendDirectory()
+  public File getBackendDirectory()
   {
     return backendDirectory;
   }
diff --git a/opends/src/server/org/opends/server/backends/jeb/ImportJob.java b/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
index 5cbd051..5f10cce 100644
--- a/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
+++ b/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
@@ -153,7 +153,7 @@
    */
   public void importLDIF() throws DatabaseException, IOException, JebException
   {
-    String backendDirectory = config.getBackendDirectory();
+    File backendDirectory = config.getBackendDirectory();
 
     EnvironmentConfig envConfig = config.getEnvironmentConfig();
     envConfig.setConfigParam("je.env.runCheckpointer", "false");
@@ -176,8 +176,7 @@
       envConfig.setConfigParam("je.env.isLocking", "false");
     }
 
-    File envHome = new File(backendDirectory);
-    env = new Environment(envHome, envConfig);
+    env = new Environment(backendDirectory, envConfig);
 
     if (!ldifImportConfig.appendToExistingData())
     {
@@ -185,8 +184,8 @@
       // environment and re-open it. Only do this when we are
       // importing to all the base DNs in the backend.
       env.close();
-      EnvManager.removeFiles(backendDirectory);
-      env = new Environment(envHome, envConfig);
+      EnvManager.removeFiles(backendDirectory.getPath());
+      env = new Environment(backendDirectory, envConfig);
     }
 
     // Divide the total buffer size by the number of threads
diff --git a/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java b/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java
index c4559c0..b27df18 100644
--- a/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java
+++ b/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java
@@ -216,14 +216,14 @@
    */
   public void verifyBackend() throws DatabaseException, JebException
   {
-    String backendDirectory = config.getBackendDirectory();
+    File backendDirectory = config.getBackendDirectory();
 
     // Open the environment read-only.
     EnvironmentConfig envConfig = config.getEnvironmentConfig();
     envConfig.setReadOnly(true);
     envConfig.setAllowCreate(false);
     envConfig.setTransactional(false);
-    env = new Environment(new File(backendDirectory), envConfig);
+    env = new Environment(backendDirectory, envConfig);
 
     Debug.debugMessage(DebugLogCategory.BACKEND, DebugLogSeverity.INFO,
                        CLASS_NAME, "verifyBackend",
diff --git a/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index adaf9ab..02463c0 100644
--- a/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -1313,6 +1313,10 @@
         if (! taskBackingFile.equals(tmpBackingFile))
         {
           File f = new File(tmpBackingFile);
+          if (!f.isAbsolute())
+          {
+            f = new File(DirectoryServer.getServerRoot(), tmpBackingFile);
+          }
           if (f.exists())
           {
             int msgID = MSGID_TASKBE_BACKING_FILE_EXISTS;
@@ -1441,6 +1445,10 @@
         if (! taskBackingFile.equals(tmpBackingFile))
         {
           File f = new File(tmpBackingFile);
+          if (!f.isAbsolute())
+          {
+            f = new File(DirectoryServer.getServerRoot(), tmpBackingFile);
+          }
           if (f.exists())
           {
             int msgID = MSGID_TASKBE_BACKING_FILE_EXISTS;
@@ -1577,7 +1585,12 @@
   {
     assert debugEnter(CLASS_NAME, "getTaskBackingFile");
 
-    return taskBackingFile;
+    File f = new File(taskBackingFile);
+    if (!f.isAbsolute())
+    {
+      f = new File(DirectoryServer.getServerRoot(), taskBackingFile);
+    }
+    return f.getPath();
   }
 
 

--
Gitblit v1.10.0