Skip to content

[fix](fe) Snapshot RF partition metadata during planning - #65919

Merged
morrySnow merged 2 commits into
apache:masterfrom
BiteTheDDDDt:codex/fix-rf-partition-boundary-snapshot
Jul 28, 2026
Merged

[fix](fe) Snapshot RF partition metadata during planning#65919
morrySnow merged 2 commits into
apache:masterfrom
BiteTheDDDDt:codex/fix-rf-partition-boundary-snapshot

Conversation

@BiteTheDDDDt

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary:

A query can finish planning and then wait in a Workload Group queue before its plan is serialized. If a selected RANGE or LIST partition is replaced during that wait, runtime-filter target metadata still references the planned partition ID, while OlapScanNode previously rebuilt runtime-filter partition boundaries from the current catalog during Thrift serialization. The removed partition ID was therefore absent from the boundaries sent to BE, which violated the runtime-filter partition-pruning invariant and failed the query with boundary_partition_ids.contains(partition_id).

This change snapshots runtime-filter partition boundaries during planning, from the same catalog view used to select partitions and build scan ranges. It also snapshots selected partition names so profile/explain generation does not look up a partition that was replaced after planning. No BE or Thrift protocol changes are required.

The FE unit test snapshots a RANGE-partitioned scan, mutates the live PartitionInfo and partition map to simulate REPLACE PARTITION, and verifies that serialization and explain output continue to use the planned partition IDs and names.

Release note

Fix queued runtime-filter queries failing when selected partitions are replaced after planning.

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
      • ./run-fe-ut.sh --run org.apache.doris.planner.OlapScanNodeTest#testRuntimeFilterPartitionBoundariesUsePlanningSnapshot,org.apache.doris.nereids.glue.translator.RuntimeFilterPartitionPruneClassifierTest
      • ./build.sh --fe
    • Manual test (add detailed scripts or steps below)
      • Reproduced on query port 9333 by queueing an RF partition-pruning query, replacing its selected partition, and releasing the queue blocker.
      • The queued query returned the planned snapshot (1 | 900), a new query returned the replacement data (1 | 1900), and BE remained alive.
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes. Queued queries keep runtime-filter partition metadata and explain names from their planning snapshot.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: Queries can wait in workload group queues after planning but before plan serialization. If a selected RANGE or LIST partition is replaced while queued, runtime-filter monotonicity retains the planned partition ID while OlapScanNode previously rebuilt boundaries from live catalog metadata, omitting the old ID and tripping a BE invariant. Profile explain generation also re-read the replaced partition name. Snapshot RF boundaries and selected partition names during planning so queued queries serialize and report one consistent catalog view.

### Release note

Fix queued runtime-filter queries failing when selected partitions are replaced after planning.

### Check List (For Author)

- Test: Unit Test and Manual test
    - FE unit tests for planning-time RF boundary and partition-name snapshots
    - Query Queue plus REPLACE PARTITION reproduction on port 9333
- Behavior changed: Yes. Queued queries retain planning-time RF partition metadata and explain names.
- Does this need documentation: No
@hello-stephen

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@BiteTheDDDDt
BiteTheDDDDt marked this pull request as ready for review July 22, 2026 12:25
@BiteTheDDDDt

Copy link
Copy Markdown
Contributor Author

run buildall

@BiteTheDDDDt

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 29651 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 740a649aa9a1769305f3bddadd1979fe6fbe283a, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17674	4180	4027	4027
q2	2052	331	205	205
q3	10213	1428	866	866
q4	4718	481	341	341
q5	7821	889	573	573
q6	228	169	137	137
q7	766	803	602	602
q8	9758	1541	1524	1524
q9	5826	4360	4368	4360
q10	6816	1722	1471	1471
q11	509	387	328	328
q12	728	586	453	453
q13	18188	3424	2786	2786
q14	274	266	246	246
q15	q16	792	778	707	707
q17	1047	931	953	931
q18	7006	5765	5711	5711
q19	1307	1359	1047	1047
q20	825	676	610	610
q21	5804	2603	2433	2433
q22	417	352	293	293
Total cold run time: 102769 ms
Total hot run time: 29651 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4401	4330	4395	4330
q2	303	321	206	206
q3	4584	5100	4386	4386
q4	2066	2132	1365	1365
q5	4420	4252	4260	4252
q6	227	172	125	125
q7	1699	1649	1396	1396
q8	2245	2016	1933	1933
q9	7192	7229	7242	7229
q10	4612	4604	4154	4154
q11	538	392	354	354
q12	749	754	538	538
q13	3023	3354	2802	2802
q14	290	297	254	254
q15	q16	673	696	612	612
q17	1305	1258	1249	1249
q18	7216	7012	6755	6755
q19	1150	1077	1131	1077
q20	2229	2227	1954	1954
q21	5243	4557	4416	4416
q22	517	461	421	421
Total cold run time: 54682 ms
Total hot run time: 49808 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 177650 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 740a649aa9a1769305f3bddadd1979fe6fbe283a, data reload: false

