Skip to content

Conversation

@Sbaia
Copy link

@Sbaia Sbaia commented Jan 14, 2026

Proposed changes

Currently, Doris requires explicit AWS credentials for both:

  1. iceberg.catalog.type = s3tables (S3 Tables native catalog)
  2. iceberg.catalog.type = rest with SigV4 authentication

This prevents users from leveraging AWS's default credentials chain, which supports:

  • Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
  • EC2 instance profile
  • EKS IAM Roles for Service Accounts (IRSA)
  • ECS container credentials

Root Cause

The Java Frontend was passing empty strings to the AWS SDK instead of letting Iceberg use the default credentials chain:

  • CustomAwsCredentialsProvider only supported explicit credentials
  • IcebergRestProperties always set rest.access-key-id and rest.secret-access-key even when empty

Solution

For S3 Tables catalog:
Modified CustomAwsCredentialsProvider to fall back to AWS SDK's DefaultCredentialsProvider when explicit credentials are not provided.

For REST catalog:
Modified IcebergRestProperties to only set rest.access-key-id and rest.secret-access-key when explicitly provided, allowing Iceberg to use the default credentials chain.

Changes

  • fe/fe-core/.../iceberg/s3tables/CustomAwsCredentialsProvider.java

    • Added fallback to DefaultCredentialsProvider
    • Added support for session tokens (temporary credentials)
  • fe/fe-core/.../property/metastore/IcebergRestProperties.java

    • Only set credentials properties when values are provided
    • Updated validation to not require explicit credentials for Glue

Usage

S3 Tables (without explicit credentials):

CREATE CATALOG lakehouse PROPERTIES (
    'type'= 'iceberg',
    'iceberg.catalog.type'= 's3tables',
    'warehouse'= 'arn:aws:s3tables:eu-west-1:123456789:bucket/my-bucket',
    's3.region'= 'eu-west-1'
);

REST catalog with SigV4 (without explicit credentials):

CREATE CATALOG lakehouse PROPERTIES (
    'type'= 'iceberg',
    'iceberg.catalog.type'= 'rest',
    'iceberg.rest.uri'= 'https://s3tables.eu-west-1.amazonaws.com/iceberg',
    'iceberg.rest.sigv4-enabled'= 'true',
    'iceberg.rest.signing-name'= 's3tables',
    'iceberg.rest.signing-region'= 'eu-west-1',
    's3.region'= 'eu-west-1'
);

Compatibility

  • No breaking changes: Explicit credentials continue to work exactly as before
  • Additive feature: Users can now omit credentials to use IAM roles

Further comments

The C++ Backend already supports IAM roles for S3 file access. This PR only addresses the Java Frontend catalog initialization issue.

🤖 Generated with Claude Code

…ables and REST catalogs

Currently, Doris requires explicit AWS credentials for both S3 Tables
(iceberg.catalog.type=s3tables) and REST catalogs with SigV4 authentication.
This prevents users from leveraging AWS default credentials chain which
supports environment variables, EC2 instance profile, EKS IRSA, and
ECS container credentials.

This change:
- Modifies CustomAwsCredentialsProvider to fall back to DefaultCredentialsProvider
  when explicit credentials are not provided
- Adds support for session tokens (temporary credentials)
- Updates IcebergRestProperties to only set credential properties when values
  are explicitly provided, allowing Iceberg to use the default credentials chain

No breaking changes: explicit credentials continue to work as before.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@hello-stephen
Copy link
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?

@Sbaia
Copy link
Author

Sbaia commented Jan 14, 2026

run buildall

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17631	4242	4109	4109
q2	2109	365	252	252
q3	10106	1274	723	723
q4	10212	856	308	308
q5	7497	2123	1860	1860
q6	192	168	140	140
q7	948	786	655	655
q8	9277	1467	1152	1152
q9	4977	4589	4623	4589
q10	6795	1783	1415	1415
q11	524	289	291	289
q12	693	737	583	583
q13	17793	3839	3098	3098
q14	295	295	273	273
q15	590	515	512	512
q16	678	688	633	633
q17	672	811	489	489
q18	7296	6536	7129	6536
q19	1183	1005	704	704
q20	434	367	248	248
q21	3299	2782	2401	2401
q22	1150	1096	1085	1085
Total cold run time: 104351 ms
Total hot run time: 32054 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4521	4245	4372	4245
q2	336	396	337	337
q3	2295	2801	2393	2393
q4	1404	1884	1492	1492
q5	4587	4395	4461	4395
q6	209	173	129	129
q7	2039	1899	1765	1765
q8	2725	2412	2454	2412
q9	7252	7259	7299	7259
q10	2517	2680	2356	2356
q11	539	460	464	460
q12	687	752	604	604
q13	3653	3868	3095	3095
q14	269	279	257	257
q15	530	489	480	480
q16	643	657	615	615
q17	1100	1314	1340	1314
q18	7393	7202	7388	7202
q19	836	810	806	806
q20	1907	1919	1804	1804
q21	4534	4321	4174	4174
q22	1070	1034	983	983
Total cold run time: 51046 ms
Total hot run time: 48577 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 173870 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 fe56f32f3fcb6611dbb4acec896ae99513388fff, data reload: false

