Konstantin Orlov created IGNITE-27286:
-----------------------------------------
Summary: 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
Reporter: Konstantin Orlov
Assignee: Konstantin Orlov
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)