query5	3854	644	486	486
query6	463	231	217	217
query7	4841	554	338	338
query8	320	183	179	179
query9	7844	4055	4043	4043
query10	439	348	294	294
query11	5962	2306	2153	2153
query12	162	105	106	105
query13	1295	623	432	432
query14	5680	5165	4852	4852
query14_1	4275	4267	4227	4227
query15	205	213	182	182
query16	626	488	462	462
query17	753	736	577	577
query18	488	484	346	346
query19	200	196	149	149
query20	108	114	107	107
query21	182	160	145	145
query22	13648	13529	13417	13417
query23	17338	16791	16118	16118
query23_1	16293	16150	16233	16150
query24	7567	1727	1281	1281
query24_1	1308	1292	1270	1270
query25	568	454	398	398
query26	1193	378	215	215
query27	2564	597	367	367
query28	4453	1989	2010	1989
query29	1094	630	482	482
query30	347	268	231	231
query31	1125	1097	978	978
query32	115	64	62	62
query33	536	344	248	248
query34	1184	1112	631	631
query35	767	783	684	684
query36	1208	1202	1057	1057
query37	154	112	94	94
query38	1888	1725	1648	1648
query39	894	867	854	854
query39_1	833	837	859	837
query40	308	157	145	145
query41	64	63	62	62
query42	95	90	93	90
query43	327	317	290	290
query44	1408	756	756	756
query45	198	185	173	173
query46	1039	1198	715	715
query47	2142	2094	2002	2002
query48	355	397	297	297
query49	585	418	310	310
query50	1032	410	345	345
query51	10739	10591	10526	10526
query52	89	93	75	75
query53	258	266	208	208
query54	277	230	225	225
query55	71	70	66	66
query56	302	306	284	284
query57	1314	1306	1214	1214
query58	280	265	253	253
query59	1536	1673	1395	1395
query60	302	271	250	250
query61	159	147	153	147
query62	525	501	432	432
query63	234	205	200	200
query64	2898	1072	906	906
query65	4736	4647	4683	4647
query66	1877	526	381	381
query67	29546	29248	29046	29046
query68	2844	1565	1020	1020
query69	426	304	268	268
query70	1067	939	924	924
query71	390	334	322	322
query72	3042	2473	2582	2473
query73	887	774	416	416
query74	5076	4933	4716	4716
query75	2523	2511	2139	2139
query76	2319	1171	793	793
query77	349	373	285	285
query78	11993	11965	11380	11380
query79	1404	1201	758	758
query80	829	566	469	469
query81	498	339	286	286
query82	596	157	121	121
query83	387	324	284	284
query84	332	162	130	130
query85	949	621	529	529
query86	377	289	294	289
query87	1818	1820	1756	1756
query88	3717	2777	2757	2757
query89	440	375	327	327
query90	1665	197	193	193
query91	205	194	162	162
query92	75	59	56	56
query93	1574	1518	1052	1052
query94	593	338	329	329
query95	808	574	505	505
query96	1097	800	365	365
query97	2633	2645	2506	2506
query98	213	209	199	199
query99	1088	1111	981	981
Total cold run time: 250254 ms
Total hot run time: 177650 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 25.21 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 740a649aa9a1769305f3bddadd1979fe6fbe283a, data reload: false

