From c6c3de416bcc406346299a860905c9e71870a4ab Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Mon, 27 Aug 2007 11:58:47 +0000
Subject: [PATCH] complement for issue 2097 : total update fails sending a Message to ReplicationCache

---
 opends/src/server/org/opends/server/replication/server/ReplicationCache.java |   28 +++++++++++++++++++++++-----
 1 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationCache.java b/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
index ef31ab3..d618cf8 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
@@ -583,8 +583,8 @@
       {
         // TODO Handle error properly (sender timeout in addition)
         /*
-         * An error happened trying the send back an ack to this server.
-         * Log an error and close the connection to this server.
+         * An error happened trying the send back an error to this server.
+         * Log an error and close the connection to the sender server.
          */
         MessageBuilder mb2 = new MessageBuilder();
         mb2.append(ERR_CHANGELOG_ERROR_SENDING_ERROR.get(this.toString()));
@@ -604,8 +604,9 @@
         catch(IOException ioe)
         {
           /*
-           * An error happened trying the send back an ack to this server.
-           * Log an error and close the connection to this server.
+           * An error happened trying the send a routabled message
+           * to its destination server.
+           * Send back an error to the originator of the message.
            */
           MessageBuilder mb = new MessageBuilder();
           mb.append(ERR_CHANGELOG_ERROR_SENDING_MSG.get(this.toString()));
@@ -613,7 +614,24 @@
           mb.append(" ");
           mb.append(msg.getClass().getCanonicalName());
           logError(mb.toMessage());
-          senderHandler.shutdown();
+
+          MessageBuilder mb1 = new MessageBuilder();
+          mb1.append(ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get());
+          mb1.append("serverID:" + msg.getDestination());
+          ErrorMessage errMsg = new ErrorMessage(
+              msg.getsenderID(), mb1.toMessage());
+          try
+          {
+            senderHandler.send(errMsg);
+          }
+          catch(IOException ioe1)
+          {
+            // an error happened on the sender session trying to recover
+            // from an error on the receiver session.
+            // We don't have much solution left beside closing the sessions.
+            senderHandler.shutdown();
+            targetHandler.shutdown();
+          }
           // TODO Handle error properly (sender timeout in addition)
         }
       }

--
Gitblit v1.10.0