Skip to content

[Enhancement](ai_func) Skip Null inputs in AI functions - #66242

Open
linrrzqqq wants to merge 2 commits into
apache:masterfrom
linrrzqqq:ai-func-skip-null
Open

[Enhancement](ai_func) Skip Null inputs in AI functions#66242
linrrzqqq wants to merge 2 commits into
apache:masterfrom
linrrzqqq:ai-func-skip-null

Conversation

@linrrzqqq

@linrrzqqq linrrzqqq commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Problem Summary:

The framework's default NULL implementation unwraps Nullable arguments and executes AI functions for every input row. For partially NULL inputs, the nested placeholder values of NULL rows are still included in prompts and sent to external AI providers.

This causes unnecessary remote requests and token consumption. It also requires special handling for embedding results to preserve the original row order without duplicating large embedding vectors.

This PR:

  • Disables the framework's default NULL implementation for all AIFunction subclasses.
  • Determines the Nullable return type in the AIFunction base class.
  • Extracts nested prompt columns and merges argument null maps in the common AI execution path.
  • Skips NULL rows before building prompts or sending requests.
  • Restores NULL rows in the final result while preserving the original row order.
  • Handles both text and multimodal Nullable inputs for EMBED.
  • Expands embedding array offsets in place, avoiding a copy of the nested Float32 embedding data.
  • Returns a constant NULL column when all input rows are NULL.

Release note

Fix AI scalar functions to skip NULL input rows instead of sending their placeholder values to external AI providers.

@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?

@linrrzqqq

Copy link
Copy Markdown
Collaborator Author

/review

@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.

Request changes. The compact prompt/result mapping is functionally sound for nullable scalar arguments, and the reverse embedding-offset expansion preserves row order without copying nested vectors. Two issues remain: a legal NULL resource literal can now reach a BE DORIS_CHECK instead of propagating NULL (MAIN-002), and nullable scalar blocks with an all-zero null map unnecessarily duplicate every result (MAIN-001).

Critical checkpoint conclusions: The change is focused and covers scalar, text-embedding, and multimodal-embedding paths. There is no production concurrency, special lifecycle, configuration, persistence, transaction, storage-format, or protocol change. Return-type and overload dispatch are otherwise consistent, and provider result-count validation protects compact-row reconstruction. Tests cover partial NULLs, merged argument maps, nullable array prompts, all-NULL constants, multimodal inputs, and batch boundaries, but they miss the NULL resource and all-zero-map cases above. No extra user review focus was supplied. Per the runner instruction, this was a static review and no local build or test command was run.

Comment thread be/src/exprs/function/ai/ai_functions.h
Comment thread be/src/exprs/function/ai/ai_functions.h
@linrrzqqq
linrrzqqq force-pushed the ai-func-skip-null branch from e02787a to 0d75fc4 Compare July 29, 2026 18:19
@linrrzqqq

Copy link
Copy Markdown
Collaborator Author

/review

@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.

Follow-up review of 0d75fc43b7c12316bb6345091562fe9d64aa4c4b: I found no remaining blocking issue. The two previously raised concerns are addressed at this head: an all-NULL resource now returns before resource lookup, and a nullable input with an all-zero null map wraps the existing result directly instead of scattering and copying every result.

