Ilya Kasnacheev created IGNITE-7719:
---------------------------------------

             Summary: Avoid wrapping InterruptedException in CacheException or 
IgniteException
                 Key: IGNITE-7719
                 URL: https://issues.apache.org/jira/browse/IGNITE-7719
             Project: Ignite
          Issue Type: Task
    Affects Versions: 2.5
            Reporter: Ilya Kasnacheev


It is a pity to see stack traces like this:
{code:java}
javax.cache.CacheException: Failed to run reduce query locally.
    at 
org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.query(GridReduceQueryExecutor.java:839)
 ~[ignite-indexing-2.1.10.jar:2.1.10]
    ...
Caused by: org.apache.ignite.internal.IgniteInterruptedCheckedException
    at org.apache.ignite.internal.util.IgniteUtils.await(IgniteUtils.java:7463) 
~[ignite-core-2.1.10.jar:2.1.10]
    ... 7 more
Caused by: java.lang.InterruptedException
    at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326)
 ~[?:1.8.0_92]
    ... 7 more{code}

Here we leave almost zero chance to end-user of the code to properly handle 
InterruptedException, short of digging into CacheException's causes.

When people use this code in while (true) try{}catch(){log} loop they will get 
horrible problems here when interruption happens, as in clobbering their whole 
log with exceptions. This isn't acceptable.

What should be done:

- Make sure we never wrap random IgniteCheckedException into IgniteException or 
CacheException (because it might be IgniteInterruptedCheckedException). Use 
some method that does proper checking on exception type, throwing something 
appropriate.
IMO it's much better to throw unexpected IgniteInterruptedException than a 
generic one.
- If needed, declare on all affected methods that they may throw 
IgniteInterruptedException.
- Have a check in CacheException's constructor to re-throw 
IgniteInterruptedException if it is passed as an argument. Ditto for 
IgniteException. They should never be wrapped.




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to