Skip to content

[feature](storage) Support native GCP IAM authentication - #68540

Open
sollhui wants to merge 51 commits into
apache:masterfrom
sollhui:feature/gcp-native-iam-master
Open

sollhui wants to merge 51 commits into
apache:masterfrom
sollhui:feature/gcp-native-iam-master

Conversation

@sollhui

@sollhui sollhui commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Problem Summary:

GCS access currently depends on HMAC credentials or unsigned requests. A deployment using Application Default Credentials or a Compute Engine service account cannot consistently use the same identity for object reads and writes, Iceberg metadata operations, storage vaults, and backend error-log downloads.

Add native GCP OAuth authentication across FE, BE, and Cloud using gs.credential_provider_type=DEFAULT or COMPUTE_ENGINE, with optional gs.impersonation_service_account. GCP storage without explicit authentication defaults to Application Default Credentials. Public-bucket access requires explicit ANONYMOUS; existing HMAC configuration remains supported. Reject conflicting native, HMAC, and AWS-only authentication properties before creating clients.

The implementation follows the current master architecture:

  • Keep credential resolution in the filesystem API, OAuth client construction in the GCS plugin, and Iceberg client integration in the Iceberg connector. Use the native Hadoop GCS connector for namespace operations and bearer-authenticated S3 XML clients for object operations.
  • Carry typed credentials through additive Thrift and Protobuf fields, Cloud object information, and the shared C++ S3 client factory. Preserve AWS authentication, client caching, and rate limiting.
  • Normalize GCS aliases for resources, serialize resource ALTER operations, and validate effective properties before publication. Preserve omitted vault credential fields during partial ALTER, support clearing impersonation explicitly, and reject anonymous storage vaults. Apply vault changes to candidate metadata so a failed update does not persist a partial rename.
  • Support gs:// in EXPORT and OUTFILE while preserving HTTP paths. Generate backend GCS V4 error-log URLs through IAM signBlob, falling back to the local error-log path if signing fails.
  • Add unit coverage and IAM regression suites for catalogs, TVFs, load, export, outfile, backup/restore, resources, vaults, property validation, and anonymous access. Export tests read back the written data and isolate cleanup by run directory.

Example native authentication properties:

provider=GCP
gs.credential_provider_type=DEFAULT
gs.impersonation_service_account=target@project.iam.gserviceaccount.com

The impersonation property is optional. Use COMPUTE_ENGINE to select the attached VM identity explicitly, or ANONYMOUS for public object access.

Compatibility and deployment:

  • Native GCP authentication for Paimon and Hudi is outside this PR's supported scope and is deferred to a follow-up PR. Paimon and Hudi retain their existing configuration handling without new native-authentication rejection checks. Existing GCS HMAC and S3 authentication remain supported; shared GCP filesystem and Iceberg support remain in scope.
  • Existing AWS/HMAC protocol fields and authentication paths remain available. Native GCP credentials require updated consumers; upgrade MetaService and the relevant FE/BE processes before enabling the feature during a rolling upgrade.
  • Package google-cloud-cpp OAuth libraries for BE/Cloud and the shaded Hadoop GCS connector for FE/Iceberg.
  • FE presigned uploads with native OAuth remain unsupported and fail explicitly. Backend error-log downloads use the dedicated GCS V4 signing path.
  • Native OAuth uses the existing configurable object-store endpoint, so this remains an outbound-request/SSRF surface. Catalog creation requires catalog CREATE privilege; vault creation requires global ADMIN privilege. Google token and signing operations use the credential library and Google IAM APIs. No remote code-loading path is introduced.

Release note

Add native GCP IAM authentication with Application Default Credentials, Compute Engine identities, and optional service-account impersonation for GCS-backed storage. GCP configurations without HMAC or an explicit authentication mode now use ADC; public access must select ANONYMOUS. Improve resource/vault credential updates and support GCS error-log signing.

Validation

Passed locally:

  • GCS filesystem reactor unit tests, including 88 filesystem API tests, 152 S3-base tests, and 36 GCS tests; zero failures, errors, or skips in these modules.
  • FE Core and Iceberg Checkstyle, plus the GCS reactor's style checks.
  • clang-format 16 checks for all 33 changed C++ files, BE build hygiene, connector import boundaries, and FE metadata-funnel checks.
  • Parsing of all 41 changed Java files; Protobuf descriptor generation and Thrift C++ generation for the changed definitions.
  • git diff --check.

Not completed locally:

  • Full FE unit tests: the standard runner requires JDK 17; the available test runtime is JDK 20.
  • Iceberg reactor tests: generation stops because the installed Thrift compiler is 0.16.0 while master requires 0.24.0. The standalone Thrift syntax check above does not replace this build.
  • BE/Cloud compilation, unit tests, and clang-tidy: the installed thirdparty bundle lacks the required google-cloud-cpp libraries.
  • Live IAM regression suites: no configured Doris cluster or GCP test environment was available.

Check List (For Author)

  • Test:
    • Unit tests added; filesystem API/S3/GCS tests executed successfully.
    • Regression tests added.
    • Full FE, Iceberg, BE/Cloud, and live IAM tests completed.
  • Behavior changed:
    • Yes: native GCP authentication, ADC default, explicit anonymous mode, and validated partial credential updates as described above.
  • Does this need documentation?
    • Yes: document credential properties, ADC deployment, impersonation permissions, explicit anonymous access, and upgrade requirements.

### What problem does this PR solve?

Problem Summary:

GCS access currently depends on HMAC credentials or unsigned requests. A deployment using Application Default Credentials or a Compute Engine service account cannot consistently use the same identity for object reads and writes, Iceberg metadata operations, storage vaults, and backend error-log downloads.

Add native GCP OAuth authentication across FE, BE, and Cloud using `gs.credential_provider_type=DEFAULT` or `COMPUTE_ENGINE`, with optional `gs.impersonation_service_account`. GCP storage without explicit authentication defaults to Application Default Credentials. Public-bucket access requires explicit `ANONYMOUS`; existing HMAC configuration remains supported. Reject conflicting native, HMAC, and AWS-only authentication properties before creating clients.

The implementation follows the current master architecture:

- Keep credential resolution in the filesystem API, OAuth client construction in the GCS plugin, and Iceberg client integration in the Iceberg connector. Use the native Hadoop GCS connector for namespace operations and bearer-authenticated S3 XML clients for object operations.
- Carry typed credentials through additive Thrift and Protobuf fields, Cloud object information, and the shared C++ S3 client factory. Preserve AWS authentication, client caching, and rate limiting.
- Normalize GCS aliases for resources, serialize resource ALTER operations, and validate effective properties before publication. Preserve omitted vault credential fields during partial ALTER, support clearing impersonation explicitly, and reject anonymous storage vaults. Apply vault changes to candidate metadata so a failed update does not persist a partial rename.
- Support `gs://` in EXPORT and OUTFILE while preserving HTTP paths. Generate backend GCS V4 error-log URLs through IAM `signBlob`, falling back to the local error-log path if signing fails.
- Add unit coverage and IAM regression suites for catalogs, TVFs, load, export, outfile, backup/restore, resources, vaults, property validation, and anonymous access. Export tests read back the written data and isolate cleanup by run directory.

Example native authentication properties:

```properties
provider=GCP
gs.credential_provider_type=DEFAULT
gs.impersonation_service_account=target@project.iam.gserviceaccount.com
```

The impersonation property is optional. Use `COMPUTE_ENGINE` to select the attached VM identity explicitly, or `ANONYMOUS` for public object access.

Compatibility and deployment:

- Existing AWS/HMAC protocol fields and authentication paths remain available. Native GCP credentials require updated consumers; upgrade MetaService and the relevant FE/BE processes before enabling the feature during a rolling upgrade.
- Package google-cloud-cpp OAuth libraries for BE/Cloud and the shaded Hadoop GCS connector for FE/Iceberg.
- FE presigned uploads with native OAuth remain unsupported and fail explicitly. Backend error-log downloads use the dedicated GCS V4 signing path.
- Native OAuth uses the existing configurable object-store endpoint, so this remains an outbound-request/SSRF surface. Catalog creation requires catalog CREATE privilege; vault creation requires global ADMIN privilege. Google token and signing operations use the credential library and Google IAM APIs. No remote code-loading path is introduced.

### Release note

Add native GCP IAM authentication with Application Default Credentials, Compute Engine identities, and optional service-account impersonation for GCS-backed storage. GCP configurations without HMAC or an explicit authentication mode now use ADC; public access must select `ANONYMOUS`. Improve resource/vault credential updates and support GCS error-log signing.

### Validation

Passed locally:

- GCS filesystem reactor unit tests, including 88 filesystem API tests, 152 S3-base tests, and 36 GCS tests; zero failures, errors, or skips in these modules.
- FE Core and Iceberg Checkstyle, plus the GCS reactor's style checks.
- clang-format 16 checks for all 33 changed C++ files, BE build hygiene, connector import boundaries, and FE metadata-funnel checks.
- Parsing of all 41 changed Java files; Protobuf descriptor generation and Thrift C++ generation for the changed definitions.
- `git diff --check`.

Not completed locally:

