From 50dca335649cdd5deae4ddbcd846b2214e4ef694 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 04 Oct 2013 12:34:29 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB

---
 opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java |  206 +--------------------------------------------------
 1 files changed, 6 insertions(+), 200 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java b/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
index 34f8644..445a05c 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
@@ -26,30 +26,16 @@
  */
 package org.opends.server.replication.server.changelog.api;
 
-import java.util.Set;
 
-import org.opends.server.replication.common.CSN;
-import org.opends.server.replication.common.ServerState;
-import org.opends.server.replication.protocol.UpdateMsg;
-import org.opends.server.types.DN;
 
 /**
- * The changelogDB stores the replication data on persistent storage.
- * <p>
- * This interface allows to:
- * <ul>
- * <li>set the storage directory and the purge interval</li>
- * <li>get access to the {@link ChangeNumberIndexDB}</li>
- * <li>query or control the replication domain database(s) (composed of one or
- * more ReplicaDBs)</li>
- * <li>query/update each ReplicaDB</li>
- * </ul>
+ * This interface is the entry point for the changelog database which stores the
+ * replication data on persistent storage. It allows to control the overall
+ * database or access more specialized interfaces.
  */
 public interface ChangelogDB
 {
 
-  // DB control methods
-
   /**
    * Initializes the replication database by reading its previous state and
    * building the relevant ReplicaDBs according to the previous state. This
@@ -93,190 +79,10 @@
    */
   ChangeNumberIndexDB getChangeNumberIndexDB();
 
-  // Domain methods
-
   /**
-   * Returns the serverIds for the servers that are or have been part of the
-   * provided replication domain.
+   * Returns the {@link ReplicationDomainDB} object.
    *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @return an unmodifiable set of integers holding the serverIds
+   * @return the {@link ReplicationDomainDB} object
    */
-  Set<Integer> getDomainServerIds(DN baseDN);
-
-  /**
-   * Get the number of changes for the specified replication domain.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @return the number of changes.
-   */
-  long getDomainChangesCount(DN baseDN);
-
-  /**
-   * Returns the oldest {@link CSN}s of each serverId for the specified
-   * replication domain.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @return a new ServerState object holding the {serverId => oldest CSN}
-   *         mapping. If a replica DB is empty or closed, the oldest CSN will be
-   *         null for that replica. The caller owns the generated ServerState.
-   */
-  ServerState getDomainOldestCSNs(DN baseDN);
-
-  /**
-   * Returns the newest {@link CSN}s of each serverId for the specified
-   * replication domain.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @return a new ServerState object holding the {serverId => newest CSN} Map.
-   *         If a replica DB is empty or closed, the newest CSN will be null for
-   *         that replica. The caller owns the generated ServerState.
-   */
-  ServerState getDomainNewestCSNs(DN baseDN);
-
-  /**
-   * Retrieves the latest trim date for the specified replication domain.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @return the domain latest trim date
-   */
-  long getDomainLatestTrimDate(DN baseDN);
-
-  /**
-   * Shutdown all the replica databases for the specified replication domain.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   */
-  void shutdownDomain(DN baseDN);
-
-  /**
-   * Removes all the data relating to the specified replication domain and
-   * shutdown all its replica databases. In particular, it will:
-   * <ol>
-   * <li>remove all the changes from the replica databases</li>
-   * <li>remove all knowledge of the serverIds in this domain</li>
-   * <li>remove any knowledge of the current generationId for this domain</li>
-   * </ol>
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @throws ChangelogException
-   *           If a database problem happened
-   */
-  void removeDomain(DN baseDN) throws ChangelogException;
-
-  // serverId methods
-
-  /**
-   * Return the number of changes inclusive between 2 provided {@link CSN}s for
-   * the specified serverId and replication domain. i.e. the <code>from</code>
-   * and <code>to</code> CSNs are included in the count.
-   * <p>
-   * Note that:
-   * <ol>
-   * <li>If <code>from</code> is null, the count starts at the oldest CSN in the
-   * database.</li>
-   * <li>If <code>to</code> is null, the count is 0.</li>
-   * <li>If both from and to are present, then the count includes them both
-   * <code>to</code> is null, the count ends at the newest CSN in the database.
-   * </li>
-   * <li>incidentally, if both <code>from</code> and <code>to</code> are null,
-   * the total count of entries in the replica database is returned.</li>
-   * </ol>
-   * <h6>Example</h6>
-   * <p>
-   * Given the following replica database for baseDN "dc=example,dc=com" and
-   * serverId 1:
-   *
-   * <pre>
-   * CSN1  <=  Oldest
-   * CSN2
-   * CSN3
-   * CSN4
-   * CSN5  <=  Newest
-   * </pre>
-   *
-   * Then:
-   *
-   * <pre>
-   * assertEquals(getCount(&quot;dc=example,dc=com&quot;, 1, CSN1, CSN1), 1);
-   * assertEquals(getCount(&quot;dc=example,dc=com&quot;, 1, CSN1, CSN2), 2);
-   * assertEquals(getCount(&quot;dc=example,dc=com&quot;, 1, CSN1, CSN5), 5);
-   * assertEquals(getCount(&quot;dc=example,dc=com&quot;, 1, null, CSN5), 5);
-   * assertEquals(getCount(&quot;dc=example,dc=com&quot;, 1, CSN1, null), 0);
-   * assertEquals(getCount(&quot;dc=example,dc=com&quot;, 1, null, null), 5);
-   * </pre>
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @param serverId
-   *          the serverId on which to act
-   * @param from
-   *          The older CSN where to start the count
-   * @param to
-   *          The newer CSN where to end the count
-   * @return The computed number of changes
-   */
-  long getCount(DN baseDN, int serverId, CSN from, CSN to);
-
-  /**
-   * Returns the {@link CSN} situated immediately after the specified
-   * {@link CSN} for the specified serverId and replication domain according to
-   * the order specified by {@link CSN#compareTo(CSN)}. If an Exception occurs
-   * in this method, then it returns the oldest possible CSN for the provided
-   * serverId.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @param serverId
-   *          the serverId for which we want the information
-   * @param startAfterCSN
-   *          The position where the iterator must start
-   * @return the CSN immediately after startAfterCSN, or null if no CSN exist
-   *         after startAfterCSN
-   */
-  CSN getCSNAfter(DN baseDN, int serverId, CSN startAfterCSN);
-
-  /**
-   * Generates a {@link ReplicaDBCursor} for the specified serverId and
-   * replication domain starting after the provided CSN.
-   * <p>
-   * The cursor is already advanced to the record after startAfterCSN.
-   * <p>
-   * When the cursor is not used anymore, client code MUST call the
-   * {@link ReplicaDBCursor#close()} method to free the resources and locks used
-   * by the cursor.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @param serverId
-   *          Identifier of the server for which the cursor is created
-   * @param startAfterCSN
-   *          Starting point for the cursor. If null, start from the oldest CSN
-   * @return a non null {@link ReplicaDBCursor}
-   */
-  ReplicaDBCursor getCursorFrom(DN baseDN, int serverId, CSN startAfterCSN);
-
-  /**
-   * for the specified serverId and replication domain.
-   *
-   * @param baseDN
-   *          the replication domain baseDN
-   * @param serverId
-   *          the serverId on which to act
-   * @param updateMsg
-   *          the update message to publish to the replicaDB
-   * @return true if a db had to be created to publish this message
-   * @throws ChangelogException
-   *           If a database problem happened
-   */
-  boolean publishUpdateMsg(DN baseDN, int serverId, UpdateMsg updateMsg)
-      throws ChangelogException;
-
+  ReplicationDomainDB getReplicationDomainDB();
 }

--
Gitblit v1.10.0