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

Qinghui Xu commented on THRIFT-4124:
------------------------------------

In this particular case, it is tricky to fix it:
 * When an OOM happens, it usually means the application does not have enough 
memory to carry the work, in most cases it's better to just restart the 
application with more memory
 * OOM, more generally exceptions that are not raised by thrift itself, should 
not be handled by the framework.  Because when recovering or handling the 
error, usually you need to deal with the state of the application, and to do 
some clean up, which is out of the knowledge of thrift framework. (That's why 
it's better to have a `Future` when submitting async calls so that users can 
deal with the outcome of the call)
 * In your specific case, Thrift client should probably never try to connect to 
a random untrusted server in the wild (this opens a way to be hacked), IMHO 
it's not the way how people use thrift client.

> Connection to non-thrift server crashes android app
> ---------------------------------------------------
>
>                 Key: THRIFT-4124
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4124
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Library
>    Affects Versions: 0.10.0
>         Environment: Android Studio
>            Reporter: Alexey Andronov
>            Priority: Major
>              Labels: async
>
> I connect to server like this:
> {code}m_client = new DispatchBackend.AsyncClient(
>     new TBinaryProtocol.Factory(),
>     new TAsyncClientManager(),
>     new TNonblockingSocket("google.com", 80)
> );{code}
> Then I execute request:
> {code}
> try {
>     m_client.request();
> } catch (TException e) {
>     // never reaches here
> }{code}
> And my app crashes with OOM error.
> The problem is that I can't catch exception from thrift library inside my 
> application i.e.
> inner library exception always crashes my app which is very sad.
> P.S. I tried to catch Throwable instead of TException and it didn't help
> Stacktrace:
> {code}E/art: Throwing OutOfMemoryError "Failed to allocate a 1213486172 byte 
> allocation with 3514240 free bytes and 122MB until OOM"
> E/AndroidRuntime: FATAL EXCEPTION: TAsyncClientManager#SelectorThread 9112
>    Process: com.myapp, PID: 20608
>    java.lang.OutOfMemoryError: Failed to allocate a 1213486172 byte 
> allocation with 3514240 free bytes and 122MB until OOM
>          at java.nio.ByteBuffer.allocate(ByteBuffer.java:56)
>          at 
> org.apache.thrift.async.TAsyncMethodCall.doReadingResponseSize(TAsyncMethodCall.java:250)
>          at 
> org.apache.thrift.async.TAsyncMethodCall.transition(TAsyncMethodCall.java:198)
>          at 
> org.apache.thrift.async.TAsyncClientManager$SelectThread.transitionMethods(TAsyncClientManager.java:143)
>          at 
> org.apache.thrift.async.TAsyncClientManager$SelectThread.run(TAsyncClientManager.java:113){code}



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

Reply via email to