query5	4870	627	477	477
query6	332	228	211	211
query7	4229	455	254	254
query8	360	239	228	228
query9	8719	2871	2826	2826
query10	539	368	343	343
query11	15330	15062	14918	14918
query12	186	122	112	112
query13	1247	479	363	363
query14	6264	2992	2712	2712
query14_1	2662	2629	2687	2629
query15	196	187	176	176
query16	985	532	490	490
query17	1070	688	574	574
query18	2531	442	338	338
query19	220	219	194	194
query20	121	120	116	116
query21	217	141	121	121
query22	3929	4112	4138	4112
query23	16062	15601	15293	15293
query23_1	15452	15500	15603	15500
query24	7109	1565	1157	1157
query24_1	1175	1176	1179	1176
query25	569	474	421	421
query26	1237	260	161	161
query27	2762	451	276	276
query28	4564	2141	2124	2124
query29	825	544	445	445
query30	315	243	208	208
query31	783	648	560	560
query32	88	74	75	74
query33	541	373	321	321
query34	916	904	529	529
query35	748	773	676	676
query36	899	884	862	862
query37	137	99	88	88
query38	2727	2661	2612	2612
query39	788	743	730	730
query39_1	720	718	735	718
query40	223	133	115	115
query41	68	60	63	60
query42	102	98	101	98
query43	428	424	412	412
query44	1300	720	735	720
query45	184	184	173	173
query46	817	936	556	556
query47	1425	1481	1423	1423
query48	303	310	239	239
query49	605	411	337	337
query50	599	267	198	198
query51	3730	3743	3697	3697
query52	103	104	97	97
query53	288	321	270	270
query54	286	274	258	258
query55	84	79	80	79
query56	307	303	306	303
query57	1031	1001	1014	1001
query58	266	258	263	258
query59	2069	2198	2007	2007
query60	341	329	317	317
query61	164	194	154	154
query62	392	341	314	314
query63	288	265	265	265
query64	5050	1313	994	994
query65	3847	3668	3787	3668
query66	1427	447	316	316
query67	14912	15178	15295	15178
query68	8123	981	700	700
query69	525	362	322	322
query70	1057	946	880	880
query71	360	313	290	290
query72	5683	3344	3420	3344
query73	774	716	306	306
query74	8807	8806	8542	8542
query75	2808	2783	2501	2501
query76	3468	1068	631	631
query77	527	376	305	305
query78	9702	9858	9159	9159
query79	1386	898	577	577
query80	650	576	482	482
query81	532	262	232	232
query82	218	150	115	115
query83	270	261	244	244
query84	263	122	94	94
query85	884	496	469	469
query86	395	292	283	283
query87	2833	2862	2737	2737
query88	3437	2579	2556	2556
query89	384	344	317	317
query90	2159	176	164	164
query91	171	165	141	141
query92	92	68	68	68
query93	1535	876	519	519
query94	571	322	295	295
query95	591	402	307	307
query96	632	505	233	233
query97	2354	2381	2310	2310
query98	217	203	205	203
query99	608	578	517	517
Total cold run time: 253849 ms
Total hot run time: 173870 ms

@doris-robot
Copy link

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