Critical checkpoint conclusions:

  • Goal and correctness: The change skips NULL prompt rows for all scalar AI functions and for both text and multimodal EMBED. Provider response counts are checked before reconstruction; scalar results are scattered in original row order, and embedding offsets are expanded in place without copying the nested Float32 vectors.
  • Scope and parallel paths: The change is focused on NULL propagation and compact execution. The common scalar path, String/Bool/Float result types, text embedding, multimodal embedding, constant inputs, multiple nullable arguments, all-NULL blocks, and all-zero null maps are covered.
  • Nullable and compatibility contracts: ColumnConst(ColumnNullable) handling follows the function framework's constant path, BE return nullability matches FE PropagateNullable, and EMBED preserves its Array<Nullable<Float32>> element type. There is no storage, protocol, persistence, rolling-upgrade, or function-symbol compatibility change.
  • Concurrency, lifecycle, configuration, and data writes: There is no new production concurrency, shared mutable lifecycle, configuration item, transaction/persistence behavior, or data-write path. The test-only adapter capture is thread-local.
  • Performance: NULL rows no longer consume provider requests or tokens; the scalar all-zero fast path avoids a full result copy, and the embedding path rewrites only offsets while retaining the nested vector buffer.
  • Testing: BE unit coverage was added for partial NULLs, merged argument null maps, String/Bool/Float and nullable-array inputs, all-NULL constants, NULL resources, all-zero maps, text and multimodal embeddings, and batch boundaries. Per the review-runner instruction, I did not run builds or tests locally.

No additional user-provided review focus was supplied. Review completion is confirmed for the current head.

@linrrzqqq

Copy link
Copy Markdown
Collaborator Author

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17828	4068	4052	4052
q2	2020	311	189	189
q3	10288	1399	839	839
q4	4716	462	350	350
q5	7788	821	569	569
q6	243	168	134	134
q7	748	823	597	597
q8	10389	1462	1524	1462
q9	5734	4293	4308	4293
q10	6818	1728	1467	1467
q11	513	345	318	318
q12	741	585	469	469
q13	18101	3345	2734	2734
q14	266	265	249	249
q15	q16	781	776	710	710
q17	1070	989	1028	989
q18	6737	5684	5604	5604
q19	1662	1214	1138	1138
q20	816	648	565	565
q21	5830	2618	2415	2415
q22	422	347	291	291
Total cold run time: 103511 ms
Total hot run time: 29434 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4396	4332	4329	4329
q2	278	314	207	207
q3	4606	4885	4426	4426
q4	2032	2109	1348	1348
q5	4380	4240	4220	4220
q6	226	175	126	126
q7	1703	2187	1639	1639
q8	2428	2187	2075	2075
q9	7684	7732	7688	7688
q10	4709	4669	4207	4207
q11	550	422	551	422
q12	730	763	534	534
q13	3259	3622	2888	2888
q14	323	320	266	266
q15	q16	718	722	622	622
q17	1340	1275	1291	1275
q18	7991	7317	6693	6693
q19	1080	1052	1117	1052
q20	2200	2192	1922	1922
q21	5143	4482	4309	4309
q22	493	456	413	413
Total cold run time: 56269 ms
Total hot run time: 50661 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 177519 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 0d75fc43b7c12316bb6345091562fe9d64aa4c4b, data reload: false

