[infinispan-dev] Single Port Client

Radim Vansa rvansa at redhat.com
Tue Dec 11 05:13:06 EST 2018


I dislike having any logic based on the port number in some range; it's 
not common that behaviour would change if you set port to 9xxx instead 
of 8xxx.

Is there an (up-to-date) design doc?

I don't fully follow, but if there's a problem in the HTTP handlers you 
can add a PING-detecting handler below...?

Radim

On 12/10/2018 03:27 PM, Sebastian Laskawiec wrote:
> Hey guys,
>
> During Infinispan F2F, I had a short discussion with Tristan on Single 
> Port client-side implementation. Back then, we agreed that the client 
> should always send a Hotrod Ping request and if won't get any response 
> (or get some HTTP content back), it will try to upgrade to the Hotrod 
> protocol using Single Port.
>
> I've been playing with the implementation for a while, and 
> implementing it this way seems a bit "inconvenient" to me. The Ping 
> Operation uses 60s timeout, which seems to be a good fit as a default. 
> Unfortunately, for the Single Port functionality, this means we'd need 
> to wait 60s until we try to send HTTP request and do an upgrade. Also, 
> another problematic part is in Netty's HTTP handlers 
> (HttpObjectDecoder, HttpServerCodec and ByteToMessageDecoder). When 
> those classes fail to decode a message (REST expects HTTP rather than 
> a stream of bytes specific to Hotrod protocol), they just ignore it 
> and keep the channel in active state (which also makes sense for 
> HTTP/1.1 and HTTP/2).
>
> At this point, my intuition tells, that this doesn't look right and 
> seems to be a over-complicated. The whole HTTP upgrade idea seems to 
> work the other way around, use HTTP as a fallback and then upgrade to 
> other protocols. Forcing it to work a bit differently requires some 
> more effort.
>
> What if we preserved the Single Port setting in the client 
> configuration but implemented it as an enum with the following values 
> - true/false/auto. In automatic mode, the client would check if the 
> server port is set to 8\d{1,3} (this covers 80, 8080, 8081, 8443 and 
> friends). If that is true, we'd try to follow HTTP Upgrade procedure. 
> This looks very simple and I think this might actually work. Please 
> note, that we need the single port setting in the client configuration 
> to cover some corner cases like the Single Port exposed on different 
> port (like 4444) or Hot Rod exposed on port that starts with 8.
>
> What do you think about such simplification?
>
> Thanks,
> Sebastian
>
>
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev


-- 
Radim Vansa <rvansa at redhat.com>
JBoss Performance Team



More information about the infinispan-dev mailing list