Skip to content

Conversation

LiShuMing
Copy link
Contributor

@LiShuMing LiShuMing commented Sep 28, 2025

Why I'm doing:

Fix mv rewrite with possible exceptions:

520ms|    [MV TRACE] [REWRITE TF_MV_AGGREGATE_JOIN_PUSH_DOWN_RULE] [InMemo:true] mv rewrite exception, exception message:java.lang.IllegalStateException
"	at com.google.common.base.Preconditions.checkState(Preconditions.java:496)"
"	at com.starrocks.sql.optimizer.OptExpression.getOutputColumns(OptExpression.java:147)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.MaterializedViewRewriter.getUnionRewriteQueryCompensation(MaterializedViewRewriter.java:1753)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.MaterializedViewRewriter.doUnionRewrite(MaterializedViewRewriter.java:1818)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.MaterializedViewRewriter.tryUnionRewrite(MaterializedViewRewriter.java:1812)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.MaterializedViewRewriter.tryRewriteForRelationMapping(MaterializedViewRewriter.java:1324)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.MaterializedViewRewriter.rewriteComplete(MaterializedViewRewriter.java:758)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.MaterializedViewRewriter.doRewrite(MaterializedViewRewriter.java:536)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.common.AggregatePushDownUtils.doRewritePushDownAgg(AggregatePushDownUtils.java:86)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter$PostVisitor.visitLogicalTableScan(AggregatedMaterializedViewPushDownRewriter.java:473)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter$PostVisitor.visitLogicalTableScan(AggregatedMaterializedViewPushDownRewriter.java:247)"
"	at com.starrocks.sql.optimizer.operator.logical.LogicalScanOperator.accept(LogicalScanOperator.java:222)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.processPost(AggregatedMaterializedViewPushDownRewriter.java:597)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.lambda$process$0(AggregatedMaterializedViewPushDownRewriter.java:608)"
"	at java.base/java.util.Optional.map(Optional.java:265)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.process(AggregatedMaterializedViewPushDownRewriter.java:608)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter$PostVisitor.visitLogicalJoin(AggregatedMaterializedViewPushDownRewriter.java:297)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter$PostVisitor.visitLogicalJoin(AggregatedMaterializedViewPushDownRewriter.java:247)"
"	at com.starrocks.sql.optimizer.operator.logical.LogicalJoinOperator.accept(LogicalJoinOperator.java:227)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.processPost(AggregatedMaterializedViewPushDownRewriter.java:597)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.lambda$process$0(AggregatedMaterializedViewPushDownRewriter.java:608)"
"	at java.base/java.util.Optional.map(Optional.java:265)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.process(AggregatedMaterializedViewPushDownRewriter.java:608)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.processChildren(AggregatedMaterializedViewPushDownRewriter.java:579)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.lambda$process$0(AggregatedMaterializedViewPushDownRewriter.java:608)"
"	at java.base/java.util.Optional.map(Optional.java:265)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.process(AggregatedMaterializedViewPushDownRewriter.java:608)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.AggregatedMaterializedViewPushDownRewriter.doRewrite(AggregatedMaterializedViewPushDownRewriter.java:80)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.rule.BaseMaterializedViewRewriteRule.doTransform(BaseMaterializedViewRewriteRule.java:211)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.rule.BaseMaterializedViewRewriteRule.doTransform(BaseMaterializedViewRewriteRule.java:162)"
"	at com.starrocks.sql.optimizer.rule.transformation.materialization.rule.BaseMaterializedViewRewriteRule.transform(BaseMaterializedViewRewriteRule.java:100)"
"	at com.starrocks.sql.optimizer.task.ApplyRuleTask.execute(ApplyRuleTask.java:95)"
"	at com.starrocks.sql.optimizer.task.SeriallyTaskScheduler.executeTasks(SeriallyTaskScheduler.java:65)"
"	at com.starrocks.sql.optimizer.Optimizer.memoOptimize(Optimizer.java:955)"
"	at com.starrocks.sql.optimizer.Optimizer.optimizeByCost(Optimizer.java:290)"
"	at com.starrocks.sql.optimizer.Optimizer.optimize(Optimizer.java:214)"
"	at com.starrocks.sql.StatementPlanner.createQueryPlan(StatementPlanner.java:300)"
"	at com.starrocks.sql.StatementPlanner.plan(StatementPlanner.java:143)"
"	at com.starrocks.sql.StatementPlanner.plan(StatementPlanner.java:104)"
"	at com.starrocks.qe.StmtExecutor.execute(StmtExecutor.java:606)"
"	at com.starrocks.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:392)"
"	at com.starrocks.qe.ConnectProcessor.dispatch(ConnectProcessor.java:592)"
"	at com.starrocks.qe.ConnectProcessor.processOnce(ConnectProcessor.java:930)"
"	at com.starrocks.mysql.nio.ReadListener.lambda$handleEvent$0(ReadListener.java:71)"
"	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)"
"	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)"
"	at java.base/java.lang.Thread.run(Thread.java:829)"