query5	4343	629	490	490
query6	476	229	209	209
query7	4863	604	343	343
query8	342	187	171	171
query9	8753	4109	4027	4027
query10	472	359	301	301
query11	5836	2335	2167	2167
query12	159	108	105	105
query13	1275	664	440	440
query14	6235	5212	4967	4967
query14_1	4259	4238	4260	4238
query15	217	205	176	176
query16	1048	465	442	442
query17	1089	690	543	543
query18	2425	464	336	336
query19	203	182	144	144
query20	119	106	115	106
query21	240	156	139	139
query22	13539	13578	13314	13314
query23	17350	16519	16124	16124
query23_1	16260	16301	16239	16239
query24	7498	1734	1265	1265
query24_1	1266	1309	1281	1281
query25	531	437	353	353
query26	1321	363	209	209
query27	2634	639	378	378
query28	4433	2042	2054	2042
query29	1065	605	461	461
query30	345	263	225	225
query31	1126	1082	991	991
query32	100	59	56	56
query33	515	329	240	240
query34	1178	1121	659	659
query35	767	774	714	714
query36	1039	1042	899	899
query37	153	104	90	90
query38	1861	1698	1657	1657
query39	879	889	843	843
query39_1	825	836	831	831
query40	242	164	142	142
query41	64	61	63	61
query42	98	88	90	88
query43	318	321	280	280
query44	1476	792	773	773
query45	204	183	170	170
query46	1062	1253	735	735
query47	2133	2089	1967	1967
query48	415	404	303	303
query49	576	413	317	317
query50	1065	431	350	350
query51	10822	10696	10643	10643
query52	84	84	73	73
query53	264	276	204	204
query54	286	229	218	218
query55	72	70	65	65
query56	290	278	266	266
query57	1330	1282	1235	1235
query58	275	255	254	254
query59	1568	1662	1485	1485
query60	303	267	253	253
query61	154	153	148	148
query62	548	494	432	432
query63	248	205	202	202
query64	2814	1114	977	977
query65	4752	4667	4641	4641
query66	1844	521	403	403
query67	29448	29314	29155	29155
query68	3145	1558	989	989
query69	406	323	278	278
query70	912	881	830	830
query71	379	345	318	318
query72	3242	2875	2298	2298
query73	841	749	442	442
query74	5119	4909	4716	4716
query75	2536	2500	2130	2130
query76	2341	1167	750	750
query77	350	378	286	286
query78	11806	11867	11274	11274
query79	1474	1159	741	741
query80	1270	550	461	461
query81	570	333	286	286
query82	600	156	117	117
query83	380	321	297	297
query84	292	156	131	131
query85	945	625	549	549
query86	442	246	234	234
query87	1812	1823	1748	1748
query88	3797	2835	2826	2826
query89	442	375	330	330
query90	1853	194	193	193
query91	202	191	161	161
query92	63	57	52	52
query93	1720	1569	1022	1022
query94	731	347	320	320
query95	792	507	549	507
query96	1091	786	343	343
query97	2606	2615	2467	2467
query98	210	211	195	195
query99	1093	1109	991	991
Total cold run time: 263646 ms
Total hot run time: 177519 ms

@hello-stephen

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

query1	0.01	0.01	0.00
query2	0.09	0.04	0.04
query3	0.25	0.13	0.14
query4	1.60	0.14	0.14
query5	0.23	0.22	0.23
query6	1.28	1.11	1.04
query7	0.03	0.01	0.01
query8	0.06	0.03	0.03
query9	0.37	0.30	0.31
query10	0.55	0.55	0.55
query11	0.20	0.13	0.13
query12	0.18	0.14	0.14
query13	0.47	0.47	0.48
query14	1.00	0.99	1.00
query15	0.64	0.58	0.60
query16	0.31	0.32	0.34
query17	1.12	1.09	1.05
query18	0.22	0.21	0.21
query19	2.00	1.93	1.97
query20	0.02	0.01	0.01
query21	15.42	0.19	0.13
query22	4.98	0.05	0.06
query23	16.11	0.30	0.12
query24	3.00	0.43	0.32
query25	0.11	0.05	0.04
query26	0.74	0.21	0.14
query27	0.05	0.03	0.03
query28	3.52	0.94	0.58
query29	12.51	4.18	3.32
query30	0.28	0.15	0.16
query31	2.76	0.59	0.31
query32	3.22	0.58	0.48
query33	3.25	3.21	3.18
query34	15.62	4.17	3.51
query35	3.50	3.48	3.55
query36	0.56	0.44	0.43
query37	0.09	0.06	0.06
query38	0.05	0.04	0.04
query39	0.04	0.03	0.03
query40	0.19	0.15	0.14
query41	0.09	0.04	0.03
query42	0.04	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 96.8 s
Total hot run time: 24.92 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100.00% (162/162) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 75.70% (31965/42224)
Line Coverage 60.34% (356193/590298)
Region Coverage 56.85% (298369/524855)
Branch Coverage 58.34% (134556/230642)

Mryange
Mryange previously approved these changes Jul 30, 2026
@github-actions github-actions Bot added the approved Indicates a PR has been approved by one committer. label Jul 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR approved by at least one committer and no changes requested.

@HappenLee

