From 4fed0daa395855cd567621b0b38d405c9af254f4 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 26 Sep 2013 15:29:01 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB

---
 opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java |   82 +++++++++++++++++++++++++++++++++-------
 1 files changed, 67 insertions(+), 15 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 1bc8fd1..e1dc552 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
@@ -84,6 +84,11 @@
   void shutdownDB();
 
   /**
+   * Removes the changelog database directory.
+   */
+  void removeDB();
+
+  /**
    * Returns a new {@link ChangeNumberIndexDB} object.
    *
    * @return a new {@link ChangeNumberIndexDB} object
@@ -145,7 +150,7 @@
   long getDomainLatestTrimDate(DN baseDN);
 
   /**
-   * Shutdown the specified replication domain.
+   * Shutdown all the replica databases for the specified replication domain.
    *
    * @param baseDN
    *          the replication domain baseDN
@@ -153,27 +158,69 @@
   void shutdownDomain(DN baseDN);
 
   /**
-   * Clear DB and shutdown for the specified replication domain.
+   * 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
    */
-  void clearDomain(DN baseDN);
+  void removeDomain(DN baseDN);
 
   // serverId methods
 
   /**
-   * Return the number of changes between 2 provided {@link CSN}s for the
-   * specified serverId and replication domain.
+   * 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 lower (older) CSN
+   *          The older CSN where to start the count
    * @param to
-   *          The upper (newer) CSN
+   *          The newer CSN where to end the count
    * @return The computed number of changes
    */
   long getCount(DN baseDN, int serverId, CSN from, CSN to);
@@ -188,23 +235,28 @@
    *          the serverId for which we want the information
    * @param startAfterCSN
    *          The position where the iterator must start
-   * @return a new ReplicationIterator that allows to browse the db managed by
-   *         this dbHandler and starting at the position defined by a given CSN.
+   * @return the CSN immediately after startAfterCSN, or null if no CSN exist
+   *         after startAfterCSN
    */
   CSN getCSNAfter(DN baseDN, int serverId, CSN startAfterCSN);
 
   /**
-   * Generates a non empty {@link ReplicaDBCursor} for the specified serverId
-   * and replication domain.
+   * 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
-   *          the serverId on which to act
+   *          Identifier of the server for which the cursor is created
    * @param startAfterCSN
-   *          The position where the iterator must start
-   * @return a {@link ReplicaDBCursor} if the ReplicaDB is not empty, null
-   *         otherwise
+   *          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);
 

--
Gitblit v1.10.0