[ 
https://issues.apache.org/jira/browse/ARTEMIS-5819?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18050665#comment-18050665
 ] 

ASF subversion and git services commented on ARTEMIS-5819:
----------------------------------------------------------

Commit b4ef65d8d96044f7ebafa4eb931b8af4b843a729 in artemis's branch 
refs/heads/main from Justin Bertram
[ https://gitbox.apache.org/repos/asf?p=artemis.git;h=b4ef65d8d9 ]

ARTEMIS-5819 remove HTTP idle connection stuff

I'm removing all the HTTP-specific idle connection functionality for 2
reasons:

 - the client-side keep-alive mechanism is completely broken
 - this duplicates the pinging functionality already in the Core
   protocol

When the client-side sends an HTTP request for keep-alive purposes, it
sends a GET. The broker only handles POST requests and therefore throws
a ClassCastException causing the connection to fail. This appears to
have been broken for a long time.

Furthermore, both the client-side and broker-side HTTP-specific
keep-alive code appears to be completely unnecessary. When
httpEnabled=true the Core client simply tunnels it's normal packets
through HTTP requests, including the normal ping packets to & from the
broker. There is no need to have another keep-alive mechanism assuming
the client configures their clientFailureCheckPeriod and connectionTTL
appropriately. I can only assume this code was added for a defunct
use-case.


> HttpIdleTimer sending GET rather than POST
> ------------------------------------------
>
>                 Key: ARTEMIS-5819
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-5819
>             Project: Artemis
>          Issue Type: Bug
>            Reporter: Justin Bertram
>            Assignee: Justin Bertram
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> The {{HttpIdleTimer}} is used on a Core client when the connection url 
> contains {{httpEnabled=true}}. It sends HTTP requests intermittently in order 
> to keep the connection alive. However, it sends {{GET}} requests rather than 
> {{POST}} requests which results in a {{WARN}} message like this on the broker:
> {noformat}
> WARN  [org.apache.activemq.artemis.core.client] AMQ212037: CORE connection 
> failure to 123.456.789.012:12345 has been detected: class 
> io.netty.handler.codec.http.HttpObjectAggregator$AggregatedFullHttpRequest 
> cannot be cast to class io.netty.buffer.ByteBuf 
> (io.netty.handler.codec.http.HttpObjectAggregator$AggregatedFullHttpRequest 
> and io.netty.buffer.ByteBuf are in unnamed module of loader 'app') 
> [code=GENERIC_EXCEPTION]
> [Thread-1] 16:15:18,058 {noformat}
> Instead of keeping the connection alive it causes the connection to be closed.
> This can be worked around by setting {{httpClientIdleScanPeriod=-1}} in the 
> client's connection URL. This stops the {{HttpIdleTimer}} from being executed 
> which is not a problem because the the Core client itself will still send 
> pings according to the 
> [{{clientFailureCheckPeriod}}|https://github.com/apache/artemis/blob/main/docs/user-manual/connection-ttl.adoc#detecting-failure-from-the-client]
>  value.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to