Copy link
Copy Markdown
Contributor

只处理了顶层 nullable(argument.type->is_nullable())。例如 ai_classify 的 labels 为
Array(Nullable(String)) 这种貌似没有处理啊

@github-actions github-actions Bot removed the approved Indicates a PR has been approved by one committer. label Aug 2, 2026
@linrrzqqq

Copy link
Copy Markdown
Collaborator Author

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17708	3938	3923	3923
q2	2072	345	233	233
q3	10261	1401	800	800
q4	4684	474	342	342
q5	7528	877	592	592
q6	190	174	141	141
q7	772	807	618	618
q8	9397	1628	1614	1614
q9	5340	4091	4075	4075
q10	6757	1615	1381	1381
q11	506	346	324	324
q12	780	588	470	470
q13	18132	3329	2747	2747
q14	266	260	242	242
q15	q16	746	737	664	664
q17	944	877	936	877
q18	6929	5715	5657	5657
q19	1314	1161	1053	1053
q20	768	691	574	574
q21	5920	2754	2324	2324
q22	431	364	302	302
Total cold run time: 101445 ms
Total hot run time: 28953 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4245	4163	4166	4163
q2	277	333	200	200
q3	4588	4952	4371	4371
q4	2195	2261	1423	1423
q5	4228	4094	4138	4094
q6	223	178	125	125
q7	1717	1609	1402	1402
q8	3038	2164	2096	2096
q9	7501	7472	7623	7472
q10	4298	4287	3821	3821
q11	586	412	357	357
q12	703	746	503	503
q13	3256	3444	2926	2926
q14	313	314	292	292
q15	q16	710	698	612	612
q17	1294	1290	1244	1244
q18	7951	7113	7271	7113
q19	1138	1134	1117	1117
q20	2220	2198	1979	1979
q21	5317	4568	4395	4395
q22	515	455	421	421
Total cold run time: 56313 ms
Total hot run time: 50126 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 170158 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 d7a1ef26978facb3e582be9181db89843ddb10c2, data reload: false

query5	4327	616	490	490
query6	484	215	200	200
query7	4888	594	350	350
query8	342	181	172	172
query9	8747	4054	4090	4054
query10	511	353	302	302
query11	5823	2228	2001	2001
query12	154	101	96	96
query13	1238	592	417	417
query14	6059	4843	4498	4498
query14_1	4003	3937	3934	3934
query15	217	206	175	175
query16	1042	470	482	470
query17	1133	706	576	576
query18	2456	485	352	352
query19	217	191	183	183
query20	106	102	100	100
query21	241	157	132	132
query22	13114	12871	12781	12781
query23	17210	16399	15945	15945
query23_1	16192	16130	16131	16130
query24	7646	1704	1238	1238
query24_1	1279	1259	1273	1259
query25	540	429	349	349
query26	1341	369	204	204
query27	2560	627	390	390
query28	4465	2030	2059	2030
query29	1073	598	499	499
query30	338	260	225	225
query31	1097	1094	941	941
query32	113	63	58	58
query33	504	304	247	247
query34	1157	1146	652	652
query35	738	747	638	638
query36	780	782	689	689
query37	150	102	88	88
query38	1847	1642	1620	1620
query39	820	824	804	804
query39_1	788	798	787	787
query40	247	163	146	146
query41	66	68	63	63
query42	98	91	92	91
query43	310	321	270	270
query44	1421	788	771	771
query45	190	176	167	167
query46	1057	1181	701	701
query47	1534	1566	1457	1457
query48	415	408	284	284
query49	566	402	310	310
query50	1041	435	330	330
query51	10664	11449	10573	10573
query52	83	84	73	73
query53	262	277	196	196
query54	282	235	229	229
query55	75	71	65	65
query56	301	289	288	288
query57	1059	1001	928	928
query58	287	264	259	259
query59	1512	1596	1374	1374
query60	318	272	253	253
query61	153	145	160	145
query62	400	327	271	271
query63	241	202	204	202
query64	2974	1160	980	980
query65	3910	3835	3864	3835
query66	1855	496	378	378
query67	28319	28176	28011	28011
query68	3237	1621	1008	1008
query69	421	312	266	266
query70	892	794	792	792
query71	387	366	340	340
query72	3135	2784	2337	2337
query73	810	757	427	427
query74	4611	4504	4350	4350
query75	2361	2350	2021	2021
query76	2319	1131	793	793
query77	349	368	272	272
query78	11110	11108	10609	10609
query79	1363	1088	763	763
query80	1305	558	461	461
query81	525	337	283	283
query82	605	148	117	117
query83	374	324	302	302
query84	282	157	132	132
query85	995	605	514	514
query86	407	246	218	218
query87	1806	1792	1733	1733
query88	3777	2834	2798	2798
query89	401	317	282	282
query90	1949	200	199	199
query91	215	194	164	164
query92	61	60	58	58
query93	1665	1609	1061	1061
query94	734	378	327	327
query95	812	538	469	469
query96	1008	813	336	336
query97	2478	2496	2333	2333
query98	208	201	192	192
query99	713	728	604	604
Total cold run time: 256684 ms
Total hot run time: 170158 ms

