From 36f277e76984f6184f2694507aeb7a3c8d856fda Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Sun, 08 Jul 2007 21:29:59 +0000
Subject: [PATCH] Update the config file handler so that it will report back to clients if a problem occurs while applying a configuration add, delete, or modify after the new configuration has been written to disk.
---
opends/src/server/org/opends/server/extensions/ConfigFileHandler.java | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 103 insertions(+), 6 deletions(-)
diff --git a/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java b/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
index 1d896c2..e878102 100644
--- a/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
+++ b/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
@@ -39,6 +39,7 @@
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
@@ -1357,12 +1358,44 @@
// Notify all the add listeners that the entry has been added.
+ ResultCode resultCode = ResultCode.SUCCESS;
+ LinkedList<String> messages = new LinkedList<String>();
for (ConfigAddListener l : addListeners)
{
- handleConfigChangeResult(l.applyConfigurationAdd(newEntry),
- newEntry.getDN(), l.getClass().getName(),
+ ConfigChangeResult result = l.applyConfigurationAdd(newEntry);
+ if (result.getResultCode() != ResultCode.SUCCESS)
+ {
+ if (resultCode == ResultCode.SUCCESS)
+ {
+ resultCode = result.getResultCode();
+ }
+
+ messages.addAll(result.getMessages());
+ }
+
+ handleConfigChangeResult(result, newEntry.getDN(),
+ l.getClass().getName(),
"applyConfigurationAdd");
}
+
+ if (resultCode != ResultCode.SUCCESS)
+ {
+ StringBuilder buffer = new StringBuilder();
+ if (! messages.isEmpty())
+ {
+ Iterator<String> iterator = messages.iterator();
+ buffer.append(iterator.next());
+ while (iterator.hasNext())
+ {
+ buffer.append(". ");
+ buffer.append(iterator.next());
+ }
+ }
+
+ int msgID = MSGID_CONFIG_FILE_ADD_APPLY_FAILED;
+ String message = getMessage(msgID, String.valueOf(buffer));
+ throw new DirectoryException(resultCode, message, msgID);
+ }
}
finally
{
@@ -1505,12 +1538,44 @@
// Notify all the delete listeners that the entry has been removed.
+ ResultCode resultCode = ResultCode.SUCCESS;
+ LinkedList<String> messages = new LinkedList<String>();
for (ConfigDeleteListener l : deleteListeners)
{
- handleConfigChangeResult(l.applyConfigurationDelete(entry),
- entry.getDN(), l.getClass().getName(),
+ ConfigChangeResult result = l.applyConfigurationDelete(entry);
+ if (result.getResultCode() != ResultCode.SUCCESS)
+ {
+ if (resultCode == ResultCode.SUCCESS)
+ {
+ resultCode = result.getResultCode();
+ }
+
+ messages.addAll(result.getMessages());
+ }
+
+ handleConfigChangeResult(result, entry.getDN(),
+ l.getClass().getName(),
"applyConfigurationDelete");
}
+
+ if (resultCode != ResultCode.SUCCESS)
+ {
+ StringBuilder buffer = new StringBuilder();
+ if (! messages.isEmpty())
+ {
+ Iterator<String> iterator = messages.iterator();
+ buffer.append(iterator.next());
+ while (iterator.hasNext())
+ {
+ buffer.append(". ");
+ buffer.append(iterator.next());
+ }
+ }
+
+ int msgID = MSGID_CONFIG_FILE_DELETE_APPLY_FAILED;
+ String message = getMessage(msgID, String.valueOf(buffer));
+ throw new DirectoryException(resultCode, message, msgID);
+ }
}
finally
{
@@ -1658,12 +1723,44 @@
// Notify all the change listeners of the update.
+ ResultCode resultCode = ResultCode.SUCCESS;
+ LinkedList<String> messages = new LinkedList<String>();
for (ConfigChangeListener l : changeListeners)
{
- handleConfigChangeResult(l.applyConfigurationChange(currentEntry),
- currentEntry.getDN(), l.getClass().getName(),
+ ConfigChangeResult result = l.applyConfigurationChange(newEntry);
+ if (result.getResultCode() != ResultCode.SUCCESS)
+ {
+ if (resultCode == ResultCode.SUCCESS)
+ {
+ resultCode = result.getResultCode();
+ }
+
+ messages.addAll(result.getMessages());
+ }
+
+ handleConfigChangeResult(result, newEntry.getDN(),
+ l.getClass().getName(),
"applyConfigurationChange");
}
+
+ if (resultCode != ResultCode.SUCCESS)
+ {
+ StringBuilder buffer = new StringBuilder();
+ if (! messages.isEmpty())
+ {
+ Iterator<String> iterator = messages.iterator();
+ buffer.append(iterator.next());
+ while (iterator.hasNext())
+ {
+ buffer.append(". ");
+ buffer.append(iterator.next());
+ }
+ }
+
+ int msgID = MSGID_CONFIG_FILE_MODIFY_APPLY_FAILED;
+ String message = getMessage(msgID, String.valueOf(buffer));
+ throw new DirectoryException(resultCode, message, msgID);
+ }
}
finally
{
--
Gitblit v1.10.0