We're upgrading to Ignite 2.8 and are starting to use SQL tables. In all
previous work we've used the key value APIs directly.

After getting everything working, we're regularly seeing "transaction
already completed" errors when executing SELECT queries. A stack trace is
included at the end.
All tables are created with
"template=partitioned,backups=2,data_region=hypi,affinity_key=instanceId,atomicity=TRANSACTIONAL_SNAPSHOT"

I found https://issues.apache.org/jira/browse/IGNITE-10763 which suggested
the problem was fixed in 2.8 and "is caused by leaked tx stored in
ThreadLocal".

Has anyone else encountered this issue and is there a fix?
Just to be clear, we're definitely not performing any insert/update/merge
operations, only selects when this error occurs.

>From that issue I linked to, assuming the problem is still a leaked
ThreadLocal is there any workaround for this?
We have a managed thread pool (you can see Pool.java in the trace), I've
tried not to use it but still get the error because I guess it's now just
defaulting to Spring Boot's request thread pool.


2020-04-13 19:56:31.548 INFO 9 --- [io-10000-exec-2] io.hypi.arc.os.gql.
> HypiGraphQLException : GraphQL error, path: null, source: null, msg: null
> javax.cache.CacheException: Transaction is already completed. at org.
> apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(
> IgniteCacheProxyImpl.java:820) at org.apache.ignite.internal.processors.
> cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:753) at org.
> apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(
> GatewayProtectedCacheProxy.java:424) at io.hypi.arc.os.ignite.IgniteRepo.
> findInstanceCtx(IgniteRepo.java:134) at io.hypi.arc.os.handlers.
> BaseHandler.evaluateQuery(BaseHandler.java:38) at io.hypi.arc.os.handlers.
> HttpHandler.lambda$runQuery$0(HttpHandler.java:145) at io.hypi.arc.base.
> Pool.apply(Pool.java:109) at io.hypi.arc.base.Pool.lambda$async$3(Pool.
> java:93) at com.google.common.util.concurrent.TrustedListenableFutureTask$
> TrustedFutureInterruptibleTask.runInterruptibly(
> TrustedListenableFutureTask.java:125) at com.google.common.util.concurrent
> .InterruptibleTask.run(InterruptibleTask.java:69) at com.google.common.
> util.concurrent.TrustedListenableFutureTask.run(
> TrustedListenableFutureTask.java:78) at java.base/java.util.concurrent.
> Executors$RunnableAdapter.call(Executors.java:515) 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:1128) at java.base/
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java
> :628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: org.
> apache.ignite.transactions.TransactionAlreadyCompletedException:
> Transaction is already completed. at org.apache.ignite.internal.util.
> IgniteUtils$18.apply(IgniteUtils.java:991) at org.apache.ignite.internal.
> util.IgniteUtils$18.apply(IgniteUtils.java:989) at org.apache.ignite.
> internal.util.IgniteUtils.convertException(IgniteUtils.java:1062) at org.
> apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSelect(
> IgniteH2Indexing.java:1292) at org.apache.ignite.internal.processors.query
> .h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1117) at org.
> apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(
> GridQueryProcessor.java:2406) at org.apache.ignite.internal.processors.
> query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2402) at org.
> apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX
> .java:36) at org.apache.ignite.internal.processors.query.
> GridQueryProcessor.executeQuery(GridQueryProcessor.java:2919) at org.
> apache.ignite.internal.processors.query.GridQueryProcessor.
> lambda$querySqlFields$1(GridQueryProcessor.java:2422) at org.apache.ignite
> .internal.processors.query.GridQueryProcessor.executeQuerySafe(
> GridQueryProcessor.java:2460) at org.apache.ignite.internal.processors.
> query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2396) at
> org.apache.ignite.internal.processors.query.GridQueryProcessor.
> querySqlFields(GridQueryProcessor.java:2323) at org.apache.ignite.internal
> .processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:805
> ) ... 16 common frames omitted Caused by: org.apache.ignite.internal.
> transactions.IgniteTxAlreadyCompletedCheckedException: Transaction is
> already completed. at org.apache.ignite.internal.processors.cache.mvcc.
> MvccUtils.checkActive(MvccUtils.java:684) at org.apache.ignite.internal.
> processors.query.h2.IgniteH2Indexing.executeSelect(IgniteH2Indexing.java:
> 1255) ... 26 common frames omitted
>
Regards,
Courtney Robinson
Founder and CEO, Hypi
Tel: ++44 208 123 2413 (GMT+0) <https://hypi.io>

<https://hypi.io>
https://hypi.io

Reply via email to