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