query1	0.01	0.01	0.00
query2	0.09	0.04	0.05
query3	0.25	0.13	0.13
query4	1.61	0.14	0.14
query5	0.24	0.26	0.23
query6	1.26	1.07	1.14
query7	0.03	0.01	0.00
query8	0.06	0.04	0.04
query9	0.39	0.31	0.31
query10	0.57	0.57	0.54
query11	0.19	0.14	0.14
query12	0.18	0.14	0.14
query13	0.48	0.47	0.47
query14	1.02	1.02	1.00
query15	0.62	0.59	0.61
query16	0.32	0.34	0.33
query17	1.06	1.13	1.16
query18	0.23	0.21	0.21
query19	2.07	2.00	1.92
query20	0.02	0.01	0.01
query21	15.44	0.21	0.15
query22	4.88	0.05	0.06
query23	16.14	0.31	0.13
query24	2.98	0.41	0.33
query25	0.12	0.05	0.03
query26	0.74	0.20	0.16
query27	0.05	0.04	0.03
query28	3.51	0.90	0.54
query29	12.50	4.15	3.27
query30	0.27	0.16	0.14
query31	2.78	0.60	0.31
query32	3.22	0.60	0.49
query33	3.16	3.25	3.29
query34	15.76	4.21	3.56
query35	3.59	3.55	3.55
query36	0.56	0.44	0.43
query37	0.10	0.06	0.07
query38	0.05	0.04	0.03
query39	0.04	0.03	0.03
query40	0.18	0.17	0.16
query41	0.09	0.03	0.02
query42	0.04	0.02	0.03
query43	0.04	0.04	0.03
Total cold run time: 96.94 s
Total hot run time: 25.21 s

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found one correctness issue that should be fixed before merge: RF partition-pruning enablement is read once during translation and again after workload-queue admission, but workload policy can mutate the live session variable between those points. A false-to-true transition now leaves a pruning-marked scan without a boundary snapshot and makes FE serialization fail.

Critical checkpoints:

  • Goal and data correctness: the planning-time snapshot fixes queued REPLACE PARTITION for ordinary locked OLAP scans, but the mutable enablement path means the implementation is not complete yet.
  • Scope and clarity: the three-file change is focused and reuses the existing boundary builder; no unrelated changes were found.
  • Concurrency and lifecycle: table metadata is protected through normal Nereids translation, selected names are refreshed on all production ID-mutation paths, and retries/short-circuit reuse are safe. The asynchronous workload-policy writer is the unresolved lifecycle race described inline.
  • Configuration and compatibility: no new config, persistence format, or FE-BE protocol field is introduced. The issue comes from treating the existing dynamic session value as an immutable plan decision.
  • Parallel paths: grouped and single RF translation both use the affected helper. RANGE/LIST/default/null/multi-column boundary alignment is otherwise preserved; CTE and TVF targets do not create an additional case under current RF eligibility gates.
  • Tests: the added RANGE helper test validates retained IDs/names across replacement, but it bypasses the real translator/session gate/toThrift() lifecycle and cannot catch the accepted race. Please add the targeted false-to-true test requested inline. Per the review-runner contract I did not run local builds or tests; CI compile and CheckStyle were green during review, while the author reports focused FE UT and a manual queued-query reproduction.
  • Persistence, data writes, and observability: not applicable to this planner-only metadata-lifetime change; existing RF pruning counters remain available.

No additional user-provided focus points were supplied.

