From 3af1c93c0de41be1cdfc0e6aff1d1c98f1d5530b Mon Sep 17 00:00:00 2001
From: mrossign <mrossign@localhost>
Date: Tue, 07 Jul 2009 09:15:52 +0000
Subject: [PATCH] Fractional replication Info about the feature:  https://www.opends.org/wiki/page/FractionalReplication

---
 opends/src/server/org/opends/server/replication/service/ReplicationDomain.java |   94 ++++++++++++++++++++++++++++++++--------------
 1 files changed, 65 insertions(+), 29 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java b/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
index c87076a..fb50284 100644
--- a/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
+++ b/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -151,7 +151,7 @@
   /**
    * Current status for this replicated domain.
    */
-  private ServerStatus status = ServerStatus.NOT_CONNECTED_STATUS;
+  protected ServerStatus status = ServerStatus.NOT_CONNECTED_STATUS;
 
   /**
    * The tracer object for the debug logger.
@@ -176,7 +176,7 @@
    * The ReplicationBroker that is used by this ReplicationDomain to
    * connect to the ReplicationService.
    */
-  private ReplicationBroker broker = null;
+  protected ReplicationBroker broker = null;
 
   /**
    * This Map is used to store all outgoing assured messages in order
@@ -191,7 +191,7 @@
    * The context related to an import or export being processed
    * Null when none is being processed.
    */
-  private IEContext ieContext = null;
+  protected IEContext ieContext = null;
 
   /**
    * The Thread waiting for incoming update messages for this domain and pushing
@@ -788,6 +788,7 @@
             mb.append(de.getMessageObject());
             TRACER.debugInfo(Message.toString(mb.toMessage()));
             broker.publish(errorMsg);
+            logError(de.getMessageObject());
           }
         }
         else if (msg instanceof ErrorMsg)
@@ -1076,11 +1077,11 @@
    * This class contain the context related to an import or export
    * launched on the domain.
    */
-  private class IEContext
+  protected class IEContext
   {
-    // The task that initiated the operation.
+    // Theprivate task that initiated the operation.
     Task initializeTask;
-    // The target in the case of an export
+    // The destination in the case of an export
     short exportTarget = RoutableMsg.UNKNOWN_SERVER;
     // The source in the case of an import
     short importSource = RoutableMsg.UNKNOWN_SERVER;
@@ -1111,9 +1112,9 @@
 
     /**
      * Initializes the import/export counters with the provider value.
-     * @param total
-     * @param left
-     * @throws DirectoryException
+     * @param total Total number of entries to be processed.
+     * @param left Remaining number of entries to be processed.
+     * @throws DirectoryException if an error occurred.
      */
     public void setCounters(long total, long left)
       throws DirectoryException
@@ -1139,7 +1140,7 @@
     /**
      * Update the counters of the task for each entry processed during
      * an import or export.
-     * @throws DirectoryException
+     * @throws DirectoryException if an error occurred.
      */
     public void updateCounters()
       throws DirectoryException
@@ -1166,7 +1167,7 @@
      * @param  entriesDone The number of entries that were processed
      *                     since the last time this method was called.
      *
-     * @throws DirectoryException
+     * @throws DirectoryException if an error occurred.
      */
     public void updateCounters(int entriesDone)
       throws DirectoryException
@@ -1195,6 +1196,42 @@
       return new String("[ Entry count=" + this.entryCount +
                         ", Entry left count=" + this.entryLeftCount + "]");
     }
