From bd78e71b6adf910439d19d7a045bbb0666d55adf Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Wed, 09 Dec 2009 13:39:32 +0000
Subject: [PATCH] Improve error handling on entryuid mapping in ECL

---
 opendj-sdk/opends/src/messages/messages/replication.properties                                           |    3 +++
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java |   39 +++++++++++++++++++++++++++++++--------
 2 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/opendj-sdk/opends/src/messages/messages/replication.properties b/opendj-sdk/opends/src/messages/messages/replication.properties
index 801eca7..535ecfe 100644
--- a/opendj-sdk/opends/src/messages/messages/replication.properties
+++ b/opendj-sdk/opends/src/messages/messages/replication.properties
@@ -439,3 +439,6 @@
  attribute for external change log: Attribute: %s , Error: %s
 NOTICE_ERR_UNABLE_TO_ENABLE_ECL_183=Error in %s when enabling the external \
  change log: %s
+NOTICE_ERR_ENTRY_UID_DSEE_MAPPING_184=Error for entry %s when mapping entry UID\
+  attribute to DSEE NsUniqueID attribute. Value to be mapped: %s \
+ Error : %s
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index a3ffd42..835375b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -29,12 +29,14 @@
 
 
 import static org.opends.messages.CoreMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 import static org.opends.server.util.StaticUtils.needsBase64Encoding;
+import static org.opends.server.util.StaticUtils.*;
 
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -1169,14 +1171,35 @@
           DirectoryServer.getAttributeType("targetuniqueid")) == null)
           attributeType =
               DirectoryServer.getDefaultAttributeType("targetuniqueid");
-        a = Attributes.create(attributeType,
-            ECLSearchOperation.openDsToSunDseeNsUniqueId(targetUUID));
-        attrList = new ArrayList<Attribute>(1);
-        attrList.add(a);
-        if(attributeType.isOperational())
-          operationalAttrs.put(attributeType, attrList);
-        else
-          uAttrs.put(attributeType, attrList);
+        String dseeValue = null;
+        try
+        {
+          ECLSearchOperation.openDsToSunDseeNsUniqueId(targetUUID);
+        }
+        catch(Exception e)
+        {
+          Message errMessage =
+            NOTE_ERR_ENTRY_UID_DSEE_MAPPING.get(
+                targetDN.toNormalizedString(),
+                targetUUID,
+                e.getLocalizedMessage());
+          logError(errMessage);
+          if (debugEnabled())
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
+        }
+
+        // If the mapping fails, we don't want to stop the operation
+        // or not return this entry.
+        if (dseeValue != null)
+        {
+          a = Attributes.create(attributeType, dseeValue);
+          attrList = new ArrayList<Attribute>(1);
+          attrList.add(a);
+          if(attributeType.isOperational())
+            operationalAttrs.put(attributeType, attrList);
+          else
+            uAttrs.put(attributeType, attrList);
+        }
       }
     }
 

--
Gitblit v1.10.0