Skip to content

[fix](iceberg) Honor standard row-level isolation properties - #69702

Merged
Gabriel39 merged 4 commits into
apache:masterfrom
hubgeter:analyze/doris-29854-iceberg-isolation
Nov 4, 2026
Merged

Gabriel39 merged 4 commits into
apache:masterfrom
hubgeter:analyze/doris-29854-iceberg-isolation

Conversation

@hubgeter

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: N/A

Related PR: #69551

Problem Summary:
Doris Iceberg DELETE, UPDATE, and MERGE all used the non-standard delete_isolation_level property. As a result, the standard per-operation table properties write.delete.isolation-level, write.update.isolation-level, and write.merge.isolation-level were ignored. A table configured for snapshot isolation therefore still performed serializable data-file conflict validation and rejected normal concurrent appends.

This change selects the Iceberg TableProperties key based on WriteOperation and parses it with IsolationLevel.fromName(). The existing delete-file, base-snapshot, conflict-filter, and referenced-data-file validations remain enabled; only validateNoConflictingDataFiles is gated on serializable isolation. Invalid isolation-level values now fail explicitly instead of being treated as snapshot isolation.

The three disabled regressions from #69551 are enabled. Unit coverage also verifies per-operation key selection, serializable defaults, and invalid values.

Release note

Iceberg DELETE, UPDATE, and MERGE now honor their standard per-operation isolation-level table properties.

Check List (For Author)

  • Test

    • Regression test
    • Unit Test: IcebergConnectorTransactionTest and IcebergWriteKnownBugsTest pass, including all three concurrent-append snapshot-isolation regressions.
    • Manual test (add detailed scripts or steps below)
    • 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. Snapshot isolation now permits concurrent data-file appends while retaining the other row-delta validations.
  • 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?

Related PR: apache#69551

Problem Summary:
Iceberg DELETE, UPDATE, and MERGE all read the non-standard
delete_isolation_level property, so the standard
write.delete/update/merge.isolation-level table properties were ignored.
Tables configured for snapshot isolation therefore still performed
serializable data-file conflict validation and rejected normal concurrent
appends. The same non-standard property also incorrectly applied to every
row-level operation.

Select the Iceberg TableProperties key by WriteOperation and parse it with
IsolationLevel.fromName. Preserve all existing row-delta validation except
validateNoConflictingDataFiles, which remains gated on serializable isolation.
Enable the three snapshot-isolation regressions and cover per-operation key
selection, defaults, and invalid values.

### Release note

Iceberg DELETE, UPDATE, and MERGE now honor their standard per-operation
isolation-level table properties.

### Check List (For Author)

- Test: FE unit tests
  - mvn -f fe/pom.xml -pl :fe-connector-iceberg -am test \
      -Dmaven.build.cache.enabled=false
  - 1748 tests run; 4 unrelated GCS/Glue authentication tests failed with
    upstream AWS HTTP 503 responses. All transaction and isolation tests passed.
- Behavior changed: Yes, snapshot isolation now permits concurrent data-file
  appends while retaining delete-file and referenced-data-file validation.
- 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?

@hubgeter

Copy link
Copy Markdown
Contributor Author

run buildall

@hubgeter

Copy link
Copy Markdown
Contributor 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.

One verified P1 requires changes: SQL UPDATE is still translated as MERGE, so the new selector uses the MERGE isolation property for UPDATE. With MERGE=snapshot and UPDATE=serializable (including its default), UPDATE can newly skip conflicting-data-file validation. The inverse settings also leave the promised UPDATE snapshot behavior broken. The inline finding describes the complete caller chain and required operation propagation fix.

Reviewed all three changed files, their SQL-to-sink callers, both RowDelta builders, transaction publication/retry/cleanup, and the pinned Iceberg 1.12.0 APIs. No existing inline findings were supplied or found in the PR-scoped readback; existing_blocking_comment_ids is empty. No additional user focus was supplied.

Critical checkpoint Conclusion
Goal and proof Standard per-operation isolation selection is correct for the supplied enum, but the SQL UPDATE path violates the goal (P1). New tests inject the enum directly and miss this path.
Scope and clarity Small, focused change; reuses SDK constants and parser.
Concurrency and locks Independent catalog writers race with the SDK commit/replay. Wrong UPDATE identity changes validation (P1); no new threads, lock work, lock order, or deadlock path.
Lifecycle/static initialization Existing begin/commit/close and table leases remain intact; no new resource ownership or static initialization.
Configuration/dynamic changes Uses existing persisted Iceberg table properties, read from transaction metadata; no new FE config or restart requirement.
Compatibility/rolling upgrades No SPI, wire, symbol, or storage-format change. The old nonstandard delete_isolation_level key no longer controls writes; legacy-only tables use standard defaults.
Thrift/protobuf No definition or field-ID changes.
Parallel paths DELETE and SQL MERGE carry the correct operation; UPDATE shares their merge sink but loses its identity. INSERT/OVERWRITE/REWRITE are unaffected. Whole-file metadata DELETE remains its existing separate path.
Special conditions Only serializable requests conflicting-data-file validation; base snapshot, conflict filter, delete-file, and referenced-file validations remain enabled. Invalid values throw.
Test coverage Connector helper tests cover defaults, distinct keys, invalid input, and concurrent-append acceptance; enabled tests use real SDK metadata commits with v2 delete fragments. SQL translation and v3 snapshot behavior are not newly exercised.
Test results No golden results changed. Tests/builds were not run under the static-only contract; author-reported passes were not independently reproduced.
Observability Existing commit exception wrapping surfaces parser/conflict failures; no new metrics/logging requirement identified.
Persistence/failover Remote SDK metadata publication, retry, and cleanup remain unchanged; no new Doris EditLog state or failover path. Crash/failover behavior was inspected, not executed.
Writes/atomicity/crashes Data and delete files still publish in one SDK RowDelta/transaction. Remaining guards survive retries, but UPDATE isolation is weakened in the P1 scenario. No new crash-cleanup path.
FE-to-BE propagation No new transmitted variable; the faulty operation identity is in the existing FE write handle.
Performance One constant-time property lookup/switch and enum parse per commit; no new IO, unbounded work, or significant memory allocation.
Other issues/core invariants No further introduced issue found. Native partition versions, MoW delete bitmaps, and BE allocation tracking are unchanged. The inherited empty-read -1 ancestry fence was verified and excluded as pre-existing.

