From 43ba6d721185f9a810761720fcb05103b31d17b7 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)
---
opends/src/server/org/opends/server/backends/SchemaBackend.java | 353 +++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 247 insertions(+), 106 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/SchemaBackend.java b/opends/src/server/org/opends/server/backends/SchemaBackend.java
index c3613fd..f52d42f 100644
--- a/opends/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opends/src/server/org/opends/server/backends/SchemaBackend.java
@@ -3612,13 +3612,23 @@
ArrayList<File> tempFileList = new ArrayList<File>();
ArrayList<File> origFileList = new ArrayList<File>();
- File schemaDir = new File(SchemaConfigManager.getSchemaDirectoryPath());
+ File schemaInstallDir =
+ new File(SchemaConfigManager.getSchemaDirectoryPath(false));
+ File schemaInstanceDir =
+ new File(SchemaConfigManager.getSchemaDirectoryPath(true));
for (String name : tempSchemaFiles.keySet())
{
- installedFileList.add(new File(schemaDir, name));
+ File installFile = new File(schemaInstallDir, name);
+ if (installFile.exists())
+ {
+ installedFileList.add(installFile);
+ } else
+ {
+ installedFileList.add(new File(schemaInstanceDir, name));
+ }
tempFileList.add(tempSchemaFiles.get(name));
- origFileList.add(new File(schemaDir, name + ".orig"));
+ origFileList.add(new File(schemaInstanceDir, name + ".orig"));
}
@@ -4643,12 +4653,15 @@
// Get the path to the directory in which the schema files reside and
// then get a list of all the files in that directory.
- String schemaDirPath = SchemaConfigManager.getSchemaDirectoryPath();
- File[] schemaFiles;
+ String schemaInstallDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(false);
+ String schemaInstanceDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(true);
+ File[][] schemaFiles = new File[2][];
try
{
- File schemaDir = new File(schemaDirPath);
- schemaFiles = schemaDir.listFiles();
+ File schemaDir = new File(schemaInstallDirPath);
+ schemaFiles[0] = schemaDir.listFiles();
}
catch (Exception e)
{
@@ -4658,100 +4671,114 @@
}
message = ERR_SCHEMA_BACKUP_CANNOT_LIST_SCHEMA_FILES.get(
- schemaDirPath, getExceptionMessage(e));
+ schemaInstallDirPath, getExceptionMessage(e));
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
message, e);
}
+ try
+ {
+ File schemaDir = new File(schemaInstanceDirPath);
+ schemaFiles[1] = schemaDir.listFiles();
+ }
+ catch (Exception e)
+ {
+ schemaFiles[1] = new File[0] ;
+ }
// Iterate through the schema files and write them to the zip stream. If
// we're using a hash or MAC, then calculate that as well.
byte[] buffer = new byte[8192];
- for (File schemaFile : schemaFiles)
+ String parent = ".install";
+ for (int i=0 ; i < 2 ; i++)
{
- if (backupConfig.isCancelled())
+ for (File schemaFile : schemaFiles[i])
{
- break;
- }
-
- if (! schemaFile.isFile())
- {
- // If there are any non-file items in the directory (e.g., one or more
- // subdirectories), then we'll skip them.
- continue;
- }
-
- String baseName = schemaFile.getName();
-
-
- // We'll put the name in the hash, too.
- if (hash)
- {
- if (signHash)
+ if (backupConfig.isCancelled())
{
- mac.update(getBytes(baseName));
+ break;
}
- else
+
+ if (!schemaFile.isFile())
{
- digest.update(getBytes(baseName));
+ // If there are any non-file items in the directory (e.g., one or more
+ // subdirectories), then we'll skip them.
+ continue;
}
- }
- InputStream inputStream = null;
- try
- {
- ZipEntry zipEntry = new ZipEntry(baseName);
- zipStream.putNextEntry(zipEntry);
+ String baseName = schemaFile.getName();
- inputStream = new FileInputStream(schemaFile);
- while (true)
+ // We'll put the name in the hash, too.
+ if (hash)
{
- int bytesRead = inputStream.read(buffer);
- if (bytesRead < 0 || backupConfig.isCancelled())
+ if (signHash)
{
- break;
- }
-
- if (hash)
+ mac.update(getBytes(baseName));
+ } else
{
- if (signHash)
- {
- mac.update(buffer, 0, bytesRead);
- }
- else
- {
- digest.update(buffer, 0, bytesRead);
- }
+ digest.update(getBytes(baseName));
}
-
- zipStream.write(buffer, 0, bytesRead);
}
- zipStream.closeEntry();
- inputStream.close();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
+ InputStream inputStream = null;
try
{
+ ZipEntry zipEntry = new ZipEntry(baseName + parent);
+ zipStream.putNextEntry(zipEntry);
+
+ inputStream = new FileInputStream(schemaFile);
+ while (true)
+ {
+ int bytesRead = inputStream.read(buffer);
+ if (bytesRead < 0 || backupConfig.isCancelled())
+ {
+ break;
+ }
+
+ if (hash)
+ {
+ if (signHash)
+ {
+ mac.update(buffer, 0, bytesRead);
+ } else
+ {
+ digest.update(buffer, 0, bytesRead);
+ }
+ }
+
+ zipStream.write(buffer, 0, bytesRead);
+ }
+
+ zipStream.closeEntry();
inputStream.close();
- } catch (Exception e2) {}
-
- try
+ } catch (Exception e)
{
- zipStream.close();
- } catch (Exception e2) {}
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
- message = ERR_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE.get(
- baseName, stackTraceToSingleLineString(e));
- throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
- message, e);
+ try
+ {
+ inputStream.close();
+ } catch (Exception e2)
+ {
+ }
+
+ try
+ {
+ zipStream.close();
+ } catch (Exception e2)
+ {
+ }
+
+ message = ERR_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE.get(baseName,
+ stackTraceToSingleLineString(e));
+ throw new DirectoryException(DirectoryServer
+ .getServerErrorResultCode(), message, e);
+ }
}
+ parent = ".instance";
}
@@ -5005,29 +5032,38 @@
// try to verify the archive. If we are not going to verify only, then
// move the current schema directory out of the way so we can keep it around
// to restore if a problem occurs.
- String schemaDirPath = SchemaConfigManager.getSchemaDirectoryPath();
- File schemaDir = new File(schemaDirPath);
- String backupDirPath = null;
- File schemaBackupDir = null;
+ String schemaInstallDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(false);
+ String schemaInstanceDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(true);
+
+ File schemaInstallDir = new File(schemaInstallDirPath);
+ File schemaInstanceDir = new File(schemaInstanceDirPath);
+
+ String backupInstallDirPath = null;
+ File schemaBackupInstallDir = null;
+
+ String backupInstanceDirPath = null;
+ File schemaBackupInstanceDir = null;
boolean verifyOnly = restoreConfig.verifyOnly();
if (! verifyOnly)
{
// Rename the current schema directory if it exists.
try
{
- if (schemaDir.exists())
+ if (schemaInstallDir.exists())
{
- String schemaBackupDirPath = schemaDirPath + ".save";
- backupDirPath = schemaBackupDirPath;
- schemaBackupDir = new File(backupDirPath);
- if (schemaBackupDir.exists())
+ String schemaBackupInstallDirPath = schemaInstallDirPath + ".save";
+ backupInstallDirPath = schemaBackupInstallDirPath;
+ schemaBackupInstallDir = new File(backupInstallDirPath);
+ if (schemaBackupInstallDir.exists())
{
int i=2;
while (true)
{
- backupDirPath = schemaBackupDirPath + i;
- schemaBackupDir = new File(backupDirPath);
- if (schemaBackupDir.exists())
+ backupInstallDirPath = schemaBackupInstallDirPath + i;
+ schemaBackupInstallDir = new File(backupInstallDirPath);
+ if (schemaBackupInstallDir.exists())
{
i++;
}
@@ -5038,13 +5074,51 @@
}
}
- schemaDir.renameTo(schemaBackupDir);
+ schemaInstallDir.renameTo(schemaBackupInstallDir);
}
}
catch (Exception e)
{
Message message = ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY.
- get(backupID, schemaDirPath, String.valueOf(backupDirPath),
+ get(backupID, schemaInstallDirPath,
+ String.valueOf(backupInstallDirPath),
+ stackTraceToSingleLineString(e));
+ throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ message, e);
+ }
+ try
+ {
+ if (schemaInstanceDir.exists())
+ {
+ String schemaBackupInstanceDirPath = schemaInstanceDirPath + ".save";
+ backupInstanceDirPath = schemaBackupInstanceDirPath;
+ schemaBackupInstanceDir = new File(backupInstanceDirPath);
+ if (schemaBackupInstanceDir.exists())
+ {
+ int i=2;
+ while (true)
+ {
+ backupInstanceDirPath = schemaBackupInstanceDirPath + i;
+ schemaBackupInstanceDir = new File(backupInstanceDirPath);
+ if (schemaBackupInstanceDir.exists())
+ {
+ i++;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ schemaInstanceDir.renameTo(schemaBackupInstanceDir);
+ }
+ }
+ catch (Exception e)
+ {
+ Message message = ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY.
+ get(backupID, schemaInstanceDirPath,
+ String.valueOf(backupInstanceDirPath),
stackTraceToSingleLineString(e));
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
message, e);
@@ -5054,32 +5128,52 @@
// Create a new directory to hold the restored schema files.
try
{
- schemaDir.mkdirs();
+ schemaInstallDir.mkdirs();
+ schemaInstanceDir.mkdirs();
}
catch (Exception e)
{
// Try to restore the previous schema directory if possible. This will
// probably fail in this case, but try anyway.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
try
{
- schemaBackupDir.renameTo(schemaDir);
+ schemaBackupInstallDir.renameTo(schemaInstallDir);
Message message =
- NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(schemaDirPath);
+ NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(
+ schemaInstallDirPath);
logError(message);
}
catch (Exception e2)
{
Message message = ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ try
+ {
+ schemaBackupInstanceDir.renameTo(schemaInstanceDir);
+ Message message =
+ NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(
+ schemaInstanceDirPath);
+ logError(message);
+ }
+ catch (Exception e2)
+ {
+ Message message = ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
}
Message message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY.get(
- backupID, schemaDirPath, stackTraceToSingleLineString(e));
+ backupID, schemaInstallDirPath,schemaInstanceDirPath,
+ stackTraceToSingleLineString(e));
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
message, e);
}
@@ -5100,10 +5194,16 @@
catch (Exception e)
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5131,13 +5231,25 @@
mac.update(getBytes(fileName));
}
+ String baseDirPath ;
+ if (fileName.endsWith(".install"))
+ {
+ fileName = fileName.substring(fileName.lastIndexOf(".install"));
+ baseDirPath = schemaInstallDirPath;
+ }
+ else
+ {
+ fileName = fileName.substring(fileName.lastIndexOf(".instance"));
+ baseDirPath = schemaInstanceDirPath;
+ }
+
// If we're doing the restore, then create the output stream to write the
// file.
OutputStream outputStream = null;
if (! verifyOnly)
{
- String filePath = schemaDirPath + File.separator + fileName;
+ String filePath = baseDirPath + File.separator + fileName;
try
{
outputStream = new FileOutputStream(filePath);
@@ -5145,10 +5257,16 @@
catch (Exception e)
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5206,10 +5324,16 @@
catch (Exception e)
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5249,10 +5373,17 @@
else
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ // Tell the user where the previous schema was archived.
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5274,10 +5405,16 @@
else
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5301,9 +5438,13 @@
// If we've gotten here, then the archive was restored successfully. Get
// rid of the temporary copy we made of the previous schema directory and
// exit.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
- recursiveDelete(schemaBackupDir);
+ recursiveDelete(schemaBackupInstallDir);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ recursiveDelete(schemaBackupInstanceDir);
}
Message message = NOTE_SCHEMA_RESTORE_SUCCESSFUL.get(backupID, backupPath);
--
Gitblit v1.10.0