From d2ad6e497910bbe2ac2966f30551bd26f19c3513 Mon Sep 17 00:00:00 2001
From: chebrard <chebrard@localhost>
Date: Wed, 29 Oct 2008 10:39:44 +0000
Subject: [PATCH] Fix 3534: Provide native Solaris packages (fix also 3533: upgrade fails starting server adding entry ds-cfg-key-id)

---
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java |  233 +++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 149 insertions(+), 84 deletions(-)

diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
index f3c4bbd..1a45d5b 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -72,11 +72,9 @@
 import org.opends.server.tools.JavaPropertiesTool;
 
 import java.awt.event.WindowEvent;
-import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileFilter;
-import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
@@ -154,6 +152,7 @@
     "bin",
     "lib",
     "bat",
+    "config" + File.separator + "schema",
     "setup",
     "setup.bat",
     "uninstall",
@@ -203,7 +202,12 @@
   /**
    * Information on the current build.
    */
-  private BuildInformation currentVersion = null;
+  protected BuildInformation currentVersion = null;
+
+  /**
+   * Information on the current instance.
+   */
+  protected BuildInformation currentInstanceVersion = null;
 
   /**
    * Information on the staged build.
@@ -211,6 +215,11 @@
   private BuildInformation stagedVersion = null;
 
   /**
+   * Information on the staged instance.
+   */
+  private BuildInformation stagedInstanceVersion = null;
+
+  /**
    * New OpenDS bits.
    */
   private Installation stagedInstallation = null;
@@ -390,50 +399,7 @@
       return null;
     }
 
-    String instancePathFileName = installPath + File.separator + "instance.loc";
-
-    // look for <installPath>/instance.loc
-    File f = new File(instancePathFileName);
-    if (!f.exists())
-    {
-      return installPath;
-    }
-
-    BufferedReader reader;
-    try
-    {
-      reader = new BufferedReader(new FileReader(instancePathFileName));
-    } catch (Exception e)
-    {
-      return installPath;
-    }
-
-    // Read the first line and close the file.
-    String line;
-    try
-    {
-      line = reader.readLine();
-      File instanceLoc = new File(line);
-      if (instanceLoc.isAbsolute())
-      {
-        return instanceLoc.getAbsolutePath();
-      } else
-      {
-        return new File(installPath + File.separator
-            + line).getAbsolutePath();
-      }
-    } catch (Exception e)
-    {
-      return installPath;
-    } finally
-    {
-      try
-      {
-        reader.close();
-      } catch (Exception e)
-      {
-      }
-    }
+    return Utils.getInstancePathFromClasspath(installPath);
   }
 
   /**
@@ -898,6 +864,7 @@
                 UpgradeProgressStep.UPGRADING_COMPONENTS);
         upgradeComponents();
         updateConfigDirectory();
+        updateExtensionsDirectory();
         notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "component upgrade finished");
       } catch (ApplicationException e) {
@@ -1515,14 +1482,25 @@
 
   }
 
-  private Stage getStage() throws IOException, ApplicationException {
+  /**
+   * Returns the directory used to stage files for upgrade or reversion.
+   * @return the directory used to stage files for upgrade or reversion
+   * @throws IOException if errors occurs while accessing stage files
+   * @throws org.opends.quicksetup.ApplicationException
+   *     if retrieval of stage files path fails
+   */
+  protected Stage getStage() throws IOException, ApplicationException {
     if (this.stage == null) {
       this.stage = new Stage(getStageDirectory());
     }
     return this.stage;
   }
 