- Full FE unit tests: the standard runner requires JDK 17; the available test runtime is JDK 20.
- Iceberg reactor tests: generation stops because the installed Thrift compiler is 0.16.0 while master requires 0.24.0. The standalone Thrift syntax check above does not replace this build.
- BE/Cloud compilation, unit tests, and clang-tidy: the installed thirdparty bundle lacks the required google-cloud-cpp libraries.
- Live IAM regression suites: no configured Doris cluster or GCP test environment was available.

### Check List (For Author)

- Test:
  - [x] Unit tests added; filesystem API/S3/GCS tests executed successfully.
  - [x] Regression tests added.
  - [ ] Full FE, Iceberg, BE/Cloud, and live IAM tests completed.
- Behavior changed:
  - [x] Yes: native GCP authentication, ADC default, explicit anonymous mode, and validated partial credential updates as described above.
- Does this need documentation?
  - [x] Yes: document credential properties, ADC deployment, impersonation permissions, explicit anonymous access, and upgrade requirements.
@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?

…ures

### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Native GCP Hadoop access ignored the configured endpoint and
HadoopCatalog selected S3A for s3/s3a warehouse aliases. Propagate the endpoint
to the Google connector and normalize native HadoopCatalog warehouses to gs.
The C++ client also sent anonymous object requests when token acquisition
failed. Acquire bearer tokens before each object-storage SDK operation and
return a non-retryable authentication error on missing or empty tokens.
Add endpoint, warehouse alias, and authentication-failure coverage.

### Release note

Native GCP catalogs honor custom endpoints and compatible warehouse schemes.
Missing GCP tokens now fail locally instead of issuing anonymous requests.

### Check List (For Author)

- Test: GCS module and upstream unit tests passed (37 GCS tests); FE Checkstyle,
  clang-format 16 on changed C++ files, build hygiene, and git diff --check passed.
  Iceberg tests stopped at the Thrift 0.16/0.24 mismatch; BE test setup stopped
  at the JDK 17 requirement. Further compilation and tests skipped at user request.
  Live GCP regression tests were not run.
- Behavior changed: Yes, native Hadoop endpoint/scheme routing and token failure handling.
- Does this need documentation: No
### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Resources saved before GCS alias normalization can retain
old gs.* properties. Normalizing only after merging an ALTER lets an old
alias override a new s3.* value, silently ignoring credential rotation or
restoring a session token that the user cleared. Normalize stored properties
and the patch separately before merging, so the patch takes precedence while
preserving gs.* priority within the same input map. Update the regression
unit test to expect the new access/secret keys and the cleared session token.

### Release note

GCP resource ALTER updates now override persisted gs.* aliases correctly.

### Check List (For Author)

- Test: FE Core Checkstyle and git diff --check passed. Updated unit coverage
  for credential replacement, token clearing, unchanged properties, and
  same-input alias precedence. Compilation and tests skipped at user request.
- Behavior changed: Yes, explicit resource updates override old alias values.
- Does this need documentation: No
@sollhui

sollhui commented Sep 28, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@sollhui

sollhui commented Sep 28, 2026

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.

Request changes: five inline findings remain after two static review rounds. Three affect native GCP identity across Cloud stage retrieval, COPY INTO scan planning, and legacy instance AK/SK updates; two break IAM regression suites. The stage findings are independent: repairing the stage response alone does not repair COPY's separately built broker map. There was no additional user-provided review focus.

Critical checkpoints (code-review skill 1.3):

  • Goal and proof: Native GCP OAuth is wired through FE, BE, Cloud, Iceberg, and error-log signing, but the three credential handoffs above prevent consistent identity use. Added builder and validation tests do not cover these end-to-end paths.
  • Scope and clarity: The broad cross-module change generally reuses shared credential adapters. The Syncer helper removal also breaks an unchanged AWS suite.
  • Concurrency: FE resource ALTER serializes snapshot and publication; the C++ token provider protects its cached generator. I found no separate lock-order, thread-context, or atomic-order defect.
  • Lifecycle: Cached clients include the credential configuration and release the signing callback with the client. No cross-translation-unit static initialization or ownership-cycle issue was found.
  • Configuration: The new GCP mode and impersonation properties are carried as persisted or transport fields. Vault partial ALTER preserves omitted fields; legacy instance key updates retain the native envelope incorrectly (inline finding). No new dynamic configuration knob needs a refresh path.
  • Compatibility: The new Thrift and Protobuf fields are optional, and the PR declares that updated consumers are required before enabling native mode. The removed regression helper is an incompatible test-framework symbol (inline finding).
  • Parallel paths and conditionals: MetaService's stage response and COPY's broker map each lose credential settings; both instance AK/SK update entry points retain native auth. Other auth conflict and anonymous-mode checks matched their documented behavior on static trace.
  • Test coverage and results: Unit tests cover direct adapters, token/header behavior, and vault patching; no stage RPC/COPY scan or native-to-AK/SK instance transition test covers the findings. Two regression suites have deterministic failures under their supported AWS configurations. Builds, tests, and live IAM requests were prohibited by the review prompt, so this review makes no runtime validation claim; author-reported checks were not independently rerun.
  • Observability and errors: Token and IAM signing failures are propagated or logged, with a local error-log fallback. I found no separate ignored Status, exception-boundary, or metric defect; wrong identity selection in the inline findings can still surface only downstream.
  • Persistence, writes, and crashes: Vault ALTER validates a candidate and commits vault/instance metadata together. Legacy instance key updates persist a mixed auth state (inline finding). No other new write-atomicity or crash-recovery defect was substantiated.
  • FE/BE propagation: Optional credential fields reach the regular adapters, but COPY's manually built scan map drops GCP mode and impersonation. The provider-less resource concern raised during review was dismissed after tracing GcpCredentialAdapter's downstream Thrift setter.
  • Performance, memory, and BE nullable handling: No material new hot-path cost or memory ownership/reservation issue was substantiated. Vectorized ColumnNullable and MoW/versioned-read code are untouched by this PR.

Review complete after the final changed-file and duplicate sweep. Five distinct issues are left inline; no unresolved candidate remains. Static inspection only.

Comment thread cloud/src/meta-service/meta_service_resource.cpp
Comment thread cloud/src/meta-service/meta_service_resource.cpp
Comment thread regression-test/suites/object_storage_iam_p0/test_alter_resource_with_role.groovy Outdated
gavinchou
gavinchou previously approved these changes Sep 30, 2026
### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Clearing s3.role_arn previously erased static keys and native
GCP credentials before persisting the vault. Only replace other credentials
when selecting a nonempty AWS role or an explicit AWS credential provider.
Cover encrypted static credentials, native GCP credentials, and repeated clears
at the RPC/persistence boundary. Also use TableNameInfo in ExportCommandTest
and restore the role repository helper still used by the legacy AWS suite.

### Release note

Clearing an unused AWS role preserves the vault's active static or GCP credentials.

### Check List (For Author)

- Test: clang-format 16 check, build hygiene, Java Checkstyle (JDK 20),
  git diff --check, and Groovy helper smoke checks passed.
  Added cloud RPC/persistence regression coverage. FE UT and cloud build
  could not start because the configured JDK 17 lacks lib/modules;
  cloud third-party build dependencies and a live Doris/AWS environment
  are also unavailable. Full unit/integration tests were not run.
- Behavior changed: Yes, clearing an unused role preserves existing credentials.
- Does this need documentation: No
…keys

### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Legacy instance key updates retained native GCP credentials,
so clients kept using OAuth after a successful AK/SK update. Clear the native
envelope in both instance update helpers, including both user-id branches,
and allow unchanged keys to repair an already persisted mixed auth state.
Reject empty replacement keys before removing native authentication.
Add RPC/persistence coverage for native-to-key transitions, mixed-state repair,
and rejection without mutation. Guard optional AWS external-ID assertions so
an omitted external ID does not fail the resource ALTER regression suite.

### Release note

Replacing native GCP authentication with instance access keys now makes the
new keys effective. AWS IAM resource regression tests accept an omitted
external ID.

### Check List (For Author)

- Test: Added regression coverage; compilation and test execution skipped at
  user request. Applied repository clang-format 16; git diff --check passed.
- Behavior changed: Yes, instance key updates remove native authentication.
- Does this need documentation: No
### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Merge apache/doris master at 7ac0eb2 into the GCP IAM
branch. Resolve concurrent test additions in OutFileTest and
ExternalFileTableValuedFunctionTest by retaining both the GCP credential
coverage and upstream UUID coverage as separate methods. Preserve the
previous credential-transition and regression fixes.

### Release note

None

### Check List (For Author)

- Test: Targeted Java Checkstyle passed with zero violations. Verified both
  parents' test methods remain, no unresolved merge entries, and prior repair
  patches still apply in reverse. Conflict-file whitespace checks passed;
  upstream generated .out whitespace was retained. Compilation and test
  execution skipped at user request.
- Behavior changed: No additional behavior change beyond merging master.
- Does this need documentation: No
@sollhui

sollhui commented Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@sollhui

sollhui commented Oct 7, 2026

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.

Review outcome: request changes. This exact-head static review found six distinct new issues in the inline comments: two P1 and four P2. Existing P1 comments 4119930342 (internal-stage credential lost in get_stage) and 4119930347 (COPY INTO broker properties omit native GCP credentials) still apply and are carried as blockers without reposting. The other three existing threads were rechecked and their issues are fixed at this head.

