Skip to content

Global UDF not woking in async materialized view #76240

Description

@Dasik

Steps to reproduce the behavior (Required)

CREATE TABLE example_table
(
    col1 VARCHAR(10)
)
ENGINE = olap
DUBLICATE KEY(col1 )
DISTRIBUTED BY HASH(col1);
CREATE OR REPLACE GLOBAL FUNCTION test_func(a STRING)
    RETURNS
      a;
CREATE MATERIALIZED VIEW IF NOT EXISTS udf_bug_test
REFRESH async AS
select test_func(item) from example_table;

Expected behavior (Required)

Materialized view is created and can be used for rewrite query

Real behavior (Required)

select QUERY_REWRITE_STATUS from information_schema.materialized_views WHERE table_name = 'udf_bug_test'
UNKNOWN: MV plan is not in cache, valid check is unknown

And error is logged:

2026-07-12 22:53:04.640+03:00 WARN (mv-plan-cache-4|105) [MvPlanContextBuilder.doGetOptimizePlan():67] Failed to build mv plan context
 com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException: Cannot invoke "com.starrocks.catalog.UserIdentity.isEphemeral()" because "userIdentity" is null
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2085)
	at com.google.common.cache.LocalCache.get(LocalCache.java:4011)
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4034)
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5010)
	at com.starrocks.authorization.AuthorizationMgr.mergePrivilegeCollection(AuthorizationMgr.java:1005)
	at com.starrocks.authorization.NativeAccessController.checkFunctionAction(NativeAccessController.java:295)
	at com.starrocks.authorization.NativeAccessController.checkGlobalFunctionAction(NativeAccessController.java:173)
	at com.starrocks.sql.analyzer.Authorizer.checkGlobalFunctionAction(Authorizer.java:277)
	at com.starrocks.sql.analyzer.AnalyzerUtils.getGlobalUdfFunction(AnalyzerUtils.java:260)
	at com.starrocks.sql.analyzer.AnalyzerUtils.getUdfFunction(AnalyzerUtils.java:275)
	at com.starrocks.sql.analyzer.FunctionAnalyzer.getAnalyzedFunctionImpl(FunctionAnalyzer.java:889)
	at com.starrocks.sql.analyzer.FunctionAnalyzer.getAnalyzedFunction(FunctionAnalyzer.java:778)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:1115)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:443)
	at com.starrocks.sql.ast.expression.FunctionCallExpr.accept(FunctionCallExpr.java:363)
	at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:94)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer.bottomUpAnalyze(ExpressionAnalyzer.java:439)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer.analyze(ExpressionAnalyzer.java:155)
	at com.starrocks.sql.analyzer.ExpressionAnalyzer.analyzeExpression(ExpressionAnalyzer.java:2192)
	at com.starrocks.sql.analyzer.SelectAnalyzer.analyzeExpression(SelectAnalyzer.java:875)
	at com.starrocks.sql.analyzer.SelectAnalyzer.analyzeSelect(SelectAnalyzer.java:303)
	at com.starrocks.sql.analyzer.SelectAnalyzer.analyze(SelectAnalyzer.java:90)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitSelect(QueryAnalyzer.java:520)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitSelect(QueryAnalyzer.java:334)
	at com.starrocks.sql.ast.SelectRelation.accept(SelectRelation.java:234)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.process(QueryAnalyzer.java:342)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitQueryRelation(QueryAnalyzer.java:357)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitQueryStatement(QueryAnalyzer.java:347)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.visitQueryStatement(QueryAnalyzer.java:334)
	at com.starrocks.sql.ast.QueryStatement.accept(QueryStatement.java:71)
	at com.starrocks.sql.analyzer.QueryAnalyzer$Visitor.process(QueryAnalyzer.java:342)
	at com.starrocks.sql.analyzer.QueryAnalyzer.analyze(QueryAnalyzer.java:144)
	at com.starrocks.sql.analyzer.Analyzer$AnalyzerVisitor.visitQueryStatement(Analyzer.java:498)
	at com.starrocks.sql.analyzer.Analyzer$AnalyzerVisitor.visitQueryStatement(Analyzer.java:201)
	at com.starrocks.sql.ast.QueryStatement.accept(QueryStatement.java:71)
	at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:94)
	at com.starrocks.sql.analyzer.Analyzer.analyze(Analyzer.java:198)
	at com.starrocks.sql.optimizer.rule.transformation.materialization.MvUtils.getRuleOptimizedLogicalPlan(MvUtils.java:538)
	at com.starrocks.sql.optimizer.MaterializedViewOptimizer.optimizeImpl(MaterializedViewOptimizer.java:120)
	at com.starrocks.sql.optimizer.MaterializedViewOptimizer.optimize(MaterializedViewOptimizer.java:42)
	at com.starrocks.sql.optimizer.MaterializedViewOptimizer.optimize(MaterializedViewOptimizer.java:33)
	at com.starrocks.sql.optimizer.MvPlanContextBuilder.lambda$getPlanContext$0(MvPlanContextBuilder.java:49)
	at com.starrocks.sql.optimizer.MvPlanContextBuilder.doGetOptimizePlan(MvPlanContextBuilder.java:64)
	at com.starrocks.sql.optimizer.MvPlanContextBuilder.getPlanContext(MvPlanContextBuilder.java:49)
	at com.starrocks.sql.optimizer.CachingMvPlanContextBuilder.loadMvPlanContext(CachingMvPlanContextBuilder.java:227)
	at com.starrocks.sql.optimizer.CachingMvPlanContextBuilder$1.lambda$asyncLoad$0(CachingMvPlanContextBuilder.java:79)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NullPointerException: Cannot invoke "com.starrocks.catalog.UserIdentity.isEphemeral()" because "userIdentity" is null
	at com.starrocks.authorization.AuthorizationMgr.loadPrivilegeCollection(AuthorizationMgr.java:1028)
	at com.starrocks.authorization.AuthorizationMgr$1.load(AuthorizationMgr.java:104)
	at com.starrocks.authorization.AuthorizationMgr$1.load(AuthorizationMgr.java:99)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3570)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2312)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2189)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2079)
	... 49 more

StarRocks version (Required)

  • 4.1.1-14b7e3f

Metadata

Metadata

Assignees

No one assigned

    Labels

    type/bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions