HDFS-13232. RBF: ConnectionPool should return first usable connection. Contributed by Ekanth S.
(cherry picked from commit 8133cd5305
)
This commit is contained in:
parent
4b6b07690e
commit
0dadcf9ea3
|
@ -159,7 +159,7 @@ public class ConnectionPool {
|
||||||
for (int i=0; i<size; i++) {
|
for (int i=0; i<size; i++) {
|
||||||
int index = (threadIndex + i) % size;
|
int index = (threadIndex + i) % size;
|
||||||
conn = tmpConnections.get(index);
|
conn = tmpConnections.get(index);
|
||||||
if (conn != null && !conn.isUsable()) {
|
if (conn != null && conn.isUsable()) {
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test functionalities of {@link ConnectionManager}, which manages a pool
|
* Test functionalities of {@link ConnectionManager}, which manages a pool
|
||||||
|
@ -41,6 +42,8 @@ public class TestConnectionManager {
|
||||||
UserGroupInformation.createUserForTesting("user1", TEST_GROUP);
|
UserGroupInformation.createUserForTesting("user1", TEST_GROUP);
|
||||||
private static final UserGroupInformation TEST_USER2 =
|
private static final UserGroupInformation TEST_USER2 =
|
||||||
UserGroupInformation.createUserForTesting("user2", TEST_GROUP);
|
UserGroupInformation.createUserForTesting("user2", TEST_GROUP);
|
||||||
|
private static final UserGroupInformation TEST_USER3 =
|
||||||
|
UserGroupInformation.createUserForTesting("user3", TEST_GROUP);
|
||||||
private static final String TEST_NN_ADDRESS = "nn1:8080";
|
private static final String TEST_NN_ADDRESS = "nn1:8080";
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
@ -87,6 +90,46 @@ public class TestConnectionManager {
|
||||||
connManager.cleanup(pool1);
|
connManager.cleanup(pool1);
|
||||||
checkPoolConnections(TEST_USER1, 8, 4);
|
checkPoolConnections(TEST_USER1, 8, 4);
|
||||||
checkPoolConnections(TEST_USER2, 10, 10);
|
checkPoolConnections(TEST_USER2, 10, 10);
|
||||||
|
|
||||||
|
// Make sure the number of connections doesn't go below minSize
|
||||||
|
ConnectionPool pool3 = new ConnectionPool(
|
||||||
|
conf, TEST_NN_ADDRESS, TEST_USER3, 2, 10);
|
||||||
|
addConnectionsToPool(pool3, 10, 0);
|
||||||
|
poolMap.put(new ConnectionPoolId(TEST_USER2, TEST_NN_ADDRESS), pool3);
|
||||||
|
connManager.cleanup(pool3);
|
||||||
|
checkPoolConnections(TEST_USER3, 2, 0);
|
||||||
|
// With active connections added to pool, make sure it honors the
|
||||||
|
// MIN_ACTIVE_RATIO again
|
||||||
|
addConnectionsToPool(pool3, 10, 2);
|
||||||
|
connManager.cleanup(pool3);
|
||||||
|
checkPoolConnections(TEST_USER3, 4, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetConnection() throws Exception {
|
||||||
|
Map<ConnectionPoolId, ConnectionPool> poolMap = connManager.getPools();
|
||||||
|
final int totalConns = 10;
|
||||||
|
int activeConns = 5;
|
||||||
|
|
||||||
|
ConnectionPool pool = new ConnectionPool(
|
||||||
|
conf, TEST_NN_ADDRESS, TEST_USER1, 0, 10);
|
||||||
|
addConnectionsToPool(pool, totalConns, activeConns);
|
||||||
|
poolMap.put(new ConnectionPoolId(TEST_USER1, TEST_NN_ADDRESS), pool);
|
||||||
|
|
||||||
|
// All remaining connections should be usable
|
||||||
|
final int remainingSlots = totalConns - activeConns;
|
||||||
|
for (int i = 0; i < remainingSlots; i++) {
|
||||||
|
ConnectionContext cc = pool.getConnection();
|
||||||
|
assertTrue(cc.isUsable());
|
||||||
|
cc.getClient();
|
||||||
|
activeConns++;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkPoolConnections(TEST_USER1, totalConns, activeConns);
|
||||||
|
|
||||||
|
// Ask for more and this returns an active connection
|
||||||
|
ConnectionContext cc = pool.getConnection();
|
||||||
|
assertTrue(cc.isActive());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addConnectionsToPool(ConnectionPool pool, int numTotalConn,
|
private void addConnectionsToPool(ConnectionPool pool, int numTotalConn,
|
||||||
|
|
Loading…
Reference in New Issue