| | |
| | | * Portions Copyright 2006-2007 Sun Microsystems, Inc. |
| | | */ |
| | | package org.opends.server.backends.jeb; |
| | | import org.opends.messages.Message; |
| | | |
| | | import org.opends.server.config.ConfigException; |
| | | import org.opends.server.core.DirectoryServer; |
| | |
| | | import org.opends.server.types.BackupInfo; |
| | | import org.opends.server.types.CryptoManager; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.ErrorLogCategory; |
| | | import org.opends.server.types.ErrorLogSeverity; |
| | | import org.opends.server.types.RestoreConfig; |
| | | |
| | | import javax.crypto.Cipher; |
| | |
| | | import static org.opends.server.loggers.ErrorLogger.logError; |
| | | import static org.opends.server.loggers.debug.DebugLogger.*; |
| | | import org.opends.server.loggers.debug.DebugTracer; |
| | | import static org.opends.server.messages.MessageHandler.getMessage; |
| | | import static org.opends.server.messages.JebMessages.*; |
| | | import static org.opends.messages.JebMessages.*; |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | import org.opends.server.admin.std.server.JEBackendCfg; |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_GET_MAC; |
| | | String message = getMessage(msgID, macAlgorithm, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get( |
| | | macAlgorithm, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message, msgID, e); |
| | | DirectoryServer.getServerErrorResultCode(), message, e); |
| | | } |
| | | } |
| | | else |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_GET_DIGEST; |
| | | String message = getMessage(msgID, digestAlgorithm, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get( |
| | | digestAlgorithm, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message, msgID, e); |
| | | DirectoryServer.getServerErrorResultCode(), message, e); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (files == null || files.length == 0) |
| | | { |
| | | // Incremental not allowed until after a full. |
| | | int msgID = MSGID_JEB_INCR_BACKUP_REQUIRES_FULL; |
| | | String msg = getMessage(msgID); |
| | | Message msg = ERR_JEB_INCR_BACKUP_REQUIRES_FULL.get(); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | msg, msgID); |
| | | msg); |
| | | } |
| | | HashSet<String> backups = new HashSet<String>(); |
| | | int prefixLen = BackupInfo.PROPERTY_BACKUP_ID.length()+1; |
| | |
| | | // Check that it makes sense to do this incremental. |
| | | if (incrBaseID == null || !backups.contains(incrBaseID)) |
| | | { |
| | | int msgID = MSGID_JEB_INCR_BACKUP_FROM_WRONG_BASE; |
| | | String msg = getMessage(msgID, backups.toString()); |
| | | Message msg = |
| | | ERR_JEB_INCR_BACKUP_FROM_WRONG_BASE.get(backups.toString()); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | msg, msgID); |
| | | msg); |
| | | } |
| | | */ |
| | | |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE; |
| | | String message = getMessage(msgID, String.valueOf(archiveFilename), |
| | | backupDir.getPath(), |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE. |
| | | get(String.valueOf(archiveFilename), backupDir.getPath(), |
| | | stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_GET_CIPHER; |
| | | String message = getMessage(msgID, cipherAlgorithm, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get( |
| | | cipherAlgorithm, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | outputStream = new CipherOutputStream(outputStream, cipher); |
| | |
| | | // Wrap the file output stream in a zip output stream. |
| | | ZipOutputStream zipStream = new ZipOutputStream(outputStream); |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_ZIP_COMMENT; |
| | | String message = getMessage(msgID, DynamicConstants.PRODUCT_NAME, |
| | | backupID, backendID); |
| | | zipStream.setComment(message); |
| | | Message message = ERR_JEB_BACKUP_ZIP_COMMENT.get( |
| | | DynamicConstants.PRODUCT_NAME, |
| | | backupID, backendID); |
| | | zipStream.setComment(message.toString()); |
| | | |
| | | if (compress) |
| | | { |
| | |
| | | catch (IOException e) |
| | | { |
| | | assert debugException(CLASS_NAME, "createBackup", e); |
| | | msgID = MSGID_JEB_CANNOT_CREATE_BACKUP_TAG_FILE; |
| | | String msg = getMessage(msgID, backupTag, backendDir.getPath()); |
| | | Message msg = ERR_JEB_CANNOT_CREATE_BACKUP_TAG_FILE.get( |
| | | backupTag, backendDir.getPath()); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | msg, msgID); |
| | | msg); |
| | | } |
| | | */ |
| | | |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_LIST_LOG_FILES; |
| | | message = getMessage(msgID, backendDir.getAbsolutePath(), |
| | | stackTraceToSingleLineString(e)); |
| | | message = ERR_JEB_BACKUP_CANNOT_LIST_LOG_FILES.get( |
| | | backendDir.getAbsolutePath(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | // Check to see if backend is empty. If so, insert placeholder entry into |
| | |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE; |
| | | message = getMessage(msgID, ZIPENTRY_EMPTY_PLACEHOLDER, |
| | | stackTraceToSingleLineString(e)); |
| | | message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get( |
| | | ZIPENTRY_EMPTY_PLACEHOLDER, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message, msgID, e); |
| | | DirectoryServer.getServerErrorResultCode(), message, e); |
| | | } |
| | | } |
| | | |
| | |
| | | catch (IOException e) |
| | | { |
| | | assert debugException(CLASS_NAME, "createBackup", e); |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE; |
| | | message = getMessage(msgID, backupTag, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get( |
| | | backupTag, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message, msgID, e); |
| | | DirectoryServer.getServerErrorResultCode(), message, e); |
| | | } |
| | | } |
| | | } |
| | |
| | | break; |
| | | } |
| | | |
| | | msgID = MSGID_JEB_BACKUP_FILE_UNCHANGED; |
| | | message = getMessage(msgID, logFileName); |
| | | logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, |
| | | message, msgID); |
| | | message = INFO_JEB_BACKUP_FILE_UNCHANGED.get(logFileName); |
| | | logError(message); |
| | | |
| | | unchangedList.add(logFileName); |
| | | |
| | |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE; |
| | | message = getMessage(msgID, zipEntryName, |
| | | stackTraceToSingleLineString(e)); |
| | | message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get( |
| | | zipEntryName, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message, msgID, e); |
| | | DirectoryServer.getServerErrorResultCode(), message, e); |
| | | } |
| | | |
| | | // Set the dependency. |
| | |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE; |
| | | message = getMessage(msgID, logFile.getName(), |
| | | stackTraceToSingleLineString(e)); |
| | | message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get( |
| | | logFile.getName(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message, msgID, e); |
| | | DirectoryServer.getServerErrorResultCode(), message, e); |
| | | } |
| | | |
| | | indexCurrent++; |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_LIST_LOG_FILES; |
| | | message = getMessage(msgID, backendDir.getAbsolutePath(), |
| | | stackTraceToSingleLineString(e)); |
| | | message = ERR_JEB_BACKUP_CANNOT_LIST_LOG_FILES.get( |
| | | backendDir.getAbsolutePath(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message, msgID, e); |
| | | DirectoryServer.getServerErrorResultCode(), message, e); |
| | | } |
| | | |
| | | if (logFiles == null) |
| | |
| | | |
| | | Arrays.sort(logFiles); |
| | | |
| | | msgID = MSGID_JEB_BACKUP_CLEANER_ACTIVITY; |
| | | message = getMessage(msgID, logFiles.length); |
| | | logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, |
| | | message, msgID); |
| | | message = INFO_JEB_BACKUP_CLEANER_ACTIVITY.get( |
| | | String.valueOf(logFiles.length)); |
| | | logError(message); |
| | | } |
| | | else |
| | | { |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_CLOSE_ZIP_STREAM; |
| | | message = getMessage(msgID, archiveFilename, backupDir.getPath(), |
| | | stackTraceToSingleLineString(e)); |
| | | message = ERR_JEB_BACKUP_CANNOT_CLOSE_ZIP_STREAM. |
| | | get(archiveFilename, backupDir.getPath(), |
| | | stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | msgID = MSGID_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR; |
| | | message = getMessage(msgID, backupDir.getDescriptorPath(), |
| | | stackTraceToSingleLineString(e)); |
| | | message = ERR_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get( |
| | | backupDir.getDescriptorPath(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_RESTORE; |
| | | String message = getMessage(msgID, backupInfo.getBackupID(), |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get( |
| | | backupInfo.getBackupID(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | // Restore any dependencies. |
| | |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_RESTORE; |
| | | String message = getMessage(msgID, dependent.getBackupID(), |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get( |
| | | dependent.getBackupID(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_RESTORE; |
| | | String message = getMessage(msgID, backupInfo.getBackupID(), |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get( |
| | | backupInfo.getBackupID(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | // Delete the current backend directory and rename the restore directory. |
| | |
| | | currentDir.delete(); |
| | | if (!restoreDir.renameTo(currentDir)) |
| | | { |
| | | int msgID = MSGID_JEB_CANNOT_RENAME_RESTORE_DIRECTORY; |
| | | String msg = getMessage(msgID, restoreDir.getPath(), |
| | | currentDir.getPath()); |
| | | Message msg = ERR_JEB_CANNOT_RENAME_RESTORE_DIRECTORY.get( |
| | | restoreDir.getPath(), currentDir.getPath()); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | msg, msgID); |
| | | msg); |
| | | } |
| | | } |
| | | } |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | e.getMessage(), |
| | | e.getMessageID()); |
| | | e.getMessageObject()); |
| | | } |
| | | |
| | | try |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR; |
| | | String message = getMessage(msgID, backupDir.getDescriptorPath(), |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get( |
| | | backupDir.getDescriptorPath(), stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | // Remove the archive file. |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_GET_MAC; |
| | | String message = getMessage(msgID, macAlgorithm, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get( |
| | | macAlgorithm, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | } |
| | | |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_GET_DIGEST; |
| | | String message = getMessage(msgID, digestAlgorithm, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get( |
| | | digestAlgorithm, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | } |
| | | |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_GET_CIPHER; |
| | | String message = getMessage(msgID, cipherAlgorithm, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get( |
| | | cipherAlgorithm, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | inputStream = new CipherInputStream(inputStream, cipher); |
| | |
| | | { |
| | | if (verifyOnly) |
| | | { |
| | | int msgID = MSGID_JEB_BACKUP_VERIFY_FILE; |
| | | String message = getMessage(msgID, zipEntry.getName()); |
| | | logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, |
| | | message, msgID); |
| | | Message message = INFO_JEB_BACKUP_VERIFY_FILE.get(zipEntry.getName()); |
| | | logError(message); |
| | | } |
| | | |
| | | // The file name is part of the hash. |
| | |
| | | { |
| | | outputStream.close(); |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_RESTORED_FILE; |
| | | String message = getMessage(msgID, zipEntry.getName(), |
| | | totalBytesRead); |
| | | logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, |
| | | message, msgID); |
| | | Message message = INFO_JEB_BACKUP_RESTORED_FILE.get( |
| | | zipEntry.getName(), totalBytesRead); |
| | | logError(message); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | if (!Arrays.equals(digest.digest(), hash)) |
| | | { |
| | | int msgID = MSGID_JEB_BACKUP_UNSIGNED_HASH_ERROR; |
| | | String message = getMessage(msgID, backupID); |
| | | Message message = ERR_JEB_BACKUP_UNSIGNED_HASH_ERROR.get(backupID); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID); |
| | | message); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (!Arrays.equals(computedSignHash, signHash)) |
| | | { |
| | | int msgID = MSGID_JEB_BACKUP_SIGNED_HASH_ERROR; |
| | | String message = getMessage(msgID, backupID); |
| | | Message message = ERR_JEB_BACKUP_SIGNED_HASH_ERROR.get(backupID); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID); |
| | | message); |
| | | } |
| | | } |
| | | } |
| | |
| | | // Finish the zip entry. |
| | | zipStream.closeEntry(); |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_ARCHIVED_FILE; |
| | | String message = getMessage(msgID, zipEntry.getName()); |
| | | logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, |
| | | message, msgID); |
| | | Message message = INFO_JEB_BACKUP_ARCHIVED_FILE.get(zipEntry.getName()); |
| | | logError(message); |
| | | |
| | | return totalBytesRead; |
| | | } |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_JEB_BACKUP_CANNOT_GET_CIPHER; |
| | | String message = getMessage(msgID, cipherAlgorithm, |
| | | stackTraceToSingleLineString(e)); |
| | | Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get( |
| | | cipherAlgorithm, stackTraceToSingleLineString(e)); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID, e); |
| | | message, e); |
| | | } |
| | | |
| | | inputStream = new CipherInputStream(inputStream, cipher); |
| | |
| | | BackupInfo backupInfo = backupDir.getBackupInfo(backupID); |
| | | if (backupInfo == null) |
| | | { |
| | | int msgID = MSGID_JEB_BACKUP_MISSING_BACKUPID; |
| | | String message = getMessage(msgID, backupDir.getPath(), backupID); |
| | | Message message = |
| | | ERR_JEB_BACKUP_MISSING_BACKUPID.get(backupDir.getPath(), backupID); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, msgID); |
| | | message); |
| | | } |
| | | return backupInfo; |
| | | } |