From 87c9fb691b7b976d2c8aa072afb531de08780cab Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Fri, 31 Jul 2015 16:35:39 +0000
Subject: [PATCH] OPENDJ-2182 CR-7793 Change number indexer prevent server from shutting down

---
 opendj-server-legacy/src/test/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursorTest.java |   28 ++++++++++++++++++++++++++++
 opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursor.java     |   16 ++++++++++------
 2 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursor.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursor.java
index 193eb45..5d05037 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursor.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursor.java
@@ -85,14 +85,18 @@
   @Override
   public boolean next() throws ChangelogException
   {
-    // discard updates from non ECL enabled domains
-    boolean hasNext;
-    do
+    if (!cursor.next())
     {
-      hasNext = cursor.next();
+      return false;
     }
-    while (hasNext && !predicate.isECLEnabledDomain(cursor.getData()));
-    return hasNext;
+    // discard updates from non ECL enabled domains by removing the disabled domains from the cursor
+    DN domain = cursor.getData();
+    while (domain != null && !predicate.isECLEnabledDomain(domain))
+    {
+      cursor.removeDomain(domain);
+      domain = cursor.getData();
+    }
+    return domain != null;
   }
 
   @Override
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursorTest.java b/opendj-server-legacy/src/test/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursorTest.java
index b44a7bc..56645f5 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursorTest.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/replication/server/changelog/file/ECLMultiDomainDBCursorTest.java
@@ -126,6 +126,7 @@
     final DN baseDN2 = DN.valueOf("cn=admin data");
     eclEnabledDomains.add(baseDN1);
 
+    // At least two updates in an enabled domain
     final UpdateMsg msg1 = new FakeUpdateMsg(1);
     final UpdateMsg msg2 = new FakeUpdateMsg(2);
     final UpdateMsg msg3 = new FakeUpdateMsg(3);
@@ -134,6 +135,33 @@
     addDomainCursorToCursor(baseDN2, new SequentialDBCursor(msg2, msg3));
 
     assertMessagesInOrder(baseDN1, msg1, msg4);
+    assertEmpty();
+
+    //Only one update in an enabled domain
+    final UpdateMsg msg5 = new FakeUpdateMsg(5);
+    final UpdateMsg msg6 = new FakeUpdateMsg(6);
+    final UpdateMsg msg7 = new FakeUpdateMsg(7);
+    addDomainCursorToCursor(baseDN1, new SequentialDBCursor(msg5));
+    addDomainCursorToCursor(baseDN2, new SequentialDBCursor(msg6, msg7));
+
+    assertMessagesInOrder(baseDN1, msg5, null);
+    assertEmpty();
+
+    // Two disabled domains
+    final DN baseDN3 = DN.valueOf("cn=schema");
+    final UpdateMsg msg8 = new FakeUpdateMsg(8);
+    final UpdateMsg msg9 = new FakeUpdateMsg(9);
+    final UpdateMsg msg10 = new FakeUpdateMsg(10);
+    final UpdateMsg msg11 = new FakeUpdateMsg(11);
+    final UpdateMsg msg12 = new FakeUpdateMsg(12);
+    final UpdateMsg msg13 = new FakeUpdateMsg(13);
+
+    addDomainCursorToCursor(baseDN1, new SequentialDBCursor(msg8, msg10));
+    addDomainCursorToCursor(baseDN2, new SequentialDBCursor(msg9, msg11));
+    addDomainCursorToCursor(baseDN3, new SequentialDBCursor(msg12, msg13));
+
+    assertMessagesInOrder(baseDN1, msg8, msg10);
+    assertEmpty();
   }
 
   private void assertEmpty() throws Exception

--
Gitblit v1.10.0