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)

Reply via email to