GEODE-8835: Increment connection count if create successfully (#5907)

diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImplTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImplTest.java
index a72a5b5..6a95516 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImplTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImplTest.java
@@ -490,4 +490,35 @@
 
     connectionManager.close(false);
   }
+
+  @Test
+  public void exchangeNotIncrementConnectionCountWhenUnableToCreateConnection() {
+    Set<ServerLocation> excluded = Collections.emptySet();
+
+    ServerLocation serverLocation1 = mock(ServerLocation.class);
+    Connection connection1 = mock(Connection.class);
+    when(connectionFactory.createClientToServerConnection(serverLocation1, false))
+        .thenReturn(connection1);
+
+    ServerLocation serverLocation2 = mock(ServerLocation.class);
+    Endpoint endpoint2 = mock(Endpoint.class);
+    Connection connection2 = mock(Connection.class);
+    when(connectionFactory.createClientToServerConnection(eq(Collections.EMPTY_SET)))
+        .thenReturn(null);
+    when(connection2.getServer()).thenReturn(serverLocation2);
+    when(connection2.getEndpoint()).thenReturn(endpoint2);
+    when(endpoint2.getLocation()).thenReturn(serverLocation2);
+
+    connectionManager = createDefaultConnectionManager();
+    connectionManager.start(backgroundProcessor);
+
+    Connection heldConnection = connectionManager.borrowConnection(serverLocation1, timeout, false);
+    assertThatThrownBy(() -> connectionManager.exchangeConnection(heldConnection, excluded))
+        .isInstanceOf(NoAvailableServersException.class);
+
+    assertThat(connectionManager.getConnectionCount()).isEqualTo(1);
+    verify(connectionFactory, times(1)).createClientToServerConnection(Collections.EMPTY_SET);
+
+    connectionManager.close(false);
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
index 01b826e..d8f82ac 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
@@ -224,8 +224,11 @@
    */
   private PooledConnection forceCreateConnection(Set<ServerLocation> excludedServers)
       throws NoAvailableServersException, ServerOperationException {
-    connectionAccounting.create();
-    return createPooledConnection(excludedServers);
+    PooledConnection pooledConnection = createPooledConnection(excludedServers);
+    if (pooledConnection != null) {
+      connectionAccounting.create();
+    }
+    return pooledConnection;
   }
 
   private boolean checkShutdownInterruptedOrTimeout(final long timeout)