[
https://issues.apache.org/jira/browse/IGNITE-27286?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Konstantin Orlov updated IGNITE-27286:
--------------------------------------
Release Note: Fixed a rare issue when node runs into corrupted state and
become unable to process sql queries
> Sql. Query failed with Unable to compile expression
> ---------------------------------------------------
>
> Key: IGNITE-27286
> URL: https://issues.apache.org/jira/browse/IGNITE-27286
> Project: Ignite
> Issue Type: Bug
> Components: sql ai3
> Affects Versions: 3.1
> Reporter: Konstantin Orlov
> Assignee: Konstantin Orlov
> Priority: Major
> Labels: ignite-3
> Fix For: 3.2
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Query expression compilation heavily relies on {{contextClassLoader}} from
> thread this expression is compiled by. The problem is that
> {{java.lang.Thread#getContextClassLoader}} may return {{null}}. In this case
> query fails with following error:
> {code}
> Caused by: org.apache.ignite.internal.lang.IgniteInternalException:
> IGN-CMN-65535 Unable to compile expression TraceId:34ab9072
> at
> org.apache.ignite.internal.sql.engine.util.Commons.compile(Commons.java:408)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.PredicateImplementor.implementInternal(PredicateImplementor.java:118)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.PredicateImplementor.lambda$implement$0(PredicateImplementor.java:71)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2704)
> at
> java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2702)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2684)
> at
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:112)
> at
> com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:63)
> at
> org.apache.ignite.internal.sql.engine.util.cache.CaffeineCacheFactory$CaffeineCacheToCacheAdapter.get(CaffeineCacheFactory.java:133)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.PredicateImplementor.implement(PredicateImplementor.java:71)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl.predicate(ExpressionFactoryImpl.java:122)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:568)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:166)
> at
> org.apache.ignite.internal.sql.engine.rel.IgniteTableScan.accept(IgniteTableScan.java:186)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:1103)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:1161)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:240)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:166)
> at
> org.apache.ignite.internal.sql.engine.rel.IgniteSender.accept(IgniteSender.java:101)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:1103)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.go(LogicalRelImplementor.java:1244)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl$DistributedQueryManager.executeFragment(ExecutionServiceImpl.java:1140)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl$DistributedQueryManager.submitFragment(ExecutionServiceImpl.java:1227)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl.submitFragment(ExecutionServiceImpl.java:828)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl.onMessage(ExecutionServiceImpl.java:729)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl.lambda$start$2(ExecutionServiceImpl.java:339)
> at
> org.apache.ignite.internal.sql.engine.message.MessageServiceImpl.onMessageInternal(MessageServiceImpl.java:163)
> at
> org.apache.ignite.internal.sql.engine.message.MessageServiceImpl.lambda$onMessage$1(MessageServiceImpl.java:127)
> ... 4 more
> Caused by: org.codehaus.commons.compiler.InternalCompilerException: Cannot
> load simple types
> at org.codehaus.janino.IClassLoader.postConstruct(IClassLoader.java:189)
> at
> org.codehaus.janino.ClassLoaderIClassLoader.<init>(ClassLoaderIClassLoader.java:51)
> at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:263)
> at org.codehaus.janino.ClassBodyEvaluator.cook(ClassBodyEvaluator.java:303)
> at org.codehaus.janino.ClassBodyEvaluator.cook2(ClassBodyEvaluator.java:297)
> at org.codehaus.janino.ClassBodyEvaluator.cook(ClassBodyEvaluator.java:273)
> at org.codehaus.janino.ClassBodyEvaluator.cook(ClassBodyEvaluator.java:267)
> at org.codehaus.commons.compiler.Cookable.cook(Cookable.java:52)
> at
> org.codehaus.janino.ClassBodyEvaluator.createInstance(ClassBodyEvaluator.java:413)
> at
> org.apache.ignite.internal.sql.engine.util.Commons.compile(Commons.java:406)
> ... 32 more
> Caused by: java.lang.NullPointerException: Cannot invoke
> "java.lang.ClassLoader.loadClass(String)" because "this.classLoader" is null
> at
> org.codehaus.janino.ClassLoaderIClassLoader.findIClass(ClassLoaderIClassLoader.java:75)
> at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java:317)
> at org.codehaus.janino.IClassLoader.requireType(IClassLoader.java:198)
> at org.codehaus.janino.IClassLoader.postConstruct(IClassLoader.java:134)
> ... 41 more
> {code}
> What makes this problem even worse is that accidental nullification of
> {{contextClassLoader}} in fact invalidates the entire node because no new
> expressions will be able to compile.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)