| | |
| | | * |
| | | * |
| | | * Copyright 2006-2008 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014 ForgeRock AS |
| | | */ |
| | | package org.opends.server.tasks; |
| | | import org.opends.messages.Message; |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.opends.messages.TaskMessages; |
| | | |
| | | import static org.opends.server.core.DirectoryServer.getAttributeType; |
| | |
| | | /** |
| | | * Stores mapping between configuration attribute name and its label. |
| | | */ |
| | | static private Map<String,Message> argDisplayMap = |
| | | new HashMap<String,Message>(); |
| | | static private Map<String,LocalizableMessage> argDisplayMap = |
| | | new HashMap<String,LocalizableMessage>(); |
| | | static { |
| | | argDisplayMap.put( |
| | | ATTR_BACKUP_DIRECTORY_PATH, |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public Message getDisplayName() { |
| | | public LocalizableMessage getDisplayName() { |
| | | return INFO_TASK_RESTORE_NAME.get(); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public Message getAttributeDisplayName(String name) { |
| | | public LocalizableMessage getAttributeDisplayName(String name) { |
| | | return argDisplayMap.get(name); |
| | | } |
| | | |
| | |
| | | ClientConnection clientConnection = operation.getClientConnection(); |
| | | if (! clientConnection.hasPrivilege(Privilege.BACKEND_RESTORE, operation)) |
| | | { |
| | | Message message = ERR_TASK_RESTORE_INSUFFICIENT_PRIVILEGES.get(); |
| | | LocalizableMessage message = ERR_TASK_RESTORE_INSUFFICIENT_PRIVILEGES.get(); |
| | | throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS, |
| | | message); |
| | | } |
| | |
| | | StringBuilder failureReason = new StringBuilder(); |
| | | if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason)) |
| | | { |
| | | Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get( |
| | | LocalizableMessage message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get( |
| | | backend.getBackendID(), String.valueOf(failureReason)); |
| | | logError(message); |
| | | return false; |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get( |
| | | LocalizableMessage message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get( |
| | | backend.getBackendID(), getExceptionMessage(e)); |
| | | logError(message); |
| | | return false; |
| | |
| | | StringBuilder failureReason = new StringBuilder(); |
| | | if (! LockFileManager.releaseLock(lockFile, failureReason)) |
| | | { |
| | | Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get( |
| | | LocalizableMessage message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get( |
| | | backend.getBackendID(), String.valueOf(failureReason)); |
| | | logError(message); |
| | | return false; |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get( |
| | | LocalizableMessage message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get( |
| | | backend.getBackendID(), getExceptionMessage(e)); |
| | | logError(message); |
| | | return false; |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void interruptTask(TaskState interruptState, Message interruptReason) |
| | | public void interruptTask(TaskState interruptState, LocalizableMessage interruptReason) |
| | | { |
| | | if (TaskState.STOPPED_BY_ADMINISTRATOR.equals(interruptState) && |
| | | restoreConfig != null) |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Message message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get( |
| | | LocalizableMessage message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get( |
| | | String.valueOf(backupDirectory), getExceptionMessage(e)); |
| | | logError(message); |
| | | return TaskState.STOPPED_BY_ERROR; |
| | |
| | | BackupInfo backupInfo = backupDir.getBackupInfo(backupID); |
| | | if (backupInfo == null) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_RESTOREDB_INVALID_BACKUP_ID.get( |
| | | backupID, String.valueOf(backupDirectory)); |
| | | logError(message); |
| | |
| | | BackupInfo latestBackup = backupDir.getLatestBackup(); |
| | | if (latestBackup == null) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY.get( |
| | | String.valueOf(backupDirectory)); |
| | | logError(message); |
| | |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | Message message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get( |
| | | LocalizableMessage message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get( |
| | | String.valueOf(backupDirectory), configEntryDN.toString()); |
| | | logError(message); |
| | | return TaskState.STOPPED_BY_ERROR; |
| | |
| | | |
| | | if (! backend.supportsRestore()) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_RESTOREDB_CANNOT_RESTORE.get(backend.getBackendID()); |
| | | logError(message); |
| | | return TaskState.STOPPED_BY_ERROR; |
| | |
| | | catch (DirectoryException de) |
| | | { |
| | | DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false); |
| | | Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get( |
| | | LocalizableMessage message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get( |
| | | backupID, backupDir.getPath(), de.getMessageObject()); |
| | | logError(message); |
| | | errorsEncountered = true; |
| | |
| | | catch (Exception e) |
| | | { |
| | | DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false); |
| | | Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get( |
| | | LocalizableMessage message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get( |
| | | backupID, backupDir.getPath(), getExceptionMessage(e)); |
| | | logError(message); |
| | | errorsEncountered = true; |