-  private void upgradeComponents() throws ApplicationException {
+  /**
+   * Upgrade components.
+   * @throws ApplicationException if upgrade fails
+   */
+  protected void upgradeComponents() throws ApplicationException {
     try {
       Stage stage = getStage();
       Installation installation = getInstallation();
@@ -1530,19 +1508,19 @@
 
       if (instanceAndInstallInSameDir())
       {
-        stage.move(root, new UpgradeFileFilter(getStageDirectory()));
+       stage.move(root, new UpgradeFileFilter(getStageDirectory()));
       }
       else
       {
-        stage.move(root, new UpgradeFileFilter(getStageDirectory(),true));
-
+         stage.move(root, new UpgradeFileFilter(getStageDirectory(),true));
         root = installation.getInstanceDirectory();
         stage.move(root, new UpgradeFileFilter(getStageDirectory(),false));
       }
 
       // Check if instance.loc exits
       File instanceFile = new File
-         (installation.getRootDirectory(), "instance.loc");
+         (installation.getRootDirectory(),
+            Installation.INSTANCE_LOCATION_PATH_RELATIVE);
       if (! instanceFile.exists())
       {
         BufferedWriter instanceLoc =
@@ -1569,28 +1547,77 @@
   {
     // The config directory may contain files that are needed
     // by the new installation (e.g. SSL config files and tasks)
-    File oldConfigDir =
+    File oldInstallConfigDir =
+            new File(getFilesInstallBackupDirectory(),
+                     Installation.CONFIG_PATH_RELATIVE);
+    File oldInstanceConfigDir =
             new File(getFilesInstanceBackupDirectory(),
                      Installation.CONFIG_PATH_RELATIVE);
-    File newConfigDir =
-            getInstallation().getConfigurationDirectory();
+    File newInstallConfigDir =
+            getInstallation().getInstallConfigurationDirectory();
+    File newInstanceConfigDir =
+      getInstallation().getConfigurationDirectory();
     FileManager fm = new FileManager();
 
     // Define a filter for files that we don't want to copy over
     // from the old config directory.
-    final File oldConfigUpgradeDir = new File(oldConfigDir, "upgrade");
-    final File oldConfigSchemaDir = new File(oldConfigDir, "schema");
-    FileFilter filter = new FileFilter() {
-      public boolean accept(File f) {
-        return !Utils.isDescendant(f, oldConfigUpgradeDir) &&
-                !Utils.isDescendant(f, oldConfigSchemaDir);
-      }
-    };
+    {
+      final File oldConfigUpgradeDir = new File(oldInstallConfigDir, "upgrade");
+      final File oldConfigSchemaDir = new File(oldInstallConfigDir, "schema");
+      FileFilter filter = new FileFilter()
+      {
+        public boolean accept(File f)
+        {
+          return !Utils.isDescendant(f, oldConfigUpgradeDir)
+              && !Utils.isDescendant(f, oldConfigSchemaDir);
+        }
+      };
 
-    fm.synchronize(oldConfigDir, newConfigDir, filter);
+      fm.synchronize(oldInstallConfigDir, newInstallConfigDir, filter);
+    }
+
+    {
+      final File oldConfigUpgradeDir =
+        new File(oldInstanceConfigDir, "upgrade");
+      FileFilter filter = new FileFilter()
+      {
+        public boolean accept(File f)
+        {
+          return !Utils.isDescendant(f, oldConfigUpgradeDir);
+        }
+      };
+
+      fm.synchronize(oldInstanceConfigDir, newInstanceConfigDir, filter);
+    }
   }
 
-  private void backupFilesystem() throws ApplicationException {
+  private void updateExtensionsDirectory()
+          throws IOException,ApplicationException
+  {
+    // Get extensions back
+    File savedDir =
+            new File(getFilesInstanceBackupDirectory(),
+                     Installation.LIBRARIES_PATH_RELATIVE);
+    File destDir = getInstallation().getInstanceDirectory();
+
+    FileManager fm = new FileManager();
+    fm.copyRecursively(savedDir, destDir);
+
+    // Get classes back
+    savedDir =
+            new File(getFilesInstanceBackupDirectory(),
+                     Installation.CLASSES_PATH_RELATIVE);
+    destDir = getInstallation().getInstanceDirectory();
+
+    fm.copyRecursively(savedDir, destDir);
+
+  }
+
+  /**
+   * Backup files to be able to revert if upgrdae fails.
+   * @throws ApplicationException if backup fails
+   */
+  protected void backupFilesystem() throws ApplicationException {
     try {
       // Backup first install (potentially everything if install and instance
       //  are in the same dir
@@ -1693,7 +1720,12 @@
     }
   }
 
-  private void cleanup() throws ApplicationException {
+  /**
+   * Cleanup to done executed once upgrade is done.
+   * @throws org.opends.quicksetup.ApplicationException
+   *    if cleanup fails
+   */
+  protected void cleanup() throws ApplicationException {
     deleteStagingDirectory();
   }
 
@@ -1719,15 +1751,19 @@
     }
   }
 
-  private void initialize() throws ApplicationException {
+  /**
+   * Implements the initialization phase of the upgrade.
+   * @throws ApplicationException if upgrade is not possible
+   */
+  protected void initialize() throws ApplicationException {
     try {
-      BuildInformation fromVersion = getCurrentBuildInformation();
+      BuildInformation fromVersion = getCurrentInstanceBuildInformation();
       BuildInformation toVersion = getStagedBuildInformation();
       if (fromVersion.equals(toVersion))
       {
         throw new ApplicationException(ReturnCode.APPLICATION_ERROR,
             INFO_UPGRADE_ORACLE_SAME_VERSION.get(
-                fromVersion.toString()), null);
+                toVersion.toString()), null);
       }
       if (getInstallation().getStatus().isServerRunning()) {
         new ServerController(getInstallation()).stopServer(true);
@@ -1755,16 +1791,8 @@
    *         cannot be insured.
    */
   private void insureUpgradability() throws ApplicationException {
-    BuildInformation currentVersion;
     BuildInformation newVersion;
-    try {
-      currentVersion = getInstallation().getBuildInformation();
-    } catch (ApplicationException e) {
-      LOG.log(Level.INFO, "error getting build information for " +
-              "current installation", e);
-      throw ApplicationException.createFileSystemException(
-              INFO_ERROR_DETERMINING_CURRENT_BUILD.get(), e);
-    }
+    currentVersion = getCurrentInstanceBuildInformation();
 
     try {
       newVersion = getStagedInstallation().getBuildInformation();
@@ -1789,7 +1817,15 @@
     }
   }
 
-  private Installation getStagedInstallation()
+  /**
+   * Returns the path of the new OpenDS bits.
+   * @return the path of the new OpenDS bits.
+   * @throws java.io.IOException if an error occurs while accessing the
+   *         new bits
+   * @throws org.opends.quicksetup.ApplicationException if upgradability
+   *         cannot be insured.
+   */
+  protected Installation getStagedInstallation()
           throws IOException, ApplicationException {
     if (stagedInstallation == null) {
       File stageDir = getStageDirectory();
@@ -1913,7 +1949,14 @@
     return txt;
   }
 
-  private File getStageDirectory()
+  /**
+   * Returns the path of the new OpenDS bits.
+   * @return the path of the new OpenDS bits.
+   * @throws org.opends.quicksetup.ApplicationException
+   *         if retrieval of stage files path fails
+   * @throws java.io.IOException if errors occurs while accessing stage files
+   */
+  protected File getStageDirectory()
           throws ApplicationException, IOException {
     return getInstallation().getTemporaryUpgradeDirectory();
   }
@@ -1930,7 +1973,12 @@
     return installDir.getAbsolutePath().equals(instanceDir.getAbsolutePath());
   }
 
-  private File getFilesInstanceBackupDirectory() throws IOException
+  /**
+   * Returns the path where to backup instance files.
+   * @return the path where to backup instance files.
+   * @throws java.io.IOException if retrieval of backup files fails
+   */
+  protected File getFilesInstanceBackupDirectory() throws IOException
   {
     if (instanceAndInstallInSameDir())
     {
@@ -1995,6 +2043,10 @@
     return backupDirectory;
   }
 
+  /**
+   * Returns the BuildInformation of the current OpenDS bits.
+   * @return the BuildInformation of the current OpenDS bits.
+   */
   private BuildInformation getCurrentBuildInformation() {
     if (this.currentVersion == null) {
       try {
@@ -2006,10 +2058,23 @@
     return currentVersion;
   }
 
+ /**
+   * Returns the BuildInformation of the OpenDS instance.
+   * @return the BuildInformation of the OpenDS instance.
+   */
+  private BuildInformation getCurrentInstanceBuildInformation() {
+    if (this.currentInstanceVersion == null) {
+      currentInstanceVersion = getInstallation().getInstanceBuildInformation();
+    }
+
+    return currentInstanceVersion;
+  }
+
+
   private BuildInformation getStagedBuildInformation() {
     if (stagedVersion == null) {
       try {
-        stagedVersion = getStagedInstallation().getBuildInformation();
+          stagedVersion = getStagedInstallation().getBuildInformation();
       } catch (Exception e) {
         LOG.log(Level.INFO, "error getting build info for staged installation",
                 e);
@@ -2018,4 +2083,4 @@
     return stagedVersion;
   }
 
-}
+  }

--
Gitblit v1.10.0