[ 
https://issues.apache.org/jira/browse/CXF-9059?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jamie Mark Goodyear updated CXF-9059:
-------------------------------------
    Description: 
HttpConduit should flush output stream ahead of closing connections when 
HttpClient is autocloseable.

When running WebClient in a load test (single host) we'll observe low 
throughput.

When we adjust the HttpConduit to flush output stream ahead of connection 
close, we observe significant throughput improvement. 

The key issue being addressed here is ephemeral port usage. Once all available 
ports are in use, the clients are unable to send more messages.
Controlling ephemeral port usage means the client can more often send messages 
to the server-side.

Given this appears to affect just autocloseable HttpClient, we select to flush 
the output stead only when the JVM provides the autocloseable HttpClient 
variety.
 

AbstractConduit:
finally {
    OutputStream os = msg.getContent(OutputStream.class);
    // Java 21 may hang on close, we flush stream to help close them out.
    if (os != null && AutoCloseable.class.isAssignableFrom(HttpClient.class))

{.          os.flush();     }

super.close(msg);
}
 

  was:
HttpConduit should flush output stream ahead of closing connections when 
HttpClient is autocloseable.

When running WebClient in a load test (single host) we'll observe low 
throughput.

When we adjust the HttpConduit to flush output stream ahead of connection 
close, we observe significant throughput improvement. 

Given this appears to affect just autocloseable HttpClient, we select to flush 
the output stead only when the JVM provides the autocloseable HttpClient 
variety.
 

AbstractConduit:
finally {
    OutputStream os = msg.getContent(OutputStream.class);
    // Java 21 may hang on close, we flush stream to help close them out.
    if (os != null && AutoCloseable.class.isAssignableFrom(HttpClient.class)) 
{. 
        os.flush();
    }
super.close(msg);
}
 


> HttpConduit should flush output stream ahead of closing connections when 
> HttpClient is autocloseable
> ----------------------------------------------------------------------------------------------------
>
>                 Key: CXF-9059
>                 URL: https://issues.apache.org/jira/browse/CXF-9059
>             Project: CXF
>          Issue Type: Improvement
>          Components: JAX-RS
>    Affects Versions: 4.1.0
>            Reporter: Jamie Mark Goodyear
>            Priority: Major
>             Fix For: 4.1.0
>
>
> HttpConduit should flush output stream ahead of closing connections when 
> HttpClient is autocloseable.
> When running WebClient in a load test (single host) we'll observe low 
> throughput.
> When we adjust the HttpConduit to flush output stream ahead of connection 
> close, we observe significant throughput improvement. 
> The key issue being addressed here is ephemeral port usage. Once all 
> available ports are in use, the clients are unable to send more messages.
> Controlling ephemeral port usage means the client can more often send 
> messages to the server-side.
> Given this appears to affect just autocloseable HttpClient, we select to 
> flush the output stead only when the JVM provides the autocloseable 
> HttpClient variety.
>  
> AbstractConduit:
> finally {
>     OutputStream os = msg.getContent(OutputStream.class);
>     // Java 21 may hang on close, we flush stream to help close them out.
>     if (os != null && AutoCloseable.class.isAssignableFrom(HttpClient.class))
> {.          os.flush();     }
> super.close(msg);
> }
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to