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
