From aefad4e6cfa33be9eca8cda45861d98236d0faed Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Thu, 18 Jan 2007 09:20:48 +0000
Subject: [PATCH] put back the 980 revision that had been removed because of a regression.  - fix the regression (schema problem)  - disabled the ChangelogTest.stopChangelog() test that appear to cause    some hangs.

---
 opends/src/server/org/opends/server/synchronization/changelog/DbHandler.java |   62 ++++++++++++++++++------------
 1 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/opends/src/server/org/opends/server/synchronization/changelog/DbHandler.java b/opends/src/server/org/opends/server/synchronization/changelog/DbHandler.java
index ac53f2b..64bb929 100644
--- a/opends/src/server/org/opends/server/synchronization/changelog/DbHandler.java
+++ b/opends/src/server/org/opends/server/synchronization/changelog/DbHandler.java
@@ -81,6 +81,7 @@
   private boolean shutdown = false;
   private boolean done = false;
   private DirectoryThread thread = null;
+  private Object flushLock = new Object();
 
   /**
    * Creates a New dbHandler associated to a given LDAP server.
@@ -204,6 +205,12 @@
   public ChangelogIterator generateIterator(ChangeNumber changeNumber)
                            throws DatabaseException, Exception
   {
+    /*
+     * make sure to flush some changes in the database so that
+     * we don't create the iterator on an empty database when the
+     * dbHandler has just been started.
+     */
+    flush();
     return new ChangelogIterator(serverId, db, changeNumber);
   }
 
@@ -320,17 +327,22 @@
       while ((size < 5000 ) &&  (!finished))
       {
         ChangeNumber changeNumber = cursor.nextChangeNumber();
-        if ((changeNumber != null) && (!changeNumber.equals(lastChange))
-            && (changeNumber.older(trimDate)))
+        if (changeNumber != null)
         {
-          size++;
-          cursor.delete();
+          if ((!changeNumber.equals(lastChange))
+              && (changeNumber.older(trimDate)))
+          {
+            size++;
+            cursor.delete();
+          }
+          else
+          {
+            firstChange = changeNumber;
+            finished = true;
+          }
         }
         else
-        {
-          firstChange = changeNumber;
           finished = true;
-        }
       }
 
       cursor.close();
@@ -350,19 +362,21 @@
 
     do
     {
-      // get N messages to save in the DB
-      List<UpdateMessage> changes = getChanges(500);
+      synchronized(flushLock)
+      {
+        // get N messages to save in the DB
+        List<UpdateMessage> changes = getChanges(500);
 
-      // if no more changes to save exit immediately.
-      if ((changes == null) || ((size = changes.size()) == 0))
-        return;
+        // if no more changes to save exit immediately.
+        if ((changes == null) || ((size = changes.size()) == 0))
+          return;
 
-      // save the change to the stable storage.
-      db.addEntries(changes);
+        // save the change to the stable storage.
+        db.addEntries(changes);
 
-      // remove the changes from the list of changes to be saved.
-      clear(changes.size());
-
+        // remove the changes from the list of changes to be saved.
+        clear(changes.size());
+      }
     } while (size >=500);
   }
 
@@ -387,19 +401,17 @@
       attributes.add(new Attribute("changelog-database",
                                    String.valueOf(serverId)));
       attributes.add(new Attribute("base-dn", baseDn.toString()));
-      ChangeNumber first = getFirstChange();
-      ChangeNumber last = getLastChange();
-      if (first != null)
+      if (firstChange != null)
       {
-        Date firstTime = new Date(first.getTime());
+        Date firstTime = new Date(firstChange.getTime());
         attributes.add(new Attribute("first-change",
-            first.toString() + " " + firstTime.toString()));
+            firstChange.toString() + " " + firstTime.toString()));
       }
-      if (last != null)
+      if (lastChange != null)
       {
-        Date lastTime = new Date(last.getTime());
+        Date lastTime = new Date(lastChange.getTime());
         attributes.add(new Attribute("last-change",
-            last.toString() + " " + lastTime.toString()));
+            lastChange.toString() + " " + lastTime.toString()));
       }
 
       return attributes;

--
Gitblit v1.10.0