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

Xiangdong Huang updated THRIFT-5175:
------------------------------------
    Description: 
Hi, 

I notice THRIFT-1795 https://issues.apache.org/jira/browse/THRIFT-1795 solves a 
problem of the race condition in TThreadedServerPool.

 

However , now when I use Thrift v0.13.0, I occur the same problem..

 

Some codes:

The poolServer is TThreadPoolServer.

The serverTransport is TServerSocket.

I have a thread to run poolServer.serve().

And, another thread will call the following close() method to close the thrift.

 
{code:java}
// code placeholder
private synchronized void close() {
  if (poolServer != null) {
    poolServer.stop();
    poolServer = null;
  }
  if (serverTransport != null) {
    serverTransport.close();
    serverTransport = null;
  }
}
{code}
 

 

 

Then, after calling the above close() method, the console will print:

 
{code:java}
// code placeholder

WARN  [2020-04-16 02:14:46,097] [RPC-ServerServiceImpl] 
org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
during acceptance of message. 
org.apache.thrift.transport.TTransportException: No underlying server socket. 
at org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126) 
at org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35) 
at 
org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60) 
at 
org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185) 
at org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175) 
at 
org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)

WARN  [2020-04-16 02:14:46,103] [RPC-ServerServiceImpl] 
org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
during acceptance of message. 
org.apache.thrift.transport.TTransportException: No underlying server socket. 
at org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126) 
at org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35) 
at 
org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60) 
at 
org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185) 
at org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175) 
at 
org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)

WARN  [2020-04-16 02:14:46,105] [RPC-ServerServiceImpl] 
org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
during acceptance of message. 
org.apache.thrift.transport.TTransportException: No underlying server socket. 
at org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126) 
at org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35) 
at 
org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60) 
at 
org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185) 
at org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175) 
at 
org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)
{code}
This exception repeats infinitely.

 

 

The issues is hard to be reproduced on my MacOS, but can be reproduced on 
Travis-CI, in some environments (Linux-openjdk11, linux-openjdk8, 
win-openjdk11):

!image-2020-04-16-10-36-00-871.png|width=1178,height=413!

I attached a log file here (but maybe it can not give you more info).

 

I read the source code and feel that it is very strange. Thrift has marked the 
stopped_ field as volatile, I do not know why the execute() method of 
TThreadPoolServer does not break out the loop.

 

 

 

  was:
Hi, 

I notice THRIFT-1795 https://issues.apache.org/jira/browse/THRIFT-1795 solves a 
problem of the race condition in TThreadedServerPool.

 

However , now when I use Thrift v0.13.0, I occur the same problem..

 

Some codes:

The poolServer is TThreadPoolServer.

The serverTransport is TServerSocket.

I have a thread to run poolServer.serve().

And, another thread will call the following close() method to close the thrift.

 
{code:java}
// code placeholder
private synchronized void close() {
  if (poolServer != null) {
    poolServer.stop();
    poolServer = null;
  }
  if (serverTransport != null) {
    serverTransport.close();
    serverTransport = null;
  }
}
{code}
 

 

 

Then, after calling the above close() method, the console will print:

 
{code:java}
// code placeholder
ARN  [2020-04-16 02:14:46,077] [RPC-ServerServiceImpl] 
org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
during acceptance of message. 
1593org.apache.thrift.transport.TTransportException: No underlying server 
socket.1594    at 
org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126)1595
     at 
org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35)1596 
     at 
org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60)1597
    at 
org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185)1598
   at 
org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175)1599
     at 
org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)1600WARN
  [2020-04-16 02:14:46,088] [RPC-ServerServiceImpl] 
org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
during acceptance of message. 
1601org.apache.thrift.transport.TTransportException: No underlying server 
socket.1602    at 
org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126)1603
     at 
org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35)1604 
     at 
org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60)1605
    at 
org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185)1606
   at 
org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175)1607
     at 