"partition-pruning runtime filter target must be an OlapScanNode");
runtimeFilter.markTargetCanPrunePartitions(scanNode.getId());
ConnectContext rfPruneCtx = ConnectContext.get();
if (rfPruneCtx != null

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

enable_runtime_filter_partition_prune is not stable across these two checks. The workload-policy thread can call WorkloadActionSetSessionVar on a live query's SessionVariable; if this flag is false here, the target is still marked as partition-prunable but no snapshot is stored. If the policy flips it to true while the query waits in the workload queue, OlapScanNode.toThrift() re-reads true, sees the marked RF, and calls setPartitionBoundariesForRuntimeFilter(), which now fails because the snapshot is null. (Before this change, that serialization-time path built the boundaries instead.) Please capture one immutable per-plan enablement decision, or snapshot every marked target regardless of the later-mutable flag, and cover the false-to-true transition through the real translator/toThrift() path in a test.

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 74.36% (29/39) 🎉
Increment coverage report
Complete coverage report

@morrySnow morrySnow left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall Assessment

This PR correctly fixes a real TOCTOU bug: when a query is queued in a Workload Group, selected RANGE/LIST partitions can be replaced before Thrift serialization, causing stale runtime-filter partition boundary metadata to be sent to BE. The fix snapshots both partition boundaries and partition names at planning time, which is the right approach.

The refactoring (extracting setPartitionPruningMetadata helper, splitting setPartitionBoundaries into buildPartitionBoundariesForRuntimeFilter + setPartitionBoundariesForRuntimeFilter) is clean and reduces duplication.

The unit test is well-structured: it sets up a RANGE-partitioned scan, snapshots, mutates the live catalog to simulate REPLACE PARTITION, and verifies serialization and explain output still use the planned data.

Issues requiring changes

1. Session variable TOCTOU between planning and serialization

The snapshot in setPartitionPruningMetadata() is gated on isEnableRuntimeFilterPartitionPrune() (line 394 of the new code), and the consumption in toThrift()setPartitionBoundariesForRuntimeFilter() is also gated on the same session variable. If the session variable were to change from false during planning to true during serialization, markTargetCanPrunePartitions() would have been called (so hasRfDrivingPartitionPruning() returns true), but no snapshot was taken — the Preconditions.checkNotNull would fail.

While session variables don't typically change mid-query, the coupling is fragile. Consider either (a) also guarding markTargetCanPrunePartitions() by the session variable, or (b) making setPartitionBoundariesForRuntimeFilter() fall back to building from the live catalog when the snapshot is null (with a warning log).

2. Minor: format specifier %s for Long

In getSelectedPartitionNamesForExplain(), the Preconditions.checkNotNull error message uses %s for a Long parameter id. The %s formatter works (auto-boxing → toString()), but %d is more idiomatic for numeric types.

Comment thread fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
### What problem does this PR solve?

Issue Number: None

Related PR: apache#65919

Problem Summary: Workload policies can mutate enable_runtime_filter_partition_prune while a planned query waits in a workload queue. The initial fix marked partition-pruning runtime-filter targets independently of the setting but only snapshotted boundaries when the setting was enabled, so a false-to-true change could make Thrift serialization consume a missing snapshot. Snapshot every marked target during planning so dynamic enablement safely uses the same catalog view. Add a real Nereids translator-to-Thrift unit test for the false-to-true transition, verify repeated snapshots retain the first catalog view, and use numeric formatting for partition IDs.

### Release note

None

### Check List (For Author)

- Test: Unit Test
    - ./run-fe-ut.sh --run org.apache.doris.nereids.glue.translator.PhysicalPlanTranslatorTest#testRfPartitionPruneSnapshotSurvivesEnablementChange,org.apache.doris.planner.OlapScanNodeTest#testRuntimeFilterPartitionBoundariesUsePlanningSnapshot,org.apache.doris.nereids.glue.translator.RuntimeFilterPartitionPruneClassifierTest
    - ./run-fe-ut.sh --coverage --run org.apache.doris.nereids.glue.translator.PhysicalPlanTranslatorTest#testRfPartitionPruneSnapshotSurvivesEnablementChange,org.apache.doris.planner.OlapScanNodeTest#testRuntimeFilterPartitionBoundariesUsePlanningSnapshot,org.apache.doris.nereids.glue.translator.RuntimeFilterPartitionPruneClassifierTest
    - ./build.sh --fe
- Behavior changed: Yes. Eligible RF targets retain planning-time boundary snapshots even when partition pruning is disabled until a workload policy enables it.
- Does this need documentation: No
@BiteTheDDDDt

Copy link
Copy Markdown
Contributor Author

run buildall

@BiteTheDDDDt

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 29507 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit b7b2ef7f4d83d5509c56d588e53548c4910ace0a, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17579	4072	4047	4047
q2	2049	313	201	201
q3	10299	1434	844	844
q4	4685	471	336	336
q5	7515	847	564	564
q6	177	171	138	138
q7	753	831	605	605
q8	9339	1455	1531	1455
q9	5576	4347	4298	4298
q10	6760	1720	1482	1482
q11	500	366	348	348
q12	714	598	459	459
q13	18110	3401	2769	2769
q14	268	266	243	243
q15	q16	782	783	711	711
q17	1030	944	1059	944
q18	7064	5719	5608	5608
q19	1320	1286	1138	1138
q20	794	701	582	582
q21	5844	2612	2436	2436
q22	417	351	299	299
Total cold run time: 101575 ms
Total hot run time: 29507 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4375	4273	4287	4273
q2	307	316	214	214
q3	4565	4972	4385	4385
q4	2073	2093	1357	1357
q5	4419	4231	4299	4231
q6	231	179	126	126
q7	1722	1632	1986	1632
q8	2607	2164	2149	2149
q9	7993	8116	7726	7726
q10	4738	4642	4166	4166
q11	596	412	377	377
q12	737	780	549	549
q13	3331	3609	2980	2980
q14	310	309	280	280
q15	q16	700	754	645	645
q17	1342	1303	1320	1303
q18	7917	7453	7150	7150
q19	1139	1149	1111	1111
q20	2194	2196	1935	1935
q21	5217	4532	4401	4401
q22	504	438	409	409
Total cold run time: 57017 ms
Total hot run time: 51399 ms

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review outcome: requesting changes for one avoidable FE planning regression, described inline. The original queued-REPLACE PARTITION correctness failure and the previously reported false-to-true session-variable race are otherwise addressed on the current head.

Critical checkpoints:

  • Goal, data correctness, and tests: planning-time snapshots now keep selected IDs, boundaries, monotonicity, scan ranges, and explain names on one catalog view. The replacement test and the translator-to-Thrift false-to-true test cover the two reported lifecycle failures. A one-selected-partition LIST case is still needed with the inline fix.
  • Scope and clarity: the four-file FE change is focused; grouped and single RF translation share one helper, and the boundary builder/refill split is clear.
  • Concurrency and lifecycle: Nereids holds table read locks through physical translation, so classification and snapshotting are aligned. All production selected-partition-ID writers snapshot names before explain. The current unconditional snapshot keeps later workload-policy enablement safe.
  • Configuration and compatibility: no new configuration, persistence format, function symbol, storage format, or FE-BE protocol field is introduced. The existing dynamic session setting is handled safely across true/false/no-context transitions; optional metadata mismatches only disable RF partition pruning.
  • Parallel paths: grouped RFs with different targets on one scan skip ambiguous scan-ID metadata; repeated RFs safely share one scan snapshot; CTE/TVF and short-circuit point-query paths do not create an additional RF snapshot case.
  • Performance: the remaining issue is the guaranteed-unused O(LIST values) snapshot for a scan with fewer than two selected partitions. RANGE/LIST/default/null/multi-column handling is otherwise preserved.
  • Persistence, data writes, and observability: not applicable to this planner-only metadata-lifetime change; existing RF pruning counters remain available.
  • Validation: per the review-runner contract, I did not run local builds or tests. At the final check, GitHub CheckStyle, license, secret, dependency, and macOS BE checks had passed; TeamCity compile, FE UT, and performance checks were still pending. The author reports focused FE unit tests and manual queued-query validation.
  • User focus: no additional user-provided focus points were supplied.

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 178714 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit b7b2ef7f4d83d5509c56d588e53548c4910ace0a, data reload: false

query5	4308	621	494	494
query6	458	225	203	203
query7	4874	623	327	327
query8	349	190	172	172
query9	8760	4002	4002	4002
query10	495	362	292	292
query11	5904	2330	2109	2109
query12	160	103	110	103
query13	1284	567	406	406
query14	6221	5184	4849	4849
query14_1	4214	4206	4186	4186
query15	207	209	179	179
query16	1000	467	441	441
query17	896	701	560	560
query18	2422	464	333	333
query19	198	184	141	141
query20	110	112	104	104
query21	231	153	135	135
query22	13554	13506	13322	13322
query23	17272	16635	16163	16163
query23_1	16327	16257	16220	16220
query24	7541	1764	1255	1255
query24_1	1290	1255	1265	1255
query25	580	458	392	392
query26	1355	362	219	219
query27	2581	560	394	394
query28	4487	1999	1980	1980
query29	1087	654	509	509
query30	353	270	231	231
query31	1119	1098	989	989
query32	106	66	72	66
query33	529	330	263	263
query34	1175	1129	665	665
query35	766	782	693	693
query36	1184	1209	1050	1050
query37	161	109	91	91
query38	1878	1700	1647	1647
query39	870	878	855	855
query39_1	836	842	845	842
query40	253	171	145	145
query41	71	67	70	67
query42	97	93	94	93
query43	318	323	277	277
query44	1392	790	751	751
query45	190	184	185	184
query46	1064	1198	714	714
query47	2185	2193	2022	2022
query48	409	443	285	285
query49	590	427	317	317
query50	1138	438	335	335
query51	10966	10827	10734	10734
query52	86	85	72	72
query53	261	269	193	193
query54	277	245	234	234
query55	73	68	70	68
query56	285	293	298	293
query57	1321	1329	1209	1209
query58	288	281	246	246
query59	1550	1637	1420	1420
query60	304	267	251	251
query61	156	147	149	147
query62	530	494	423	423
query63	249	204	202	202
query64	2843	1042	887	887
query65	4722	4636	4608	4608
query66	1853	500	373	373
query67	29258	29223	29058	29058
query68	3136	1464	977	977
query69	420	315	274	274
query70	1047	998	945	945
query71	359	339	325	325
query72	3135	2681	2532	2532
query73	830	750	439	439
query74	5051	4924	4716	4716
query75	2551	2499	2124	2124
query76	2326	1171	739	739
query77	349	369	273	273
query78	11921	11783	11302	11302
query79	1219	1125	737	737
query80	630	543	452	452
query81	448	328	298	298
query82	257	155	123	123
query83	394	323	303	303
query84	320	161	126	126
query85	920	594	517	517
query86	345	271	273	271
query87	1806	1829	1770	1770
query88	3659	2775	2770	2770
query89	417	378	323	323
query90	1945	196	194	194
query91	201	193	164	164
query92	62	63	57	57
query93	1502	1492	1037	1037
query94	544	355	330	330
query95	774	559	464	464
query96	1105	820	360	360
query97	2658	2599	2520	2520
query98	216	213	205	205
query99	1106	1119	985	985
Total cold run time: 261885 ms
Total hot run time: 178714 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 24.94 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit b7b2ef7f4d83d5509c56d588e53548c4910ace0a, data reload: false

query1	0.01	0.01	0.00
query2	0.10	0.05	0.05
query3	0.26	0.14	0.14
query4	1.60	0.14	0.14
query5	0.25	0.23	0.22
query6	1.29	1.06	1.07
query7	0.05	0.01	0.00
query8	0.06	0.04	0.04
query9	0.40	0.32	0.30
query10	0.59	0.55	0.52
query11	0.21	0.14	0.14
query12	0.18	0.14	0.14
query13	0.47	0.47	0.47
query14	1.01	1.01	1.01
query15	0.61	0.58	0.59
query16	0.30	0.31	0.33
query17	1.09	1.13	1.08
query18	0.22	0.21	0.21
query19	2.01	1.89	1.96
query20	0.01	0.01	0.01
query21	15.43	0.22	0.13
query22	4.88	0.05	0.05
query23	16.15	0.30	0.13
query24	2.97	0.42	0.33
query25	0.09	0.05	0.05
query26	0.76	0.19	0.16
query27	0.03	0.04	0.04
query28	3.53	0.88	0.56
query29	12.48	4.08	3.26
query30	0.26	0.16	0.15
query31	2.76	0.61	0.32
query32	3.23	0.61	0.48
query33	3.25	3.27	3.20
query34	15.50	4.23	3.50
query35	3.51	3.52	3.49
query36	0.56	0.43	0.41
query37	0.09	0.07	0.06
query38	0.06	0.04	0.03
query39	0.03	0.03	0.03
query40	0.20	0.17	0.16
query41	0.10	0.03	0.03
query42	0.04	0.03	0.03
query43	0.05	0.03	0.03
Total cold run time: 96.68 s
Total hot run time: 24.94 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 86.11% (31/36) 🎉
Increment coverage report
Complete coverage report

@morrySnow
morrySnow merged commit 0d9ffb0 into apache:master Jul 28, 2026
30 of 31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants