[ 
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)

Reply via email to