org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)
{code}
This exception repeats infinitely.

 

 

The issues is hard to be reproduced on my MacOS, but can be reproduced on 
Travis-CI, in some environments (Linux-openjdk11, linux-openjdk8, 
win-openjdk11):

!image-2020-04-16-10-36-00-871.png|width=1178,height=413!

I attached a log file here (but maybe it can not give you more info).

 

I read the source code and feel that it is very strange. Thrift has marked the 
stopped_ field as volatile, I do not know why the execute() method of 
TThreadPoolServer does not break out the loop.

 

 

 


> Maybe a race condition in TThreadedServerPool java implementation
> -----------------------------------------------------------------
>
>                 Key: THRIFT-5175
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5175
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Library
>    Affects Versions: 0.13.0
>            Reporter: Xiangdong Huang
>            Priority: Major
>         Attachments: image-2020-04-16-10-36-00-871.png, log.log
>
>
> Hi, 
> I notice THRIFT-1795 https://issues.apache.org/jira/browse/THRIFT-1795 solves 
> a problem of the race condition in TThreadedServerPool.
>  
> However , now when I use Thrift v0.13.0, I occur the same problem..
>  
> Some codes:
> The poolServer is TThreadPoolServer.
> The serverTransport is TServerSocket.
> I have a thread to run poolServer.serve().
> And, another thread will call the following close() method to close the 
> thrift.
>  
> {code:java}
> // code placeholder
> private synchronized void close() {
>   if (poolServer != null) {
>     poolServer.stop();
>     poolServer = null;
>   }
>   if (serverTransport != null) {
>     serverTransport.close();
>     serverTransport = null;
>   }
> }
> {code}
>  
>  
>  
> Then, after calling the above close() method, the console will print:
>  
> {code:java}
> // code placeholder
> WARN  [2020-04-16 02:14:46,097] [RPC-ServerServiceImpl] 
> org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
> during acceptance of message. 
> org.apache.thrift.transport.TTransportException: No underlying server socket. 
> at 
> org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126) 
> at 
> org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35) 
> at 
> org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60) 
> at 
> org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185)
>  
> at 
> org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175) 
> at 
> org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)
> WARN  [2020-04-16 02:14:46,103] [RPC-ServerServiceImpl] 
> org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
> during acceptance of message. 
> org.apache.thrift.transport.TTransportException: No underlying server socket. 
> at 
> org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126) 
> at 
> org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35) 
> at 
> org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60) 
> at 
> org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185)
>  
> at 
> org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175) 
> at 
> org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)
> WARN  [2020-04-16 02:14:46,105] [RPC-ServerServiceImpl] 
> org.apache.thrift.server.TThreadPoolServer:230 - Transport error occurred 
> during acceptance of message. 
> org.apache.thrift.transport.TTransportException: No underlying server socket. 
> at 
> org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:126) 
> at 
> org.apache.thrift.transport.TServerSocket.acceptImpl(TServerSocket.java:35) 
> at 
> org.apache.thrift.transport.TServerTransport.accept(TServerTransport.java:60) 
> at 
> org.apache.thrift.server.TThreadPoolServer.execute(TThreadPoolServer.java:185)
>  
> at 
> org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:175) 
> at 
> org.apache.iotdb.db.service.RPCService$RPCServiceThread.run(RPCService.java:219)
> {code}
> This exception repeats infinitely.
>  
>  
> The issues is hard to be reproduced on my MacOS, but can be reproduced on 
> Travis-CI, in some environments (Linux-openjdk11, linux-openjdk8, 
> win-openjdk11):
> !image-2020-04-16-10-36-00-871.png|width=1178,height=413!
> I attached a log file here (but maybe it can not give you more info).
>  
> I read the source code and feel that it is very strange. Thrift has marked 
> the stopped_ field as volatile, I do not know why the execute() method of 
> TThreadPoolServer does not break out the loop.
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to