From d48536f1cf5e4b6714122fc0d85a5e77bf731346 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Wed, 16 Mar 2016 11:41:09 +0000
Subject: [PATCH] OPENDJ-2730 Fix upgrade on case insensitive file systems

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java |   48 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
index 53bd46c..8761918 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/upgrade/UpgradeTasks.java
@@ -563,7 +563,7 @@
       @Override
       public void prepare(UpgradeContext context) throws ClientException
       {
-        Upgrade.setHasPostUpgradeTask(true);
+        Upgrade.needToRunPostUpgradePhase();
         // Requires answer from the user.
         isATaskToPerform = context.confirmYN(summary, NO) == YES;
         isRebuildAllIndexesIsPresent = true;
@@ -618,7 +618,7 @@
       @Override
       public void prepare(UpgradeContext context) throws ClientException
       {
-        Upgrade.setHasPostUpgradeTask(true);
+        Upgrade.needToRunPostUpgradePhase();
         // Requires answer from the user.
         isATaskToPerform = context.confirmYN(summary, NO) == YES;
       }
@@ -1059,7 +1059,7 @@
           {
             while (jeBackends.hasNext())
             {
-              Upgrade.setHasPostUpgradeTask(true);
+              Upgrade.needToRunPostUpgradePhase();
               reimportRequired = true;
 
               Entry jeBackend = jeBackends.readEntry();
@@ -1322,6 +1322,7 @@
   {
     return new AbstractUpgradeTask()
     {
+
       @Override
       public void perform(final UpgradeContext context) throws ClientException
       {
@@ -1329,19 +1330,30 @@
             INFORMATION, INFO_UPGRADE_TASK_REMOVE_OLD_JARS.get(), 0);
         context.notifyProgress(pnc);
 
+        final boolean fileSystemIsCaseSensitive = fileSystemIsCaseSensitive(context);
+
+        deleteJarFilesIfFileSystemIsCaseSensitive(fileSystemIsCaseSensitive, "OpenDJ");
         for (final String locale : SUPPORTED_LOCALES_FOR_3_0_0)
         {
-          deleteJarFileIfExists("OpenDJ_" + locale);
-          deleteJarFileIfExists("OpenDJ-" + locale);
+          deleteJarFiles("OpenDJ-" + locale);
+          deleteJarFilesIfFileSystemIsCaseSensitive(fileSystemIsCaseSensitive, "OpenDJ_" + locale);
         }
-        deleteJarFileIfExists("OpenDJ",
-            // Jar files from 2.6.x
-            "jackson-core-asl", "jackson-mapper-asl", "json-fluent", "json-resource-servlet",
+        // Jar files from 2.6.x
+        deleteJarFiles("jackson-core-asl", "jackson-mapper-asl", "json-fluent", "json-resource-servlet",
             "mail", "opendj-ldap-sdk", "opendj-rest2ldap-servlet", "opendj-server2x-adapter");
         context.notifyProgress(pnc.setProgress(100));
       }
 
-      private void deleteJarFileIfExists(final String... jarFileNames)
+      private void deleteJarFilesIfFileSystemIsCaseSensitive(
+          final boolean fileSystemIsCaseSensitive, final String... jarFileNames)
+      {
+        if (fileSystemIsCaseSensitive)
+        {
+          deleteJarFiles(jarFileNames);
+        }
+      }
+
+      private void deleteJarFiles(final String... jarFileNames)
       {
         for (final String jarFileName : jarFileNames)
         {
@@ -1352,6 +1364,24 @@
           }
         }
       }
+
+      /** Used to know if we have to remove old "camel case" OpenDJ[_]*.jar(see OPENDJ-2692). */
+      private boolean fileSystemIsCaseSensitive(final UpgradeContext context) throws ClientException
+      {
+        final File openDJCamelCaseJar = new File(libDirectory, "OpenDJ.jar");
+        try
+        {
+          // getCanonicalPath() will return the new "opendj.jar" on case insensitive file systems
+          return openDJCamelCaseJar.getCanonicalPath().equals(openDJCamelCaseJar.getAbsolutePath());
+        }
+        catch (final IOException unlikely)
+        {
+          // Warn the user that he may have some old camel case jars to remove
+          context.notify(INFO_UPGRADE_TASK_UNABLE_TO_REMOVE_OLD_JARS.get());
+          Upgrade.needToExitWithErrorCode();
+          return false;
+        }
+      }
     };
 
   }

--
Gitblit v1.10.0