Prevented driver from decrementing open connection count when replacing a 
connection

Depending on the configuration and if connection replacement was high, this 
number could sometimes go negative.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f198ce1e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f198ce1e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f198ce1e

Branch: refs/heads/TINKERPOP-1352
Commit: f198ce1e714c9f2daa140e9832c6f97f29d866a8
Parents: e0b6dc4
Author: Stephen Mallette <[email protected]>
Authored: Fri Jul 1 07:40:37 2016 -0400
Committer: Stephen Mallette <[email protected]>
Committed: Fri Jul 1 07:40:37 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/driver/ConnectionPool.java | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f198ce1e/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ConnectionPool.java
----------------------------------------------------------------------
diff --git 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ConnectionPool.java
 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ConnectionPool.java
index 96cb81b..9955e82 100644
--- 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ConnectionPool.java
+++ 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ConnectionPool.java
@@ -232,10 +232,6 @@ final class ConnectionPool {
         return closeFuture.compareAndSet(null, future) ? future : 
closeFuture.get();
     }
 
-    public int opened() {
-        return open.get();
-    }
-
     private CompletableFuture[] killAvailableConnections() {
         final List<CompletableFuture<Void>> futures = new 
ArrayList<>(connections.size());
         for (Connection connection : connections) {
@@ -321,15 +317,18 @@ final class ConnectionPool {
     }
 
     private void definitelyDestroyConnection(final Connection connection) {
-        bin.add(connection);
-        connections.remove(connection);
-        open.decrementAndGet();
+        // only add to the bin for future removal if its not already there.
+        if (!bin.contains(connection)) {
+            bin.add(connection);
+            connections.remove(connection);
+            open.decrementAndGet();
+        }
 
-        if (connection.borrowed.get() == 0 && bin.remove(connection))
+        // only close the connection for good once it is done being borrowed
+        if (connection.borrowed.get() == 0 && bin.remove(connection)) {
             connection.closeAsync();
-
-        if (logger.isDebugEnabled())
             logger.debug("{} destroyed", connection.getConnectionInfo());
+        }
     }
 
     private Connection waitForConnection(final long timeout, final TimeUnit 
unit) throws TimeoutException, ConnectionException {

Reply via email to