From 52058eb1372410d825440f85626ef9655f688380 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Mon, 24 Jul 2006 16:49:58 +0000
Subject: [PATCH] Update the synchronization configuration to - put changelog configuration below cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config - use ds-cfg-changelog-server-id and ds-cfg-directory-server-id instead of ds-cfg-server-id - don't require the ds-cfg-changelog-server attribute in changelog configuration (ds-cfg-synchronization-changelog-server-config objectclass)

---
 opends/resource/schema/02-config.ldif                                               |   14 +
 opends/resource/config/synchronization.ldif                                         |   12 +-
 opends/src/server/org/opends/server/synchronization/AttrInfo.java                   |    6 
 opends/src/server/org/opends/server/synchronization/package-info.java               |   69 +++++++++++
 opends/src/server/org/opends/server/changelog/Changelog.java                        |    2 
 opends/src/server/org/opends/server/changelog/package-info.java                     |   79 +++++++++++++
 opends/src/server/org/opends/server/synchronization/AckMessage.java                 |    2 
 opends/src/server/org/opends/server/synchronization/AttrInfoWithOptions.java        |    1 
 opends/src/server/org/opends/server/synchronization/Historical.java                 |   22 ++-
 /dev/null                                                                           |   74 ------------
 opends/src/server/org/opends/server/synchronization/ValueInfo.java                  |    2 
 opends/src/server/org/opends/server/synchronization/MultimasterSynchronization.java |   21 ++-
 opends/src/server/org/opends/server/synchronization/SynchronizationDomain.java      |   19 +--
 opends/src/server/org/opends/server/synchronization/SynchMessages.java              |    2 
 opends/src/server/org/opends/server/changelog/SocketSession.java                    |    4 
 opends/src/server/org/opends/server/synchronization/ChangelogBroker.java            |    2 
 16 files changed, 212 insertions(+), 119 deletions(-)

diff --git a/opends/resource/config/synchronization.ldif b/opends/resource/config/synchronization.ldif
index 232ea6a..6336c65 100644
--- a/opends/resource/config/synchronization.ldif
+++ b/opends/resource/config/synchronization.ldif
@@ -16,22 +16,22 @@
 ds-cfg-synchronization-provider-enabled: true
 ds-cfg-synchronization-provider-class: org.opends.server.synchronization.MultimasterSynchronization
 
-dn: cn=com, cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config
+dn: cn=example, cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config
 objectClass: top
 objectClass: ds-cfg-synchronization-provider-config
-cn: com
-ds-cfg-synchronization-dn: dc=com
+cn: example
+ds-cfg-synchronization-dn: dc=example,dc=com
 ds-cfg-changelog-server: host1:8989
 ds-cfg-changelog-server: host2:8989
-ds-cfg-server-id: 1
+ds-cfg-directory-server-id: 1
 ds-cfg-receive-status: true
 
-dn: cn=Changelog Server, cn=config
+dn: cn=Changelog Server, cn=Multimaster Synchronization, cn=Synchronization Providers, cn=config
 objectClass: top
 objectClass: ds-cfg-synchronization-changelog-server-config
 cn: Changelog Server
 ds-cfg-changelog-port: 8989
 ds-cfg-changelog-server: host1:8989
 ds-cfg-changelog-server: host2:8989
-ds-cfg-server-id: 1
+ds-cfg-changelog-server-id: 1
 
diff --git a/opends/resource/schema/02-config.ldif b/opends/resource/schema/02-config.ldif
index 31dc2cb..39a4141 100644
--- a/opends/resource/schema/02-config.ldif
+++ b/opends/resource/schema/02-config.ldif
@@ -525,8 +525,12 @@
   NAME 'ds-cfg-changelog-port'
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
   X-ORIGIN 'OpenDS Directory Server' )
-attributeTypes: ( 1.3.6.1.4.1.26027.1.1.159
-  NAME 'ds-cfg-server-id'
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.278
+  NAME 'ds-cfg-changelog-server-id'
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+  X-ORIGIN 'OpenDS Directory Server' )
+attributeTypes: ( 1.3.6.1.4.1.26027.1.1.279
+  NAME 'ds-cfg-directory-server-id'
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
   X-ORIGIN 'OpenDS Directory Server' )
 attributeTypes: ( 1.3.6.1.4.1.26027.1.1.160
@@ -1201,7 +1205,7 @@
   ds-cfg-synchronization-provider-enabled ) X-ORIGIN 'OpenDS Directory Server' )
 objectClasses: ( 1.3.6.1.4.1.26027.1.2.58 NAME
   'ds-cfg-synchronization-provider-config' SUP top
-  STRUCTURAL MUST ( ds-cfg-changelog-server $ ds-cfg-server-id
+  STRUCTURAL MUST ( ds-cfg-changelog-server $ ds-cfg-directory-server-id
   $ ds-cfg-synchronization-dn )
   MAY ( cn $ ds-cfg-receive-status $ ds-cfg-max-receive-queue $
   ds-cfg-max-receive-delay $ ds-cfg-max-send-queue $ ds-cfg-max-send-delay )
@@ -1259,8 +1263,8 @@
   X-ORIGIN 'OpenDS Directory Server' )
 objectClasses: ( 1.3.6.1.4.1.26027.1.2.65 NAME
   'ds-cfg-synchronization-changelog-server-config' SUP top
-  STRUCTURAL MUST (ds-cfg-server-id $ ds-cfg-changelog-port $
-  ds-cfg-changelog-server ) MAY cn X-ORIGIN 'OpenDS Directory Server' )
+  STRUCTURAL MUST (ds-cfg-changelog-server-id $ ds-cfg-changelog-port )
+  MAY ( ds-cfg-changelog-server $ cn ) X-ORIGIN 'OpenDS Directory Server' )
 objectClasses: ( 1.3.6.1.4.1.26027.1.2.66 NAME 'ds-backup-directory'
   SUP top STRUCTURAL MUST ( ds-backup-directory-path $ ds-backup-backend-dn )
   X-ORIGIN 'OpenDS Directory Server' )
diff --git a/opends/src/server/org/opends/server/changelog/Changelog.java b/opends/src/server/org/opends/server/changelog/Changelog.java
index 880589b..b56cb74 100644
--- a/opends/src/server/org/opends/server/changelog/Changelog.java
+++ b/opends/src/server/org/opends/server/changelog/Changelog.java
@@ -98,7 +98,7 @@
           new ArrayList<ConfigAttribute>();
 
   static String CHANGELOG_SERVER_ATTR = "ds-cfg-changelog-server";
-  static String SERVER_ID_ATTR = "ds-cfg-server-id";
+  static String SERVER_ID_ATTR = "ds-cfg-changelog-server-id";
   static String CHANGELOG_PORT_ATTR = "ds-cfg-changelog-port";
 
   /**
diff --git a/opends/src/server/org/opends/server/changelog/SocketSession.java b/opends/src/server/org/opends/server/changelog/SocketSession.java
index bee823a..cc65088 100644
--- a/opends/src/server/org/opends/server/changelog/SocketSession.java
+++ b/opends/src/server/org/opends/server/changelog/SocketSession.java
@@ -35,6 +35,10 @@
 import org.opends.server.synchronization.SynchronizationMessage;
 
 /**
+ * This class Implement a protocol session using a basic socket and relying on
+ * the innate encoding/decoding capabilities of the SynchronizationMessage
+ * by using the getBytes() and generateMsg() methods of those classes.
+ *
  * TODO : should have some versioning in the packets so that
  *        the futur versions can evolve while still
  *        being able to understand the older versions.
diff --git a/opends/src/server/org/opends/server/changelog/package-info.java b/opends/src/server/org/opends/server/changelog/package-info.java
new file mode 100644
index 0000000..359d52f
--- /dev/null
+++ b/opends/src/server/org/opends/server/changelog/package-info.java
@@ -0,0 +1,79 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+
+/**
+ * This package contains the code for the changelog service part
+ * of the Multimaster synchronization feature.
+ * <br>
+ *
+ * A changelog server is responsible for :
+ * <br>
+ * <ul>
+ * <li>listen for connections from ldap servers.</li>
+ * <li>Connect/manage connection to other changelog servers.</li>
+ * <li>Receive changes from ldap servers.</li>
+ * <li>Forward changes to ldap server and other changelog servers.</li>
+ * <li>Save changes to stable storage (includes trimming of older operations).
+ * </li>
+ * </ul>
+ * <br>
+ * The main classes of this packages are :
+ * <br>
+ * <ul>
+ * <li><A HREF="SocketSession.html"><B>SocketSession</B></A>
+ * implements the ProtocolSession interface that is
+ * used by the changelog server and the directory server to communicate.
+ * This is done by using the innate encoding/decoding capabilities of the
+ * SynchronizationMessages objects. This class is used by both the
+ * changelog and the synchronization package.
+ * </li>
+ * <li><A HREF="ChangelogCache.html"><B>ChangelogCache</B></A>
+ * implements the multiplexing part of the changelog
+ * server. It contains method for forwarding all the received messages to
+ * the ServerHandler and to the dbHandler objects.<br>
+ * </li>
+ * <li><A HREF="ServerHandler.html"><B>ServerHandler</B></A>
+ * contains the code related to handler of remote
+ * server. It can manage changelog servers of directory servers (may be it
+ * shoudl be splitted in two different classes, one for each of these).<br>
+ * </li>
+ * <li><A HREF="ServerWriter.html"><B>ServerWriter</B></A>
+ * the thread responsible for writing to the remote
+ * server.<br>
+ * </li>
+ * <li><A HREF="ServerReader.html"><B>ServerReader</B></A>
+ * the thread responsible for reading from the remote
+ * object.<br>
+ * </li>
+ * <li><A HREF="DbHandler.html"><B>DbHandler</B></A>
+ * DbHandler contains the code responsible for saving the changes to
+ * stable storage.<br>
+ *  </li>
+ *  </ul>
+ */
+
+package org.opends.server.changelog;
diff --git a/opends/src/server/org/opends/server/synchronization/AckMessage.java b/opends/src/server/org/opends/server/synchronization/AckMessage.java
index 90c9e22..2854422 100644
--- a/opends/src/server/org/opends/server/synchronization/AckMessage.java
+++ b/opends/src/server/org/opends/server/synchronization/AckMessage.java
@@ -31,7 +31,7 @@
 import java.util.zip.DataFormatException;
 
 /**
- * This Class is used to send acks between LDAP and changelog servers.
+ * Used to send acks between LDAP and changelog servers.
  */
 public class AckMessage extends SynchronizationMessage implements Serializable
 {
diff --git a/opends/src/server/org/opends/server/synchronization/AttrInfo.java b/opends/src/server/org/opends/server/synchronization/AttrInfo.java
index 81cc507..74b2e4e 100644
--- a/opends/src/server/org/opends/server/synchronization/AttrInfo.java
+++ b/opends/src/server/org/opends/server/synchronization/AttrInfo.java
@@ -34,7 +34,11 @@
 
 /**
  * This classes is used to store historical information.
- * TODO : better explanation is needed
+ * One object of this type is created for each attribute that was changed in
+ * the entry.
+ * It allows to record the last time a givene value was added, the last
+ * time a given value was deleted and the last time the whole attribute was
+ * deleted.
  */
 public class AttrInfo
 {
diff --git a/opends/src/server/org/opends/server/synchronization/AttrInfoWithOptions.java b/opends/src/server/org/opends/server/synchronization/AttrInfoWithOptions.java
index 959c8c1..60b5951 100644
--- a/opends/src/server/org/opends/server/synchronization/AttrInfoWithOptions.java
+++ b/opends/src/server/org/opends/server/synchronization/AttrInfoWithOptions.java
@@ -31,6 +31,7 @@
 
 /**
  * Used to store historical information.
+ * Contain a map of AttrInfo for each options of a given attribute type.
  */
 public class AttrInfoWithOptions
 {
diff --git a/opends/src/server/org/opends/server/synchronization/Broker.java b/opends/src/server/org/opends/server/synchronization/Broker.java
deleted file mode 100644
index 8fcbd76..0000000
--- a/opends/src/server/org/opends/server/synchronization/Broker.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Portions Copyright 2006 Sun Microsystems, Inc.
- */
-package org.opends.server.synchronization;
-
-import java.util.ArrayList;
-
-/**
- * define interface for synchronization Broker.
- */
-public abstract class Broker
-{
-  /**
-   * Start the Changelog Broker.
-   *
-   * @param identifier identifier for the broker
-   * @param servers servers that are part of teh broker
-   * @throws Exception in case of errors
-   */
-  public abstract void start(Short identifier,
-                             ArrayList<String> servers)
-                             throws Exception;
-  /**
-   * publish a message to the broker.
-   *
-   * @param msg the message to be published
-   */
-  public abstract void publish(UpdateMessage msg);
-
-  /**
-   * receive a message form the broker.
-   *
-   * @return the message that was received
-   */
-  public abstract UpdateMessage receive();
-
-  /**
-   * Stop the broker.
-   */
-  public abstract void stop();
-  /**
-   * restart reception after suspension.
-   * @throws Exception in case of errors
-   */
-  public abstract void restartReceive() throws Exception;
-  /**
-   * temporarily stop receiving messages.
-   * @throws Exception in case of errors
-   */
-  public abstract void suspendReceive() throws Exception;
-}
diff --git a/opends/src/server/org/opends/server/synchronization/ChangelogBroker.java b/opends/src/server/org/opends/server/synchronization/ChangelogBroker.java
index 20499a8..a8e8ee1 100644
--- a/opends/src/server/org/opends/server/synchronization/ChangelogBroker.java
+++ b/opends/src/server/org/opends/server/synchronization/ChangelogBroker.java
@@ -57,7 +57,7 @@
 
 
 /**
- * The broker for synchronization based on a changelog system.
+ * The broker for Multimaster Synchronization.
  */
 public class ChangelogBroker implements InternalSearchListener
 {
diff --git a/opends/src/server/org/opends/server/synchronization/Historical.java b/opends/src/server/org/opends/server/synchronization/Historical.java
index a807fe4..3da4227 100644
--- a/opends/src/server/org/opends/server/synchronization/Historical.java
+++ b/opends/src/server/org/opends/server/synchronization/Historical.java
@@ -214,10 +214,14 @@
       Modification mod)
   {
     /*
-     * There is no need to check the historical information here
-     * The historical information will be updated in the pre-operation
-     * part of this plugin because this will allow to catch the changes
-     * that have been done by the plugins.
+     * The operation is either a non-conflicting operation or a local
+     * operation so there is no need to check the historical information
+     * for conflicts.
+     * If this is a local operation, the this code is run during
+     * the pre-operation phase (TODO : should make sure that synchronization
+     * is always run after all other plugins)
+     * If this is a non-conflicting replicated operation, this code is run
+     * during the handleConflictResolution().
      */
 
     Attribute modAttr = mod.getAttribute();
@@ -233,6 +237,7 @@
       attrInfo = null;
 
     /*
+     * The following code only works for multi-valued attributes.
      * TODO : See impact of single valued attributes
      */
     if (attrInfo == null)
@@ -287,7 +292,7 @@
     /*
      * If this is a local operation we need first to update the historical
      * information, then update the entry with the historical information
-     * IF this is a replicated operation the historical information has
+     * If this is a replicated operation the historical information has
      * already been set in the resolveConflict phase and we only need
      * to update the entry
      */
@@ -399,9 +404,9 @@
    *        for potential conflict
    * @return true if there is a potential conflict, false otherwise
    */
-  public boolean hasConflict(AttrInfo info, ChangeNumber newChange)
+  private boolean hasConflict(AttrInfo info, ChangeNumber newChange)
   {
-    // if I've already seen a newer change that the one
+    // if I've already seen a change that is more recetn than the one
     // that is currently being processed, then there is
     // a potential conflict
     if (ChangeNumber.compare(newChange, moreRecentChangenumber) <= 0)
@@ -689,7 +694,7 @@
            * This attribute is unknown from the schema
            * Just skip it, the modification will be processed but no
            * historical information is going to be kept.
-           * TODO : recovery tool should dela with this, add some logging.
+           * TODO : recovery tool should deal with this, add some logging.
            */
           continue;
         }
@@ -755,7 +760,6 @@
           attrInfo.delete(cn);
         break;
         }
-
       }
     }
 
diff --git a/opends/src/server/org/opends/server/synchronization/MultimasterSynchronization.java b/opends/src/server/org/opends/server/synchronization/MultimasterSynchronization.java
index 4418c19..d4067a3 100644
--- a/opends/src/server/org/opends/server/synchronization/MultimasterSynchronization.java
+++ b/opends/src/server/org/opends/server/synchronization/MultimasterSynchronization.java
@@ -54,14 +54,18 @@
 /**
  * This class is used to load the Synchronization code inside the JVM
  * and to trigger initialization of the synchronization.
+ *
+ * It also extends the SynchronizationProvider class in order to have some
+ * synchronization code running during the operation process
+ * as pre-op, conflictRsolution, and post-op.
  */
 public class MultimasterSynchronization extends SynchronizationProvider
        implements ConfigAddListener, ConfigDeleteListener, ConfigChangeListener
 {
-  static String CHANGELOG_DN = "cn=Changelog Server, cn=config";
-  static String CHANGELOG_SERVER_ATTR = "ds-cfg-changelog-server";
-  static String SERVER_ID_ATTR = "ds-cfg-server-id";
-  static String CHANGELOG_PORT_ATTR = "ds-cfg-changelog-port";
+  static String CHANGELOG_DN = "cn=Changelog Server," +
+    "cn=Multimaster Synchronization, cn=Synchronization Providers, cn=config";
+  static String SYNCHRONIZATION_CLASS =
+    "ds-cfg-synchronization-provider-config";
 
   private Changelog changelog = null;
   private static Map<DN, SynchronizationDomain> domains =
@@ -107,9 +111,12 @@
      */
     for (ConfigEntry domainEntry : configEntry.getChildren().values())
     {
-      SynchronizationDomain domain = new SynchronizationDomain(domainEntry);
-      domains.put(domain.getBaseDN(), domain);
-      domain.start();
+      if (domainEntry.hasObjectClass(SYNCHRONIZATION_CLASS))
+      {
+        SynchronizationDomain domain = new SynchronizationDomain(domainEntry);
+        domains.put(domain.getBaseDN(), domain);
+        domain.start();
+      }
     }
   }
 
diff --git a/opends/src/server/org/opends/server/synchronization/SynchMessages.java b/opends/src/server/org/opends/server/synchronization/SynchMessages.java
index 7094b31..194b6d5 100644
--- a/opends/src/server/org/opends/server/synchronization/SynchMessages.java
+++ b/opends/src/server/org/opends/server/synchronization/SynchMessages.java
@@ -266,7 +266,7 @@
     MessageHandler.registerMessage(MSGID_NEED_CHANGELOG_SERVER,
         "At least one changelog server must be declared");
     MessageHandler.registerMessage(MSGID_NEED_SERVER_ID,
-        "The Server id must be defined");
+        "The Server Id must be defined");
     MessageHandler.registerMessage(MSGID_INVALID_CHANGELOG_SERVER,
         "Invalid changelog server configuration");
     MessageHandler.registerMessage(MSGID_UNKNOWN_HOSTNAME,
diff --git a/opends/src/server/org/opends/server/synchronization/SynchronizationDomain.java b/opends/src/server/org/opends/server/synchronization/SynchronizationDomain.java
index 18b46f8..a37fe14 100644
--- a/opends/src/server/org/opends/server/synchronization/SynchronizationDomain.java
+++ b/opends/src/server/org/opends/server/synchronization/SynchronizationDomain.java
@@ -61,15 +61,12 @@
 import org.opends.server.types.SynchronizationProviderResult;
 
 /**
- *  This class implements the multi-master functionality.
- * - use the preOperation phase to add information necessary for the
- *   synchronization to the entry in the database (unique identifier,
- *   historical information, change number)
- *   TODO : implementation not started yet
- * - use the postOperation plugin phase to forward the changes
- *   to the centralized changelog of the synchronization
- *
- *   STATUS : This is a work in progress feature
+ *  This class implements the bulk part of the.of the Directory Server side
+ *  of the synchronization code.
+ *  It contains the root method for publishing a change,
+ *  processing a change received from the changelog service,
+ *  handle conflict resolution,
+ *  handle protocol messages from the changelog server.
  */
 public class SynchronizationDomain extends DirectoryThread
        implements ConfigurableComponent
@@ -117,11 +114,9 @@
 
   private DN configDn;
 
-  static String CHANGELOG_DN = "cn=Changelog Server, cn=config";
   static String CHANGELOG_SERVER_ATTR = "ds-cfg-changelog-server";
   static String BASE_DN_ATTR = "ds-cfg-synchronization-dn";
-  static String SERVER_ID_ATTR = "ds-cfg-server-id";
-  static String CHANGELOG_PORT_ATTR = "ds-cfg-changelog-port";
+  static String SERVER_ID_ATTR = "ds-cfg-directory-server-id";
   static String RECEIVE_STATUS = "ds-cfg-receive-status";
   static String MAX_RECEIVE_QUEUE = "ds-cfg-max-receive-queue";
   static String MAX_RECEIVE_DELAY = "ds-cfg-max-receive-delay";
diff --git a/opends/src/server/org/opends/server/synchronization/ValueInfo.java b/opends/src/server/org/opends/server/synchronization/ValueInfo.java
index d362525..3ebd7c9 100644
--- a/opends/src/server/org/opends/server/synchronization/ValueInfo.java
+++ b/opends/src/server/org/opends/server/synchronization/ValueInfo.java
@@ -29,7 +29,7 @@
 import org.opends.server.types.AttributeValue;
 
 /**
- * Object used to store historical information about specific values
+ * Allows to store historical information about specific values
  * for a given attribute.
  */
 public class ValueInfo
diff --git a/opends/src/server/org/opends/server/synchronization/package-info.java b/opends/src/server/org/opends/server/synchronization/package-info.java
new file mode 100644
index 0000000..16fba6a
--- /dev/null
+++ b/opends/src/server/org/opends/server/synchronization/package-info.java
@@ -0,0 +1,69 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+
+/**
+ * This package contains the part of the Multimaster
+ * synchronization code that works on the Directory Server side.
+ * <br>
+ * The main classes of this core are :
+ * <ul>
+ * <li>
+ * <A HREF="MultimasterSynchronization.html"><B>MultimasterSynchronization
+ * </B></A>contains the synchronization provider
+ * code and more generally all the code that makes the glue between the core
+ * server and the synchronization code.
+ * </li>
+ * <li>
+ * <A HREF="SynchronizationDomain.html"><B>SynchronizationDomain</B></A>
+ * contains the bulk of the Directory Server side of the
+ * synchronization code. Most notably it contains the root method for
+ * publishing a change, processing a change received from the changelog
+ * service, handle conflict resolution, handle protocol messages from the
+ * changelog server.
+ * </li>
+ * <li>
+ * <A HREF="ChangeNumber.html"><B>ChangeNumber</B></A>
+ * and <A HREF="ChangeNumberGenerator.html"><B>ChangeNumberGenerator</B></A>
+ * contain the code related to Change Numbers code and their generation.
+ * </li>
+ * <li>
+ * <A HREF="ServerState.html"><B>ServerState</B></A>
+ * contain the code necessary for maintaining the updatedness
+ * of a server.
+ * Historical.java and the classes that it uses contain the code for
+ * generating and loading the historical information (only modify aspects are
+ * implemented)
+ * </li>
+ * <li>
+ * <A HREF="SynchronizationMessage.html"><B>SynchronizationMessage</B></A>
+ * and the classes that inherit from it contain the
+ * description of the protocol messages that are exchanged between the
+ * directory servers and the changelog servers and their encoding/decoding.
+ * </li>
+ * </ul>
+ */
+package org.opends.server.synchronization;

--
Gitblit v1.10.0