Skip to content

[feature](catalog) Support Alibaba Cloud OSS Tables REST catalog - #66567

Open
xylaaaaa wants to merge 2 commits into
apache:masterfrom
xylaaaaa:agent/support-alibaba-oss-tables-rest-catalog
Open

[feature](catalog) Support Alibaba Cloud OSS Tables REST catalog#66567
xylaaaaa wants to merge 2 commits into
apache:masterfrom
xylaaaaa:agent/support-alibaba-oss-tables-rest-catalog

Conversation

@xylaaaaa

@xylaaaaa xylaaaaa commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary:

Alibaba Cloud OSS Tables exposes an Iceberg REST Catalog that uses the osstables SigV4 service name and an S3-compatible data plane. The plugin-driven Iceberg connector only recognized Glue and S3 Tables as managed signed REST catalogs. Consequently, an OSS Tables catalog did not reuse the selected OSS credentials for REST signing, and its required signing region and SigV4 settings were not fully validated.

This change:

  • recognizes osstables as a managed SigV4 signing name;
  • reuses the selected OSS/S3-compatible AK, SK, and STS token for both the REST control plane and S3FileIO data plane;
  • requires a signing region and sigv4-enabled=true;
  • adds coverage for the official OSS Tables endpoint shape, ACS warehouse ARN, OSS endpoint, and session token mapping.

The current connector's connection check already initializes the real catalog through the full property-building path, so no separate connectivity-only implementation is needed.

Release note

Support Alibaba Cloud OSS Tables through the Iceberg REST Catalog.

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
      • mvn -f fe/pom.xml -pl :fe-connector-metastore-iceberg -am test -Dtest=IcebergRestMetaStorePropertiesTest -DfailIfNoTests=false (13 tests)
      • mvn -f fe/pom.xml -pl :fe-connector-iceberg -am test -Dtest=IcebergCatalogFactoryTest -DfailIfNoTests=false (63 tests)
      • DISABLE_BUILD_UI=ON ./build.sh --fe
    • 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. Iceberg REST catalogs with signing-name=osstables now reuse OSS/S3-compatible credentials and require a signing region with SigV4 enabled. Managed Glue and S3 Tables catalogs also reject an explicit sigv4-enabled=false value during validation instead of failing later at runtime.
  • Does this need documentation?

    • No.
    • Yes. Follow-up documentation should include the OSS Tables REST endpoint, ACS warehouse ARN, osstables signing name, and OSS S3FileIO endpoint.

Check List (For Reviewer who merge this PR)

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

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

@xylaaaaa
xylaaaaa force-pushed the agent/support-alibaba-oss-tables-rest-catalog branch from 25af2e0 to a5fcd36 Compare August 7, 2026 03:28
@xylaaaaa
xylaaaaa marked this pull request as ready for review August 7, 2026 03:29
Copilot AI lite review requested due to automatic review settings August 7, 2026 03:29

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@xylaaaaa

xylaaaaa commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

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

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17718	4043	4047	4043
q2	2034	337	234	234
q3	10295	1531	824	824
q4	4692	486	346	346
q5	7512	866	582	582
q6	191	170	138	138
q7	752	811	609	609
q8	9345	1749	1568	1568
q9	5317	4088	4092	4088
q10	6792	1634	1355	1355
q11	537	367	330	330
q12	717	587	453	453
q13	18112	3258	2730	2730
q14	268	263	240	240
q15	q16	752	733	667	667
q17	1051	1002	977	977
q18	6565	5625	5573	5573
q19	1174	1235	976	976
q20	825	690	585	585
q21	6107	2819	2761	2761
q22	472	383	320	320
Total cold run time: 101228 ms
Total hot run time: 29399 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4983	4616	4608	4608
q2	293	324	227	227
q3	4818	5358	4700	4700
q4	2182	2286	1421	1421
q5	4749	4426	4516	4426
q6	229	172	125	125
q7	1876	1757	1492	1492
q8	2400	2158	2041	2041
q9	7152	6773	6868	6773
q10	4250	4214	3776	3776
q11	522	376	345	345
q12	705	712	493	493
q13	3014	3296	2754	2754
q14	281	274	254	254
q15	q16	661	686	598	598
q17	1248	1210	1211	1210
q18	12224	11085	11750	11085
q19	1111	1096	1051	1051
q20	2199	2186	1930	1930
q21	5276	4533	4555	4533
q22	517	455	421	421
Total cold run time: 60690 ms
Total hot run time: 54263 ms

@hello-stephen

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

query5	4323	572	464	464
query6	466	215	204	204
query7	4867	623	337	337
query8	330	167	148	148
query9	8780	4050	4085	4050
query10	492	360	289	289
query11	5772	2176	2069	2069
query12	156	104	97	97
query13	1282	596	439	439
query14	6084	4323	4033	4033
query14_1	3817	3816	3820	3816
query15	208	197	181	181
query16	1000	420	449	420
query17	947	726	552	552
query18	2455	471	352	352
query19	215	195	152	152
query20	108	103	110	103
query21	238	159	142	142
query22	13106	13149	12769	12769
query23	15973	14968	14659	14659
query23_1	14624	14748	14674	14674
query24	7614	1714	1251	1251
query24_1	1262	1233	1240	1233
query25	557	452	391	391
query26	1316	381	218	218
query27	2591	554	399	399
query28	4545	2052	2040	2040
query29	1072	615	525	525
query30	348	259	221	221
query31	1177	1108	1074	1074
query32	111	61	62	61
query33	524	299	234	234
query34	1201	1156	648	648
query35	730	742	630	630
query36	772	793	732	732
query37	158	109	101	101
query38	1842	1779	1692	1692
query39	831	817	789	789
query39_1	778	784	803	784
query40	245	163	147	147
query41	67	67	64	64
query42	96	93	95	93
query43	315	321	293	293
query44	1464	787	764	764
query45	190	172	170	170
query46	1060	1183	724	724
query47	1552	1545	1421	1421
query48	418	400	294	294
query49	590	450	295	295
query50	1035	426	343	343
query51	10769	10872	10590	10590
query52	89	90	75	75
query53	266	293	196	196
query54	288	235	213	213
query55	82	73	67	67
query56	324	294	281	281
query57	1012	1012	941	941
query58	298	261	263	261
query59	1550	1633	1366	1366
query60	321	263	253	253
query61	154	145	149	145
query62	404	317	269	269
query63	238	198	203	198
query64	2851	1029	858	858
query65	3896	3787	3819	3787
query66	1883	479	355	355
query67	20271	20005	20100	20005
query68	3343	1581	1041	1041
query69	412	297	269	269
query70	921	806	787	787
query71	370	333	317	317
query72	3065	2723	2525	2525
query73	833	794	394	394
query74	4678	4501	4301	4301
query75	2411	2370	2013	2013
query76	2397	1147	783	783
query77	344	364	275	275
query78	11059	11155	10526	10526
query79	1403	1150	737	737
query80	1279	564	459	459
query81	522	337	278	278
query82	677	186	138	138
query83	365	327	295	295
query84	314	161	135	135
query85	970	621	502	502
query86	404	234	223	223
query87	1958	1991	1843	1843
query88	3780	2800	2834	2800
query89	409	321	281	281
query90	1884	200	201	200
query91	204	187	160	160
query92	62	58	59	58
query93	1698	1605	955	955
query94	710	363	321	321
query95	808	517	570	517
query96	1115	809	353	353
query97	2473	2465	2347	2347
query98	196	190	179	179
query99	743	732	618	618
Total cold run time: 246401 ms
Total hot run time: 159060 ms

@hello-stephen

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

query1	0.01	0.01	0.01
query2	0.10	0.04	0.04
query3	0.25	0.14	0.13
query4	1.60	0.13	0.15
query5	0.24	0.21	0.21
query6	1.16	0.83	0.83
query7	0.04	0.01	0.01
query8	0.05	0.04	0.04
query9	0.37	0.30	0.31
query10	0.55	0.55	0.56
query11	0.19	0.13	0.14
query12	0.18	0.14	0.14
query13	0.45	0.46	0.48
query14	0.99	0.99	0.97
query15	0.60	0.57	0.58
query16	0.31	0.33	0.32
query17	1.05	1.10	1.12
query18	0.21	0.20	0.20
query19	2.02	1.95	2.03
query20	0.02	0.01	0.01
query21	15.44	0.18	0.14
query22	4.98	0.05	0.05
query23	16.13	0.32	0.11
query24	2.99	0.39	0.31
query25	0.12	0.04	0.05
query26	0.72	0.20	0.15
query27	0.04	0.04	0.04
query28	3.61	0.82	0.38
query29	12.48	3.98	3.17
query30	0.27	0.16	0.15
query31	2.77	0.57	0.31
query32	3.22	0.59	0.50
query33	3.10	3.21	3.16
query34	15.55	3.90	3.29
query35	3.25	3.25	3.25
query36	0.54	0.44	0.43
query37	0.08	0.06	0.07
query38	0.06	0.04	0.04
query39	0.04	0.03	0.03
query40	0.16	0.14	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.11 s
Total hot run time: 23.94 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 0.00% (0/487) 🎉
Increment coverage report
Complete coverage report

### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: Alibaba Cloud OSS Tables exposes an Iceberg REST Catalog that uses the osstables SigV4 service name and an S3-compatible data plane. Doris only treated Glue and S3 Tables as managed signed REST catalogs, so an OSS Tables catalog did not reuse the selected OSS credentials for REST signing and did not validate its required signing settings. Recognize osstables, reuse the same OSS credentials for the REST control plane and S3FileIO data plane, require a signing region with SigV4 enabled, and cover the official endpoint, ACS warehouse ARN, and STS token mapping.

### Release note

Support Alibaba Cloud OSS Tables through the Iceberg REST Catalog.

### Check List (For Author)

- Test: Unit Test and FE build
    - ./run-fe-ut.sh --run org.apache.doris.connector.metastore.iceberg.rest.IcebergRestMetaStorePropertiesTest
    - ./run-fe-ut.sh --run org.apache.doris.connector.iceberg.IcebergCatalogFactoryTest
    - DISABLE_BUILD_UI=ON ./build.sh --fe
- Behavior changed: Yes. signing-name=osstables now reuses OSS/S3-compatible credentials and requires a signing region with SigV4 enabled. Managed Glue and S3 Tables catalogs also reject an explicit sigv4-enabled=false value during validation instead of failing later at runtime.
- Does this need documentation: Yes. Follow-up documentation should include the OSS Tables REST endpoint, ACS warehouse ARN, osstables signing name, and OSS S3FileIO endpoint.
### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: CREATE CATALOG connectivity validation constructed a connector context without the raw storage properties, so OSS credentials were unavailable during the validation request. At runtime, auto-detection could also bind both OSS and generic S3, and scan/write configuration merging allowed the generic S3 endpoint to overwrite the explicit OSS endpoint. Pass a snapshot of raw properties to the creation context and consistently select the cloud-specific S3-compatible binding across Iceberg catalog, scan, and write paths.

### Release note

Fix OSS Tables catalog creation and data access when OSS storage is auto-detected without fs.oss.support.

### Check List (For Author)

- Test: Unit Test and Manual test
    - IcebergCatalogFactoryTest, IcebergScanPlanProviderTest, IcebergWritePlanProviderTest, and CatalogFactoryPluginRoutingTest
    - Created an OSS Tables REST catalog without fs.oss.support, then created a database/table and verified INSERT and SELECT
- Behavior changed: Yes. Explicit OSS settings now take precedence over the generic S3 fallback for Iceberg catalog, scan, and write configuration.
- Does this need documentation: No
@xylaaaaa
xylaaaaa force-pushed the agent/support-alibaba-oss-tables-rest-catalog branch from a5fcd36 to aef2570 Compare August 7, 2026 08:28
@xylaaaaa

xylaaaaa commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17626	3947	3894	3894
q2	2062	321	206	206
q3	10242	1338	791	791
q4	4685	469	333	333
q5	7504	853	568	568
q6	185	178	144	144
q7	756	809	603	603
q8	9383	1451	1479	1451
q9	5367	4019	4009	4009
q10	6788	1616	1348	1348
q11	493	363	318	318
q12	763	569	457	457
q13	18056	3298	2724	2724
q14	260	258	235	235
q15	q16	738	735	658	658
q17	944	1131	997	997
q18	6561	5624	5526	5526
q19	1282	1229	1009	1009
q20	806	654	605	605
q21	6339	2789	2752	2752
q22	462	403	321	321
Total cold run time: 101302 ms
Total hot run time: 28949 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	5015	4661	4562	4562
q2	292	324	219	219
q3	4881	5217	4648	4648
q4	2182	2258	1404	1404
q5	4459	4665	4364	4364
q6	239	177	142	142
q7	1932	1748	1499	1499
q8	2351	2049	2038	2038
q9	7167	6770	6644	6644
q10	4196	4195	3808	3808
q11	509	369	346	346
q12	692	702	496	496
q13	2977	3243	2746	2746
q14	277	280	252	252
q15	q16	662	678	601	601
q17	1241	1215	1208	1208
q18	12084	10979	11792	10979
q19	1108	1066	1064	1064
q20	2169	2182	1926	1926
q21	5229	4520	4551	4520
q22	527	446	395	395
Total cold run time: 60189 ms
Total hot run time: 53861 ms

@hello-stephen

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

