ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ilya Kasnacheev (JIRA)" <j...@apache.org>
Subject [jira] [Created] (IGNITE-7719) Avoid wrapping InterruptedException in CacheException or IgniteException
Date Thu, 15 Feb 2018 12:38:00 GMT
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)

Mime
View raw message