What I'm doing:

  • ensure optExpression has derived logical property, otherwise OptExpression.getOutputColumns will fail
        MvUtils.deriveLogicalProperty(optExpression);

Fixes #issue

What type of PR is this:

  • BugFix
  • Feature
  • Enhancement
  • Refactor
  • UT
  • Doc
  • Tool

Does this PR entail a change in behavior?

  • Yes, this PR will result in a change in behavior.
  • No, this PR will not result in a change in behavior.

If yes, please specify the type of change:

  • Interface/UI changes: syntax, type conversion, expression evaluation, display information
  • Parameter changes: default values, similar parameters but with different default values
  • Policy changes: use new policy to replace old one, functionality automatically enabled
  • Feature removed
  • Miscellaneous: upgrade & downgrade compatibility, etc.

Checklist:

  • I have added test cases for my bug fix or my new feature
  • This pr needs user documentation (for new or modified features or behaviors)
    • I have added documentation for my new feature or new function
  • This is a backport pr

Bugfix cherry-pick branch check:

  • I have checked the version labels which the pr will be auto-backported to the target branch
    • 4.0
    • 3.5
    • 3.4
    • 3.3

Note

Ensures logical properties are derived before using output columns to fix MV rewrite ISE; adds next-run scheduling and logging to MV refresh, safer partition dropping, bounded partition list string, and tests.

  • MV Rewrite/Optimizer:
    • Derive logical property for newly built agg nodes and when accessing OptExpression output columns via MvUtils.getOutputColumns to prevent IllegalStateException.
    • Add MvUtils.getOutputColumns helper; update callers in MaterializedViewRewriter.
  • MV Refresh Scheduler:
    • Add BaseMVRefreshProcessor.generateNextTaskRunIfNeeded() and invoke it from MVTaskRunProcessor on success; implement in PCT/IVM processors (respect kill/hasNext conditions).
    • Improve force-refresh partition dropping: use partitioner for partitioned MVs; handle non-partitioned with single drop and rebuild.
    • Promote partition drop helper to public in MVPCTRefreshPartitioner.
    • Add success/failure logs around refresh.
  • Catalog/Partition utilities:
    • Guard range/list partition maps to skip names absent in nameToPartition.
  • Common utils:
    • PCellSortedSet fixes: correct limit() logic; compact toString() with prefix...suffix capped by Config.max_mv_task_run_meta_message_values_length.
  • Tests/SQL:
    • Add PCellSortedSetTest and SQL tests for MV rewrite bugfix and behavior.

Written by Cursor Bugbot for commit be8d6a0. This will update automatically on new commits. Configure here.

@LiShuMing LiShuMing enabled auto-merge (squash) October 7, 2025 10:06
@alvin-celerdata
Copy link
Contributor

@cursor review

@LiShuMing
Copy link
Contributor Author

@mergify rebase

Signed-off-by: shuming.li <[email protected]>
Signed-off-by: shuming.li <[email protected]>
@LiShuMing LiShuMing force-pushed the fix_mv_rewrite_bugs2 branch from be8d6a0 to 1dc7bdc Compare October 9, 2025 06:14
Copy link
Contributor

mergify bot commented Oct 9, 2025

rebase

✅ Branch has been successfully rebased

Copy link

sonarqubecloud bot commented Oct 9, 2025

Quality Gate Failed Quality Gate failed

Failed conditions
B Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Copy link

github-actions bot commented Oct 9, 2025

[Java-Extensions Incremental Coverage Report]

pass : 0 / 0 (0%)

Copy link

github-actions bot commented Oct 9, 2025

[FE Incremental Coverage Report]

pass : 41 / 46 (89.13%)

file detail