@hello-stephen

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

query1	0.00	0.00	0.01
query2	0.10	0.05	0.05
query3	0.26	0.14	0.13
query4	1.62	0.14	0.14
query5	0.23	0.22	0.22
query6	1.16	0.80	0.82
query7	0.04	0.01	0.01
query8	0.06	0.04	0.04
query9	0.37	0.31	0.31
query10	0.55	0.53	0.57
query11	0.18	0.14	0.14
query12	0.18	0.15	0.13
query13	0.46	0.47	0.47
query14	0.99	1.00	0.97
query15	0.60	0.58	0.58
query16	0.32	0.33	0.33
query17	1.04	1.11	1.16
query18	0.20	0.20	0.20
query19	2.03	1.91	1.97
query20	0.02	0.01	0.01
query21	15.42	0.23	0.14
query22	4.70	0.06	0.06
query23	16.12	0.29	0.12
query24	2.96	0.44	0.36
query25	0.13	0.05	0.07
query26	0.73	0.21	0.14
query27	0.05	0.04	0.04
query28	3.56	0.79	0.35
query29	12.48	4.01	3.18
query30	0.27	0.15	0.16
query31	2.77	0.58	0.31
query32	3.22	0.60	0.50
query33	3.16	3.18	3.30
query34	15.82	3.97	3.32
query35	3.23	3.23	3.23
query36	0.55	0.44	0.40
query37	0.09	0.07	0.07
query38	0.04	0.03	0.04
query39	0.04	0.03	0.02
query40	0.17	0.15	0.14
query41	0.09	0.03	0.03
query42	0.03	0.03	0.02
query43	0.04	0.04	0.04
Total cold run time: 96.08 s
Total hot run time: 23.96 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 99.46% (185/186) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 75.74% (32007/42258)
Line Coverage 60.41% (356982/590925)
Region Coverage 56.98% (299513/525612)
Branch Coverage 58.43% (135036/231113)

@HappenLee

Copy link
Copy Markdown
Contributor

/review

@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.

Static review of d7a1ef26978facb3e582be9181db89843ddb10c2: I found no remaining blocking issue, so my approval opinion is positive. The two existing concerns are addressed at this head: a NULL resource returns before lookup, and a nullable input with an all-zero null map wraps the completed result without scattering and copying it.

