Skip to content

Commit 148056a

Browse files
xjuskofl4via
authored andcommitted
[UNDERTOW-2249] Change that HttpClientConnection.sendRequest on a closed connection results in a ClosedChannelException instead of IOException
1 parent 47b6096 commit 148056a

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

core/src/main/java/io/undertow/client/UndertowClientMessages.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import java.io.IOException;
2727
import java.net.URI;
28+
import java.nio.channels.ClosedChannelException;
2829

2930
/**
3031
* starting from 1000
@@ -74,4 +75,7 @@ public interface UndertowClientMessages {
7475

7576
@Message(id = 1038, value = "Received invalid AJP chunk %s with response already complete")
7677
IOException receivedInvalidChunk(byte prefix);
78+
79+
@Message(id = 1039, value = "Closed connection state")
80+
ClosedChannelException closedConnectionState();
7781
}

core/src/main/java/io/undertow/client/ajp/AjpClientConnection.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,12 @@ public void addCloseListener(ChannelListener<ClientConnection> listener) {
233233

234234
@Override
235235
public void sendRequest(final ClientRequest request, final ClientCallback<ClientExchange> clientCallback) {
236-
if (anyAreSet(state, UPGRADE_REQUESTED | UPGRADED | CLOSE_REQ | CLOSED)) {
236+
if (anyAreSet(state, UPGRADE_REQUESTED | UPGRADED)) {
237237
clientCallback.failed(UndertowClientMessages.MESSAGES.invalidConnectionState());
238238
return;
239+
} else if (anyAreSet(state, CLOSE_REQ | CLOSED)) {
240+
clientCallback.failed(UndertowClientMessages.MESSAGES.closedConnectionState());
241+
return;
239242
}
240243
final AjpClientExchange AjpClientExchange = new AjpClientExchange(clientCallback, request, this);
241244
if (currentRequest == null) {

core/src/main/java/io/undertow/client/http/HttpClientConnection.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,9 +348,12 @@ public void sendRequest(final ClientRequest request, final ClientCallback<Client
348348
http2Delegate.sendRequest(request, clientCallback);
349349
return;
350350
}
351-
if (anyAreSet(state, UPGRADE_REQUESTED | UPGRADED | CLOSE_REQ | CLOSED)) {
351+
if (anyAreSet(state, UPGRADE_REQUESTED | UPGRADED)) {
352352
clientCallback.failed(UndertowClientMessages.MESSAGES.invalidConnectionState());
353353
return;
354+
} else if (anyAreSet(state, CLOSE_REQ | CLOSED)) {
355+
clientCallback.failed(UndertowClientMessages.MESSAGES.closedConnectionState());
356+
return;
354357
}
355358
final HttpClientExchange httpClientExchange = new HttpClientExchange(clientCallback, request, this);
356359
boolean ssl = this.connection instanceof SslConnection;

core/src/test/java/io/undertow/client/http/HttpClientTestCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import java.net.URI;
6161
import java.net.URISyntaxException;
6262
import java.nio.ByteBuffer;
63+
import java.nio.channels.ClosedChannelException;
6364
import java.util.List;
6465
import java.util.concurrent.CopyOnWriteArrayList;
6566
import java.util.concurrent.CountDownLatch;
@@ -360,8 +361,7 @@ public void testSslServerIdentity() throws Exception {
360361
latch.await(10, TimeUnit.SECONDS);
361362

362363
Assert.assertEquals(0, responses.size());
363-
// see UNDERTOW-2249: assert exception instanceof ClosedChannelException
364-
Assert.assertNotNull(exception);
364+
Assert.assertTrue(exception instanceof ClosedChannelException);
365365
} finally {
366366
connection.getIoThread().execute(() -> IoUtils.safeClose(connection));
367367
DefaultServer.stopSSLServer();

0 commit comments

Comments
 (0)