Goal and test evidence: The change adds native GCP OAuth across FE, BE, Cloud object storage, Iceberg, export, and signed URLs. The implementation does not yet meet that goal on the token-boundary and Cloud mutation paths identified inline. Added BE, Cloud, FE, and regression test sources were inspected; builds and tests were prohibited by this review contract and were not run, so their results are not independently verified.

Scope, configuration, and compatibility: The change mostly uses the existing storage adapters and factories, and no unrelated edit was substantiated as an issue. The inspected FE-to-BE and FE-to-Cloud mappings retain native credential fields for supported Resource, Vault, Iceberg, LOAD, TVF, OUTFILE, EXPORT, and recycler paths. The role-only ADD_S3_VAULT RPC loses its previous default-provider compatibility. No new dynamically reloaded process setting was identified. Native credential protocol compatibility during rolling upgrades remains dependent on updated consumers as described in the PR; this static review cannot validate a mixed-version deployment.

Concurrency and lifecycle: Client cache misses construct outside the factory lock, and the new GCP consumers read the shared CA path without its lock. Token refresh ownership and synchronization, presigning callbacks, release paths, and cross-translation-unit initialization were inspected; no other substantiated lifecycle issue remained. Heavy client construction occurs outside the cache lock, and no new lock-order issue was found.

Validation, errors, and observability: The auth-mode predicates and caller-selected endpoint boundary were traced through request construction, including the concrete path-style SQL case. Cloud admission conditions are inconsistent for native ADD_OBJ_INFO and role-only vault ADD. Signed URL error handling, IAM response parsing, and existing logging were inspected; no further distinct status-propagation or observability issue was substantiated.

Persistence, writes, and parallel paths: Cloud root and derived credential changes use separate transactions; a derived failure followed by the same request cannot finish the cascade. The two existing stage/COPY paths still drop native credentials. Other inspected vault persistence, recycler reads, and FE/BE transport paths preserve the selected identity. Table visible-version, MoW delete bitmap, and rowset publication logic are not changed by this PR. No additional confirmed memory-accounting or hot-path performance issue was found; final glibc 2.17 binary compatibility cannot be established without a build artifact.

Completion: All 107 changed paths, the prior inline threads, and the unresolved-candidate list were swept after two review rounds; all round-two agents returned NO_NEW_VALUABLE_FINDINGS. The user focus file specified no additional focus.

Existing P0/P1 findings confirmed for this head: #68540 (comment), #68540 (comment)

Comment thread cloud/src/meta-service/meta_service_resource.cpp
Comment thread be/src/io/fs/gcs_signed_url_provider.cpp Outdated
Comment thread cloud/src/meta-service/meta_service_resource.cpp Outdated
Comment thread cloud/src/meta-service/meta_service_resource.cpp Outdated
Comment thread be/src/util/s3_util.cpp Outdated
### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Native GCP clients attached process bearer tokens to arbitrary
storage endpoints. Require Google Cloud Storage HTTPS endpoints on port 443 in
FE properties and request interception, and in the shared BE/Cloud client before
fetching tokens. Keep TLS verification enabled, disable native-client redirects,
and reject AWS access-point ARNs in GCS bucket fields. HMAC and anonymous endpoint
handling retain their existing behavior.

Exclude the Doris cluster Auth-Token header from IAM signBlob and metadata HTTP
requests. Admit validated native credentials for legacy ADD_OBJ_INFO requests,
preserve role-only ADD_S3_VAULT requests with an omitted provider type, and pass
the locked CA-path snapshot to both GCP consumers.

### Release note

Native GCP OAuth requires a Google Cloud Storage HTTPS endpoint on port 443;
untrusted custom endpoints and plaintext endpoints are rejected. Legacy object
storage ADD accepts native GCP credentials, and role-only vault ADD continues to
default to INSTANCE_PROFILE.

### Check List (For Author)

- Test: Added FE, BE, and Cloud unit coverage. Java Checkstyle, clang-format 16,
  build hygiene, and git diff --check passed. An isolated check compiled the
  actual C++ endpoint validator and passed 14 endpoint cases. Full unit tests
  and BE/Cloud builds were not run: standard FE/BE test entry points stopped
  because JDK 17 is unavailable, and this checkout has no thirdparty bundle.
- Behavior changed: Yes, endpoint restrictions and corrected credential admission.
- Does this need documentation: Yes, native OAuth endpoint restrictions are
  described in the release note above.
### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: The pinned AWS SDK does not expose the four-argument constructor on S3Error, so GCP authentication failures prevent BE compilation. Construct AWSError<S3Errors> first and convert it to S3Error, preserving the error details and response codes. FE test compilation also fails because new S3 resource and vault tests use removed JMockit APIs. Migrate those mocks to scoped Mockito instances and retain the credential and no-RPC assertions.

### Release note

None

### Check List (For Author)

- Test: FE-core Checkstyle, clang-format 16, git diff --check, and PR-wide legacy JMockit scan passed. Constructor APIs verified against AWS SDK 1.11.221 headers. Full build and unit tests unavailable locally because JDK 17 and thirdparty dependencies are missing.
- Behavior changed: No
- Does this need documentation: No
@hello-stephen

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

query5	4313	587	451	451
query6	421	205	195	195
query7	4805	449	227	227
query8	316	162	143	143
query9	8788	3088	3112	3088
query10	484	309	258	258
query11	5979	3868	3585	3585
query12	147	93	87	87
query13	1240	435	322	322
query14	6145	3911	3647	3647
query14_1	3373	3405	3500	3405
query15	215	210	186	186
query16	943	421	405	405
query17	817	637	521	521
query18	2404	418	302	302
query19	183	159	131	131
query20	81	84	81	81
query21	203	125	103	103
query22	12916	13073	12813	12813
query23	13367	12783	12473	12473
query23_1	12616	12479	12492	12479
query24	7391	815	469	469
query24_1	466	463	470	463
query25	493	422	359	359
query26	1263	263	138	138
query27	2774	443	269	269
query28	4658	1955	1951	1951
query29	1541	601	461	461
query30	298	226	197	197
query31	1014	925	832	832
query32	136	89	89	89
query33	513	292	236	236
query34	972	840	495	495
query35	729	763	639	639
query36	818	831	773	773
query37	118	93	81	81
query38	1756	1724	1682	1682
query39	794	774	742	742
query39_1	734	716	729	716
query40	214	118	93	93
query41	66	64	66	64
query42	85	83	81	81
query43	345	370	308	308
query44	1272	686	686	686
query45	181	175	161	161
query46	847	938	556	556
query47	2866	2935	2915	2915
query48	283	301	216	216
query49	581	396	280	280
query50	702	276	201	201
query51	10532	10311	10195	10195
query52	80	79	70	70
query53	192	227	159	159
query54	234	199	193	193
query55	68	66	62	62
query56	223	222	199	199
query57	1654	1606	1569	1569
query58	287	269	259	259
query59	2159	2188	1956	1956
query60	290	249	229	229
query61	145	142	140	140
query62	388	336	280	280
query63	183	162	152	152
query64	2718	1116	745	745
query65	3325	3287	3280	3280
query66	1763	437	305	305
query67	20720	20253	20070	20070
query68	3311	977	598	598
query69	402	289	245	245
query70	840	771	764	764
query71	291	240	216	216
query72	2813	2598	2377	2377
query73	524	522	295	295
query74	4630	4526	4371	4371
query75	2336	2297	1915	1915
query76	2407	1013	572	572
query77	362	404	264	264
query78	9720	9687	9134	9134
query79	864	831	528	528
query80	462	414	330	330
query81	526	324	269	269
query82	203	142	106	106
query83	194	191	189	189
query84	285	132	107	107
query85	776	426	378	378
query86	262	237	229	229
query87	1987	1954	1816	1816
query88	3584	2686	2685	2685
query89	318	278	237	237
query90	2105	156	163	156
query91	158	146	122	122
query92	100	89	80	80
query93	967	997	583	583
query94	456	322	246	246
query95	561	398	298	298
query96	659	487	227	227
query97	2441	2442	2313	2313
query98	155	154	148	148
query99	755	752	660	660
Total cold run time: 233803 ms
Total hot run time: 150798 ms

@hello-stephen

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

query1	0.01	0.01	0.00
query2	0.10	0.05	0.04
query3	0.26	0.10	0.08
query4	1.61	0.09	0.10
query5	0.23	0.25	0.26
query6	1.17	0.69	0.67
query7	0.04	0.02	0.00
query8	0.05	0.04	0.04
query9	0.41	0.34	0.34
query10	0.58	0.59	0.61
query11	0.20	0.14	0.14
query12	0.19	0.14	0.15
query13	0.51	0.50	0.49
query14	1.03	1.01	1.02
query15	0.64	0.61	0.62
query16	0.36	0.35	0.37
query17	1.13	1.12	1.13
query18	0.22	0.19	0.19
query19	2.07	1.96	2.03
query20	0.02	0.01	0.02
query21	15.41	0.21	0.14
query22	4.87	0.06	0.05
query23	16.27	0.31	0.13
query24	2.93	0.50	0.52
query25	0.12	0.06	0.08
query26	0.99	0.21	0.16
query27	0.04	0.03	0.04
query28	3.09	0.78	0.39
query29	12.53	4.17	3.28
query30	0.29	0.13	0.10
query31	2.77	0.58	0.33
query32	3.23	0.60	0.51
query33	3.17	3.19	3.15
query34	15.46	4.02	3.41
query35	3.32	3.35	3.32
query36	0.56	0.44	0.46
query37	0.09	0.07	0.07
query38	0.05	0.04	0.04
query39	0.03	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.04	0.03	0.04
Total cold run time: 96.38 s
Total hot run time: 24.49 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage 86.55% (206/238) 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 30.35% (95/313) 🎉
Increment coverage report
Complete coverage report

### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: S3 resources accept GCS as an alias for GCP, but the
cloud object store adapter passes GCS directly to the protobuf Provider
valueOf method. The protocol only defines GCP, so the alias parity test
fails with IllegalArgumentException and the corresponding cloud conversion
cannot succeed. Map the alias to Provider.GCP, normalize case with
Locale.ROOT, and assert the protocol provider in the existing four-alias
test. Keep the protobuf schema and other provider validation unchanged.

### Release note

Fix cloud object store conversion for the GCS provider alias.

### Check List (For Author)

- Test: FE core Maven Checkstyle passed with zero violations; git diff
  --check passed. Targeted run-fe-ut.sh execution was attempted for
  S3ResourceTest#testGsAliasesMatchConnectorAndResourceProtocols and
  CloudObjectStoreAdapterParityTest but stopped before tests because the
  local Thrift compiler is 0.16.0 while the repository requires 0.24.0.
- Behavior changed: Yes; GCS/gcs maps to the existing GCP protocol value.
- Does this need documentation: No.
@sollhui

sollhui commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@sollhui

sollhui commented Oct 23, 2026

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.

Static review of exact head cd814029aad66e1f753e12b612591ed09297ef64, covering all 147 authoritative changed files. Request changes: one new P2 is inline, and three previously reported P1s remain independently confirmed. No duplicate inline comments are reposted.

Existing blockers: internal-stage credential readback still drops the native envelope in get_stage; COPY scan properties still omit the native source/account; derived-instance retry still exits on equal root keys before completing a previously failed cascade. The two stage handoffs are also covered by the existing consolidated P2 thread.

Critical checkpoint conclusions:

  • Goal and proof: native ADC/Compute Engine/impersonation is wired through current FE, BE, Cloud and Iceberg clients, with broad added unit/IAM coverage. The new request-time exception and existing stage/cascade defects prevent considering the feature complete.
  • Scope and reuse: the broad change remains centered on object authentication; shared C++ credential visitors/factory, API identity descriptions, host-only wire codecs and the shared Iceberg factory provide reuse and clear dependency direction.
  • Concurrency: resource ALTER serializes snapshot/validation/publication; publication and policy read locks release in finally blocks. BE client creation stays outside the cache lock. The token mutex protects refresh/account access; no additional lock cycle or race was substantiated.
  • Lifecycle and static initialization: cached clients own token providers and signing callbacks without a cycle; no new cross-translation-unit static dependency was found. Existing plugin/scanner ownership and classloader boundaries were traced.
  • Configuration: new selectors are per-storage properties, with SDK token refresh and client reconstruction on supported updates; no new daemon dynamic configuration is introduced. Native/HMAC resource migration restrictions remain covered by an existing thread.
  • Compatibility: explicit AWS/HMAC paths remain. Native activation requires the documented coordinated MetaService and relevant FE/BE upgrade; there is no hard consumer-capability gate. Native Hudi/Paimon and FE presigned uploads are explicitly deferred. The implicit anonymous-to-ADC upgrade concern remains covered by its existing P2 thread.
  • Protocol IDs: every touched definition was compared with branch-3.1, 4.0, 4.1 and 4.2. The new definitions/fields match 4.2, are absent on older branches, and all additions are optional; no reused ID, changed existing meaning or required addition was found.
  • Parallel paths: reviewed TVF, LOAD, OUTFILE, EXPORT, policies/resources, vault CREATE/ALTER/SHOW CREATE, stages, recycler and Iceberg catalog/FileIO paths. COPY omissions remain blockers; independent AWS table routing and explicit HadoopFileIO GCS aliases remain existing P2 reports.
  • Conditions and error handling: conflict/clear checks have concrete scenarios and preserve rejected vault metadata. Ordinary token/status failures propagate, but malformed-ADC construction remains an existing P2 and the new inline identifies a separate uncaught request-time failure.
  • Test coverage: inspected all changed tests, including source/target selection, partial/empty ALTER, replay, policy batching, URI normalization, negative endpoint/auth cases, real service-account OAuth exchange and IAM readback. Missing failure coverage is identified in the inline and existing reports. The role-only regression transition still lacks its static-key prerequisite, already reported.
  • Expected results: no golden .out results changed. Assertions and exact signed-URL expectations were inspected; no successful test execution is claimed. The existing GCS alias parity test still reaches unsupported Cloud enum encoding despite its whitelist repair.
  • Observability: token failures use rate-limited logs; signing errors preserve bounded IAM context and local error-log fallback is explicit. No additional mandatory metric or high-volume logging defect was substantiated.
  • Persistence and failover: resource maps retain EditLog/Gson persistence; vault candidate copies prevent rejected rename/auth updates from being published. Native-to-static instance cleanup is repaired. The root/derived transaction split retains the existing retry blocker.
  • Writes and atomicity: existing storage-write/transaction and recycler mark/delete ordering are unchanged. Authentication failures affect access; the new token exception can terminate a BE upload worker process instead of returning failure. No new visible-version or delete-bitmap algorithm is involved.
  • FE/BE transport: native identity is carried by maps, Thrift and Cloud PB; policy reset now copies provider and credential. The manually constructed COPY map and stage response remain the known exceptions.
  • Performance and memory: no new per-row or bulk allocation work was found; refresh caching bounds normal token work. Client setup adds small configuration copies. Link correctness, final ELF/glibc 2.17 compatibility, runtime behavior and live IAM success cannot be proved by this static review.
  • Other concerns and focus: no additional user focus was supplied. Alias session-token clearing, GCS Cloud provider encoding, legacy static-vault ALTER and the other revalidated P2 concerns remain duplicate-fenced in existing threads. No unresolved new candidate or unread assigned file remains in the proposed review set.

Validation limits: no builds, tests, cluster operations or repository source modifications were performed. Packaging and ABI conclusions are limited to source/dependency inspection; added tests and author-reported runs are not substituted for execution here.

Review converged after 2 round(s).

Existing P0/P1 findings confirmed for this head: #68540 (comment), #68540 (comment), #68540 (comment)

// threads. Serialize access even if the underlying implementation changes
// its thread-safety guarantees in a future google-cloud-cpp release.
std::lock_guard lock(_credentials_mutex);
auto token = _credentials->GetToken(std::chrono::system_clock::now());

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.

[P2] Catch token-refresh exceptions before they escape upload workers

With DEFAULT ADC pointing to service-account JSON whose private_key is a nonempty malformed PEM, client construction succeeds, but the first object request reaches this uncaught GetToken(). The pinned SDK's OAuth refresh path signs via .value() and throws on that key; its cache wrapper does not catch it. A small BE upload reaches this through UploadFileBuffer::on_upload → S3FileWriter::_put_object → GcpS3Client::PutObject, and the upload thread pool has no exception handler, so a bad BE credential file terminates the backend instead of returning GcpAuthenticationError. Convert exceptions at the token-fetch boundary and cover a malformed nonempty PEM through real ADC construction and an object request. This is distinct from the existing construction-time ADC report: this JSON constructs successfully, and a constructor-only catch cannot cover the later request.

@sollhui

sollhui commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@sollhui

sollhui commented Oct 23, 2026

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.

Static review of PR #68540 at 67767d4. Request changes because previously reported blocking issues still apply. Two new P2 findings identify independent AWS Glue control-plane regressions: native GCP storage overwrites Glue's region, and anonymous GCS storage replaces Glue's credentials.

Existing blockers independently confirmed, without reposting:

  • 4119930342: INTERNAL get_stage reconstructs ObjectStoreInfoPB without the native credential envelope.
  • 4119930347: CopyIntoInfo.validateStagePB separately omits native credentials from the BE broker-property map. These two handoffs are also covered by existing thread 4231751519.
  • 4208967423: a root native-to-HMAC key update commits before derived-instance transactions; an identical retry exits on equal root keys before finishing the cascade.

