From c8cef8d7419e49170f5687ef16015a7fff60bf23 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 25 Jul 2013 12:36:33 +0000
Subject: [PATCH] ReplicationServerLoadBalancingTest.java: Made the code easier to read, reduced number of lines of code.
---
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java | 367 ++++++++++++++++------------------------------------
1 files changed, 114 insertions(+), 253 deletions(-)
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java
index 634089c..453c826 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java
@@ -23,24 +23,18 @@
*
*
* Copyright 2009-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.replication.plugin;
-import java.io.File;
-import org.opends.server.util.StaticUtils;
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
+import static org.opends.server.TestCaseUtils.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.testng.Assert.*;
-import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import org.opends.server.types.DirectoryException;
-import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
+import java.io.File;
+import java.net.ServerSocket;
+import java.util.*;
import org.opends.messages.Category;
import org.opends.messages.Message;
@@ -54,9 +48,9 @@
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.replication.server.ReplicationServerDomain;
import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.util.StaticUtils;
import org.testng.annotations.Test;
-import static org.testng.Assert.*;
-import static org.opends.server.TestCaseUtils.*;
/**
* Test in real situations the algorithm for load balancing the DSs connections
@@ -76,7 +70,6 @@
private static final int RS1_ID = 501;
private static final int RS2_ID = 502;
private static final int RS3_ID = 503;
- private static final int RS4_ID = 504;
// The tracer object for the debug logger
private static final DebugTracer TRACER = getTracer();
@@ -90,42 +83,30 @@
}
}
- private void initTest()
+ private void initTest() throws Exception
{
- for (int i = 0 ; i < NDS; i++)
- {
- rd[i] = null;
- }
- for (int i = 0 ; i < NRS; i++)
- {
- rs[i] = null;
- rsPort[i] = -1;
- }
+ Arrays.fill(rd, null);
+ Arrays.fill(rs, null);
+ Arrays.fill(rsPort, -1);
+
findFreePorts();
}
/**
* Find needed free TCP ports.
*/
- private void findFreePorts()
+ private void findFreePorts() throws Exception
{
- try
- {
- ServerSocket[] ss = new ServerSocket[NRS];
+ ServerSocket[] ss = new ServerSocket[NRS];
- for (int i = 0; i < NRS; i++)
- {
- ss[i] = TestCaseUtils.bindFreePort();
- rsPort[i] = ss[i].getLocalPort();
- }
- for (int i = 0; i < NRS; i++)
- {
- ss[i].close();
- }
- } catch (IOException e)
+ for (int i = 0; i < NRS; i++)
{
- fail("Unable to determinate some free ports " +
- stackTraceToSingleLineString(e));
+ ss[i] = TestCaseUtils.bindFreePort();
+ rsPort[i] = ss[i].getLocalPort();
+ }
+ for (int i = 0; i < NRS; i++)
+ {
+ ss[i].close();
}
}
@@ -173,112 +154,54 @@
{
SortedSet<String> replServers = new TreeSet<String>();
- if (testCase.equals("testFailoversAndWeightChanges"))
+ final int nbRSs = getNbRSs(testCase);
+ for (int i = 0; i < nbRSs; i++)
{
- // 4 servers used for this test case.
- for (int i = 0; i < NRS; i++)
- {
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testSpreadLoad"))
+ replServers.add("localhost:" + rsPort[i]);
+ }
+ return replServers;
+ }
+
+ private int getNbRSs(String testCase)
+ {
+ if (testCase.equals("testFailoversAndWeightChanges")
+ || testCase.equals("testSpreadLoad"))
{
- // 4 servers used for this test case.
- for (int i = 0; i < NRS; i++)
- {
- replServers.add("localhost:" + rsPort[i]);
- }
+ return NRS;
} else if (testCase.equals("testNoYoyo1"))
{
- // 2 servers used for this test case.
- for (int i = 0; i < 2; i++)
- {
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testNoYoyo2"))
+ return 2;
+ }
+ else if (testCase.equals("testNoYoyo2") || testCase.equals("testNoYoyo3"))
{
- // 3 servers used for this test case.
- for (int i = 0; i < 3; i++)
- {
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testNoYoyo3"))
- {
- // 3 servers used for this test case.
- for (int i = 0; i < 3; i++)
- {
- replServers.add("localhost:" + rsPort[i]);
- }
- } else
-
- fail("Unknown test case: " + testCase);
-
- return replServers;
+ return 3;
+ }
+ fail("Unknown test case: " + testCase);
+ return 0; // dead code, but java does not know about it
}
/**
* Creates a new ReplicationServer.
*/
private ReplicationServer createReplicationServer(int rsIndex,
- int weight, String testCase)
+ int weight, String testCase) throws Exception
{
SortedSet<String> replServers = new TreeSet<String>();
- try
- {
- if (testCase.equals("testFailoversAndWeightChanges"))
- {
- // 4 servers used for this test case.
- for (int i = 0; i < NRS; i++)
- {
- if (i != rsIndex)
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testSpreadLoad"))
- {
- // 4 servers used for this test case.
- for (int i = 0; i < NRS; i++)
- {
- if (i != rsIndex)
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testNoYoyo1"))
- {
- // 2 servers used for this test case.
- for (int i = 0; i < 2; i++)
- {
- if (i != rsIndex)
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testNoYoyo2"))
- {
- // 3 servers used for this test case.
- for (int i = 0; i < 3; i++)
- {
- if (i != rsIndex)
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testNoYoyo3"))
- {
- // 3 servers used for this test case.
- for (int i = 0; i < 3; i++)
- {
- if (i != rsIndex)
- replServers.add("localhost:" + rsPort[i]);
- }
- } else
- fail("Unknown test case: " + testCase);
- String dir = "replicationServerLoadBalancingTest" + rsIndex + testCase + "Db";
- ReplServerFakeConfiguration conf =
- new ReplServerFakeConfiguration(rsPort[rsIndex], dir, 0, rsIndex+501, 0, 100,
- replServers, 1, 1000, 5000, weight);
- ReplicationServer replicationServer = new ReplicationServer(conf);
- return replicationServer;
-
- } catch (Exception e)
+ int nbRSs = getNbRSs(testCase);
+ for (int i = 0; i < nbRSs; i++)
{
- fail("createReplicationServer " + stackTraceToSingleLineString(e));
+ if (i != rsIndex){
+ replServers.add("localhost:" + rsPort[i]);
+ }
}
- return null;
+
+ String dir = "replicationServerLoadBalancingTest" + rsIndex + testCase + "Db";
+ ReplServerFakeConfiguration conf =
+ new ReplServerFakeConfiguration(rsPort[rsIndex], dir, 0, rsIndex+501, 0, 100,
+ replServers, 1, 1000, 5000, weight);
+ ReplicationServer replicationServer = new ReplicationServer(conf);
+ return replicationServer;
}
/**
@@ -288,64 +211,40 @@
(int rsIndex, int weight, String testCase)
{
SortedSet<String> replServers = new TreeSet<String>();
- try
- {
- if (testCase.equals("testFailoversAndWeightChanges"))
- {
- // 4 servers used for this test case.
- for (int i = 0; i < NRS; i++)
- {
- if (i != rsIndex)
- replServers.add("localhost:" + rsPort[i]);
- }
- } else if (testCase.equals("testSpreadLoad"))
- {
- // 4 servers used for this test case.
- for (int i = 0; i < NRS; i++)
- {
- if (i != rsIndex)
- replServers.add("localhost:" + rsPort[i]);
- }
- } else
- fail("Unknown test case: " + testCase);
- String dir = "replicationServerLoadBalancingTest" + rsIndex + testCase + "Db";
- ReplServerFakeConfiguration conf =
- new ReplServerFakeConfiguration(rsPort[rsIndex], dir, 0, rsIndex+501, 0, 100,
- replServers, 1, 1000, 5000, weight);
- return conf;
-
- } catch (Exception e)
+ if (testCase.equals("testFailoversAndWeightChanges")
+ || testCase.equals("testSpreadLoad"))
{
- fail("createReplicationServerConfigWithNewWeight " + stackTraceToSingleLineString(e));
- }
- return null;
+ // 4 servers used for this test case.
+ for (int i = 0; i < NRS; i++)
+ {
+ if (i != rsIndex)
+ replServers.add("localhost:" + rsPort[i]);
+ }
+ } else
+ fail("Unknown test case: " + testCase);
+
+ String dir = "replicationServerLoadBalancingTest" + rsIndex + testCase + "Db";
+ ReplServerFakeConfiguration conf =
+ new ReplServerFakeConfiguration(rsPort[rsIndex], dir, 0, rsIndex+501, 0, 100,
+ replServers, 1, 1000, 5000, weight);
+ return conf;
}
/**
* Creates a new ReplicationDomain.
*/
private LDAPReplicationDomain createReplicationDomain(int serverId,
- String testCase)
+ String testCase) throws Exception
{
-
- SortedSet<String> replServers = null;
- try
- {
- replServers = createRSListForTestCase(testCase);
- DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
- DomainFakeCfg domainConf =
- new DomainFakeCfg(baseDn, serverId+1, replServers, 1);
- LDAPReplicationDomain replicationDomain =
+ SortedSet<String> replServers = createRSListForTestCase(testCase);
+ DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+ DomainFakeCfg domainConf =
+ new DomainFakeCfg(baseDn, serverId + 1, replServers, 1);
+ LDAPReplicationDomain replicationDomain =
MultimasterReplication.createNewDomain(domainConf);
- replicationDomain.start();
- return replicationDomain;
-
- } catch (Exception e)
- {
- fail("createReplicationDomain " + stackTraceToSingleLineString(e));
- }
- return null;
+ replicationDomain.start();
+ return replicationDomain;
}
/**
@@ -368,14 +267,11 @@
/**
* Start RS1 weigth=1, RS2 weigth=2, RS3 weigth=3, RS4 weigth=4
*/
- // Create and start RS1
- rs[0] = createReplicationServer(0, 1, testCase);
- // Create and start RS2
- rs[1] = createReplicationServer(1, 2, testCase);
- // Create and start RS3
- rs[2] = createReplicationServer(2, 3, testCase);
- // Create and start RS4
- rs[3] = createReplicationServer(3, 4, testCase);
+ // Create and start RSs
+ for (int i = 0; i < rs.length; i++)
+ {
+ rs[i] = createReplicationServer(i, i + 1, testCase);
+ }
// Start a first DS to make every RSs inter connect
rd[0] = createReplicationDomain(0, testCase);
@@ -435,6 +331,7 @@
* timeout
*/
private void checkRSConnectionsAndGenId(int[] rsIndexes, String msg)
+ throws Exception
{
debugInfo("checkRSConnectionsAndGenId for <" + msg + ">");
// Number of seconds to wait for condition before failing
@@ -450,7 +347,6 @@
// Test connection
boolean connected = false;
boolean sameGenId = false;
- Iterator<ReplicationServerDomain> rsdIt = null;
// Connected together ?
int nOk = 0;
@@ -458,18 +354,15 @@
{
int rsIndex = rsIndexes[i];
ReplicationServer repServer = rs[rsIndex];
- rsdIt = repServer.getDomainIterator();
+ Iterator<ReplicationServerDomain> rsdIt = repServer.getDomainIterator();
int curRsId = repServer.getServerId();
- Set<Integer> connectedRSsId = null;
- if (rsdIt != null)
- {
- connectedRSsId = rsdIt.next().getConnectedRSs().keySet();
- } else
+ if (rsdIt == null)
{
// No domain yet, RS is not yet connected to others
debugInfo("RS " + curRsId + " has no domain yet");
break;
}
+ Set<Integer> connectedRSsId = rsdIt.next().getConnectedRSs().keySet();
// Does this RS see all other RSs
int nPeer = 0;
debugInfo("Checking RSs connected to RS " + curRsId);
@@ -506,36 +399,31 @@
long refGenId = -1L;
boolean refGenIdInitialized = false;
nOk = 0;
- rsdIt = null;
for (int i = 0; i < nRSs; i++)
{
ReplicationServer repServer = rs[i];
- rsdIt = repServer.getDomainIterator();
+ Iterator<ReplicationServerDomain> rsdIt = repServer.getDomainIterator();
int curRsId = repServer.getServerId();
- Long rsGenId = -1L;
- if (rsdIt != null)
- {
- rsGenId = rsdIt.next().getGenerationId();
- } else
+ if (rsdIt == null)
{
// No domain yet, RS is not yet connected to others
debugInfo("RS " + curRsId + " has no domain yet");
break;
}
+ Long rsGenId = rsdIt.next().getGenerationId();
// Expecting all RSs to have gen id equal and not -1
- if ((rsGenId == -1L))
+ if (rsGenId == -1L)
{
debugInfo("\tRS " + curRsId + " gen id is -1 which is not expected");
break;
- } else
+ }
+
+ if (!refGenIdInitialized)
{
- if (!refGenIdInitialized)
- {
- // Store reference gen id all RSs must have
- refGenId = rsGenId;
- refGenIdInitialized = true;
- }
+ // Store reference gen id all RSs must have
+ refGenId = rsGenId;
+ refGenIdInitialized = true;
}
if (rsGenId == refGenId)
{
@@ -566,21 +454,14 @@
}
// Sleep 1 second
- try
- {
- Thread.sleep(1000);
- } catch (InterruptedException ex)
- {
- fail("Error sleeping " + stackTraceToSingleLineString(ex));
- }
+ Thread.sleep(1000);
nSec++;
- if (nSec > secTimeout)
- {
- // Timeout reached, end with error
- fail("checkRSConnections: could not obtain that RSs are connected and have the same gen id after "
- + (nSec-1) + " seconds. [" + msg + "]");
- }
+ // Timeout reached, end with error
+ assertTrue(
+ nSec <= secTimeout,
+ "checkRSConnections: could not obtain that RSs are connected and have the same gen id after "
+ + (nSec - 1) + " seconds. [" + msg + "]");
}
}
@@ -599,17 +480,14 @@
try
{
-
/**
* RS1 (weight=1) starts
*/
-
rs[0] = createReplicationServer(0, 1, testCase);
/**
* DS1 starts and connects to RS1
*/
-
rd[0] = createReplicationDomain(0, testCase);
assertTrue(rd[0].isConnected());
assertEquals(rd[0].getRsServerId(), RS1_ID);
@@ -617,7 +495,6 @@
/**
* RS2 (weight=1) starts
*/
-
rs[1] = createReplicationServer(1, 1, testCase);
checkRSConnectionsAndGenId(new int[] {0, 1},
"Waiting for RS2 connected to peers");
@@ -625,7 +502,6 @@
/**
* DS2 starts and connects to RS2
*/
-
rd[1] = createReplicationDomain(1, testCase);
assertTrue(rd[1].isConnected());
assertEquals(rd[1].getRsServerId(), RS2_ID);
@@ -633,7 +509,6 @@
/**
* RS3 (weight=1) starts
*/
-
rs[2] = createReplicationServer(2, 1, testCase);
checkRSConnectionsAndGenId(new int[] {0, 1, 2},
"Waiting for RS3 connected to peers");
@@ -641,7 +516,6 @@
/**
* DS3 starts and connects to RS3
*/
-
rd[2] = createReplicationDomain(2, testCase);
assertTrue(rd[2].isConnected());
assertEquals(rd[2].getRsServerId(), RS3_ID);
@@ -649,7 +523,6 @@
/**
* DS4 starts and connects to RS1, RS2 or RS3
*/
-
rd[3] = createReplicationDomain(3, testCase);
assertTrue(rd[3].isConnected());
int ds4ConnectedRsId = rd[3].getRsServerId();
@@ -661,7 +534,6 @@
/**
* DS5 starts and connects to one of the 2 other RSs
*/
-
rd[4] = createReplicationDomain(4, testCase);
assertTrue(rd[4].isConnected());
int ds5ConnectedRsId = rd[4].getRsServerId();
@@ -672,7 +544,6 @@
/**
* DS6 starts and connects to the RS with one DS
*/
-
rd[5] = createReplicationDomain(5, testCase);
assertTrue(rd[5].isConnected());
int ds6ConnectedRsId = rd[5].getRsServerId();
@@ -974,7 +845,7 @@
* timeout
*/
private void checkForCorrectNumbersOfConnectedDSs(int[][] possibleExpectedDSsNumbers,
- String msg)
+ String msg) throws Exception
{
// Time to wait before condition met: warning, this should let enough
// time to the topology to auto-balance. Currently this must at least let
@@ -988,10 +859,8 @@
// Go out of the loop only if connection is verified or if timeout occurs
while (true)
{
- for (int i = 0; i < possibleExpectedDSsNumbers.length; i++)
+ for (int[] expectedDSsNumbers : possibleExpectedDSsNumbers)
{
- // Examine next possible final situation
- int[] expectedDSsNumbers = possibleExpectedDSsNumbers[i];
// Examine connections
int nOk = 0; // Number of RSs ok
int nRSs = 0; // Number of RSs to examine
@@ -1029,23 +898,15 @@
}
// Sleep 1 second
- try
- {
- Thread.sleep(1000);
- } catch (InterruptedException ex)
- {
- fail("Error sleeping " + stackTraceToSingleLineString(ex));
- }
+ Thread.sleep(1000);
nSec++;
- if (nSec > secTimeout)
- {
- // Timeout reached, end with error
- fail("checkForCorrectNumbersOfConnectedDSs: could not get expected " +
- "connections " + intArrayToString(possibleExpectedDSsNumbers) + " after " + (nSec-1) +
- " seconds. Got this result : " + intArrayToString(finalDSsNumbers) +
- " [" + msg + "]");
- }
+ // Timeout reached, end with error
+ assertTrue(nSec <= secTimeout,
+ "checkForCorrectNumbersOfConnectedDSs: could not get expected "
+ + "connections " + intArrayToString(possibleExpectedDSsNumbers)
+ + " after " + (nSec - 1) + " seconds. Got this result : "
+ + intArrayToString(finalDSsNumbers) + " [" + msg + "]");
}
}
--
Gitblit v1.10.0