Critical checkpoint conclusions:

  • Goal and correctness: The change skips NULL prompt rows for all scalar AI functions and for both text and multimodal EMBED. Per-batch provider result counts are validated before reconstruction; scalar results are scattered back in original row order, and embedding offsets are expanded backward in place without copying nested Float32 vectors.
  • Scope and clarity: The change is focused on manual NULL propagation and compact provider execution. The common base owns the shared contract, while only specialized prompt/result handling remains in derived functions.
  • Concurrency: There is no new production thread, shared mutable state, lock, atomic, or lock-order concern. The test-only embedding-input capture is thread-local.
  • Lifecycle and initialization: There is no new special production lifecycle or cross-translation-unit static dependency. The test-only vector uses function-local thread-local initialization.
  • Configuration: No configuration item is added or changed, so dynamic-update handling is not applicable.
  • Compatibility: There is no storage-format, protocol, persistence, function-name, or rolling-upgrade change. FE PropagateNullable and BE outer-nullable return construction agree for String, Bool, Float32, and Array<Nullable<Float32>> results.
  • Parallel paths and special conditions: All eleven registered AI scalars use the new contract. String/Bool/Float scalar outputs, merged nullable arguments, const nullable columns, nullable array rows/elements, text embedding, and multimodal embedding were checked. Resource exclusion from the prompt map is safe because FE restricts it to a literal, with the NULL-constant case handled before resource lookup.
  • Test coverage and expected results: Factory-based BE unit tests exercise the real prepared-function path for partial NULLs, multiple nullable arguments, all-NULL constants, no-actual-NULL maps, NULL resources, nullable label elements, specialized result types, exact text request compaction, multimodal skipping, and batch-boundary offset restoration. The result oracles match the compact/scatter and array-offset invariants. Current PR checks report BE UT, compile, formatter, and regression suites passing; per runner instruction, I did not run builds or tests locally.
  • Observability: Existing status propagation and explicit provider result-count errors are sufficient for the changed path; no new durable or distributed state requires additional logs or metrics.
  • Transactions, persistence, data writes, and FE-BE variables: None are introduced or modified, so atomicity, failover, EditLog, and scattered variable-passing checks are not applicable.
  • Performance: NULL rows no longer consume external requests or tokens; the all-zero scalar fast path avoids a full result copy, and EMBED restores row layout by rewriting offsets while retaining nested vector storage.
  • Other issues and user focus: No additional substantiated correctness, error-handling, memory-safety, compatibility, lifecycle, or performance issue remained after the final sweep. No additional user-provided review focus was supplied.

Review completion: complete for this head. Two normal full-review agents and a separate risk-focused agent returned NO_NEW_VALUABLE_FINDINGS against the same frozen diff, thread set, and ledger; the main review independently verified every risk conclusion, and the final 16-file sweep found zero unresolved candidates. No inline comments are proposed.

wzz6423 added a commit to wzz6423/doris that referenced this pull request Aug 3, 2026
### What problem does this PR solve?

Issue Number: None

Related PR: apache#66242

Problem Summary:

The automated review prompt submits a COMMENT review when it finds no critical blocking issue. A comment does not submit GitHub approval, so a prior automated REQUEST_CHANGES review can keep a PR blocked even after the code-review check succeeds. Submit an APPROVE review for the clean-review path.

### Release note

None

### Check List (For Author)

- Test: Manual test
    - Parsed the updated workflow YAML and asserted the clean-review prompt uses --approve.
- Behavior changed: Yes (clean automated reviews now submit GitHub approval)
- Does this need documentation: No
wzz6423 added a commit to wzz6423/doris that referenced this pull request Aug 3, 2026
### What problem does this PR solve?

Issue Number: None

Related PR: apache#66242

Problem Summary:

The workflow previously treated any review submitted for the current pull request head as successful. A COMMENT review could therefore satisfy the workflow even though it does not approve the pull request. Require the GitHub Actions bot to submit either APPROVED or CHANGES_REQUESTED before the review workflow succeeds.

### Release note

None

### Check List (For Author)

- Test: Manual test
    - Parsed the updated workflow YAML.
    - Verified COMMENTED and human APPROVED reviews are rejected, while the bot APPROVED review is accepted.
- Behavior changed: Yes (invalid automated review states now fail the workflow)
- Does this need documentation: No
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