Thanks for letting me know.
It's worth adding this to the docs it doesn't currently include any warning or notice that TRANSACTIONAL_SNAPSHOT isn't ready for production in https://apacheignite-sql.readme.io/docs/multiversion-concurrency-control
Is there a set of outstanding tickets I can keep track of? Depending on time needed, we could potentially contribute to getting this released.

Regards,
Courtney Robinson
Founder and CEO, Hypi

https://hypi.io


On Wed, Apr 15, 2020 at 3:26 PM Evgenii Zhuravlev <e.zhuravlev.wk@gmail.com> wrote:
Hi Courtney,

MVCC is not production ready yet, so, I wouldn't recommend using TRANSACTIONAL_SNAPSHOT atomicity for now.

Best Regards,
Evgenii

ср, 15 апр. 2020 г. в 06:02, Courtney Robinson <courtney.robinson@hypi.io>:
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

https://hypi.io