Applicable code-review checkpoints:

  • Goal and evidence: native DEFAULT/COMPUTE_ENGINE and impersonation reach the main FE, BE and recycler paths; added unit/regression cases cover modes, aliases, conflicts, partial updates and signing. The two new findings show Glue metadata access remains broken in the specified cases.
  • Scope and reuse: the broad change fits the cross-process feature. Provider-owned authentication, shared identity descriptions and the separate host protocol module preserve useful boundaries.
  • Concurrency: resource ALTER serializes snapshot/validation/publication; map and version publish under writeLock. Policy conversion releases readLock in finally. Google token/account access is mutex-protected. No additional lock-order defect found.
  • Lifecycle and initialization: clients own refreshable providers; signer callbacks introduce no observed ownership cycle. TCCL restoration uses finally; no new cross-translation-unit initialization dependency identified.
  • Configuration: new authentication settings are per-storage properties. Resolved mode and impersonation participate in cache identity and client reset; no new process-wide dynamic setting was added.
  • Compatibility: optional Cloud field 20 and Thrift field 16, their messages and enum values were compared with branch-3.1/4.0/4.1/4.2. No field-ID collision or required-field addition found. Plugin API versions/baselines were updated.
  • Parallel paths: map, policy Thrift, Cloud protobuf, Hadoop and serialized Iceberg FileIO paths were traced. Existing explicit-HadoopFileIO alias and mixed-AWS-table routing reports remain duplicate context.
  • Conditions and error behavior: effective-state validation and explicit-clear semantics were inspected. ADC construction/refresh exceptions and blank session-token alias handling remain covered by existing P2 threads; no duplicate comments added.
  • Test coverage: positive, negative, replay and failed-update atomicity tests were inspected. The new Glue test substitutes local object transport and never exercises Glue API authentication or region selection, so it misses both new findings.
  • Expected results: no changed .out files; assertions and expected values were reviewed statically. The existing role-only test configuration prerequisite report remains known.
  • Observability: credential/outcome and IAM-signing diagnostics exist; signing failure retains the local error-log path. No separate new observability defect verified.
  • Persistence and failover: resources journal/replay snapshots; vault changes validate candidate metadata before persistence. The existing derived-instance retry blocker remains.
  • Writes and atomicity: rejected vault credential/rename patches do not publish partial metadata; resource publication follows validation/connectivity checks. Partition visibility, rowset versions and MoW delete-bitmap semantics are unchanged.
  • FE/BE propagation: typed selectors/targets reach normal backend/protocol paths and the scanner factory is now packaged. Internal-stage response and COPY scan-map omissions remain the existing blockers above.
  • Performance and memory: token caching, cache equality, client ownership, request construction and dependency changes were inspected; no further concrete hot-path or significant untracked-allocation defect established.

No additional user-provided focus was supplied. The declared exclusions remain relevant: native Hudi/Paimon and FE OAuth presigned uploads are unsupported; native credentials require upgraded consumers before enablement; omitted GCS authentication now selects ADC and public access requires explicit ANONYMOUS. Historical capability/upload reports are treated as those declared deployment limits. The former service-account self-signed-JWT, MinIO policy mapping, GCS alias, Glue Hadoop-configuration and scanner wire-codec reports are repaired at this head.

Validation was static only as required: no builds, tests, live IAM operations or source modifications. Runtime integration, produced-ELF glibc compatibility and the author's uncompleted build/test matrix remain unvalidated.

Review converged after 2 round(s).

Existing P0/P1 findings confirmed for this head: #68540 (comment), #68540 (comment), #68540 (comment)

### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: An Iceberg Glue catalog using native GCP storage overwrote
Glue's AWS region with GCS's region. Anonymous GCS storage also replaced
Glue's authenticated credential provider. Preserve Glue's metadata settings,
install a FileIO-only anonymous client factory, and keep its synchronous and
asynchronous clients independent of Glue's static keys or assume-role factory.

### Release note

Preserve AWS Glue authentication and region when Iceberg objects use native
GCP credentials or anonymous GCS access.

### Check List (For Author)

- Test: Checkstyle, connector import boundary, git diff --check, and isolated
  JDK 17 SDK request/serialization smoke passed. Added three request-level
  regression tests. Standard FE and connector-reactor tests stopped before
  these tests at the installed Thrift 0.16.0 versus required 0.24.0 mismatch.
  No live cloud integration tests were run.
- Behavior changed: Yes, Glue keeps its AWS metadata identity and region while
  GCS FileIO uses the selected storage authentication.
- Does this need documentation: No
@sollhui

sollhui commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@sollhui

sollhui commented Oct 23, 2026

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.

Request changes. This static review found two new P2 issues: Glue metadata role settings are rejected as GCS storage credentials, and anonymous GCS storage disables independent REST SigV4 authentication. Seven previously reported P1 failures still apply and are referenced without reposting them.

Existing blocking comments independently confirmed at b14c332:

  • 4119930342 and 4119930347: internal-stage responses omit the native envelope, and COPY scan properties omit its source/impersonation fields.
  • 4208967423: an equal-root key-update retry returns before repairing a failed derived-instance cascade.
  • 4215142986: native GCP internal-stage uploads cannot obtain a working presigned PUT URL. The PR documents this unsupported path; the existing failure remains.
  • 4217722279, 4217722285, and 4217722293: Cloud publication, storage-policy pushes, and map-based jobs lack native-GCP consumer gates/routing during mixed-version operation. The documented upgrade-before-enabling requirement is operational guidance; these paths do not enforce it.

Critical checkpoint conclusions:

  1. Goal and evidence: native DEFAULT/COMPUTE_ENGINE/impersonation flows are implemented across filesystem/auth, codecs, BE and Recycler. Added tests cover many flows, but the new Glue-role test necessarily fails during binding and known stage/upgrade failures prevent complete end-to-end support.
  2. Scope and abstraction: the broad change is cohesive; provider-owned rules, data-only identity descriptions, host-only wire codecs, and shared C++ client construction separate responsibilities appropriately.
  3. Concurrency: token access is mutex-protected; client creation occurs outside the cache lock; resource ALTER serializes snapshot/validation/publication and uses a short write-lock publication. No additional lock-order defect was established.
  4. Lifecycle/static initialization: clients and signing providers use bounded shared ownership without a new cycle; FileIO factories serialize property maps; lazy local statics avoid a new cross-translation-unit initialization dependency.
  5. Configuration: native source and impersonation are user properties, included in authentication cache identity and propagated by resource versions/catalog resets. No new global dynamic configuration knob was added.
  6. Compatibility: plugin API majors and filesystem surface baseline are updated. Existing AWS/HMAC paths and explicit S3/MinIO selections have targeted coverage; mixed-version native feature support remains blocked by the existing comments above.
  7. Thrift/Protobuf: touched definitions were read on HEAD and current branch-3.1, branch-4.0, branch-4.1, and branch-4.2. New fields are optional, IDs are unused on older branches, and branch-4.2 assigns the same meanings. No field-ID/enum collision found. Schema compatibility does not supply feature negotiation.
  8. Parallel paths: TVF, LOAD, EXPORT, OUTFILE, resources, vaults, stages, Recycler, Iceberg namespace/FileIO, and scanner serialization were traced. COPY and metadata-versus-storage authentication gaps are recorded. Native Hudi/Paimon catalog support is explicitly deferred in this PR; historical reports for that deferred support are not new findings here.
  9. Conditions/error handling: candidate-copy vault mutation, explicit clear presence, and finally-based resource unlock improve failure handling. Known ADC construction/refresh exception reports 4248820599/4356259111 remain duplicate context; the new service-account OAuth exchange fixes the prior self-signed-JWT P1.
  10. Test coverage: property/conflict/clear/replay/cache/serialization/signing unit coverage and IAM regression suites are extensive. The Glue-role test exposes the first new finding; REST SigV4 plus anonymous storage lacks equivalent coverage. No builds or tests were executed under the static-only review contract.
  11. Test results: no golden .out result files are changed, and no runtime result is claimed. Some regression suites retain assertion-based fixed results and cleanup-after-use despite repository conventions; the existing role-only/static-key fixture concern remains known context.
  12. Observability: authentication and IAM failures retain error context, and failed signing falls back with a warning. No separate missing-log/metric defect was substantiated.
  13. Persistence/failover: resource identity uses existing Gson/EditLog storage; credential codecs preserve optional presence. Vault changes stage mutations before commit. The known derived-instance retry gap still prevents reliable repair after a partial cascade.
  14. Writes/atomicity: no row-transaction, visible-version, or delete-bitmap algorithm changes. Vault rename/auth updates reject before publication; object writes still depend on correct identity and consumer support, as recorded above.
  15. FE/BE handoffs: native fields are carried by backend maps, TS3StorageParam and ObjectStoreInfoPB and consumed by both C++ converters. The two internal-stage/COPY handoffs and old-consumer routing remain exceptions.
  16. Performance/memory: cached credentials avoid repeated exchanges; binding loops are small and outside row processing. No new unbounded data-sized allocation, ownership leak, or per-row work was established. Real network refresh latency was not measured.
  17. Other review points: the new Glue and REST findings are distinct from the repaired Glue region/anonymous-provider threads. Previously reported MinIO policy batches, explicit S3 routing, legacy DEFAULT, scanner factory/codec closure, GCS aliases, signing CA/cluster-header/default-port/key handling have source-level repairs and targeted tests.

Flow reviewed:
SQL properties -> filesystem binding/auth -> typed identity -> host Thrift/Cloud codec -> BE/Recycler token provider -> GCS XML
-> native Hadoop configuration / Iceberg FileIO -> metadata and object operations

User focus: review_focus.txt specifies no additional focus; the complete PR was reviewed. Coverage limits are static-only: compilation, final plugin/ELF ABI (including glibc 2.17), real ADC/IAM/GCS transport behavior, and live cluster regressions remain unexecuted. Convergence is reported separately from delivery and the change-request verdict.

Review converged after 3 round(s).

Existing P0/P1 findings confirmed for this head: #68540 (comment), #68540 (comment), #68540 (comment), #68540 (comment), #68540 (comment), #68540 (comment), #68540 (comment)

### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Merge master 31615e0
into the native GCP IAM branch. Both branches independently advanced the
connector plugin API to 20.0 for different surfaces. Use 21.0 for the
combined surface and update its pinned version test, preserving master's
metadata-delete API and the PR's typed filesystem credentials.

### Release note

None

### Check List (For Author)

- Test: Connector SPI reactor validate and Checkstyle passed with zero violations;
  connector import and metadata-funnel gates passed; all 138 PR-only files
  remain identical and PR patches in all nine automatically merged overlap
  files pass reverse-apply checks; git diff --check against master passed.
  SPI reactor unit tests were attempted but stopped before SPI at the
  Thrift compiler version gate (installed 0.16.0, required 0.24.0).
- Behavior changed: No; reconcile API versioning for the combined surface.
- Does this need documentation: No
…cation

### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: GCS property validation incorrectly treats Glue roles and
Glue/REST credential-provider selectors as object-storage authentication.
This rejects otherwise independent metadata settings and prevents the
Glue-role FileIO test from reaching client construction. Add a storage
credential view for validation and canonical credential selection while
retaining the original raw properties and rejecting AWS storage conflicts.

Anonymous GCS also overwrites the shared credential provider used for REST
SigV4 authentication. Configure the existing anonymous S3 FileIO factory
for every catalog flavor, preserving metadata client credentials.

Add coverage for metadata-scoped options across native, anonymous and HMAC
GCS modes, REST default/selected providers, and signed REST requests alongside
unsigned object requests. Update the existing anonymous FileIO expectation
and use URLConnection for local transport tests.

### Release note

Fix GCS catalogs rejecting independent Glue authentication settings and
anonymous GCS object access disabling REST catalog SigV4 authentication.

### Check List (For Author)

- Test: GCS reactor tests passed, including 56 GCS and 152 S3-base tests;
  Checkstyle passed for all affected modules with zero violations;
  connector import and metadata-funnel gates and git diff --check passed.
  An isolated Iceberg SDK transport probe passed signed REST and unsigned
  object requests plus default/selected metadata provider checks. That
  probe uses expected SDK options and does not replace the connector suite.
  Full connector tests were attempted but blocked by Maven dependency TLS
  failures while downloading Jackson 2.21.8, before connector test execution.
- Behavior changed: Yes; metadata authentication remains independent of GCS.
- Does this need documentation: No
@sollhui

sollhui commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@sollhui

sollhui commented Oct 23, 2026

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.

Static review of PR #68540 at 33dc40dbc201aac19402ab15b2076305fd4da47a: request changes for one new P1 compatibility regression and two independently reconfirmed existing P1 comments. All 151 changed paths, their relevant callers/consumers, tests, existing threads and raw comments were reviewed.

The new inline finding concerns a previously valid GCP HMAC resource with a dormant legacy ANONYMOUS selector: the new resolver rejects it and prevents the complete policy/resource batch from being sent. This differs from the repaired legacy DEFAULT-without-keys and MinIO reports.

Existing blockers were not reposted: 4119930342 still loses the native credential in the internal-stage get_stage response; 4119930347 still omits it from COPY's backend scan properties. Both are also covered by existing thread 4231751519. They can select ADC instead of the configured Compute Engine or impersonated identity.

Applicable code-review checkpoints:

  1. Goal and proof: native ADC/Compute Engine/impersonation is wired through the ordinary filesystem, SQL, vault, BE and recycler paths. The new compatibility regression and existing COPY omissions prevent a clean correctness verdict. Added tests show intended coverage; they were not executed here.
  2. Scope and reuse: the broad change follows the required cross-process path. Shared credential descriptions, provider-owned rules, common native client/signing code and host-owned protocol codecs provide coherent reuse.
  3. Concurrency: resource ALTER serializes snapshot/validation/publication; publication uses the resource write lock. Validity IO stays outside that rwlock. Request threads serialize credential refresh with its mutex. No additional concrete lock inversion was found.
  4. Lifecycle and initialization: immutable API descriptions avoid sharing SDK objects across plugin boundaries; client-owned signing callbacks show no ownership cycle. No new cross-TU initialization dependency was identified.
  5. Configuration: new selectors are per-object properties and IAM regression configuration, with no new mutable server-wide setting. Authentication participates in client/cache identity and client replacement follows existing lifecycle.
  6. API/storage compatibility: plugin versions/baselines are updated and wire additions are optional. Native auth requires the documented upgrade of consumers before activation; there is no automatic capability gate. Legacy compatibility still needs the inline fix.
  7. Protocol IDs: touched definitions were compared on HEAD and release branches 3.1, 4.0, 4.1 and 4.2; no field/enum collision, reuse or new required field was found.
  8. Parallel paths: TVF/load/export/outfile/repository/resource/vault and BE/recycler paths were traced, including Iceberg metadata clients, sync/async FileIO, Hadoop namespace operations and serialized scanner dependencies. COPY retains the two known omissions.
  9. Conditional checks: native/static conflicts, endpoint restrictions, explicit clears and effective ALTER validation have concrete failure scenarios. Legacy selector precedence is the new exception; legacy static DEFAULT vault ALTER overvalidation is already reported in 4248820622.
  10. Test coverage: unit and regression additions cover positive/negative auth, aliases, refresh/cache seams, serialization and ALTER atomicity. Missing legacy ANONYMOUS-plus-static replay/batch coverage corresponds to the new finding. Real IAM, full builds and packaged scanner execution remain unverified.
  11. Expected results: no generated regression result artifacts changed; assertions and local fake transports were inspected statically.
  12. Observability/errors: normal token, SDK and IAM failures have diagnostics and signing failure retains the local error-log path. Existing construction/refresh exception reports 4248820599 and 4356259111 remain applicable and were not duplicated.
  13. Persistence/failover: resources retain the existing journaled property-map representation; vault updates validate candidate metadata before persistence. The separate derived-instance cascade retry behavior predates this PR.
  14. Writes/atomicity: failed vault credential changes cannot persist an earlier rename; failed resource validity checks preserve the prior properties/version. Existing object write machinery remains in use. No rowset visibility or delete-bitmap algorithms changed.
  15. FE-BE values: maps, Thrift and Cloud conversions carry source/impersonation through ordinary paths; COPY's manual handoffs are the confirmed gaps above.
  16. Performance/memory: token caching, bounded property/request copies and client reuse were examined; no additional substantiated performance or significant memory-ownership defect was found. Native linkage and glibc 2.17 ELF compatibility require artifact validation.
  17. Other findings and limits: existing mixed-AWS Iceberg routing, explicit HadoopFileIO GCS aliases, resource auth-mode transition and session-token-clear issues remain duplicate reports. Current Glue/REST separation, MinIO mapping, explicit S3 routing, direct service-account OAuth exchange and Iceberg factory/codec packaging fixes were verified at source level. Native Hudi/Paimon and FE native presigned uploads are expressly unsupported; omitted GCS authentication now intentionally selects ADC.

There was no additional user-provided focus. This was static-only: no builds, tests, cluster runs, style gates or ELF/package checks were executed, and no repository source was modified. No unreviewed changed-file scope or unresolved new source candidate remains.

Review converged after 2 round(s).

Existing P0/P1 findings confirmed for this head: #68540 (comment), #68540 (comment)