+
+    /**
+     * Gets the server id of the exporting server.
+     * @return the server id of the exporting server.
+     */
+    public short getExportTarget()
+    {
+      return exportTarget;
+    }
+
+    /**
+     * Gets the server id of the importing server.
+     * @return the server id of the importing server.
+     */
+    public short getImportSource()
+    {
+      return importSource;
+    }
+
+    /**
+     * Get the exception that occurred during the import/export.
+     * @return the exception that occurred during the import/export.
+     */
+    public DirectoryException getException()
+    {
+      return exception;
+    }
+
+    /**
+     * Set the exception that occurred during the import/export.
+     * @param exception the exception that occurred during the import/export.
+     */
+    public void setException(DirectoryException exception)
+    {
+      this.exception = exception;
+    }
   }
   /**
    * Verifies that the given string represents a valid source
@@ -1304,8 +1341,8 @@
    *
    * @exception DirectoryException When an error occurs.
    */
-  void initializeRemote(short target, short requestorID, Task initTask)
-  throws DirectoryException
+  protected void initializeRemote(short target, short requestorID,
+    Task initTask) throws DirectoryException
   {
     Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_START.get(
       Short.toString(serverID),
@@ -1417,14 +1454,14 @@
 
     if (ieContext != null)
     {
-      ieContext.exception = new DirectoryException(ResultCode.OTHER,
-          errorMsg.getDetails());
+      ieContext.setException(new DirectoryException(ResultCode.OTHER,
+        errorMsg.getDetails()));
 
       if (ieContext.initializeTask instanceof InitializeTask)
       {
         // Update the task that initiated the import
         ((InitializeTask)ieContext.initializeTask).
-        updateTaskCompletionState(ieContext.exception);
+        updateTaskCompletionState(ieContext.getException());
 
         releaseIEContext();
       }
@@ -1437,7 +1474,7 @@
    *
    * @return The bytes. Null when the Done or Err message has been received
    */
-  byte[] receiveEntryBytes()
+  protected byte[] receiveEntryBytes()
   {
     ReplicationMsg msg;
     while (true)
@@ -1477,9 +1514,8 @@
           // The error is stored and the import is ended
           // by returning null
           ErrorMsg errorMsg = (ErrorMsg)msg;
-          ieContext.exception = new DirectoryException(
-                                      ResultCode.OTHER,
-                                      errorMsg.getDetails());
+          ieContext.setException(new DirectoryException(ResultCode.OTHER,
+            errorMsg.getDetails()));
           return null;
         }
         else
@@ -1490,9 +1526,9 @@
       catch(Exception e)
       {
         // TODO: i18n
-        ieContext.exception = new DirectoryException(ResultCode.OTHER,
-            Message.raw("received an unexpected message type" +
-                e.getLocalizedMessage()));
+        ieContext.setException(new DirectoryException(ResultCode.OTHER,
+          Message.raw("received an unexpected message type" +
+          e.getLocalizedMessage())));
       }
     }
   }
@@ -1547,15 +1583,15 @@
   {
     // If an error was raised - like receiving an ErrorMsg
     // we just let down the export.
-    if (ieContext.exception != null)
+    if (ieContext.getException() != null)
     {
-      IOException ioe = new IOException(ieContext.exception.getMessage());
+      IOException ioe = new IOException(ieContext.getException().getMessage());
       ieContext = null;
       throw ioe;
     }
 
     EntryMsg entryMessage = new EntryMsg(
-        serverID, ieContext.exportTarget, lDIFEntry, pos, length);
+        serverID,ieContext.getExportTarget(), lDIFEntry, pos, length);
     broker.publish(entryMessage);
 
     try
@@ -1702,8 +1738,8 @@
     }
     finally
     {
-      if ((ieContext != null)  && (ieContext.exception != null))
-        de = ieContext.exception;
+      if ((ieContext != null)  && (ieContext.getException() != null))
+        de = ieContext.getException();
 
       // Update the task that initiated the import
       if ((ieContext != null ) && (ieContext.initializeTask != null))
@@ -1732,7 +1768,7 @@
    * event.
    * @param event The event that may make the status be changed
    */
-  private void setNewStatus(StatusMachineEvent event)
+  protected void setNewStatus(StatusMachineEvent event)
   {
     ServerStatus newStatus =
       StatusMachine.computeNewStatus(status, event);

--
Gitblit v1.10.0