Bug 547416: [RJ-Servi] Fix interpretion of 'max usage count' parameter
for servi pools
Change-Id: If19cd214c27aaf9de78ee6acadebc7b74ebdc3ba
diff --git a/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java b/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
index 4b98634..4c6e074 100644
--- a/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
+++ b/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
@@ -35,6 +35,7 @@
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.rj.RjException;
+import org.eclipse.statet.rj.data.RDataUtils;
import org.eclipse.statet.rj.data.UnexpectedRDataException;
import org.eclipse.statet.rj.server.util.RJContext;
import org.eclipse.statet.rj.servi.RServi;
@@ -252,6 +253,30 @@
}
}
+ @Test
+ public void UsageCount_borrowMax() throws RjException, OperationsException,
+ NoSuchElementException, LoginException, StatusException, UnexpectedRDataException,
+ InterruptedException {
+ final PoolConfig poolConfig= new PoolConfig();
+ poolConfig.setMaxTotalCount(1);
+ poolConfig.setMaxUsageCount(1);
+ this.server.setPoolConfig(poolConfig);
+ this.server.start();
+
+ final RServi servi1= getServi("test1");
+ assertNodeOperative(servi1);
+ final int pid1= RDataUtils.checkSingleIntValue(servi1.evalData("Sys.getpid()", null));
+ closeServi(servi1);
+
+ final RServi servi2= getServi("test2");
+ assertNodeOperative(servi2);
+ final int pid2= RDataUtils.checkSingleIntValue(servi2.evalData("Sys.getpid()", null));
+
+ assertTrue(pid1 != pid2);
+
+ closeServi(servi2);
+ }
+
private void assertIdleCount(final int expected) throws InterruptedException {
final long t= System.nanoTime();
while (true) {
diff --git a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
index 38c5d39..f120285 100644
--- a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
+++ b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
@@ -193,7 +193,7 @@
}
final int max= this.maxUsageCount;
- if (max > 0 && ((DefaultPooledObject<?>) p).getBorrowedCount() > max) {
+ if (max > 0 && ((DefaultPooledObject<?>) p).getBorrowedCount() >= max) {
poolObj.stats.shutdownReason= Stats.MAX_USAGE;
return false;
}