thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mario Emmenlauer (JIRA)" <>
Subject [jira] [Commented] (THRIFT-4252) Cannot shutdown Java server when clients are still connected
Date Sun, 13 Aug 2017 14:28:02 GMT


Mario Emmenlauer commented on THRIFT-4252:

I have the same problem also with the Java thread pool server, so it seems this is an expected
behavior of the Java servers. However, since this has been fixed for the C++ servers, I think
it would be sensible to also fix the issue for the Java servers.

With the current behavior, a malicious client can basically prohibit clean server shutdown
(and all it needs to do is keep the connection open). More realisticly, the client does not
need to be malicious, it could just hang or forget to disconnect and thereby "locking" the
server in an open API connection.

> Cannot shutdown Java server when clients are still connected
> ------------------------------------------------------------
>                 Key: THRIFT-4252
>                 URL:
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Library
>    Affects Versions: 0.10.0
>            Reporter: Mario Emmenlauer
> I found issue and I believe that the
same problem still exists in the Java servers, and I'm affected by it. Short summary: I can
not shut down the Java server (neither TSimpleServer nor TThreadedServer) while clients are
still connected. That is pretty bad, because essentially the clients are not under by control,
but they can essentially "block" server maintenance operations by blocking the shutdown.
> *In more detail:* I have a Java TSimpleServer runnable in a thread running. The main
thread eventually asks the server to stop(). But they seem to ignore the request. I checked
the code of and I'm under the impression that the innermost loop the server
does not poll the variable stopped_ or does it? Looking at
from line 76:
> {code}
>           while (true) {
>             if (eventHandler_ != null) {
>               eventHandler_.processContext(connectionContext, inputTransport, outputTransport);
>             }
>             if(!processor.process(inputProtocol, outputProtocol)) {
>               break;
>             }
>           }
> {code}
> I found that this loop is only interrupted if the client disconnects. I tried changing
{{while(true)}} for {{while(!stopped_)}} but that did not help. I guess that one of the methods
in the loop must be blocking.

This message was sent by Atlassian JIRA

View raw message