query1	0.06	0.05	0.05
query2	0.11	0.05	0.05
query3	0.26	0.09	0.09
query4	1.61	0.12	0.11
query5	0.27	0.25	0.26
query6	1.14	0.66	0.65
query7	0.03	0.03	0.03
query8	0.05	0.04	0.05
query9	0.57	0.50	0.50
query10	0.56	0.55	0.54
query11	0.14	0.10	0.10
query12	0.14	0.12	0.11
query13	0.59	0.58	0.59
query14	0.96	0.96	0.94
query15	0.80	0.77	0.78
query16	0.38	0.40	0.38
query17	0.98	1.00	1.04
query18	0.23	0.21	0.22
query19	1.98	1.78	1.83
query20	0.01	0.02	0.01
query21	15.65	0.23	0.14
query22	5.88	0.08	0.05
query23	15.91	0.27	0.10
query24	1.39	0.44	0.41
query25	0.11	0.06	0.06
query26	0.14	0.13	0.12
query27	0.08	0.08	0.08
query28	4.19	1.08	0.88
query29	12.52	3.90	3.18
query30	0.29	0.15	0.12
query31	2.82	0.63	0.41
query32	3.23	0.56	0.45
query33	3.04	2.98	3.08
query34	16.03	5.11	4.43
query35	4.45	4.40	4.44
query36	0.67	0.50	0.48
query37	0.11	0.07	0.06
query38	0.07	0.04	0.03
query39	0.05	0.03	0.03
query40	0.18	0.14	0.14
query41	0.09	0.04	0.03
query42	0.04	0.03	0.03
query43	0.04	0.04	0.04
Total cold run time: 97.85 s
Total hot run time: 26.84 s

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

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

Copy link
Member

@CalvinKirs CalvinKirs left a comment

Choose a reason for hiding this comment

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

Thanks :)

We have this factory class org/apache/doris/datasource/property/common/AwsCredentialsProviderFactory.java.
In practice, we prefer users to explicitly configure how AWS credentials are resolved (e.g. via EC2 or other mechanisms).

Only when no credential-related configuration is provided should we fall back to the default provider chain.

This is consistent with the existing S3 behavior, where users can explicitly declare the credential provider through s3.credentials_provider_type.

@Sbaia
Copy link
Author

Sbaia commented Jan 16, 2026

Hi @CalvinKirs ,
The issue is that s3tables can be used only with ak/sk. The role_arn parameter is ignored because Doris throws an exception stating that an Access Key is required.
But I'll check the code with your suggested class

Sbaia and others added 3 commits January 16, 2026 07:23
…ing patterns

Address PR review feedback by using Doris's AwsCredentialsProviderFactory instead
of custom CustomAwsCredentialsProvider class.

Changes:
- Remove CustomAwsCredentialsProvider in favor of existing patterns
- Add credentials-provider-type property for both REST and S3Tables catalogs
- Add assume-role.arn and assume-role.external-id support for cross-account access
- Use StaticCredentialsProvider for explicit credentials
- Use AwsCredentialsProviderFactory.getV2ClassName() for other modes

This aligns with the existing AWS credentials handling patterns in Doris
and provides a consistent experience across different catalog types.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@Sbaia
Copy link
Author

Sbaia commented Jan 16, 2026

@CalvinKirs Thank you for the review feedback!

I've refactored the implementation to use Doris's existing AwsCredentialsProviderFactory instead of the custom CustomAwsCredentialsProvider class. Here's what changed:

Why we removed CustomAwsCredentialsProvider:
The custom class was problematic because it bypassed Doris's established AWS credentials handling patterns. It also didn't provide users with explicit control over how credentials are resolved, which is the expected behavior in Doris (consistent with s3.credentials_provider_type for S3).

New approach:

  1. For explicit credentials (access_key + secret_key): Uses StaticCredentialsProvider directly
  2. For IAM role assumption (role_arn): Uses Iceberg's built-in AssumeRoleAwsClientFactory
  3. For other credential modes: Uses AwsCredentialsProviderFactory.getV2ClassName() to get the appropriate AWS SDK v2 provider class

New configuration properties:

  • s3tables.credentials-provider-type / iceberg.rest.credentials-provider-type - explicit credential provider selection (ENV, INSTANCE_PROFILE, WEB_IDENTITY, CONTAINER, etc.)
  • s3tables.assume-role.arn / iceberg.rest.assume-role.arn - for cross-account access via STS AssumeRole
  • s3tables.assume-role.external-id / iceberg.rest.assume-role.external-id - external ID for AssumeRole security

Testing:

  • Tested with explicit credentials (access_key/secret_key) ✅
  • Tested with IRSA (EKS IAM Roles for Service Accounts) ✅
  • Tested with role_arn configuration for cross-account access ✅

The implementation now follows the same patterns used elsewhere in Doris for AWS credentials handling, giving users explicit control while maintaining backward compatibility with existing configurations.

@morningman morningman self-assigned this Jan 16, 2026
@Sbaia
Copy link
Author

Sbaia commented Jan 17, 2026

run buildall

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17612	4194	4025	4025
q2	2060	352	250	250
q3	10162	1255	689	689
q4	10207	790	309	309
q5	7527	2077	1799	1799
q6	188	172	139	139
q7	892	803	646	646
q8	9269	1360	1131	1131
q9	4904	4514	4542	4514
q10	6782	1768	1395	1395
q11	533	304	275	275
q12	672	740	594	594
q13	17780	3791	3075	3075
q14	292	295	271	271
q15	584	511	512	511
q16	680	673	651	651
q17	664	794	489	489
q18	6662	6355	6347	6347
q19	1250	973	604	604
q20	391	363	240	240
q21	2986	2438	2210	2210
q22	1034	1043	973	973
Total cold run time: 103131 ms
Total hot run time: 31137 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4053	4027	4037	4027
q2	321	405	324	324
q3	2074	2611	2192	2192
q4	1349	1868	1342	1342
q5	4123	3992	4012	3992
q6	209	172	131	131
q7	1869	1810	1663	1663
q8	2756	2503	2403	2403
q9	7275	7261	7110	7110
q10	2553	2688	2376	2376
q11	580	489	463	463
q12	694	771	598	598
q13	3567	4160	3506	3506
q14	290	314	264	264
q15	540	499	497	497
q16	640	702	644	644
q17	1183	1350	1420	1350
q18	7896	7734	8002	7734
q19	890	866	836	836
q20	1958	2048	1948	1948
q21	4784	4328	4129	4129
q22	1127	1028	993	993
Total cold run time: 50731 ms
Total hot run time: 48522 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 174317 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 12b94a407a3969259e18320924d16de392e82683, data reload: false

query5	4400	608	482	482
query6	327	210	212	210
query7	4221	459	256	256
query8	338	239	235	235
query9	8698	2910	2880	2880
query10	532	361	330	330
query11	15204	15075	14915	14915
query12	173	114	111	111
query13	1232	455	369	369
query14	6229	2997	2799	2799
query14_1	2673	2649	2676	2649
query15	207	193	174	174
query16	981	503	458	458
query17	1093	686	537	537
query18	2441	416	326	326
query19	215	212	191	191
query20	114	113	109	109
query21	214	134	112	112
query22	4215	4364	4278	4278
query23	15882	15648	15359	15359
query23_1	15363	15483	15426	15426
query24	7224	1525	1173	1173
query24_1	1171	1175	1190	1175
query25	499	426	370	370
query26	1234	270	146	146
query27	2775	438	273	273
query28	4596	2166	2155	2155
query29	730	513	408	408
query30	308	240	195	195
query31	788	623	559	559
query32	80	77	71	71
query33	524	348	300	300
query34	899	880	533	533
query35	723	751	663	663
query36	872	893	804	804
query37	135	93	83	83
query38	2732	2691	2684	2684
query39	764	737	725	725
query39_1	713	707	691	691
query40	213	132	116	116
query41	69	84	66	66
query42	107	105	103	103
query43	466	477	408	408
query44	1335	764	784	764
query45	185	188	178	178
query46	836	947	585	585
query47	1414	1513	1420	1420
query48	320	324	248	248
query49	617	434	359	359
query50	635	274	204	204
query51	3759	3868	3782	3782
query52	108	107	98	98
query53	288	331	267	267
query54	306	274	276	274
query55	82	84	81	81
query56	317	316	317	316
query57	1016	1066	963	963
query58	279	271	262	262
query59	2073	1976	2142	1976
query60	347	346	314	314
query61	170	172	168	168
query62	409	358	310	310
query63	291	262	265	262
query64	4936	1343	1097	1097
query65	3815	3772	3727	3727
query66	1435	424	309	309
query67	15562	15552	15415	15415
query68	2442	1107	769	769
query69	445	357	320	320
query70	1017	959	867	867
query71	316	305	289	289
query72	5216	3179	3275	3179
query73	613	718	319	319
query74	8760	8760	8603	8603
query75	2752	2800	2466	2466
query76	2277	1056	670	670
query77	372	376	314	314
query78	9744	9898	9215	9215
query79	1052	904	572	572
query80	1311	574	473	473
query81	544	263	231	231
query82	960	144	109	109
query83	323	254	238	238
query84	251	109	95	95
query85	898	481	418	418
query86	409	318	328	318
query87	2835	2922	2745	2745
query88	3463	2594	2563	2563
query89	383	345	317	317
query90	1999	168	166	166
query91	169	154	129	129
query92	78	77	73	73
query93	960	905	543	543
query94	635	318	290	290
query95	586	333	367	333
query96	636	500	230	230
query97	2347	2372	2312	2312
query98	215	197	196	196
query99	578	588	489	489
Total cold run time: 246618 ms
Total hot run time: 174317 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.71 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 12b94a407a3969259e18320924d16de392e82683, data reload: false

query1	0.06	0.04	0.04
query2	0.10	0.04	0.04
query3	0.26	0.09	0.08
query4	1.62	0.12	0.12
query5	0.28	0.24	0.24
query6	1.15	0.65	0.65
query7	0.04	0.02	0.02
query8	0.05	0.04	0.04
query9	0.57	0.50	0.49
query10	0.54	0.54	0.56
query11	0.14	0.09	0.10
query12	0.14	0.11	0.11
query13	0.60	0.58	0.59
query14	0.95	0.95	0.94
query15	0.78	0.76	0.78
query16	0.40	0.39	0.39
query17	1.00	0.97	1.02
query18	0.22	0.21	0.20
query19	1.99	1.86	1.82
query20	0.02	0.01	0.02
query21	15.44	0.28	0.14
query22	5.36	0.05	0.04
query23	16.10	0.28	0.11
query24	1.50	0.31	0.56
query25	0.09	0.07	0.07
query26	0.14	0.13	0.13
query27	0.06	0.08	0.05
query28	4.49	1.07	0.88
query29	12.53	3.96	3.20
query30	0.28	0.13	0.12
query31	2.81	0.62	0.40
query32	3.24	0.56	0.45
query33	3.04	3.00	3.06
query34	16.09	5.07	4.41
query35	4.46	4.44	4.43
query36	0.66	0.49	0.50
query37	0.10	0.06	0.06
query38	0.08	0.04	0.04
query39	0.04	0.03	0.04
query40	0.17	0.13	0.14
query41	0.08	0.03	0.03
query42	0.04	0.04	0.03
query43	0.04	0.04	0.03
Total cold run time: 97.75 s
Total hot run time: 26.71 s

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 37.21% (16/43) 🎉
Increment coverage report
Complete coverage report

Comment on lines 169 to 189
@ConnectorProperty(names = {"iceberg.rest.credentials-provider-type"},
required = false,
description = "The AWS credentials provider type for REST catalog authentication. "
+ "Options: DEFAULT, ENV, SYSTEM_PROPERTIES, WEB_IDENTITY, CONTAINER, INSTANCE_PROFILE. "
+ "When explicit credentials (access-key-id/secret-access-key) are provided, they take precedence. "
+ "When no explicit credentials are provided, this determines how credentials are resolved.")
private String icebergRestCredentialsProviderType = "";

@ConnectorProperty(names = {"iceberg.rest.assume-role.arn", "s3.role_arn"},
required = false,
description = "The IAM role ARN to assume for cross-account access. "
+ "When set, uses STS AssumeRole to get temporary credentials.")
private String icebergRestAssumeRoleArn = "";

@ConnectorProperty(names = {"iceberg.rest.assume-role.external-id", "s3.external_id"},
required = false,
description = "The external ID for STS AssumeRole, used for cross-account access security.")
private String icebergRestAssumeRoleExternalId = "";

private AwsCredentialsProviderMode awsCredentialsProviderMode;

Copy link
Member

Choose a reason for hiding this comment

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

We can use a storage properties object (i.e., S3Properties) to receive these attributes, which allows us to unify property handling. For your reference, this is similar to how org.apache.doris.datasource.property.metastore.IcebergRestProperties#toS3FileIOProperties works. The same approach applies to S3Tables as well.

Copy link
Author

Choose a reason for hiding this comment

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

Thanks for the suggestion! I've refactored IcebergRestProperties to use S3Properties for unified credential handling, following the same pattern as IcebergS3TablesMetaStoreProperties.

Changes made:

  • Added S3Properties s3Properties field, initialized via S3Properties.of(origProps) in initNormalizeAndCheckProps()
  • Removed the dedicated icebergRestAccessKeyId and icebergRestSecretAccessKey @ConnectorProperty fields
  • Updated addGlueRestCatalogProperties() to get credentials from s3Properties.getAccessKey() and s3Properties.getSecretKey()

Benefits:

  • Unified property handling across REST catalog and S3Tables catalog
  • Users can now use either iceberg.rest.access-key-id or s3.access_key (and other S3Properties aliases) for credentials
  • Explicit credentials are optional - the code gracefully falls back to assume role or credentials provider

Updated tests to verify the new unified handling behavior.

Sbaia and others added 2 commits January 20, 2026 08:44
…in IcebergRestProperties

Refactor IcebergRestProperties to use S3Properties for AWS credential handling,
following the same pattern as IcebergS3TablesMetaStoreProperties. This unifies
property handling across both REST catalog and S3Tables catalog.

Changes:
- Add S3Properties field and initialize via S3Properties.of(origProps)
- Remove dedicated icebergRestAccessKeyId/icebergRestSecretAccessKey fields
- Get credentials from s3Properties.getAccessKey()/getSecretKey()
- Update tests to reflect the new unified handling behavior

This allows users to use either iceberg.rest.* or s3.* property names
for credentials, and makes explicit credentials optional (can use
assume role or credentials provider instead).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@Sbaia
Copy link
Author

Sbaia commented Jan 20, 2026

run buildall

@doris-robot
Copy link

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

------ Round 1 ----------------------------------
q1	17628	4194	4070	4070
q2	2000	364	245	245
q3	10154	1267	717	717
q4	10226	893	315	315
q5	7512	2083	1799	1799
q6	186	166	136	136
q7	931	784	692	692
q8	9289	1349	1137	1137
q9	4841	4676	4585	4585
q10	6769	1804	1388	1388
q11	501	292	289	289
q12	690	750	581	581
q13	17810	3806	3118	3118
q14	288	298	274	274
q15	587	519	517	517
q16	695	684	626	626
q17	652	804	488	488
q18	6564	6393	6315	6315
q19	1357	973	607	607
q20	391	355	240	240
q21	2988	2512	2183	2183
q22	1026	1029	952	952
Total cold run time: 103085 ms
Total hot run time: 31274 ms

----- Round 2, with runtime_filter_mode=off -----
q1	4066	4705	4121	4121
q2	339	410	313	313
q3	2101	2577	2209	2209
q4	1315	1733	1375	1375
q5	4080	4032	3940	3940
q6	214	171	129	129
q7	1925	1796	1683	1683
q8	2837	2518	2478	2478
q9	7312	7254	7191	7191
q10	2557	2699	2283	2283
q11	569	480	488	480
q12	776	814	608	608
q13	3618	4131	3803	3803
q14	285	306	269	269
q15	550	498	490	490
q16	651	717	644	644
q17	1195	1400	1430	1400
q18	8204	7812	7672	7672
q19	863	822	825	822
q20	1969	2110	1935	1935
q21	4837	4245	4138	4138
q22	1108	1051	968	968
Total cold run time: 51371 ms
Total hot run time: 48951 ms

@doris-robot
Copy link

TPC-DS: Total hot run time: 173875 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 29c63dafee5c2cf36c04ddcacf2bf8705435449d, data reload: false

query5	4427	614	479	479
query6	326	226	211	211
query7	4205	450	253	253
query8	329	234	221	221
query9	8713	2897	2878	2878
query10	485	378	323	323
query11	15309	15010	14939	14939
query12	171	112	110	110
query13	1242	497	385	385
query14	6099	2957	2699	2699
query14_1	2637	2605	2612	2605
query15	198	186	169	169
query16	986	470	455	455
query17	1068	641	529	529
query18	2550	416	325	325
query19	219	221	200	200
query20	119	116	111	111
query21	210	134	115	115
query22	4024	4057	4067	4057
query23	15966	15534	15441	15441
query23_1	15485	15442	15524	15442
query24	7121	1537	1132	1132
query24_1	1170	1171	1171	1171
query25	520	429	383	383
query26	1243	267	145	145
query27	2779	437	274	274
query28	4603	2167	2151	2151
query29	747	511	436	436
query30	310	244	203	203
query31	773	619	563	563
query32	82	80	75	75
query33	538	369	332	332
query34	898	882	564	564
query35	702	746	673	673
query36	850	922	828	828
query37	137	100	87	87
query38	2685	2770	2707	2707
query39	767	754	753	753
query39_1	730	727	704	704
query40	215	130	115	115
query41	64	63	63	63
query42	102	96	102	96
query43	460	436	405	405
query44	1299	743	745	743
query45	181	187	178	178
query46	831	939	603	603
query47	1442	1388	1360	1360
query48	308	313	239	239
query49	598	424	337	337
query50	601	264	205	205
query51	3761	3886	3775	3775
query52	101	102	101	101
query53	301	331	268	268
query54	283	265	269	265
query55	77	84	78	78
query56	296	307	289	289
query57	1025	1012	892	892
query58	264	259	254	254
query59	2141	2174	2029	2029
query60	327	351	310	310
query61	147	144	148	144
query62	393	354	314	314
query63	300	271	284	271
query64	5040	1350	1049	1049
query65	3813	3733	3771	3733
query66	1456	446	322	322
query67	15501	15555	15412	15412
query68	2470	1110	777	777
query69	474	366	337	337
query70	962	928	879	879
query71	323	319	280	280
query72	5428	3217	3384	3217
query73	570	694	313	313
query74	8817	8704	8526	8526
query75	2731	2821	2440	2440
query76	2262	1040	665	665
query77	352	370	303	303
query78	9724	9786	9098	9098
query79	1172	897	575	575
query80	1274	574	468	468
query81	541	260	229	229
query82	999	141	109	109
query83	318	251	230	230
query84	247	110	95	95
query85	892	472	419	419
query86	410	322	288	288
query87	2884	2841	2782	2782
query88	3435	2559	2550	2550
query89	365	344	324	324
query90	1978	173	160	160
query91	165	157	132	132
query92	75	75	74	74
query93	1054	886	540	540
query94	651	329	269	269
query95	585	389	314	314
query96	651	511	225	225
query97	2296	2344	2324	2324
query98	217	204	202	202
query99	617	588	543	543
Total cold run time: 246428 ms
Total hot run time: 173875 ms

@doris-robot
Copy link

ClickBench: Total hot run time: 26.77 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 29c63dafee5c2cf36c04ddcacf2bf8705435449d, data reload: false

query1	0.06	0.05	0.05
query2	0.10	0.05	0.04
query3	0.26	0.09	0.08
query4	1.60	0.11	0.11
query5	0.27	0.27	0.25
query6	1.14	0.66	0.66
query7	0.03	0.03	0.02
query8	0.05	0.04	0.05
query9	0.57	0.50	0.49
query10	0.56	0.56	0.55
query11	0.14	0.09	0.10
query12	0.15	0.12	0.11
query13	0.60	0.60	0.60
query14	0.96	0.95	0.95
query15	0.79	0.77	0.78
query16	0.39	0.39	0.40
query17	1.03	1.01	1.06
query18	0.23	0.21	0.21
query19	1.89	1.89	1.89
query20	0.02	0.01	0.01
query21	15.45	0.28	0.14
query22	5.22	0.06	0.05
query23	15.92	0.27	0.10
query24	1.91	0.56	0.20
query25	0.11	0.05	0.05
query26	0.14	0.14	0.13
query27	0.07	0.05	0.04
query28	4.06	1.06	0.88
query29	12.54	3.93	3.15
query30	0.28	0.14	0.13
query31	2.82	0.64	0.41
query32	3.24	0.55	0.45
query33	3.00	3.03	3.06
query34	16.07	5.05	4.41
query35	4.44	4.42	4.49
query36	0.65	0.50	0.49
query37	0.11	0.06	0.07
query38	0.07	0.05	0.04
query39	0.04	0.03	0.03
query40	0.17	0.14	0.13
query41	0.09	0.04	0.04
query42	0.05	0.03	0.03
query43	0.04	0.04	0.04
Total cold run time: 97.33 s
Total hot run time: 26.77 s

@hello-stephen
Copy link
Contributor

FE UT Coverage Report

Increment line coverage 58.70% (27/46) 🎉
Increment coverage report
Complete coverage report

@hello-stephen
Copy link
Contributor

FE Regression Coverage Report

Increment line coverage 13.04% (6/46) 🎉
Increment coverage report
Complete coverage report

@Sbaia
Copy link
Author

Sbaia commented Jan 21, 2026

run buildall

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.

5 participants