Give better error messages for network issues

Issue #605 wontfix
Adam Winer created an issue

User saw this as an error trace when doing “fetch Location”. We should give users a clear message that they’re having a network problem.

org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool

java.util.concurrent.ExecutionException: org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool

at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:526)

at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:487)

at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:83)

at .ui.actions.locationapi.combined.CombinedReverseGeocoder$4.apply(CombinedReverseGeocoder.java:112)

at .ui.actions.locationapi.combined.CombinedReverseGeocoder$4.apply(CombinedReverseGeocoder.java:106)

at com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:210)

at com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:199)

at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:111)

at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:398)

at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1024)

at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:866)

at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:689)

at com.google.common.util.concurrent.CollectionFuture$CollectionFutureRunningState.handleAllCompleted(CollectionFuture.java:71)

at com.google.common.util.concurrent.AggregateFuture$RunningState.processCompleted(AggregateFuture.java:257)

at com.google.common.util.concurrent.AggregateFuture$RunningState.decrementCountAndMaybeComplete(AggregateFuture.java:244)

at com.google.common.util.concurrent.AggregateFuture$RunningState.run(AggregateFuture.java:110)

at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:398)

at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1024)

at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:866)

at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:711)

at com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:93)

at com.google.common.util.concurrent.MoreExecutors$5$1.run(MoreExecutors.java:992)

at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)

at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)

at java.base/java.lang.Thread.run(Thread.java:833)

Caused by: org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool

at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:316)

at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:282)

at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190)

at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)

at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)

at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)

at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)

at .ui.actions.locationapi.google.GoogleGeocoder$3.call(GoogleGeocoder.java:250)

at .ui.actions.locationapi.google.GoogleGeocoder$3.call(GoogleGeocoder.java:243)

at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)

at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)

at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)

... 6 more

Comments (2)

  1. Adam Winer reporter

    Huh. can’t reproduce, or see how this would happen. The reverse geocoder is only used in one spot, the future that it produces has restricted error handling which shouldn’t ever result in an uncaught error.

  2. Log in to comment