This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-pool.git
The following commit(s) were added to refs/heads/master by this push:
new 2286800 [POOL-402] Check blockWhenExhausted in hasBorrowWaiters (#116)
2286800 is described below
commit 22868002d800cd19600e06c9d2c599fe0e04a453
Author: Cp-John <[email protected]>
AuthorDate: Wed Dec 1 09:42:53 2021 +0800
[POOL-402] Check blockWhenExhausted in hasBorrowWaiters (#116)
* Check blockWhenExhausted in hasBorrowWaiters
* Add jacoco plugin
* Add unite tests for getBlockWhenExhausted in hasBorrowWaiters
* Restore pom file
---
.../commons/pool2/impl/GenericKeyedObjectPool.java | 2 +-
.../pool2/impl/TestGenericKeyedObjectPool.java | 29 ++++++++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git
a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
index b41d8c4..0ec43f0 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
@@ -1280,7 +1280,7 @@ public class GenericKeyedObjectPool<K, T> extends
BaseGenericObjectPool<T>
* {@code false}
*/
private boolean hasBorrowWaiters() {
- return poolMap.values().stream().anyMatch(deque -> deque != null &&
deque.getIdleObjects().hasTakeWaiters());
+ return getBlockWhenExhausted() &&
poolMap.values().stream().anyMatch(deque -> deque != null &&
deque.getIdleObjects().hasTakeWaiters());
}
/**
diff --git
a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
index ca26e50..1972989 100644
---
a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
+++
b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
@@ -2608,6 +2608,35 @@ public class TestGenericKeyedObjectPool extends
TestKeyedObjectPool {
assertFalse(borrower.isAlive());
}
+ @Test
+ public void testReturnObjectWithBlockWhenExhausted() throws Exception {
+ gkoPool.setBlockWhenExhausted(true);
+ gkoPool.setMaxTotal(1);
+
+ // Test return object with no take waiters
+ String obj = gkoPool.borrowObject("0");
+ gkoPool.returnObject("0", obj);
+
+ // Test return object with a take waiter
+ final TestThread<String> testA = new TestThread<>(gkoPool, 1, 0, 500,
false, null, "0");
+ final TestThread<String> testB = new TestThread<>(gkoPool, 1, 0, 0,
false, null, "1");
+ final Thread threadA = new Thread(testA);
+ final Thread threadB = new Thread(testB);
+ threadA.start();
+ threadB.start();
+ threadA.join();
+ threadB.join();
+ }
+
+ @Test
+ public void testReturnObjectWithoutBlockWhenExhausted() throws Exception {
+ gkoPool.setBlockWhenExhausted(false);
+
+ // Test return object with no take waiters
+ String obj = gkoPool.borrowObject("0");
+ gkoPool.returnObject("0", obj);
+ }
+
}