From ea16c22c6b725367e499b31054497246b67ca703 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 11 Oct 2013 14:29:15 +0000
Subject: [PATCH] Trying to fix random failures for HistoricalTest.testRecurringPurgeIn1Run().
---
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java | 23 ++++---
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java | 17 ++---
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java | 58 ++++++------------
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java | 25 +++----
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java | 30 ++++------
5 files changed, 64 insertions(+), 89 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
index 3309a9c..2a013ae 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
@@ -721,15 +721,8 @@
connectServer1ToChangelog(changelog1ID);
debugInfo("Create Reset task on DS1 to propagate the new gen ID as the reference");
- Entry taskReset = TestCaseUtils.makeEntry(
- "dn: ds-task-id=resetgenid"+genId+ UUID.randomUUID() +
- ",cn=Scheduled Tasks,cn=Tasks",
- "objectclass: top",
- "objectclass: ds-task",
- "objectclass: ds-task-reset-generation-id",
- "ds-task-class-name: org.opends.server.tasks.SetGenerationIdTask",
- "ds-task-reset-generation-id-domain-base-dn: " + baseDnStr);
- executeTask(taskReset);
+ Entry taskReset = createSetGenerationIdTask(genId, "");
+ executeTask(taskReset, 20000);
// Broker 2 and 3 should receive 1 change status message to order them
// to enter the bad gen id status
@@ -818,15 +811,8 @@
server3ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges, genId);
debugInfo("Adding reset task to DS1");
- taskReset = TestCaseUtils.makeEntry(
- "dn: ds-task-id=resetgenid"+ UUID.randomUUID() +
- ",cn=Scheduled Tasks,cn=Tasks",
- "objectclass: top",
- "objectclass: ds-task",
- "objectclass: ds-task-reset-generation-id",
- "ds-task-class-name: org.opends.server.tasks.SetGenerationIdTask",
- "ds-task-reset-generation-id-domain-base-dn: " + baseDnStr);
- executeTask(taskReset);
+ taskReset = createSetGenerationIdTask(null, "");
+ executeTask(taskReset, 20000);
debugInfo("Verify that RS1 has still the right genID");
assertEquals(replServer1.getGenerationId(baseDN), rgenId);
@@ -877,6 +863,18 @@
}
}
+ private Entry createSetGenerationIdTask(Long genId, String additionalAttribute) throws Exception
+ {
+ String genIdString = genId != null ? genId.toString() : "";
+ return TestCaseUtils.makeEntry(
+ "dn: ds-task-id=resetgenid" + genIdString + UUID.randomUUID() + ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top", "objectclass: ds-task",
+ "objectclass: ds-task-reset-generation-id",
+ "ds-task-class-name: org.opends.server.tasks.SetGenerationIdTask",
+ "ds-task-reset-generation-id-domain-base-dn: " + baseDnStr,
+ additionalAttribute);
+ }
+
private void assertNoMessageReceived(ReplicationBroker broker,
String brokerName, String reason)
{
@@ -968,7 +966,6 @@
debugInfo("Expecting that broker3 is in bad gen id since it has a bad genId");
assertTrue(isDegradedDueToGenerationId(replServer1, server3ID));
-
assertEquals(countUpdatedEntriesInDb(), updatedEntries.length);
debugInfo("Connecting DS to replServer1.");
@@ -976,15 +973,8 @@
debugInfo("Adding reset task to DS.");
- Entry taskReset = TestCaseUtils.makeEntry(
- "dn: ds-task-id=resetgenid" + UUID.randomUUID() +
- ",cn=Scheduled Tasks,cn=Tasks",
- "objectclass: top",
- "objectclass: ds-task",
- "objectclass: ds-task-reset-generation-id",
- "ds-task-class-name: org.opends.server.tasks.SetGenerationIdTask",
- "ds-task-reset-generation-id-domain-base-dn: " + baseDnStr);
- executeTask(taskReset);
+ Entry taskReset = createSetGenerationIdTask(null, "");
+ executeTask(taskReset, 20000);
Thread.sleep(500);
debugInfo("Verifying that all replservers genIds have been reset.");
@@ -994,16 +984,8 @@
assertEquals(replServer3.getGenerationId(baseDN), genId);
debugInfo("Adding reset task to DS." + genId);
- taskReset = TestCaseUtils.makeEntry(
- "dn: ds-task-id=resetgenid" + UUID.randomUUID() +
- ",cn=Scheduled Tasks,cn=Tasks",
- "objectclass: top",
- "objectclass: ds-task",
- "objectclass: ds-task-reset-generation-id",
- "ds-task-class-name: org.opends.server.tasks.SetGenerationIdTask",
- "ds-task-reset-generation-id-domain-base-dn: " + baseDnStr,
- "ds-task-reset-generation-id-new-value: -1");
- executeTask(taskReset);
+ taskReset = createSetGenerationIdTask(null, "ds-task-reset-generation-id-new-value: -1");
+ executeTask(taskReset, 20000);
debugInfo("Verifying that all replservers genIds have been reset.");
int waitRes = 0;
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
index 0a3040d..1327987 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
@@ -56,6 +56,7 @@
import static org.opends.messages.ReplicationMessages.*;
import static org.opends.messages.TaskMessages.*;
+import static org.opends.server.backends.task.TaskState.*;
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.loggers.ErrorLogger.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -680,8 +681,7 @@
// Tests that entries have been received by S2
receiveUpdatedEntries(server2);
- // Wait for task completion
- waitTaskState(taskInitTargetS2, TaskState.COMPLETED_SUCCESSFULLY, null);
+ waitTaskState(taskInitTargetS2, COMPLETED_SUCCESSFULLY, 20000, null);
log("Successfully ending " + testCase);
} finally
@@ -738,8 +738,7 @@
receiveUpdatedEntries(server2);
receiveUpdatedEntries(server3);
- // Wait for task completion
- waitTaskState(taskInitTargetAll, TaskState.COMPLETED_SUCCESSFULLY, null);
+ waitTaskState(taskInitTargetAll, COMPLETED_SUCCESSFULLY, 20000, null);
log("Successfully ending " + testCase);
} finally
@@ -1028,9 +1027,7 @@
log(testCase + " receive entries");
receiveUpdatedEntries(server2);
- // Wait for task completion
- log(testCase + " wait task completed");
- waitTaskState(taskInitTargetS2, TaskState.COMPLETED_SUCCESSFULLY, null);
+ waitTaskState(taskInitTargetS2, COMPLETED_SUCCESSFULLY, 20000, null);
log("Successfully ending " + testCase);
}
@@ -1138,8 +1135,7 @@
"ds-task-initialize-replica-server-id: " + 20);
addTask(taskInit, ResultCode.SUCCESS, null);
-
- waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR,
+ waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR, 20000,
ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(baseDN.toString(), "20"));
// Test 2
@@ -1195,9 +1191,8 @@
"ds-task-initialize-replica-server-id: " + 0);
addTask(taskInit, ResultCode.SUCCESS, null);
-
- waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR,
- ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(baseDN.toString(), "0"));
+ waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR, 20000,
+ ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(baseDN.toString(), "0"));
if (replDomain != null)
{
@@ -1285,12 +1280,11 @@
// Second task is expected to be rejected
addTask(taskInit2, ResultCode.SUCCESS, null);
+ waitTaskState(taskInit2, STOPPED_BY_ERROR, 20000,
+ ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED.get());
- waitTaskState(taskInit2, TaskState.STOPPED_BY_ERROR,
- ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED.get());
-
- // First task is stilll running
- waitTaskState(taskInit, TaskState.RUNNING, null);
+ // First task is still running
+ waitTaskState(taskInit, RUNNING, 20000, null);
// External request is supposed to be rejected
@@ -1299,7 +1293,7 @@
ErrorMsg msg = new ErrorMsg(server1ID, 1, Message.EMPTY);
server2.publish(msg);
- waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR, null);
+ waitTaskState(taskInit, STOPPED_BY_ERROR, 20000, null);
log("Successfully ending " + testCase);
} finally
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
index 6c0827f..fb52c58 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
@@ -721,10 +721,10 @@
return new ReplSessionSecurity(null, null, null, true);
}
- protected void executeTask(Entry taskEntry) throws Exception
+ protected void executeTask(Entry taskEntry, long maxWaitTimeInMillis) throws Exception
{
addTask(taskEntry, ResultCode.SUCCESS, null);
- waitTaskState(taskEntry, TaskState.COMPLETED_SUCCESSFULLY, null);
+ waitTaskState(taskEntry, TaskState.COMPLETED_SUCCESSFULLY, maxWaitTimeInMillis, null);
}
/**
@@ -757,7 +757,7 @@
}
else
{
- waitTaskState(taskEntry, TaskState.RUNNING, null);
+ waitTaskState(taskEntry, TaskState.RUNNING, 20000, null);
}
// Entry will be removed at the end of the test
@@ -767,13 +767,13 @@
}
protected void waitTaskState(Entry taskEntry, TaskState expectedTaskState,
- Message expectedMessage) throws Exception
+ long maxWaitTimeInMillis, Message expectedMessage) throws Exception
{
- TaskState taskState = null;
- int cpt=40;
+ long startTime = System.currentTimeMillis();
SearchFilter filter = SearchFilter.createFilterFromString("(objectclass=*)");
Entry resultEntry = null;
+ TaskState taskState = null;
do
{
InternalSearchOperation searchOperation =
@@ -786,13 +786,12 @@
String stateString = resultEntry.getAttributeValue(taskStateType, DECODER);
taskState = TaskState.fromString(stateString);
- Thread.sleep(500);
- cpt--;
+ Thread.sleep(100);
}
while (taskState != expectedTaskState
&& taskState != TaskState.STOPPED_BY_ERROR
&& taskState != TaskState.COMPLETED_SUCCESSFULLY
- && cpt > 0);
+ && (System.currentTimeMillis() - startTime < maxWaitTimeInMillis));
// Check that the task contains some log messages.
AttributeType logMessagesType =
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
index f444c43..ad9b933 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
@@ -479,7 +479,7 @@
* - verify that all historical has been purged
*
* TODO: another test should be written that configures the task no NOT have
- * the time to purge everything in 1 run .. and thus to relauch it to finish
+ * the time to purge everything in 1 run .. and thus to relaunch it to finish
* the purge. And verify that the second run starts on the CSN where
* the previous task run had stopped.
*/
@@ -489,6 +489,9 @@
int entryCnt = 10;
addEntriesWithHistorical(1, entryCnt);
+ // leave a little delay between adding/modifying test entries
+ // and configuring the purge delay.
+ Thread.sleep(10);
// set the purge delay to 1 minute
// FIXME could we change this setting to also accept seconds?
@@ -500,23 +503,23 @@
"--domain-name",testName,
"--set","conflicts-historical-purge-delay:1m");
- Thread.sleep(60*1000);
+ // Let's go past the purge delay
+ Thread.sleep(60 * 1000);
// launch the purge
- Entry taskInit = TestCaseUtils.makeEntry(
- "dn: ds-task-id=" + UUID.randomUUID() +
- ",cn=Scheduled Tasks,cn=Tasks",
+ final int maxWaitTimeInSeconds = 120;
+ Entry purgeConflictsHistoricalTask = TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() + ",cn=Scheduled Tasks,cn=Tasks",
"objectclass: top",
"objectclass: ds-task",
"objectclass: ds-task-purge-conflicts-historical",
"ds-task-class-name: org.opends.server.tasks.PurgeConflictsHistoricalTask",
- "ds-task-purge-conflicts-historical-domain-dn: "+TEST_ROOT_DN_STRING,
- "ds-task-purge-conflicts-historical-maximum-duration: 120"); // 120 sec
-
- executeTask(taskInit);
+ "ds-task-purge-conflicts-historical-domain-dn: " + TEST_ROOT_DN_STRING,
+ "ds-task-purge-conflicts-historical-maximum-duration: " + maxWaitTimeInSeconds);
+ executeTask(purgeConflictsHistoricalTask, maxWaitTimeInSeconds * 1000);
// every entry should be purged from its hist
- // Search for matching entries in config backend
+ // Search for matching entries in config backend
InternalSearchOperation op = connection.processSearch(
TEST_ROOT_DN_STRING, SearchScope.WHOLE_SUBTREE, "(ds-sync-hist=*)");
assertEquals(op.getResultCode(), ResultCode.SUCCESS, op.getErrorMessage().toString());
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
index 2f1bc53..204bf84 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
@@ -1099,18 +1099,15 @@
/**
* Test backup and restore of the Replication server backend.
*/
- private void backupRestore() throws Exception
- {
- debugInfo("Starting backupRestore");
+ private void backupRestore() throws Exception
+ {
+ debugInfo("Starting backupRestore");
- Entry backupTask = createBackupTask();
- Entry restoreTask = createRestoreTask();
+ executeTask(createBackupTask(), 20000);
+ executeTask(createRestoreTask(), 20000);
- executeTask(backupTask);
- executeTask(restoreTask);
-
- debugInfo("Ending backupRestore");
- }
+ debugInfo("Ending backupRestore");
+ }
/**
* Test export of the Replication server backend
@@ -1140,13 +1137,13 @@
publishAll(server1, createChanges(TEST_ROOT_DN_STRING, 1));
publishAll(server2, createChanges("dc=domain2,dc=com", 2));
- debugInfo("Export all");
- executeTask(createExportAllTask());
+ debugInfo("Export all");
+ executeTask(createExportAllTask(), 20000);
// Not doing anything with the export file, let's delete it
new File(DirectoryServer.getInstanceRoot(), exportLDIFAllFile).delete();
- debugInfo("Export domain");
- executeTask(createExportDomainTask("dc=domain2,dc=com"));
+ debugInfo("Export domain");
+ executeTask(createExportDomainTask("dc=domain2,dc=com"), 20000);
if (exportLDIFDomainFile != null)
{
// Not doing anything with the export file, let's delete it
--
Gitblit v1.10.0