mode = type == GcpCredentialProviderType.ANONYMOUS ? GcsAuth.Mode.ANONYMOUS
: type == GcpCredentialProviderType.COMPUTE_ENGINE ? GcsAuth.Mode.COMPUTE_ENGINE : GcsAuth.Mode.ADC;
} else if (hasLegacyAnonymous) {
mode = GcsAuth.Mode.ANONYMOUS;

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 static GCS keys over the legacy anonymous selector

A persisted provider=GCP resource with nonempty s3.access_key/s3.secret_key and s3.credentials_provider_type=ANONYMOUS was accepted before this PR: the static pair took precedence, and policy serialization ignored the dormant selector. This branch now chooses ANONYMOUS first and throws on the keys at lines 85-87. After replay/restart, PushStoragePolicyTask.toThrift() therefore fails for that resource; because ReportHandler batches all changed resources and policy updates/drops together, unrelated updates also never reach the BE. Preserve legacy static-key precedence when no native gs.* credential selector is supplied, and cover replay plus a batched push. This differs from the repaired DEFAULT-without-keys thread: it involves a static pair and the legacy ANONYMOUS branch.

### What problem does this PR solve?

Related PR: apache#68540

Problem Summary: Older FEs accepted GCS resources containing static HMAC keys
and a dormant legacy ANONYMOUS credential selector. Resolving the selector
before the keys rejected those persisted resources after upgrade and aborted
batched storage policy updates. Resolve legacy static keys first while keeping
explicit native GCP authentication conflicts rejected. Cover credential aliases,
partial patches, metadata replay, and batched resource/policy updates and drops.

### Release note

Preserve access to legacy GCS resources with static keys and an anonymous selector
when upgrading to native GCP authentication support.

### Check List (For Author)

- Test: A 192-case source probe fails before the fix and passes after it; Java
  parsing, FE Core/GCS Checkstyle, and git diff --check passed. Added resolver and
  replay/batched-push unit tests. The standard FE UT runner stopped during Thrift
  code generation with the installed 0.16.0 compiler; FE tests were not executed.
- Behavior changed: Yes, restore legacy static-key precedence without weakening
  explicit native GCP credential conflict validation.
- Does this need documentation: No
@sollhui

sollhui commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

run buildall

@sollhui

sollhui commented Oct 23, 2026

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.

Static review of the 151 supplied changed paths at 0505a9fd63ee0926bda7107909ebc5d111f43bd8.

One new P2 is reported inline: HMAC GCS FileIO inherits the Glue metadata assume-role factory. Three previously reported P1 issues were independently confirmed and remain blockers; they are carried forward without duplicate comments:

Critical checkpoint conclusions:

  1. Goal and proof: native ADC/Compute Engine/impersonation is wired through FE, BE and Cloud, with unit and IAM regression coverage added. The identity handoff defects above prevent a complete correctness conclusion; inspected tests are not execution proof.
  2. Scope and reuse: the broad change is cohesive around object authentication. Shared credential variants, typed API descriptions and host-only codecs reduce duplication; HMAC FileIO separation is incomplete.
  3. Concurrency and locks: reviewed resource ALTER monitor serialization, read/write publication locks, policy-push unlocks, client-cache creation/reset and token-provider mutexes. No additional lock-order defect was verified. SDK refresh is serialized for credential safety and can block callers during renewal.
  4. Lifecycle and static initialization: client/signing providers have explicit shared ownership and no new ownership cycle or cross-translation-unit initialization dependency was found.
  5. Configuration and dynamic changes: no new process-level dynamic configuration was introduced. Credential changes rebuild clients; partial native source/impersonation fields preserve omission and explicit clears. Existing CA settings reach OAuth and signing.
  6. Compatibility: legacy AWS/HMAC fields remain. Native activation requires updated MS and relevant FE/BE consumers, as documented; unsupported activation on older consumers is a deployment limit rather than a new blocker.
  7. Thrift/Protobuf IDs: touched definitions were read on HEAD and branches 3.1, 4.0, 4.1 and 4.2. Additions are optional; no field/enum collision or reuse was found.
  8. Parallel paths: reviewed map, Thrift policy, protobuf vault/instance, recycler, stage/COPY, Iceberg FileIO/Hadoop, export/outfile and error-log signing paths. Stage/COPY omissions remain the known failures above.
  9. Conditions and errors: checked auth conflicts, alias precedence, empty/omitted patches, trusted endpoint selection, signer identity and failure fallback. Existing construction/refresh exception reports and partial-ALTER compatibility threads remain duplicate-fenced.
  10. Test coverage: added unit tests cover codecs, routing, legacy replay/push, partial ALTER, signing, credential reset and metadata/object client separation; regressions cover major IAM operations. HMAC object reads with a Glue role are missing, and malformed-ADC exception coverage remains a known gap.
  11. Test results: no golden result files are changed. Tests, builds and format/static-analysis tools were not run under this static-only contract.
  12. Observability: token errors are rate-limited, request failures use SDK/status paths, and signing failures log context and retain the local error-log path. Existing uncaught SDK exception paths still bypass normal error reporting.
  13. Persistence and failover: reviewed resource replay, credential protocol copies, vault candidate updates and metadata publication. The root/derived cascade retry defect remains; no additional EditLog mismatch was verified.
  14. Writes and atomicity: rejected vault credential updates preserve names/auth through candidate-copy validation and transactional publication. Cross-instance key updates retain the known reconciliation failure. Rowset visibility, delete-bitmap and recycler mark/delete algorithms are not modified.
  15. FE/BE transmission: native fields are propagated through the changed map/Thrift/Protobuf builders and decoders; the manual COPY builder remains the verified exception.
  16. Performance and memory: per-client credential caching and existing rate-limit wrappers are retained. No new large untracked buffer, cache ownership defect or data-size-dependent hot-loop regression was verified statically; runtime performance was not measured.
  17. Other integration concerns: Java scanner dependencies, wire-codec isolation, plugin surface/version changes and C++ source/link inventories were inspected. Final plugin packaging, linking and GLIBC_2.17 ELF compatibility were not executed or proven.
  18. User focus and limits: no additional user focus was supplied. Native Paimon/Hudi integration and FE presigned uploads are explicitly outside the PR's supported scope. Real IAM exchanges and end-to-end cluster behavior remain unexecuted validation limits.

Earlier reports for static-key precedence, explicit S3 routing, MinIO aliases, service-account OAuth exchange, Glue/REST anonymous-client isolation, Glue region/config handoff and scanner codec packaging are repaired on this head. The new inline concerns the separate HMAC branch.

Review converged after 2 round(s).

Existing P0/P1 findings confirmed for this head: #68540 (comment), #68540 (comment), #68540 (comment)

Optional<GcsAuth> auth = GcsAuthResolver.resolve(backend.toMap());
if (auth.filter(GcsAuth::isAnonymous).isPresent()) {
// Glue and REST metadata can require AWS authentication even when GCS objects are public.
opts.put(S3FileIOProperties.CLIENT_FACTORY, AnonymousS3FileIOAwsClientFactory.class.getName());

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.

[P2] Keep HMAC GCS FileIO separate from the Glue role

For a Glue catalog with provider=GCP, valid gs.access_key/gs.secret_key, glue.role_arn and a Glue endpoint/region, the new credentialProperties() filter permits the configuration, but HMAC enters neither factory override here. appendGlueProperties leaves client.factory=AssumeRoleAwsClientFactory, and Iceberg 1.12's FileIO factory selection falls back to it. That factory's synchronous S3 client uses the AWS assumed role instead of the configured GCS HMAC pair, so reading a private GCS table with an s3:// metadata location fails although Glue authentication succeeds. Give HMAC GCS its own FileIO credential path and cover an object read with role-authenticated Glue. This is distinct from the repaired native/anonymous branches.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17421	5179	5066	5066
q2	2119	304	255	255
q3	10214	1365	817	817
q4	4684	467	336	336
q5	7429	785	535	535
q6	183	182	149	149
q7	737	796	613	613
q8	9263	1338	994	994
q9	5507	4196	4150	4150
q10	6829	1293	996	996
q11	469	253	223	223
q12	637	397	276	276
q13	18136	3525	3043	3043
q14	272	287	243	243
q15	q16	734	711	670	670
q17	1215	747	565	565
q18	6988	6171	6127	6127
q19	1117	953	604	604
q20	390	329	222	222
q21	5748	2213	2258	2213
q22	348	293	253	253
Total cold run time: 100440 ms
Total hot run time: 28350 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	5618	5585	5623	5585
q2	664	581	534	534
q3	5209	5404	4924	4924
q4	1993	2154	1533	1533
q5	5291	5224	5650	5224
q6	274	209	156	156
q7	2338	2091	1860	1860
q8	3004	2728	2654	2654
q9	7982	7995	7978	7978
q10	3678	3626	3211	3211
q11	618	608	432	432
q12	688	707	546	546
q13	3468	3877	3226	3226
q14	330	336	280	280
q15	q16	696	714	683	683
q17	8398	7316	6919	6919
q18	13043	12203	12834	12203
q19	925	782	786	782
q20	2149	2134	1903	1903
q21	5539	4576	4674	4576
q22	498	458	424	424
Total cold run time: 72403 ms
Total hot run time: 65633 ms

@hello-stephen

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

query5	4332	576	436	436
query6	421	213	191	191
query7	4797	443	223	223
query8	324	172	152	152
query9	8770	3081	3095	3081
query10	490	313	274	274
query11	5988	3862	3579	3579
query12	155	93	85	85
query13	1259	442	352	352
query14	6109	3926	3649	3649
query14_1	3430	3424	3441	3424
query15	209	206	180	180
query16	940	454	432	432
query17	849	661	535	535
query18	2425	426	312	312
query19	198	167	139	139
query20	84	84	84	84
query21	211	133	108	108
query22	13010	12942	12980	12942
query23	13546	12785	12439	12439
query23_1	12539	12527	12625	12527
query24	7345	824	471	471
query24_1	486	479	470	470
query25	537	426	364	364
query26	1262	258	151	151
query27	2759	443	273	273
query28	4626	1937	1940	1937
query29	1572	617	453	453
query30	300	221	183	183
query31	1020	928	818	818
query32	161	94	94	94
query33	530	306	253	253
query34	903	841	493	493
query35	733	760	671	671
query36	816	802	732	732
query37	117	97	80	80
query38	1786	1758	1675	1675
query39	786	777	735	735
query39_1	718	729	737	729
query40	235	115	98	98
query41	74	72	69	69
query42	86	85	82	82
query43	345	369	316	316
query44	1304	685	713	685
query45	186	180	168	168
query46	825	975	567	567
query47	2796	3038	2528	2528
query48	326	301	218	218
query49	566	386	281	281
query50	658	268	203	203
query51	10645	10424	10509	10424
query52	78	79	73	73
query53	180	205	150	150
query54	235	186	184	184
query55	71	62	62	62
query56	251	221	221	221
query57	1649	1620	1570	1570
query58	275	261	242	242
query59	2122	2178	1954	1954
query60	278	238	241	238
query61	139	137	145	137
query62	394	334	284	284
query63	186	155	160	155
query64	2739	982	764	764
query65	3321	3293	3261	3261
query66	1770	417	297	297
query67	20028	20176	20059	20059
query68	2965	994	594	594
query69	386	298	245	245
query70	860	767	735	735
query71	302	238	200	200
query72	2689	2634	2261	2261
query73	503	524	291	291
query74	4592	4533	4371	4371
query75	2336	2303	1924	1924
query76	2290	1007	567	567
query77	349	380	264	264
query78	9895	9764	9198	9198
query79	972	837	502	502
query80	1065	433	345	345
query81	564	328	266	266
query82	571	135	106	106
query83	298	191	203	191
query84	308	118	102	102
query85	883	439	388	388
query86	361	240	227	227
query87	2021	1933	1797	1797
query88	3607	2689	2641	2641
query89	329	284	244	244
query90	1851	171	159	159
query91	165	150	124	124
query92	95	78	90	78
query93	974	991	569	569
query94	588	324	277	277
query95	576	347	300	300
query96	656	484	231	231
query97	2466	2452	2328	2328
query98	157	153	147	147
query99	768	758	656	656
Total cold run time: 234435 ms
Total hot run time: 150750 ms

@hello-stephen

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

query1	0.01	0.01	0.00
query2	0.14	0.09	0.09
query3	0.33	0.12	0.12
query4	1.60	0.13	0.13
query5	0.27	0.25	0.25
query6	1.16	0.65	0.65
query7	0.04	0.01	0.00
query8	0.09	0.07	0.07
query9	0.44	0.36	0.36
query10	0.61	0.59	0.57
query11	0.31	0.22	0.17
query12	0.32	0.20	0.20
query13	0.52	0.51	0.52
query14	0.92	0.92	0.93
query15	0.65	0.60	0.59
query16	0.35	0.36	0.35
query17	1.04	0.99	0.99
query18	0.29	0.28	0.28
query19	1.89	1.86	1.88
query20	0.02	0.02	0.02
query21	15.40	0.35	0.31
query22	4.93	0.13	0.14
query23	15.85	0.49	0.31
query24	2.35	0.51	0.39
query25	0.15	0.10	0.10
query26	0.76	0.27	0.22
query27	0.11	0.10	0.10
query28	3.43	0.85	0.39
query29	12.61	4.29	3.38
query30	0.34	0.17	0.15
query31	2.76	0.60	0.33
query32	3.23	0.60	0.48
query33	2.96	2.97	3.00
query34	15.88	4.05	3.44
query35	3.37	3.39	3.38
query36	0.58	0.49	0.46
query37	0.12	0.10	0.09
query38	0.07	0.06	0.06
query39	0.07	0.06	0.06
query40	0.19	0.16	0.16
query41	0.10	0.06	0.05
query42	0.06	0.06	0.06
query43	0.07	0.06	0.05
Total cold run time: 96.39 s
Total hot run time: 25.2 s

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17627	5379	5200	5200
q2	2101	360	248	248
q3	10219	1466	839	839
q4	4687	482	335	335
q5	7436	833	533	533
q6	186	191	154	154
q7	827	837	596	596
q8	9263	1527	1238	1238
q9	5732	4404	4419	4404
q10	6908	1329	1015	1015
q11	444	247	225	225
q12	636	446	281	281
q13	18070	3674	3025	3025
q14	280	274	246	246
q15	q16	715	735	681	681
q17	1334	783	571	571
q18	6939	6148	6113	6113
q19	1098	1102	644	644
q20	408	372	224	224
q21	5151	2374	2698	2374
q22	403	329	268	268
Total cold run time: 100464 ms
Total hot run time: 29214 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	6282	6207	6459	6207
q2	769	574	567	567
q3	5682	5770	5411	5411
q4	2101	2244	1616	1616
q5	5656	5548	5727	5548
q6	296	207	142	142
q7	2311	1985	1811	1811
q8	3122	2785	2710	2710
q9	7943	7987	7940	7940
q10	3735	3622	3166	3166
q11	619	410	374	374
q12	708	700	505	505
q13	3364	3693	3043	3043
q14	291	301	256	256
q15	q16	675	677	619	619
q17	7944	7128	6871	6871
q18	12936	12177	12881	12177
q19	1062	840	856	840
q20	2166	2153	1948	1948
q21	6019	4720	4964	4720
q22	549	443	426	426
Total cold run time: 74230 ms
Total hot run time: 66897 ms

@hello-stephen

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

query5	4311	584	436	436
query6	426	215	191	191
query7	4810	441	215	215
query8	318	170	155	155
query9	8794	3064	3075	3064
query10	471	315	277	277
query11	6022	3860	3554	3554
query12	150	93	89	89
query13	1255	433	340	340
query14	6149	3927	3619	3619
query14_1	3466	3417	3441	3417
query15	207	200	179	179
query16	946	426	436	426
query17	858	658	548	548
query18	2421	431	313	313
query19	200	172	139	139
query20	85	84	84	84
query21	206	125	107	107
query22	12960	13007	12902	12902
query23	13575	12915	12509	12509
query23_1	12527	12592	12521	12521
query24	7373	812	473	473
query24_1	476	475	482	475
query25	532	422	365	365
query26	1256	262	141	141
query27	2768	442	269	269
query28	4603	1956	1964	1956
query29	1549	600	458	458
query30	302	224	184	184
query31	1008	926	817	817
query32	147	94	92	92
query33	521	307	245	245
query34	890	839	490	490
query35	731	751	649	649
query36	821	845	715	715
query37	127	102	80	80
query38	1765	1709	1709	1709
query39	791	794	752	752
query39_1	741	725	735	725
query40	220	114	95	95
query41	72	68	68	68
query42	86	84	83	83
query43	340	364	313	313
query44	1291	679	686	679
query45	178	175	166	166
query46	827	959	604	604
query47	2779	2956	2837	2837
query48	284	304	214	214
query49	575	401	286	286
query50	677	271	204	204
query51	10479	10524	10211	10211
query52	78	81	68	68
query53	182	201	154	154
query54	252	189	171	171
query55	68	68	62	62
query56	230	208	203	203
query57	1672	1617	1569	1569
query58	285	258	262	258
query59	2120	2137	1916	1916
query60	287	243	211	211
query61	148	144	140	140
query62	391	328	279	279
query63	184	152	149	149
query64	2777	955	766	766
query65	3338	3252	3264	3252
query66	1768	415	294	294
query67	20205	20203	19968	19968
query68	3260	1009	633	633
query69	397	286	245	245
query70	843	801	753	753
query71	303	231	197	197
query72	2847	2625	2409	2409
query73	526	523	290	290
query74	4685	4513	4353	4353
query75	2318	2280	1914	1914
query76	2376	1006	578	578
query77	351	374	261	261
query78	9836	9846	9127	9127
query79	980	843	519	519
query80	1220	443	345	345
query81	581	317	265	265
query82	573	131	102	102
query83	269	201	184	184
query84	307	125	101	101
query85	1118	423	364	364
query86	356	229	235	229
query87	1985	1942	1801	1801
query88	3629	2673	2663	2663
query89	333	278	240	240
query90	1829	180	153	153
query91	157	149	123	123
query92	88	91	88	88
query93	1000	991	576	576
query94	540	304	267	267
query95	587	393	296	296
query96	658	480	240	240
query97	2441	2433	2316	2316
query98	158	150	155	150
query99	768	759	641	641
Total cold run time: 235411 ms
Total hot run time: 150707 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 0505a9fd63ee0926bda7107909ebc5d111f43bd8, data reload: false

query1	0.01	0.01	0.00
query2	0.09	0.04	0.05
query3	0.26	0.08	0.08
query4	1.60	0.10	0.10
query5	0.23	0.24	0.24
query6	1.17	0.69	0.68
query7	0.04	0.01	0.00
query8	0.07	0.04	0.04
query9	0.40	0.35	0.36
query10	0.58	0.56	0.56
query11	0.19	0.16	0.14
query12	0.18	0.14	0.14
query13	0.49	0.50	0.49
query14	1.01	1.03	1.03
query15	0.63	0.61	0.60
query16	0.35	0.33	0.35
query17	1.16	1.13	1.15
query18	0.21	0.20	0.20
query19	2.09	1.95	2.01
query20	0.02	0.02	0.01
query21	15.50	0.18	0.14
query22	5.02	0.06	0.05
query23	16.31	0.33	0.12
query24	2.82	0.59	0.42
query25	0.11	0.04	0.06
query26	1.19	0.21	0.15
query27	0.05	0.03	0.05
query28	3.53	0.78	0.38
query29	12.50	4.11	3.28
query30	0.28	0.13	0.10
query31	2.77	0.54	0.31
query32	3.23	0.59	0.51
query33	3.22	3.18	3.21
query34	15.40	4.00	3.37
query35	3.37	3.32	3.33
query36	0.57	0.46	0.63
query37	0.10	0.07	0.07
query38	0.05	0.04	0.04
query39	0.05	0.03	0.04
query40	0.18	0.16	0.16
query41	0.08	0.03	0.03
query42	0.04	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 97.19 s
Total hot run time: 24.36 s

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