query5	4314	578	465	465
query6	500	232	209	209
query7	4983	598	347	347
query8	324	169	150	150
query9	8794	4064	4040	4040
query10	490	381	318	318
query11	5861	2206	2024	2024
query12	150	102	99	99
query13	1250	629	469	469
query14	6129	4245	3920	3920
query14_1	3783	3757	3763	3757
query15	195	194	173	173
query16	953	495	464	464
query17	889	679	535	535
query18	2411	453	326	326
query19	204	178	140	140
query20	102	99	106	99
query21	233	152	133	133
query22	12942	12879	12736	12736
query23	15805	15135	14740	14740
query23_1	14760	14785	14710	14710
query24	7525	1749	1221	1221
query24_1	1243	1227	1221	1221
query25	527	408	351	351
query26	1326	366	212	212
query27	2573	594	374	374
query28	4546	2035	2037	2035
query29	1032	596	474	474
query30	336	257	222	222
query31	1180	1108	1047	1047
query32	98	62	60	60
query33	502	306	239	239
query34	1198	1124	646	646
query35	736	745	637	637
query36	771	799	701	701
query37	151	102	92	92
query38	1829	1749	1654	1654
query39	841	839	789	789
query39_1	788	779	782	779
query40	243	165	138	138
query41	93	62	62	62
query42	92	90	91	90
query43	314	319	277	277
query44	1421	772	752	752
query45	185	182	166	166
query46	1011	1224	743	743
query47	1589	1523	1435	1435
query48	424	434	299	299
query49	568	413	295	295
query50	1089	451	349	349
query51	10782	10884	10682	10682
query52	87	87	71	71
query53	258	278	201	201
query54	281	229	214	214
query55	74	73	68	68
query56	307	312	301	301
query57	1022	996	945	945
query58	283	255	256	255
query59	1517	1582	1409	1409
query60	312	272	244	244
query61	154	147	146	146
query62	404	315	264	264
query63	245	198	202	198
query64	2848	1143	990	990
query65	3863	3796	3776	3776
query66	1837	535	370	370
query67	19967	20165	19875	19875
query68	3218	1579	1000	1000
query69	400	290	257	257
query70	871	779	774	774
query71	360	346	302	302
query72	3024	2672	2339	2339
query73	868	771	441	441
query74	4613	4499	4274	4274
query75	2396	2342	2011	2011
query76	2347	1141	761	761
query77	334	362	267	267
query78	11034	11010	10583	10583
query79	1219	1081	736	736
query80	622	570	450	450
query81	451	322	286	286
query82	285	169	145	145
query83	316	318	296	296
query84	301	159	125	125
query85	887	601	517	517
query86	274	240	228	228
query87	1969	1949	1827	1827
query88	3725	2807	2806	2806
query89	359	320	292	292
query90	2115	200	193	193
query91	209	192	163	163
query92	64	60	60	60
query93	1539	1486	992	992
query94	531	350	311	311
query95	787	495	493	493
query96	1040	809	349	349
query97	2477	2464	2346	2346
query98	192	184	182	182
query99	742	740	623	623
Total cold run time: 243270 ms
Total hot run time: 158305 ms

@hello-stephen

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

query1	0.01	0.01	0.00
query2	0.09	0.05	0.05
query3	0.25	0.14	0.13
query4	1.60	0.14	0.14
query5	0.25	0.22	0.22
query6	1.15	0.79	0.80
query7	0.04	0.01	0.01
query8	0.06	0.04	0.04
query9	0.38	0.32	0.31
query10	0.56	0.56	0.57
query11	0.20	0.14	0.14
query12	0.18	0.14	0.13
query13	0.48	0.47	0.47
query14	1.00	0.98	1.00
query15	0.60	0.58	0.60
query16	0.32	0.32	0.32
query17	1.08	1.11	1.09
query18	0.22	0.22	0.22
query19	2.06	1.90	1.89
query20	0.01	0.01	0.01
query21	15.47	0.22	0.13
query22	4.82	0.06	0.05
query23	16.12	0.31	0.12
query24	3.00	0.42	0.32
query25	0.12	0.05	0.04
query26	0.72	0.21	0.16
query27	0.05	0.04	0.04
query28	3.49	0.83	0.37
query29	12.48	3.98	3.20
query30	0.27	0.15	0.16
query31	2.80	0.56	0.33
query32	3.22	0.60	0.49
query33	3.20	3.24	3.19
query34	15.57	3.92	3.27
query35	3.27	3.23	3.18
query36	0.57	0.45	0.42
query37	0.10	0.06	0.07
query38	0.05	0.04	0.04
query39	0.04	0.03	0.03
query40	0.17	0.16	0.14
query41	0.09	0.04	0.03
query42	0.04	0.04	0.03
query43	0.05	0.04	0.03
Total cold run time: 96.25 s
Total hot run time: 23.9 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 4.23% (3/71) 🎉
Increment coverage report
Complete coverage report

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.

3 participants