path covered_line new_line coverage not_covered_line_detail
🔵 com/starrocks/catalog/OlapTable.java 2 4 50.00% [1277, 1325]
🔵 com/starrocks/sql/optimizer/rule/transformation/materialization/MaterializedViewRewriter.java 4 6 66.67% [2061, 2062]
🔵 com/starrocks/sql/optimizer/rule/transformation/materialization/MvUtils.java 2 3 66.67% [1732]
🔵 com/starrocks/sql/common/PCellSortedSet.java 19 19 100.00% []
🔵 com/starrocks/scheduler/MVTaskRunProcessor.java 4 4 100.00% []
🔵 com/starrocks/scheduler/mv/MVPCTBasedRefreshProcessor.java 2 2 100.00% []
🔵 com/starrocks/scheduler/mv/ivm/MVIVMBasedMVRefreshProcessor.java 2 2 100.00% []
🔵 com/starrocks/scheduler/mv/BaseMVRefreshProcessor.java 5 5 100.00% []
🔵 com/starrocks/sql/optimizer/rule/transformation/materialization/AggregatedMaterializedViewPushDownRewriter.java 1 1 100.00% []

Copy link

github-actions bot commented Oct 9, 2025

[BE Incremental Coverage Report]

pass : 0 / 0 (0%)

@kangkaisen kangkaisen disabled auto-merge October 9, 2025 11:22
@kangkaisen kangkaisen merged commit 7ed48a7 into StarRocks:main Oct 9, 2025
74 of 76 checks passed
Copy link

github-actions bot commented Oct 9, 2025

@Mergifyio backport branch-4.0

Copy link

github-actions bot commented Oct 9, 2025

@Mergifyio backport branch-3.3

Copy link

github-actions bot commented Oct 9, 2025

@Mergifyio backport branch-3.4

Copy link

github-actions bot commented Oct 9, 2025

@Mergifyio backport branch-3.5

@github-actions github-actions bot removed the 3.4 label Oct 9, 2025
@github-actions github-actions bot removed the 3.5 label Oct 9, 2025
Copy link
Contributor

mergify bot commented Oct 9, 2025

backport branch-4.0

✅ Backports have been created

Copy link
Contributor

mergify bot commented Oct 9, 2025

backport branch-3.3

✅ Backports have been created

Copy link
Contributor

mergify bot commented Oct 9, 2025

backport branch-3.4

✅ Backports have been created

Copy link
Contributor

mergify bot commented Oct 9, 2025

backport branch-3.5

✅ Backports have been created

mergify bot pushed a commit that referenced this pull request Oct 9, 2025
Signed-off-by: shuming.li <[email protected]>
(cherry picked from commit 7ed48a7)

# Conflicts:
#	fe/fe-core/src/main/java/com/starrocks/scheduler/MVTaskRunProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/BaseMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/MVPCTBasedRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/ivm/MVIVMBasedMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/sql/common/PCellSortedSet.java
mergify bot pushed a commit that referenced this pull request Oct 9, 2025
Signed-off-by: shuming.li <[email protected]>
(cherry picked from commit 7ed48a7)

# Conflicts:
#	fe/fe-core/src/main/java/com/starrocks/scheduler/MVTaskRunProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/BaseMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/MVPCTBasedRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/ivm/MVIVMBasedMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/sql/common/PCellSortedSet.java
mergify bot pushed a commit that referenced this pull request Oct 9, 2025
Signed-off-by: shuming.li <[email protected]>
(cherry picked from commit 7ed48a7)

# Conflicts:
#	fe/fe-core/src/main/java/com/starrocks/scheduler/MVTaskRunProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/BaseMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/MVPCTBasedRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/ivm/MVIVMBasedMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/sql/common/PCellSortedSet.java
mergify bot pushed a commit that referenced this pull request Oct 9, 2025
Signed-off-by: shuming.li <[email protected]>
(cherry picked from commit 7ed48a7)

# Conflicts:
#	fe/fe-core/src/main/java/com/starrocks/scheduler/MVTaskRunProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/BaseMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/MVPCTBasedRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/scheduler/mv/ivm/MVIVMBasedMVRefreshProcessor.java
#	fe/fe-core/src/main/java/com/starrocks/sql/common/PCellSortedSet.java
wanpengfei-git pushed a commit that referenced this pull request Oct 9, 2025
wanpengfei-git pushed a commit that referenced this pull request Oct 9, 2025
wanpengfei-git pushed a commit that referenced this pull request Oct 9, 2025
wanpengfei-git pushed a commit that referenced this pull request Oct 10, 2025
mergify bot added a commit that referenced this pull request Oct 16, 2025
) (#63858)

Signed-off-by: shuming.li <[email protected]>
Co-authored-by: shuming.li <[email protected]>
(cherry picked from commit 31894ed)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants