Remove unnecessary lock
Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
diff --git a/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/DestinationConnectionPool.java b/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/DestinationConnectionPool.java
index 2ef9b9c..a23cd98 100644
--- a/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/DestinationConnectionPool.java
+++ b/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/DestinationConnectionPool.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -195,12 +195,11 @@
throw new IllegalStateException("Illegal state transition, old state: " + oldState + " new state: " + newState);
}
- private synchronized void removeAllPendingWithError(Throwable t) {
- for (RequestRecord requestRecord : pendingRequests) {
+ private void removeAllPendingWithError(Throwable t) {
+ RequestRecord requestRecord = null;
+ while ((requestRecord = pendingRequests.poll()) != null) {
requestRecord.completionHandler.failed(t);
}
-
- pendingRequests.clear();
}
private class ConnectionStateListener implements HttpConnection.StateChangeListener {
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/StressTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/StressTest.java
deleted file mode 100644
index 40d5bc9..0000000
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/StressTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.glassfish.jersey.jdk.connector.internal;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLParameters;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriBuilder;
-
-import org.glassfish.jersey.SslConfigurator;
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.jdk.connector.JdkConnectorProvider;
-import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.test.TestProperties;
-import org.junit.Test;
-
-public class StressTest extends JerseyTest {
-
- private static final int SSL_PORT = 29999;
- private static final int ITERATIONS = 10000;
- // Must be less than the server thread pool. Is there any way to get that value?.
- private static final int N_REQUESTS = 10;
- private static final SSLContext SSL_CONTEXT;
- private static final ExecutorService executor = Executors.newFixedThreadPool(N_REQUESTS);
- private static CountDownLatch requests;
- private static CountDownLatch latch;
-
- static {
- System.setProperty("javax.net.ssl.keyStore", SslFilterTest.class.getResource("/keystore_server").getPath());
- System.setProperty("javax.net.ssl.keyStorePassword", "asdfgh");
- System.setProperty("javax.net.ssl.trustStore", SslFilterTest.class.getResource("/truststore_server").getPath());
- System.setProperty("javax.net.ssl.trustStorePassword", "asdfgh");
- try {
- SSL_CONTEXT = SslConfigurator.newInstance()
- .trustStoreFile(SslFilterTest.class.getResource("/truststore_server").getPath())
- .trustStorePassword("asdfgh")
- .keyStoreFile(SslFilterTest.class.getResource("/keystore_server").getPath())
- .keyStorePassword("asdfgh").createSSLContext();
- } catch (Exception e) {
- e.printStackTrace();
- throw new IllegalStateException(e);
- }
- }
-
- @Path("/test")
- public static class TestResource {
- @GET
- @Path("/1")
- public String test1() throws InterruptedException {
- requests.countDown();
- if (latch.await(100, TimeUnit.SECONDS)) {
- return "test1";
- } else {
- throw new IllegalStateException("Timeout");
- }
- }
- @GET
- @Path("/2")
- public String test2() {
- return "test2";
- }
- }
-
- @Override
- protected Application configure() {
- enable(TestProperties.LOG_TRAFFIC);
- enable(TestProperties.DUMP_ENTITY);
- return new ResourceConfig(TestResource.class);
- }
-
- @Override
- protected void configureClient(ClientConfig config) {
- config.connectorProvider(new JdkConnectorProvider());
- }
-
- @Override
- protected Optional<SSLContext> getSslContext() {
- return Optional.of(SSL_CONTEXT);
- }
-
- @Override
- protected Optional<SSLParameters> getSslParameters() {
- return Optional.of(SSL_CONTEXT.createSSLEngine("localhost", SSL_PORT).getSSLParameters());
- }
-
- @Override
- protected URI getBaseUri() {
- return UriBuilder.fromUri("https://localhost/").port(SSL_PORT).build();
- }
-
- @Test
- public void hangAllRequestsStatus200() throws InterruptedException, ExecutionException {
- assertEquals("https", getBaseUri().getScheme());
- for (int i = 0; i < ITERATIONS; i++) {
- requests = new CountDownLatch(N_REQUESTS);
- latch = new CountDownLatch(1);
- List<Future<Response>> responses = new ArrayList<>();
- for (int j = 0; j < N_REQUESTS; j++) {
- Future<Response> future = executor.submit(() -> target("/test/1").request().get());
- responses.add(future);
- }
- assertTrue(requests.await(100, TimeUnit.SECONDS));
- latch.countDown();
- for (Future<Response> response : responses) {
- assertEquals(200, response.get().getStatus());
- }
- }
- }
-
- @Test
- public void randomnessStatus200() throws InterruptedException, ExecutionException {
- assertEquals("https", getBaseUri().getScheme());
- for (int i = 0; i < ITERATIONS; i++) {
- List<Future<Response>> responses = new ArrayList<>();
- for (int j = 0; j < N_REQUESTS; j++) {
- Future<Response> future = executor.submit(() -> target("/test/2").request().get());
- responses.add(future);
- }
- for (Future<Response> response : responses) {
- assertEquals(200, response.get().getStatus());
- }
- }
- }
-
-}