You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2006/12/29 07:43:15 UTC

svn commit: r490926 - in /directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler: ReplicationClientContextHandler.java ReplicationServerContextHandler.java

Author: trustin
Date: Thu Dec 28 22:43:15 2006
New Revision: 490926

URL: http://svn.apache.org/viewvc?view=rev&rev=490926
Log:
Added JavaDoc that describes detailed protocol flow

Modified:
    directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java
    directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java

Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java?view=diff&rev=490926&r1=490925&r2=490926
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationClientContextHandler.java Thu Dec 28 22:43:15 2006
@@ -31,15 +31,12 @@
 import javax.naming.directory.SearchControls;
 import javax.naming.directory.SearchResult;
 
-import org.apache.directory.shared.ldap.filter.PresenceNode;
-import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.util.SessionLog;
 import org.apache.directory.mitosis.common.CSN;
 import org.apache.directory.mitosis.common.CSNVector;
+import org.apache.directory.mitosis.common.DefaultCSN;
 import org.apache.directory.mitosis.common.Replica;
 import org.apache.directory.mitosis.common.ReplicaId;
-import org.apache.directory.mitosis.common.DefaultCSN;
+import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
 import org.apache.directory.mitosis.operation.AddEntryOperation;
 import org.apache.directory.mitosis.operation.Operation;
 import org.apache.directory.mitosis.service.ReplicationContext;
@@ -56,11 +53,63 @@
 import org.apache.directory.mitosis.service.protocol.message.LoginMessage;
 import org.apache.directory.mitosis.store.ReplicationLogIterator;
 import org.apache.directory.mitosis.store.ReplicationStore;
+import org.apache.directory.shared.ldap.filter.PresenceNode;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.util.SessionLog;
 
 
 /**
  * {@link ReplicationContextHandler} that implements client-side replication
- * logic which sends any changes out-of-date to server.
+ * logic which sends any changes out-of-date to server.  The following is
+ * the detailed protocol flow and the description of the replication logic
+ * execution.
+ * <ul>
+ * <li><tt>ClientConnectionManager</tt> connects the client to the server.</li>
+ * <li>The client sends {@link LoginMessage} to the server.</li>
+ * <li>The server responds with {@link LoginAckMessage} to the client
+ *     <ul>
+ *     <li>Unless the response code is {@link Constants#OK}, disconnect.
+ *         Next connection attempt is performed by
+ *         <tt>ClientConnectionManager</tt> later.</li>
+ *     <li>Otherwise, the state of the {@link ReplicationContext} changes to
+ *         {@link State#READY}, and proceed.</li>
+ *     </ul></li>
+ * <li>The client tries to transfer the data that server needs from
+ *     in {@link ReplicationStore} periodically using
+ *     {@link #contextIdle(ReplicationContext, IdleStatus)} event,
+ *     which is implemented using <tt>sessionIdle</tt> event in MINA. 
+ *     <ul>
+ *     <li>The client sends a {@link BeginLogEntriesMessage} to the server.</li>
+ *     <li>The server responds with {@link BeginLogEntriesAckMessage}.
+ *         <ul>
+ *         <li>If the response code is {@link Constants#OK},
+ *             <ul>
+ *             <li>{@link BeginLogEntriesAckMessage} contains a
+ *                 Update Vector (UV) of the server. The client compares
+ *                 the received UV and the client's Purge Vector (PV).
+ *                 <ul>
+ *                 <li>If the PV is greater than the UV, this means the client
+ *                     can't send all operation logs that server needs to get
+ *                     synchronized.  This usually means that the server has
+ *                     been offline for too long time and got out-of-sync
+ *                     finally due to the log-purging process of the client
+ *                     side (see {@link ReplicationConfiguration#getLogMaxAge()}).
+ *                     The clients sends all entries in the DIT to the server,
+ *                     and the server overwrites its current DIT with the
+ *                     received entries.</li>
+ *                 <li>Otherwise, the client sends only the changed part since
+ *                     the last synchronization by querying its
+ *                     {@link ReplicationStore} by calling
+ *                     {@link ReplicationStore#getLogs(CSNVector, boolean)}.</li>
+ *                 <li>The data transfer is very simple.  It's asynchronous
+ *                     request-response exchange.  The client sends {@link LogEntryMessage},
+ *                     and then the server responds with {@link LogEntryAckMessage}.</li>
+ *             </ul></li>
+ *         <li>If the response code is not {@link Constants#OK}, retry later.</li>
+ *         </ul></li>
+ *     </ul></li>
+ * </ul>
  *
  * @author The Apache Directory Project (dev@directory.apache.org)
  * @version $Rev: 116 $, $Date: 2006-09-18 13:47:53Z $

Modified: directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java?view=diff&rev=490926&r1=490925&r2=490926
==============================================================================
--- directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java (original)
+++ directory/trunks/apacheds/mitosis/src/main/java/org/apache/directory/mitosis/service/protocol/handler/ReplicationServerContextHandler.java Thu Dec 28 22:43:15 2006
@@ -23,8 +23,6 @@
 import java.net.InetSocketAddress;
 import java.util.Iterator;
 
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.util.SessionLog;
 import org.apache.directory.mitosis.common.CSNVector;
 import org.apache.directory.mitosis.common.Replica;
 import org.apache.directory.mitosis.operation.Operation;
@@ -40,11 +38,15 @@
 import org.apache.directory.mitosis.service.protocol.message.LoginAckMessage;
 import org.apache.directory.mitosis.service.protocol.message.LoginMessage;
 import org.apache.directory.mitosis.store.ReplicationStore;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.util.SessionLog;
 
 
 /**
  * {@link ReplicationContextHandler} that implements server-side replication logic
- * which retrieves any changes occurred in remote replicas.
+ * which retrieves any changes occurred in remote replicas.  Please refer to
+ * {@link ReplicationClientContextHandler} for the detailed protocol flow and
+ * the description of the replication logic execution.
  *
  * @author The Apache Directory Project (dev@directory.apache.org)
  * @version $Rev: 116 $, $Date: 2006-09-18 13:47:53Z $