The property names/defaults and strict case-insensitive parsing match the pinned TableProperties and IsolationLevel sources. The retained checks are independent in BaseRowDelta.

Converged after 2 review rounds: all three reviewers returned NO_NEW_VALUABLE_FINDINGS on the unchanged final set, required static coverage is complete, and every candidate/risk has an evidence-based disposition. Limits: no builds, tests, live concurrent SQL, physical data reads, or crash injection were performed. No unresolved candidate or static coverage gap remains.

Review converged after 2 round(s).

applyBaseSnapshotValidation(rowDelta);
applyConflictDetectionFilter(rowDelta, icebergTable, commitData);
if (isSerializableIsolationLevel(icebergTable)) {
if (isSerializableIsolationLevel(icebergTable, writeOperation)) {

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.

[P1] Preserve SQL UPDATE identity before selecting isolation

Real SQL UPDATE reaches this call with writeOperation=MERGE: ExternalRowLevelUpdatePlanBuilder.buildMergePlan creates the shared merge sink, and PhysicalPlanTranslator.visitPhysicalExternalRowLevelMergeSink hardcodes WriteOperation.MERGE (PhysicalPlanTranslator.java:613-619); the write handle/context preserve it. With write.update.isolation-level=serializable (including its default) and write.merge.isolation-level=snapshot, UPDATE now reads the MERGE property and skips validateNoConflictingDataFiles, allowing a matching concurrent append that its configured isolation should reject. Conversely, UPDATE=snapshot with the default MERGE setting still rejects appends. Preserve UPDATE versus MERGE through the engine-to-connector operation and cover the SQL/planner path; the enabled UPDATE test constructs IcebergWriteContext(UPDATE) directly and misses this.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17614	5218	5078	5078
q2	2164	306	257	257
q3	10184	1370	835	835
q4	4684	450	331	331
q5	7429	800	542	542
q6	185	187	154	154
q7	751	802	611	611
q8	9270	1337	1038	1038
q9	5445	4143	4167	4143
q10	6835	1284	1053	1053
q11	438	257	230	230
q12	653	396	296	296
q13	18094	3745	3068	3068
q14	284	276	249	249
q15	q16	748	718	674	674
q17	1210	757	601	601
q18	6927	6168	6105	6105
q19	1245	964	605	605
q20	410	339	236	236
q21	5916	2484	2516	2484
q22	391	333	272	272
Total cold run time: 100877 ms
Total hot run time: 28862 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	6003	5984	6117	5984
q2	731	625	579	579
q3	5593	5866	5294	5294
q4	2043	2170	1695	1695
q5	5748	5769	5677	5677
q6	244	183	145	145
q7	2254	2067	1800	1800
q8	3013	2671	2692	2671
q9	7885	7488	7455	7455
q10	3639	3566	3232	3232
q11	591	426	387	387
q12	665	689	505	505
q13	3314	3632	3052	3052
q14	295	290	266	266
q15	q16	670	692	611	611
q17	7895	7066	6946	6946
q18	12963	12167	12891	12167
q19	925	817	799	799
q20	2150	2154	1899	1899
q21	5982	4828	5046	4828
q22	514	448	416	416
Total cold run time: 73117 ms
Total hot run time: 66408 ms

@hello-stephen

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

query5	4331	600	429	429
query6	429	220	200	200
query7	4810	452	229	229
query8	331	167	145	145
query9	8758	3271	3296	3271
query10	475	317	269	269
query11	5961	3872	3575	3575
query12	150	96	90	90
query13	1276	468	331	331
query14	6068	3958	3695	3695
query14_1	3467	3461	3468	3461
query15	208	200	184	184
query16	939	402	377	377
query17	881	663	549	549
query18	2425	434	312	312
query19	192	173	146	146
query20	87	88	83	83
query21	207	132	108	108
query22	13063	13064	12880	12880
query23	13655	12781	12390	12390
query23_1	12554	12510	12515	12510
query24	7359	844	486	486
query24_1	500	492	494	492
query25	545	427	373	373
query26	1270	258	148	148
query27	2732	443	284	284
query28	4582	2067	2061	2061
query29	1603	623	456	456
query30	302	224	180	180
query31	1013	928	828	828
query32	162	96	96	96
query33	540	330	238	238
query34	874	860	523	523
query35	746	740	650	650
query36	825	805	728	728
query37	120	92	85	85
query38	1797	1733	1698	1698
query39	815	793	745	745
query39_1	732	735	742	735
query40	221	117	107	107
query41	65	61	63	61
query42	84	87	81	81
query43	350	358	322	322
query44	1366	710	725	710
query45	180	180	175	175
query46	838	976	568	568
query47	2871	2795	2851	2795
query48	315	320	227	227
query49	592	401	289	289
query50	689	276	223	223
query51	10526	10538	10594	10538
query52	81	81	72	72
query53	190	211	152	152
query54	239	199	187	187
query55	79	70	64	64
query56	246	219	206	206
query57	1666	1614	1579	1579
query58	291	270	268	268
query59	2148	2169	1992	1992
query60	309	266	229	229
query61	142	148	152	148
query62	387	339	297	297
query63	197	156	166	156
query64	2726	914	769	769
query65	3322	3279	3273	3273
query66	1769	423	302	302
query67	20314	20292	20085	20085
query68	2944	1033	633	633
query69	390	293	251	251
query70	862	785	789	785
query71	305	252	229	229
query72	2796	2658	2336	2336
query73	537	534	307	307
query74	4653	4512	4361	4361
query75	2369	2302	1937	1937
query76	2323	1019	585	585
query77	350	379	276	276
query78	9975	9622	9140	9140
query79	1052	854	549	549
query80	1229	453	337	337
query81	575	322	274	274
query82	895	133	106	106
query83	299	198	187	187
query84	306	128	101	101
query85	910	420	374	374
query86	410	244	229	229
query87	1997	1952	1820	1820
query88	3924	2834	2823	2823
query89	342	283	244	244
query90	1911	172	178	172
query91	157	149	130	130
query92	97	96	93	93
query93	1068	1030	589	589
query94	649	307	269	269
query95	574	342	301	301
query96	696	492	243	243
query97	2467	2422	2306	2306
query98	164	161	153	153
query99	773	760	645	645
Total cold run time: 236717 ms
Total hot run time: 152102 ms

@hello-stephen

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

query1	0.01	0.01	0.01
query2	0.10	0.05	0.04
query3	0.26	0.09	0.09
query4	1.61	0.10	0.10
query5	0.27	0.25	0.27
query6	1.17	0.70	0.67
query7	0.04	0.00	0.00
query8	0.06	0.04	0.04
query9	0.40	0.36	0.36
query10	0.58	0.59	0.62
query11	0.20	0.15	0.14
query12	0.19	0.15	0.15
query13	0.50	0.51	0.48
query14	1.01	1.00	1.01
query15	0.62	0.61	0.62
query16	0.35	0.35	0.35
query17	1.13	1.15	1.17
query18	0.20	0.19	0.18
query19	2.14	1.99	1.99
query20	0.02	0.02	0.01
query21	15.47	0.20	0.14
query22	4.90	0.05	0.05
query23	16.38	0.32	0.13
query24	2.45	0.58	0.36
query25	0.12	0.06	0.05
query26	1.46	0.21	0.15
query27	0.04	0.05	0.05
query28	4.09	0.78	0.38
query29	12.52	4.08	3.31
query30	0.28	0.12	0.10
query31	2.78	0.55	0.32
query32	3.22	0.60	0.51
query33	3.18	3.23	3.12
query34	15.38	3.99	3.37
query35	3.32	3.32	3.32
query36	0.56	0.45	0.41
query37	0.09	0.07	0.06
query38	0.05	0.04	0.04
query39	0.04	0.03	0.03
query40	0.17	0.15	0.14
query41	0.09	0.03	0.02
query42	0.04	0.02	0.02
query43	0.04	0.04	0.03
Total cold run time: 97.53 s
Total hot run time: 24.32 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage `` 🎉
Increment coverage report
Complete coverage report

### What problem does this PR solve?

Related PR: apache#69551

Problem Summary:
UPDATE and SQL MERGE share the physical row-level sink and BE merge
dialect. PhysicalPlanTranslator hardcoded WriteOperation.MERGE for both,
so SQL UPDATE still selected write.merge.isolation-level after the
connector began honoring operation-specific properties.

Use the sink's existing SQL-MERGE cardinality marker to preserve UPDATE
versus MERGE when constructing the connector write handle. Also validate
write-provider support against the concrete operation instead of accepting
any DELETE/MERGE-capable provider.

Add translator assertions for both paths and include UPDATE in the mocked
provider capabilities.

### Release note

None

### Check List (For Author)

- Test: Unit Test
  - PhysicalPlanTranslatorIcebergRowLevelDmlTest
  - ExternalRowLevelUpdatePlanBuilderTest
- Behavior changed: Yes, SQL UPDATE now reads write.update.isolation-level.
- Does this need documentation: No
@hubgeter

Copy link
Copy Markdown
Contributor Author

run buildall

@hubgeter

Copy link
Copy Markdown
Contributor 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.

Reviewed all five changed files and their relevant planner, write-provider, transaction, gateway, and test paths at fb3ed36d8b29cd381a5d2efb48505bb0f0b58fbf. No new actionable findings.

The existing P1 about SQL UPDATE selecting MERGE isolation is fixed on this head. The UPDATE builder always carries requireMergeCardinalityCheck=false; SQL MERGE always carries true, independently of its actions. Planner copies preserve that distinction. The changed translator now selects UPDATE or MERGE accordingly, and the write handle, IcebergWriteContext, and transaction preserve that operation through isolation selection. The existing comment is therefore excluded from the retained blocking IDs and is not reposted.

The reviewed flow is:

SQL UPDATE -> shared logical/physical sink(cardinality=false) -> WriteOperation.UPDATE
SQL MERGE  -> shared logical/physical sink(cardinality=true)  -> WriteOperation.MERGE
           -> plugin write handle -> Iceberg write context -> transaction RowDelta
           -> corresponding write.update/write.merge.isolation-level property

Critical checkpoint conclusions:

  1. Goal and correctness: DELETE, UPDATE, and MERGE select their matching standard property and serializable default. Snapshot skips only conflicting-data-file validation; base-snapshot, deleted-file, conflicting-delete, and referenced-file checks remain. The behavior matches the pinned Iceberg isolation contract and RowDelta validation implementation.
  2. Scope and reuse: the five-file change stays focused and reuses SDK constants/parser. Shared engine code does not parse connector properties.
  3. Concurrency and locks: independent writers can commit between the statement read and its final metadata commit. Existing snapshot fences and transaction-manager serialization remain; no new threads, locks, lock-order edges, or IO under new locks are introduced.
  4. Lifecycle: statement-bound operation and existing transaction/table-lease ownership remain intact. Begin/finalize error handling, close, and statement-end cleanup paths are unchanged; no static-initialization concern is added.
  5. Configuration: existing Iceberg table properties are read from the transaction table without a new FE configuration or restart mechanism. The obsolete nonstandard delete_isolation_level key is no longer consumed; invalid standard values fail explicitly.
  6. Compatibility: no public SPI, storage representation, or BE sink dialect changes. UPDATE already has provider/transaction support and continues using the merge sink. Operation-sensitive Variant and nested-partition upgrade guards remain effective because SQL UPDATE writes replacement data.
  7. Thrift/protobuf: no definitions or field IDs change; the release-branch ID audit is inapplicable.
  8. Parallel paths: DELETE and shared UPDATE/MERGE RowDelta paths, data-only/delete-only MERGE, V2/V3 deletion handling, empty-source behavior, EXPLAIN, and per-handle Hive-to-Iceberg routing were checked. INSERT/OVERWRITE/REWRITE and changelog paths remain outside the changed isolation selection.
  9. Conditions: the cardinality-to-statement mapping is upheld by both builders and all relevant copies/settings. Admission now checks the concrete operation against the same per-handle provider used for planning; unsupported operations fail explicitly.
  10. Test coverage: inspected defaults, mixed operation properties, invalid-name handling, enabled concurrent-append cases for all three operations, translator identity assertions, and related builder/snapshot/serializable/V3 tests. The enabled UPDATE/MERGE append cases contain delete fragments only. The PR adds no full SQL-to-commit asymmetric-property test, single-operation-provider rejection test, or V3 snapshot/concurrent-delete matrix. These are test-strength limits; corresponding source paths were traced without an unresolved correctness candidate.
  11. Test results: no regression result files change. Modified JUnit expectations agree with the inspected control flow. No builds or tests were executed under this static-only contract.
  12. Observability and errors: existing transaction error propagation remains, invalid isolation values fail, and the admission error now identifies the operation. No additional logging or metric requirement was identified for this change.
  13. Persistence and failover: no Doris EditLog state or recovery protocol is added. Existing Iceberg metadata commit and FE-failure behavior remain in use.
  14. Writes and atomicity: replacement data and position deletes remain in one RowDelta and SDK transaction, with mandatory validation before publication. No new crash or cleanup ownership window was identified.
  15. FE/BE propagation: no new wire variable; operation identity stays in the engine/connector context while existing writesDataFiles/cardinality fields continue through the shared sink.
  16. Performance: constant-size operation selection and property lookup per RowDelta; no additional remote IO, row loop, repeated scan, or allocation growth.
  17. Other invariants: native partition-visible-version, MoW bitmap, BE memory/nullability, and optimizer rule-registration/property-derivation changes are inapplicable. No additional issue was substantiated.

No additional user focus was supplied. All three assigned reviewers returned NO_NEW_VALUABLE_FINDINGS after their final rechecks; main verification and the final sweep covered the entire authoritative changed-file list and all investigated risks. Review converged in round 1. Remaining limits are static-only verification and the test-strength gaps above; no unresolved finding or uncovered required static scope remains.

Review converged after 1 round(s).

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17625	5170	5035	5035
q2	2137	317	241	241
q3	10256	1355	807	807
q4	4678	469	347	347
q5	7420	782	532	532
q6	178	186	154	154
q7	743	784	591	591
q8	9253	1266	1070	1070
q9	5469	4200	4159	4159
q10	6824	1293	1023	1023
q11	431	254	226	226
q12	635	407	277	277
q13	18091	3563	3046	3046
q14	268	273	252	252
q15	q16	714	715	665	665
q17	1194	764	582	582
q18	7002	6172	6102	6102
q19	1097	950	582	582
q20	365	325	224	224
q21	4474	2115	2249	2115
q22	345	290	259	259
Total cold run time: 99199 ms
Total hot run time: 28289 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	5598	5540	5550	5540
q2	693	575	534	534
q3	5234	5418	4911	4911
q4	1984	2132	1559	1559
q5	5234	5173	5343	5173
q6	281	226	156	156
q7	2359	2031	1885	1885
q8	3051	2667	2679	2667
q9	8100	8093	8007	8007
q10	3854	3683	3279	3279
q11	613	442	426	426
q12	721	719	521	521
q13	3471	3839	3336	3336
q14	335	315	314	314
q15	q16	707	714	638	638
q17	8161	6984	6942	6942
q18	12978	12196	12908	12196
q19	932	780	788	780
q20	2124	2125	1904	1904
q21	5542	4545	4644	4545
q22	483	453	398	398
Total cold run time: 72455 ms
Total hot run time: 65711 ms

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 100.00% (4/4) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

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

query5	4310	602	455	455
query6	442	206	195	195
query7	4809	439	225	225
query8	317	164	150	150
query9	8776	3166	3171	3166
query10	478	309	260	260
query11	5979	3837	3586	3586
query12	159	92	87	87
query13	1241	424	332	332
query14	6163	3922	3624	3624
query14_1	3398	3420	3410	3410
query15	209	201	182	182
query16	949	431	403	403
query17	862	665	503	503
query18	2405	405	300	300
query19	199	157	141	141
query20	85	81	80	80
query21	206	124	105	105
query22	13091	12954	12709	12709
query23	13338	12885	12414	12414
query23_1	12605	12408	12571	12408
query24	7403	817	464	464
query24_1	470	473	479	473
query25	506	396	328	328
query26	1248	255	139	139
query27	2774	442	267	267
query28	4642	2032	2028	2028
query29	1538	575	444	444
query30	302	215	182	182
query31	1003	915	805	805
query32	139	85	88	85
query33	500	293	241	241
query34	933	872	513	513
query35	732	756	637	637
query36	807	825	713	713
query37	126	96	90	90
query38	1801	1747	1646	1646
query39	785	821	761	761
query39_1	739	723	735	723
query40	218	113	95	95
query41	73	68	66	66
query42	100	95	90	90
query43	342	366	309	309
query44	1327	704	702	702
query45	179	179	171	171
query46	842	986	566	566
query47	3027	3001	2771	2771
query48	294	308	224	224
query49	579	400	293	293
query50	679	280	206	206
query51	10261	10569	10272	10272
query52	76	79	69	69
query53	193	208	157	157
query54	238	195	194	194
query55	79	65	63	63
query56	233	209	202	202
query57	1646	1601	1560	1560
query58	284	271	254	254
query59	2186	2182	1965	1965
query60	287	236	220	220
query61	149	144	148	144
query62	386	331	286	286
query63	183	152	161	152
query64	2755	923	767	767
query65	3339	3250	3242	3242
query66	1779	429	309	309
query67	20130	20397	19964	19964
query68	2956	1018	614	614
query69	393	281	258	258
query70	837	772	804	772
query71	307	248	244	244
query72	2898	2701	2409	2409
query73	526	530	300	300
query74	4631	4480	4350	4350
query75	2329	2293	1919	1919
query76	2325	1012	604	604
query77	347	396	280	280
query78	10035	9656	9146	9146
query79	994	852	537	537
query80	872	440	349	349
query81	578	314	272	272
query82	588	132	103	103
query83	305	196	192	192
query84	313	137	106	106
query85	867	426	378	378
query86	351	236	229	229
query87	2032	1933	1806	1806
query88	3797	2762	2733	2733
query89	330	276	243	243
query90	1800	168	161	161
query91	161	158	126	126
query92	100	88	93	88
query93	998	997	572	572
query94	524	299	254	254
query95	573	323	357	323
query96	682	473	237	237
query97	2428	2432	2334	2334
query98	159	159	148	148
query99	772	777	658	658
Total cold run time: 234843 ms
Total hot run time: 150685 ms

@hello-stephen

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

query1	0.01	0.01	0.00
query2	0.08	0.05	0.05
query3	0.26	0.08	0.09
query4	1.61	0.10	0.11
query5	0.23	0.24	0.24
query6	1.17	0.69	0.69
query7	0.04	0.00	0.01
query8	0.05	0.04	0.04
query9	0.40	0.35	0.35
query10	0.56	0.58	0.60
query11	0.20	0.15	0.14
query12	0.18	0.14	0.14
query13	0.49	0.50	0.48
query14	1.02	1.01	1.00
query15	0.63	0.61	0.61
query16	0.35	0.36	0.35
query17	1.13	1.15	1.11
query18	0.21	0.19	0.20
query19	2.08	2.02	1.94
query20	0.02	0.01	0.02
query21	15.50	0.19	0.14
query22	4.92	0.06	0.05
query23	16.27	0.32	0.13
query24	3.15	0.57	0.31
query25	0.10	0.07	0.07
query26	0.89	0.23	0.15
query27	0.05	0.05	0.05
query28	2.96	0.74	0.37
query29	12.47	4.18	3.26
query30	0.28	0.12	0.09
query31	2.76	0.55	0.34
query32	3.24	0.60	0.50
query33	3.16	3.16	3.20
query34	15.41	4.04	3.40
query35	3.37	3.40	3.40
query36	0.55	0.46	0.42
query37	0.09	0.06	0.06
query38	0.05	0.04	0.03
query39	0.03	0.04	0.03
query40	0.18	0.15	0.14
query41	0.09	0.03	0.03
query42	0.04	0.03	0.03
query43	0.04	0.03	0.03
Total cold run time: 96.32 s
Total hot run time: 24.29 s

### What problem does this PR solve?

Issue Number: N/A

Related PR: apache#69702

Problem Summary:
The row-level DML admission gate now includes the rejected operation in its
error message. The existing only-INSERT connector test still expects the
previous generic message, so it fails even though DELETE is correctly rejected.
Update the assertion to require the DELETE-specific message and align the
fixture comment. Preserve the exception and distinct INSERT-message checks.

### Release note

None

### Check List (For Author)

- Test: Unit Test
    - run-fe-ut.sh --run: PhysicalPlanTranslatorAdmissionGateTest,
      PhysicalPlanTranslatorIcebergRowLevelDmlTest, and
      ExternalRowLevelUpdatePlanBuilderTest; 20 tests passed, 0 skipped
    - FE core Checkstyle: 0 violations
    - git diff --check passed
- Behavior changed: No (test-only update)
- Does this need documentation: No
@hubgeter

hubgeter commented Nov 3, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@hubgeter

hubgeter commented Nov 3, 2026

Copy link
Copy Markdown
Contributor Author

/review

@hubgeter
hubgeter marked this pull request as ready for review November 3, 2026 09:42
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: Selected model is at capacity. Please try a different model.
Workflow run: https://github.com/apache/doris/actions/runs/41611865400

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17575	5185	5015	5015
q2	2147	315	263	263
q3	10218	1373	832	832
q4	4677	457	337	337
q5	7451	787	531	531
q6	182	189	156	156
q7	762	818	607	607
q8	9266	1345	1047	1047
q9	5466	4202	4171	4171
q10	6819	1299	1006	1006
q11	442	249	233	233
q12	653	400	273	273
q13	18120	3652	3063	3063
q14	271	274	242	242
q15	q16	738	721	669	669
q17	1212	749	581	581
q18	7084	6197	6137	6137
q19	1245	958	623	623
q20	389	336	227	227
q21	6149	2408	2414	2408
q22	397	324	267	267
Total cold run time: 101263 ms
Total hot run time: 28688 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	5931	5908	6145	5908
q2	702	566	584	566
q3	5703	5793	5338	5338
q4	2025	2159	1605	1605
q5	5925	5698	5731	5698
q6	241	185	141	141
q7	2258	1984	1835	1835
q8	2998	2658	2617	2617
q9	7808	7539	7509	7509
q10	3644	3585	3136	3136
q11	574	408	381	381
q12	666	669	511	511
q13	3332	3609	3095	3095
q14	293	290	278	278
q15	q16	666	684	611	611
q17	7842	7167	6852	6852
q18	12962	12161	12898	12161
q19	902	767	769	767
q20	2146	2147	1939	1939
q21	5599	4557	4683	4557
q22	502	460	402	402
Total cold run time: 72719 ms
Total hot run time: 65907 ms

@hello-stephen

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

query5	4339	602	447	447
query6	426	207	185	185
query7	4803	446	233	233
query8	330	166	152	152
query9	8766	3187	3170	3170
query10	452	322	257	257
query11	5933	3865	3588	3588
query12	156	93	84	84
query13	1254	455	339	339
query14	6124	3921	3657	3657
query14_1	3388	3412	3419	3412
query15	206	199	201	199
query16	956	474	436	436
query17	847	648	553	553
query18	2435	436	309	309
query19	211	160	143	143
query20	86	87	83	83
query21	222	131	107	107
query22	12914	13153	12908	12908
query23	13675	12973	12465	12465
query23_1	12687	12541	12524	12524
query24	7375	819	472	472
query24_1	487	482	494	482
query25	539	416	362	362
query26	1267	266	137	137
query27	2770	443	275	275
query28	4612	2048	2042	2042
query29	1558	603	456	456
query30	290	223	183	183
query31	1013	937	813	813
query32	140	93	94	93
query33	533	302	247	247
query34	892	889	505	505
query35	746	754	653	653
query36	818	828	738	738
query37	124	104	81	81
query38	1781	1740	1682	1682
query39	798	815	740	740
query39_1	723	718	738	718
query40	218	122	97	97
query41	72	70	67	67
query42	97	84	85	84
query43	346	372	313	313
query44	1315	698	703	698
query45	188	177	172	172
query46	846	965	584	584
query47	3070	2649	2923	2649
query48	288	300	218	218
query49	569	397	290	290
query50	679	276	212	212
query51	10854	10608	10622	10608
query52	81	77	67	67
query53	184	200	151	151
query54	233	218	187	187
query55	68	65	60	60
query56	223	202	205	202
query57	1617	1623	1560	1560
query58	287	262	254	254
query59	2196	2230	1993	1993
query60	285	233	242	233
query61	146	142	157	142
query62	390	336	279	279
query63	186	155	154	154
query64	2745	919	731	731
query65	3353	3268	3288	3268
query66	1813	416	298	298
query67	20176	20182	20166	20166
query68	2984	984	610	610
query69	372	277	243	243
query70	861	756	747	747
query71	288	234	206	206
query72	2702	2536	2237	2237
query73	523	532	291	291
query74	4637	4464	4313	4313
query75	2331	2270	1903	1903
query76	2313	1022	587	587
query77	337	367	257	257
query78	9769	9771	9283	9283
query79	1027	854	534	534
query80	921	423	333	333
query81	585	329	264	264
query82	569	131	107	107
query83	298	194	179	179
query84	317	120	102	102
query85	859	414	365	365
query86	357	242	232	232
query87	2015	1934	1785	1785
query88	3779	2807	2783	2783
query89	334	287	240	240
query90	1780	178	174	174
query91	164	151	127	127
query92	91	89	89	89
query93	1017	1011	572	572
query94	519	308	282	282
query95	581	337	388	337
query96	681	504	239	239
query97	2462	2443	2324	2324
query98	163	147	144	144
query99	766	769	659	659
Total cold run time: 235398 ms
Total hot run time: 151561 ms

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17591	5121	5029	5029
q2	2150	296	243	243
q3	10284	1375	808	808
q4	4680	460	337	337
q5	7442	789	527	527
q6	181	192	159	159
q7	759	786	595	595
q8	9255	1312	1051	1051
q9	5482	4192	4169	4169
q10	6812	1297	1006	1006
q11	436	249	228	228
q12	638	406	281	281
q13	18083	3551	3023	3023
q14	272	279	252	252
q15	q16	720	739	668	668
q17	1184	740	568	568
q18	6890	6166	6085	6085
q19	1098	940	575	575
q20	371	327	219	219
q21	5132	2166	2250	2166
q22	339	292	247	247
Total cold run time: 99799 ms
Total hot run time: 28236 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	5566	5657	5600	5600
q2	665	573	537	537
q3	5215	5372	4892	4892
q4	1987	2138	1549	1549
q5	5236	5125	5462	5125
q6	268	219	162	162
q7	2312	2068	1799	1799
q8	3077	2727	2664	2664
q9	8021	7961	7945	7945
q10	3691	3797	3182	3182
q11	601	454	435	435
q12	686	697	529	529
q13	3568	3801	3294	3294
q14	316	320	294	294
q15	q16	704	723	665	665
q17	8303	7063	6882	6882
q18	12995	12182	12957	12182
q19	883	785	763	763
q20	2132	2135	1934	1934
q21	5619	4575	4648	4575
q22	514	453	438	438
Total cold run time: 72359 ms
Total hot run time: 65446 ms

@hello-stephen

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

query5	4297	605	442	442
query6	420	194	184	184
query7	4799	437	225	225
query8	326	163	150	150
query9	8728	3108	3146	3108
query10	469	312	253	253
query11	5973	3836	3560	3560
query12	146	96	85	85
query13	1250	448	324	324
query14	6146	3925	3638	3638
query14_1	3423	3468	3410	3410
query15	203	200	183	183
query16	947	427	417	417
query17	857	658	558	558
query18	2413	432	306	306
query19	192	161	135	135
query20	87	94	83	83
query21	211	127	105	105
query22	12944	12977	12772	12772
query23	13429	12886	12576	12576
query23_1	12520	12564	12579	12564
query24	7397	830	473	473
query24_1	488	474	472	472
query25	539	421	364	364
query26	1270	258	140	140
query27	2755	443	273	273
query28	4657	2013	2004	2004
query29	1577	596	450	450
query30	299	220	185	185
query31	1009	927	821	821
query32	147	93	90	90
query33	520	316	264	264
query34	934	853	514	514
query35	741	761	660	660
query36	833	808	711	711
query37	117	97	82	82
query38	1764	1745	1671	1671
query39	797	797	746	746
query39_1	732	740	746	740
query40	218	121	104	104
query41	75	73	70	70
query42	93	93	81	81
query43	350	379	323	323
query44	1335	701	710	701
query45	179	177	167	167
query46	837	970	588	588
query47	2977	3050	2876	2876
query48	300	315	228	228
query49	669	389	290	290
query50	687	301	216	216
query51	10605	10831	10395	10395
query52	75	85	76	76
query53	186	206	146	146
query54	243	192	173	173
query55	68	63	64	63
query56	240	227	216	216
query57	1642	1618	1565	1565
query58	274	264	261	261
query59	2173	2188	1975	1975
query60	290	218	219	218
query61	137	135	133	133
query62	386	345	280	280
query63	183	155	159	155
query64	2710	939	792	792
query65	3329	3255	3269	3255
query66	1774	422	298	298
query67	20276	20254	20097	20097
query68	2944	1010	615	615
query69	379	292	243	243
query70	824	774	777	774
query71	295	230	210	210
query72	2676	2567	2117	2117
query73	507	527	291	291
query74	4583	4469	4334	4334
query75	2314	2309	1926	1926
query76	2316	1029	577	577
query77	340	371	271	271
query78	9876	9749	9169	9169
query79	1002	850	522	522
query80	735	426	346	346
query81	547	308	277	277
query82	569	132	103	103
query83	296	196	183	183
query84	315	123	107	107
query85	878	425	382	382
query86	356	239	233	233
query87	1992	1934	1801	1801
query88	3709	2764	2748	2748
query89	326	277	262	262
query90	1815	162	161	161
query91	154	153	124	124
query92	99	85	88	85
query93	994	1010	573	573
query94	505	306	264	264
query95	559	322	361	322
query96	683	485	242	242
query97	2472	2428	2296	2296
query98	161	153	147	147
query99	761	759	642	642
Total cold run time: 234394 ms
Total hot run time: 151165 ms

@hello-stephen

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

query1	0.00	0.01	0.00
query2	0.09	0.06	0.05
query3	0.26	0.08	0.08
query4	1.60	0.10	0.10
query5	0.24	0.25	0.25
query6	1.17	0.68	0.68
query7	0.04	0.01	0.01
query8	0.06	0.04	0.03
query9	0.41	0.36	0.34
query10	0.57	0.57	0.58
query11	0.20	0.14	0.15
query12	0.19	0.14	0.14
query13	0.49	0.51	0.48
query14	1.02	1.01	1.00
query15	0.64	0.63	0.61
query16	0.36	0.36	0.36
query17	1.16	1.09	1.16
query18	0.21	0.19	0.19
query19	2.13	1.99	1.98
query20	0.02	0.02	0.01
query21	15.47	0.19	0.13
query22	4.96	0.05	0.05
query23	16.27	0.33	0.13
query24	3.03	0.82	0.36
query25	0.10	0.06	0.05
query26	1.55	0.22	0.15
query27	0.04	0.03	0.05
query28	3.76	0.77	0.36
query29	12.49	4.16	3.22
query30	0.27	0.12	0.09
query31	2.77	0.54	0.33
query32	3.21	0.59	0.51
query33	3.26	3.32	3.36
query34	15.49	4.00	3.39
query35	3.31	3.33	3.37
query36	0.56	0.45	0.44
query37	0.10	0.07	0.06
query38	0.04	0.04	0.03
query39	0.03	0.04	0.03
query40	0.18	0.15	0.15
query41	0.09	0.04	0.03
query42	0.04	0.03	0.03
query43	0.04	0.03	0.04
Total cold run time: 97.92 s
Total hot run time: 24.36 s

### What problem does this PR solve?

Issue Number: N/A

Related PR: apache#69702

Problem Summary: Standard-only isolation selection made existing tables configured
with delete_isolation_level=snapshot fall back to serializable and reject
previously permitted concurrent appends. Parsing an invalid selected value only
during commit also failed after backend files had been reported, when normal
rollback could no longer reclaim them.

Resolve the operation's standard property, legacy compatibility property, then SDK
default. Parse and cache the SDK isolation enum from the opened transaction's
metadata before publishing the prepared transaction or returning a backend sink.
Commit uses that cached selection while retaining the other row-delta validations.

### Release note

Iceberg row-level writes retain valid legacy isolation settings and reject invalid
selected isolation values before backend file creation.

### Check List (For Author)

- Test: Unit Test
    - run-fe-ut.sh --run: six targeted connector/planner classes, 237 tests
      discovered, 236 passed, one pre-existing unrelated disabled test
    - Independent Checkstyle for fe-connector-iceberg and fe-core: zero violations
    - Scoped git diff --check and added-lines checks passed
- Behavior changed: Yes, preserve legacy-only isolation compatibility and validate
  the selected isolation before backend writes, fixed for the statement lifetime
- Does this need documentation: No
@hubgeter

hubgeter commented Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@hubgeter

hubgeter commented Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

Local pipeline review — ✅ PASS

schema: doris-repo-review/v1
status: PASS
pr: apache/doris#69702
commit: ea9d174fb9d65248e0dac3c1572ff8b51a9b23fa
base: 5caaeb3e3d488fd6eb319dfd6553682e47b9be59
reviewed_at: 2026-11-04T12:29+08:00
reviewer: hubgeter
model: gpt-6.1-sol
effort: max
findings: {blocker: 0, major: 0, minor: 0, nit: 0}
rounds: 1
converged: true

Notes for maintainers

  • fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergConnectorTransactionTest.java:1987-2122: repair validation through the repository wrapper passed236 tests with one pre-existing unrelated skip; independent connector/core Checkstyle had zero violations. This local review did not rerun builds/tests.
  • fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergWritePlanProviderTest.java:348-377: actual provider/begin failures precede sink creation; no live SQL/BE, crash-injection or complete V3/concurrent-delete matrix was run. Complete remote CI remains pending.

Reviewed locally with the doris-repo-review pipeline. Repository policy may accept this receipt for the matching commit; it is not a human Apache approval.

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 100.00% (4/4) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17593	5196	5076	5076
q2	2150	309	255	255
q3	10237	1396	789	789
q4	4686	461	334	334
q5	7441	794	524	524
q6	183	188	152	152
q7	760	825	599	599
q8	9269	1274	1107	1107
q9	5409	4203	4194	4194
q10	6816	1280	1011	1011
q11	429	250	230	230
q12	639	398	278	278
q13	18117	3646	3044	3044
q14	281	271	252	252
q15	q16	733	728	645	645
q17	1190	788	579	579
q18	7043	6176	6126	6126
q19	1137	951	602	602
q20	378	331	223	223
q21	5060	2448	2523	2448
q22	373	335	271	271
Total cold run time: 99924 ms
Total hot run time: 28739 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	5994	5875	6095	5875
q2	737	600	589	589
q3	5555	5824	5256	5256
q4	1997	2151	1559	1559
q5	5707	5820	5605	5605
q6	249	188	142	142
q7	2225	2031	1830	1830
q8	2994	2717	2670	2670
q9	8003	7698	7476	7476
q10	3595	3563	3126	3126
q11	593	408	385	385
q12	666	651	498	498
q13	3395	3575	2990	2990
q14	283	294	256	256
q15	q16	679	692	619	619
q17	7790	7087	6997	6997
q18	12989	12209	12875	12209
q19	915	766	767	766
q20	2163	2136	1953	1953
q21	5611	4619	4722	4619
q22	491	480	408	408
Total cold run time: 72631 ms
Total hot run time: 65828 ms

@hello-stephen

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

query5	4311	578	434	434
query6	431	217	211	211
query7	4815	442	229	229
query8	320	163	151	151
query9	8790	3132	3173	3132
query10	468	318	263	263
query11	6011	3822	3560	3560
query12	152	95	89	89
query13	1279	439	313	313
query14	6149	3871	3597	3597
query14_1	3431	3422	3368	3368
query15	207	213	187	187
query16	933	416	395	395
query17	859	669	545	545
query18	2420	428	309	309
query19	201	162	133	133
query20	85	86	86	86
query21	216	137	112	112
query22	13067	12947	12839	12839
query23	13478	12850	12368	12368
query23_1	12525	12497	12529	12497
query24	7348	814	473	473
query24_1	482	479	468	468
query25	536	438	367	367
query26	1265	257	140	140
query27	2750	438	279	279
query28	4598	2019	2020	2019
query29	1559	595	453	453
query30	306	224	185	185
query31	1013	931	817	817
query32	151	94	94	94
query33	538	308	242	242
query34	872	841	494	494
query35	751	747	647	647
query36	806	883	729	729
query37	133	97	88	88
query38	1787	1757	1680	1680
query39	790	785	748	748
query39_1	732	732	740	732
query40	221	113	108	108
query41	76	70	68	68
query42	88	85	84	84
query43	340	363	317	317
query44	1323	701	699	699
query45	179	210	165	165
query46	847	968	565	565
query47	2924	2815	2661	2661
query48	299	306	228	228
query49	573	405	282	282
query50	674	262	210	210
query51	10458	10719	10665	10665
query52	76	79	68	68
query53	184	203	154	154
query54	224	199	175	175
query55	74	63	62	62
query56	247	234	215	215
query57	1633	1590	1582	1582
query58	279	259	256	256
query59	2234	2238	2047	2047
query60	287	241	226	226
query61	148	142	146	142
query62	381	338	292	292
query63	184	162	166	162
query64	2616	930	775	775
query65	3296	3233	3252	3233
query66	1760	417	294	294
query67	20123	20247	19930	19930
query68	3205	1011	653	653
query69	421	283	249	249
query70	855	759	764	759
query71	294	226	209	209
query72	2774	2622	2270	2270
query73	519	516	290	290
query74	4606	4502	4327	4327
query75	2364	2281	1917	1917
query76	2407	988	572	572
query77	348	362	272	272
query78	9913	9666	9157	9157
query79	994	823	524	524
query80	1289	428	334	334
query81	598	311	277	277
query82	829	138	103	103
query83	300	191	186	186
query84	322	126	106	106
query85	991	446	370	370
query86	406	242	228	228
query87	1985	2005	1824	1824
query88	3785	2755	2730	2730
query89	334	289	244	244
query90	1844	166	163	163
query91	162	147	131	131
query92	96	88	85	85
query93	1000	982	580	580
query94	638	300	269	269
query95	576	325	302	302
query96	677	482	241	241
query97	2474	2430	2310	2310
query98	158	161	159	159
query99	772	762	644	644
Total cold run time: 236047 ms
Total hot run time: 150967 ms

@hello-stephen

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

query1	0.01	0.00	0.00
query2	0.10	0.05	0.04
query3	0.26	0.10	0.08
query4	1.61	0.10	0.10
query5	0.27	0.25	0.24
query6	1.17	0.66	0.67
query7	0.04	0.01	0.00
query8	0.06	0.05	0.04
query9	0.41	0.36	0.36
query10	0.59	0.59	0.59
query11	0.20	0.15	0.14
query12	0.19	0.15	0.14
query13	0.49	0.50	0.48
query14	1.03	1.03	1.02
query15	0.63	0.60	0.60
query16	0.34	0.37	0.36
query17	1.17	1.14	1.10
query18	0.20	0.20	0.19
query19	2.08	1.94	2.01
query20	0.02	0.05	0.02
query21	15.50	0.20	0.14
query22	4.92	0.06	0.05
query23	16.29	0.33	0.12
query24	3.14	0.47	0.34
query25	0.14	0.07	0.06
query26	0.86	0.22	0.15
query27	0.04	0.04	0.04
query28	3.48	0.92	0.37
query29	12.48	4.20	3.26
query30	0.28	0.13	0.10
query31	2.77	0.57	0.33
query32	3.22	0.59	0.50
query33	3.13	3.18	3.15
query34	15.58	3.95	3.39
query35	3.37	3.34	3.34
query36	0.57	0.44	0.44
query37	0.09	0.06	0.06
query38	0.05	0.04	0.04
query39	0.04	0.03	0.03
query40	0.17	0.15	0.14
query41	0.08	0.03	0.03
query42	0.04	0.03	0.03
query43	0.05	0.04	0.04
Total cold run time: 97.16 s
Total hot run time: 24.25 s

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

Iceberg row-level DML reads a snapshot, produces files on BE, and publishes them through an FE RowDelta transaction. This change preserves UPDATE versus MERGE identity and resolves the corresponding standard isolation property before sink creation, retaining legacy-property fallback and mandatory delete/reference validations.

Independent static review of all seven changed files and relevant planner, provider, transaction, and cleanup paths found no actionable P0/P1/P2 issue. The previous UPDATE/MERGE isolation finding is fixed: the builders establish distinct cardinality flags, plan copies preserve them, and the translator now propagates the correct operation. Isolation is parsed before transaction publication and remains fixed for the statement. APPROVE for the reviewed FE scope at ea9d174.

No builds or tests were run. Live SQL/BE execution, crash injection, and a complete V3 concurrent-delete matrix were not validated. The supplied current-head snapshot reports successful P0, FE UT, compilation, and external regression checks; FE coverage is pending and required-check rules are unavailable. This is a code-review recommendation, not a merge-readiness determination.

Automated FE-focused static review (gpt-6.1-sol, high). No build or tests were run.

@Gabriel39
Gabriel39 merged commit 0eb5131 into apache:master Nov 4, 2026
37 of 38 checks passed
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