From e86f702f8e11d85eb7fcbde8de64657a4e308a21 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Fri, 11 Sep 2026 13:06:49 +0000
Subject: [PATCH] [#966] Tell the import and restore task listeners the task is over on every path (#969)
---
opendj-server-legacy/src/main/java/org/opends/server/tasks/RestoreTask.java | 49 ++++++++++++++++++++++++++++---------------------
1 files changed, 28 insertions(+), 21 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tasks/RestoreTask.java b/opendj-server-legacy/src/main/java/org/opends/server/tasks/RestoreTask.java
index c75a6e2..8568d35 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tasks/RestoreTask.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tasks/RestoreTask.java
@@ -13,6 +13,7 @@
*
* Copyright 2006-2008 Sun Microsystems, Inc.
* Portions Copyright 2014-2016 ForgeRock AS.
+ * Portions Copyright 2026 3A Systems, LLC.
*/
package org.opends.server.tasks;
@@ -262,25 +263,32 @@
// and to take appropriate actions.
DirectoryServer.notifyRestoreBeginning(backend, restoreConfig);
- // Disable the backend.
- if ( !verifyOnly)
- {
- try
- {
- TaskUtils.disableBackend(backendID);
- } catch (DirectoryException e)
- {
- logger.traceException(e);
-
- logger.error(e.getMessageObject());
- return TaskState.STOPPED_BY_ERROR;
- }
- }
-
- // From here we must make sure to re-enable the backend before returning.
+ /*
+ * From here the listeners must be told that the restore is over whichever way this
+ * method returns: a listener which took something offline when it began - a
+ * replication domain disables itself - gets no other chance to put it back.
+ */
+ boolean backendDisabled = false;
boolean errorsEncountered = false;
try
{
+ // Disable the backend. From here the finally below re-enables it before returning.
+ if ( !verifyOnly)
+ {
+ try
+ {
+ TaskUtils.disableBackend(backendID);
+ backendDisabled = true;
+ } catch (DirectoryException e)
+ {
+ logger.traceException(e);
+
+ logger.error(e.getMessageObject());
+ errorsEncountered = true;
+ return TaskState.STOPPED_BY_ERROR;
+ }
+ }
+
// Acquire an exclusive lock for the backend.
if (verifyOnly || lockBackend(backend))
{
@@ -294,13 +302,11 @@
}
catch (DirectoryException de)
{
- DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false);
logger.error(ERR_RESTOREDB_ERROR_DURING_BACKUP, backupID, backupDir.getPath(), de.getMessageObject());
errorsEncountered = true;
}
catch (Exception e)
{
- DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false);
logger.error(ERR_RESTOREDB_ERROR_DURING_BACKUP, backupID, backupDir.getPath(), getExceptionMessage(e));
errorsEncountered = true;
}
@@ -317,8 +323,8 @@
}
finally
{
- // Enable the backend.
- if (! verifyOnly)
+ // Enable the backend, if it was this task which disabled it.
+ if (backendDisabled)
{
try
{
@@ -335,7 +341,8 @@
errorsEncountered = true;
}
}
- DirectoryServer.notifyRestoreEnded(backend, restoreConfig, true);
+ // Notified once, after the backend is back, so that a listener can read it again.
+ DirectoryServer.notifyRestoreEnded(backend, restoreConfig, !errorsEncountered);
}
if (errorsEncountered)
--
Gitblit v1.10.0