Skip to content

[fix](regression) make regression test more stability - #68449

Merged
hello-stephen merged 31 commits into
apache:masterfrom
pingchunzhang:codex/cloud-26.1.2-pingchunzhang-picks
Sep 29, 2026
Merged

hello-stephen merged 31 commits into
apache:masterfrom
pingchunzhang:codex/cloud-26.1.2-pingchunzhang-picks

Conversation

@pingchunzhang

@pingchunzhang pingchunzhang commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary:

Port the applicable regression fixes

The changes primarily stabilize regression coverage around TLS/mTLS clients, Docker test isolation, multi-cluster cleanup, cloud cache and compaction workflows, and asynchronous metadata/schema visibility. They also add delete-bitmap debug barriers used by restart/concurrency regression cases and make Doris Compose container discovery exact and resilient to concurrent container removal.

Source review result: 24 applicable PR commits are included. Three source PRs were intentionally skipped because two only touched enterprise-only files that do not exist in Apache Doris and one was an empty commit.

Release note

None

Check List (For Author)

  • Test
    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason

Manual validation performed:

  • git diff --check origin/master...HEAD

  • Scanned the complete diff for unresolved conflict markers.

  • python3 -m py_compile docker/runtime/doris-compose/utils.py

  • Attempted mvn -q test in regression-test/framework; it could not start because thirdparty/installed/bin/thrift is not present in this checkout.

  • Behavior changed:

    • No.
    • Yes. Doris Compose container discovery now uses exact service-name matching and retries transient container-removal races. BE additions are debug-point hooks used only by regression tests.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

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

pingchunzhang and others added 24 commits September 23, 2026 19:49
…che#11842)

Strict mTLS regression runs fail when suites rebuild Doris JDBC URLs
without client certificates or send plaintext 2PC requests to TLS ports.
Master-FE connections/reconnections and shared HTTP initialization also
miss TLS configuration. These failures were observed in [TeamCity
212339](http://172.20.48.17:8111/buildConfiguration/Doris_Selectdb_BranchSelectdbDoris30_S3_Regression_P0/212339?buildTab=tests&status=failed),
whose actual binary is from branch-selectdb-doris-4.1.

Port the relevant 3.1 fixes from apache#9952, apache#10181, #11610, and the 2PC
portion of apache#11615:

- Initialize HTTP/DebugPoint TLS and preserve mTLS settings and
credentials when connecting or reconnecting to the master FE.
- Add the explicit `connectToDoris` entry point and migrate 34 JDBC
suites, including eight additional failing 4.1 suites. The
multi-statement case retains its original JDBC options. Generic
`connect` continues to support external databases and intentional
TLS-negative tests.
- Update 10 2PC suites, including the 4.1-only partial-update
schema-change case, to use HTTPS/mTLS as configured while retaining the
explicit FE 307 -> BE 200 checks and existing SQL assertions.

Conflict resolution preserves 4.1 test logic and
`connectWithDockerCluster`. Only the 2PC changes are selected from the
mixed apache#11615 commit. Equivalent Spark/Flink support is already present
in 4.1 via apache#10992. Other Arrow/UTF-8/raw-client TLS gaps and the
separate FE channel-version bug are outside this patch.

- Full regression framework main/test compilation passed with Java 17
and real Java types generated by Apache Thrift 0.24.0.
- `mvn -f regression-test/framework/pom.xml
-Dtest=SuiteContextConnectTest test`: **7 passed, 0
failures/errors/skips**. Connector/J parsing checks TLS properties,
target/credentials, original JDBC options, connection cleanup, and
restoration after exceptions; includes both 4.1 multi-statement URL
variants.
- Local HTTP/mTLS FE/BE servers exercised the 10 actual 2PC helper
closures: **56 checks passed**, including 10 negative controls using the
original helpers. Coverage includes redirects, client certificates,
strict/CA/no-verification modes, failure responses, certificate paths
containing spaces, and passwords containing special characters.
- Groovy syntax parsing passed for all **44 changed suites**. A source
comparison verified that 33 JDBC suites only change connection entry
points/line-ending whitespace; the multi-statement suite was reviewed
separately.
- `git diff --check` passed.

The full SQL regression suites have not yet been rerun against a real
TLS cluster.

None

- Test
    - [ ] Regression test (real-cluster rerun pending)
    - [x] Unit Test
    - [x] Manual test (local transport checks described above)
- Behavior changed:
- [x] Yes. Regression clients use configured TLS credentials for Doris
connections and 2PC requests.
- Does this need documentation?
    - [x] No.

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label
…up (apache#11849)

The 4.1 multi-cluster regression suites can reject deployed BE
configurations, leave stale default compute groups or modified topology
behind, and read query profiles from a different FE than the one
executing the query. Subsequent tests can then fail before reaching
their own assertions.

- Port the relevant 3.1 helper/configuration, HTTP credential and Groovy
declaration fixes.
- Protect 21 serial legacy suites with a finally guard that restores the
original user default, instance status, complete compute-group metadata
and node membership. Verify MS and every FE; retain the original failure
with cleanup failures attached.
- Accept four- and five-field BE entries, identify nodes by IP and
heartbeat port, and allow shared cloud IDs. Follow FE semantics for an
omitted NORMAL status tag.
- Initialize a shared two-group fixture even when an earlier run left
different group names. Reuse it in stream_load and test_drop_cluster
while preserving routing and repeated deletion/recreation coverage. Roll
back failed initialization.
- Read query profiles from the executing FE, use a unique execution
marker, and wait for the required BE heartbeat address. Recreate the
two-phase load test table before each run, specify the domain routing
policy explicitly, and use the relocated internal-stage input fixture.

Scope: serial legacy suites on the dedicated multi-cluster instance.
Docker, virtual compute groups and upgrade-specific suites retain their
own lifecycle. The profile checks wait for required routing evidence;
this does not add a strict server-side guarantee that all execution
fragments have been collected.

Related pipeline selection fix:
selectdb/selectdb-qa#6367

- Remote Maven package succeeded; all 12 MultiClusterStateGuardTest
methods passed.
- All 28 changed Groovy files parse; all 23 changed suites compile.
Focused checks cover executing-FE selection, unique query markers,
single query execution and required profile content.
- Live serial verification: 19 suites passed, 3 failed with server SQL
errors, and the dedicated smooth-upgrade suite was excluded because its
required upgrade-node configuration was absent.
- Remaining failures: async_load rejects a valid SHOW COPY ID predicate;
both materialized-view drop/readd cases reject their CREATE MATERIALIZED
VIEW statement with a duplicate-column error. Their business assertions
are unchanged.
- The sync-load rerun passed all 20 query-profile routing checks after
repairing a missing profile storage directory in the test environment.
The server behavior that releases execution data after a failed profile
write remains outside this test-only PR.
- Final checks passed on all four FEs: matching shared groups and node
mappings, both BEs alive and not decommissioned, the baseline user
default restored, MS instance NORMAL, and no regression process left
running.
- All 28 installed source files match the final source checksums. git
diff --check passed.

None. Regression framework and test changes only.

- [x] Unit tests and framework compilation.
- [x] Live serial regression run with the remaining server failures
documented above.
- [x] Final shared-state restoration verified.
- [x] Behavior changed: legacy suites restore shared state; fixture
users share a consistent baseline.
- [x] No user-facing documentation required.

- [ ] Confirm the release note
- [ ] Confirm test cases and remaining server failures
- [ ] Confirm document
- [ ] Add branch pick label

---------

Co-authored-by: Refrain <[email protected]>
…he#11859)

S3 NonConcurrent [build
212263](http://172.20.48.17:8111/buildConfiguration/Doris_Selectdb_BranchSelectdbDoris30_S3_Regression_NonConcurrent/212263)
runs `branch-selectdb-doris-4.1` and reproduces several failures whose
fixes are already on `branch-selectdb-doris-3.1`. Port the matching
fixes and their framework/debug-hook dependencies to 4.1.

| Failure | Ported fix |
|---|---|
| Schema change cancels with empty inverted-index column IDs | apache#11487:
remove the shadow prefix when matching index columns; add a
shadow-column unit test. Jira:
[CORE-6138](http://39.106.86.136:8090/browse/CORE-6138). |
| Packed-file Stream Load looks under the suite-relative data directory
| apache#7882: resolve the input from `context.config.dataPath` in all eight
cases sharing the bad path. |
| Partial-update/stale-response tests block the BE rowset-update lock |
target the transaction, and propagate background failures. Jira:
[CORE-6136](http://39.106.86.136:8090/browse/CORE-6136). |
| Delete-bitmap lock tests read another BE's retry counter or leak fault
hooks after config cleanup fails | Selected
compare per-request metric deltas, verify actual MS lock
contention/recovery, and clear hooks before restoring captured settings.
|
| Key-bounds metadata is missing and skip-index sees stale rowsets |
committed version, then read exact physical rowsets from BE/MS. Jira:
[DORIS-21942](http://39.106.86.136:8090/browse/DORIS-21942),
[DORIS-21937](http://39.106.86.136:8090/browse/DORIS-21937). |
| FULL lease test expects an asynchronous submission to return the
task's failure | apache#11503/apache#11578: wait for the competing task to fail
while FULL retains its lease, then verify FULL completes. Jira:
[DORIS-21932](http://39.106.86.136:8090/browse/DORIS-21932). |
| Base delete-sign pruning assumes an invalid cumulative/base layout |
rowset, and verify successful compaction and exact layout. Jira:
[DORIS-27133](http://39.106.86.136:8090/browse/DORIS-27133). |
| Local cold-data/publish-daemon tests run in cloud mode | Cloud
applicability guards from apache#11471. |

- Place the new debug barrier in
`CloudTabletCalcDeleteBitmapTask::handle()`, where 4.1 holds the
rowset-update lock; retain the 4.1 subtransaction flow and only block
successful calculations.
- Call the 4.1 Thrift method `sync_load_for_tablets`.
- Append the optional curl retry limit after the existing
username/password parameters, preserving existing callers and bounding
polling requests.
- Keep existing golden outputs. Source commits are recorded in the
commit messages.

The separate 4.1 attachment-bearing INSERT commit path still bypasses
the MOW retry loop. The affected retry suites need that product fix
before their complete scenario can pass; this PR ports their existing
3.1 orchestration fixes. Other build failures with no matching 3.1 fix
remain outside this port.

- [x] Six `RowsetMetaUtilsTest` methods executed with Groovy 4.0.19 /
JDK 18: continuous coverage, gaps, unsorted/merged rowsets, malformed
metadata, binary key bounds, and input immutability.
- [x] Parsed all 23 changed Groovy files through Groovy conversion.
- [x] Executed the actual curl closure against a fake process: existing
default calls, existing credential arguments, and the new single-attempt
polling call all pass.
- [x] FE checkstyle on `Index.java` and `IndexTest.java`: zero
violations.
- [x] `git diff --check`; verified unchanged expected-result files for
the ported suites.
- [ ] Full FE `IndexTest` run: blocked in `fe-common` by missing
generated `org.apache.doris.thrift` classes.
- [x] Full regression-framework clean build on
`[email protected]:/mnt/disk2/tmp/case_output/selectdb-core`, JDK 17:
`mvn clean package -Dtest=RowsetMetaUtilsTest
-Dsurefire.failIfNoSpecifiedTests=false` — BUILD SUCCESS (2 minutes), 6
tests, 0 failures/errors/skips.
- [x] Compiled all 20 changed dynamic suite/plugin scripts with the
newly built framework jar, without executing cluster SQL. New jar
installed under `output/regression-test/lib`; source/jar backups and
logs retained in `/mnt/disk2/tmp/case_output/pr-11859-sync.t0kSbY`.
- [ ] BE build and S3 cluster regression: require CI; no cluster
regression was run locally.

Fix inverted-index column metadata matching during schema change.
Restore shared cloud NonConcurrent regression coverage and
synchronization from the 3.1 branch.

- Test:
- [x] Unit Test (rowset helper tests executed; added Index test awaits
the generated FE build)
  - [x] Manual test (Groovy parsing, curl compatibility and Checkstyle)
  - [ ] Regression test on a cloud cluster
- Behavior changed:
- [x] Yes: schema-change index matching; regression synchronization,
fault orchestration and cloud applicability.
- Does this need documentation?
  - [x] No.

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label

---------

Co-authored-by: Jack <[email protected]>
Co-authored-by: zzzxl <[email protected]>
Co-authored-by: bobhan1 <[email protected]>
Backport the branch-3.1 regression fixes relevant to [S3 P2 build
212262](http://172.20.48.17:8111/buildConfiguration/Doris_Selectdb_BranchSelectdbDoris30_S3_Regression_P2/212262?buildTab=tests&status=failed)
onto `branch-selectdb-doris-4.1`.

- Align the two nested-type golden files with shortest round-trip
FLOAT/DOUBLE formatting. For example, the existing expectation
`-11772.93` disagrees with the current result `-11772.928`. Preserve the
4.1 SQL, result tags, row order, map order, nonnumeric contents and
LARGEINT representation; transfer matching numeric values from 3.1 and
use the original S3 CSV values for structs absent from the 3.1 results.
- Adapt `test_show_index_data_p2` to cloud metadata visibility: retain
exact segment-count assertions in local mode and use successful
compaction, schema-change completion and SHOW DATA size transitions in
cloud mode. Cloud mode does not assert the physical segment counts
110/1.
- Port the dup-key max-file-size compaction setup: use a 1,200-second
wait (the observed operation succeeded after 321 seconds), build the
prerequisite base rowset before enforcing the 512 MB limit, retain the
expected `E-808`, and assert the exact loaded row count. Restore
original BE configuration in `finally`.
- Run `big_join_build`, `test_set_operation_large_string` and
`compaction_width_array_column` as `p2,nonConcurrent`. Preserve the >4
GB set-operation coverage and all existing data sizes; serialization
reduces competing memory pressure without claiming to fix single-query
peak memory.

Selected source changes: apache#11462
(`3d5c1cff849caf75e70b262be10b0724d2fe1452`) and apache#11484
(`4026803a80eee296d1c18dc63fa0da3c94eadec0`). Adapted to the 4.1 cases
rather than taking either entire source commit.

Related Jira:
[DORIS-26361](http://39.106.86.136:8090/browse/DORIS-26361),
[DORIS-27401](http://39.106.86.136:8090/browse/DORIS-27401),
[DORIS-27404](http://39.106.86.136:8090/browse/DORIS-27404). Historical
resource-pressure trackers:
[DORIS-21779](http://39.106.86.136:8090/browse/DORIS-21779),
[DORIS-27405](http://39.106.86.136:8090/browse/DORIS-27405).

- [x] `git diff --check`.
- [x] Parse and convert all five changed Groovy suites with Groovy
4.0.19, matching the regression framework's version.
- [x] Validate both golden-file changes: identical result tags, row
counts and all nonnumeric text; each changed numeric token reproduces
the previous 7-digit FLOAT or 16-digit DOUBLE expectation under the old
formatter.
- [x] Verify the two failing FLOAT examples against the new golden files
and check additional struct values against the original public S3 CSV
fixtures.
- [x] Check the target branch's `nonConcurrent` scheduling and the
compaction/schema-change helper signatures used by the backport.
- [ ] Run the seven affected suites on a 4.1 S3 cluster. No cluster
rerun was performed; the original build's logs and fixture data were
used for validation.

None; regression-test changes only.
Several Docker regression suites on `branch-selectdb-doris-4.1` still
use outdated setup or assertions that have already been corrected on
`branch-selectdb-doris-3.1`. Port those fixes for 20 affected suites,
with their compaction helper and two targeted BE debug barriers.

These failures include an HTTP 405 from the removed upload API,
container-local Kafka addresses, outdated negative error expectations,
reading metrics on the wrong compute group, compaction prerequisites
that no longer create eligible rowsets, and assertions made before
asynchronous state converges.

| Affected suites | Ported behavior | Source PRs |
| --- | --- | --- |
| `test_tls_client_skip_hostname_verification` | Generate a stream-load
ErrorURL and retain the FE-to-BE HTTPS `SHOW LOAD WARNINGS` check. |
| `use_vcg_read_write_routine_load` | Run isolated Kafka on the Doris
bridge network, use unique topics, await produced/loaded rows and clean
up the broker. | apache#11573 |
| `test_tvf`, `test_create_partition_idempotence` | Check current
dropped-CG and injected rowset-conflict errors. | apache#11471, apache#11623, #11678
|
| `test_warm_up_cluster_event_cancel_expired` | Observe the source BE,
exercise passive cancellation cleanup and await asynchronous counters. |
| `test_cloud_alter_disable_auto_compaction` | Configure both tablet
staleness and background synchronization intervals. | apache#11484 |
| `test_kms_wrong_aksk`, `test_rotate_root_key` | Verify deliberate KMS
failures, preserve state on rejected rotations and keep temporary keys
alive through successful rotations/restarts. | apache#11500, apache#11557, apache#11580 |
| `test_delete_bitmap_lock_with_restart` | Test
load/compaction/schema-change with FE/BE restarts using persisted lock
ownership, targeted debug barriers and final transaction/data checks. |
| `test_filecache_with_alter_table`,
`test_filecache_with_base_compaction_thresthold` | Wait for the selected
cache blocks to clear; validate per-BE input/cached-byte deltas and hit
ratios instead of fixed byte totals. | apache#9909, apache#11484 |
| `test_sc_compaction_optimization`,
`test_sc_compaction_optimization_with_load`,
`test_sc_compaction_cross_v1_retry` | Create enough versions for
NOTREADY compaction and prove the required merged interval before
releasing schema change. | apache#11504 |
| `test_schema_change_with_compaction5/6/9/10/11` | Target the correct
tablet, wait for metadata/compaction completion and retain the latest
ten unmerged versions where required. | apache#11471, apache#11642 |
| `test_stream_load_endpoint` | Use request host plus private endpoint
port for the default redirect; update cloud endpoints through MS. |

- Preserve the existing CDC TLS scenario, stream-load HTTP retry
behavior, `cloud_p1` fixture paths, and compaction helper's E-808 no-op
handling.
- Bring in the helper's optional tablet selection, retryable-trigger
errors, baseline refresh and bounded HTTP probes; existing two-argument
callers retain their interface.
- Invalid KMS credentials fail on the first INSERT in 4.1, so assert
`generate data key error` there and require zero committed rows. The 3.1
CREATE TABLE rejection is not present in 4.1.
- 4.1 masks IV/ciphertext. Root rotation therefore checks stable
master-key IDs/versions and changed parent-key bindings, alongside the
existing read/write and restart assertions.
- The only BE changes are the two debug barriers from apache#11557. The
restart suite requires a BE rebuilt with those barriers.

Source branch checked at `14603979dd352b374ce22cbe453bcb2d4ac67701`;
target base is `120f3429d4245984b3b2826971d9363c1f170f8b`. This is a
selective port because the source PRs also modify unrelated cases.

- [x] Groovy 4.0.19 parsing and AST conversion: all 21 changed Groovy
files passed.
- [x] Eight isolated checks executing the production compaction plugin
against a fake cluster transport: legacy calls, selected-tablet routing,
missing-tablet rejection, E-2000 retry/baseline refresh, E-808
compatibility, unexpected-error propagation, transient HTTP polling, and
E-2010 handoff completion.
- [x] Verified the 23-file change scope and schema-change relative
fixture paths; `git diff --check` passed.
- [ ] Full Docker regression: Docker is unavailable on the local
validation machine. CI must execute the affected suites on Linux,
including Kafka and KMS prerequisites.
- [ ] BE compilation and all six delete-bitmap restart scenarios with
the rebuilt injection-enabled BE.

The isolated checks validate helper behavior, not a full framework build
or end-to-end cluster execution.

None

- Test
- [x] Manual test (isolated plugin checks and Groovy validation above)
    - [ ] Regression test (full Docker execution pending)
- Behavior changed:
- [x] Yes: regression setup/expectations and debug-only barriers as
described above.
- Does this need documentation?
    - [x] No.

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label
… and Kafka topic (apache#11874)

TeamCity S3 P0 build 212515 exposed regression framework and case
failures when the configured root account has a password, unrelated
worker exceptions are captured by a parallel compaction waiter, and a
routine load job consumes a different Kafka topic from its producer.

- Keep admin connections on root. Reuse `jdbcPassword` only when
`jdbcUser` is root and the password is nonempty; close cloud-mode and
cluster-key probe connections on success and failure.
- Pass HTTP credentials per request and update the affected HTTP/JDBC
cases. Pass MySQL CLI credentials through temporary `0600` option files
with cleanup, argument-list process creation and SQL on stdin. Preserve
existing SSL scenarios and the documentation case's configured user and
working directory.
- Disable Awaitility's capture of unrelated uncaught exceptions in
compaction polling. Propagate insert-worker failures through the owning
suite's Future and accept the stable strict-mode error prefix.
- Use one Kafka topic variable in `test_routine_load_advanced_mapping`.
Read routine load fields by name and include state-change reasons and
error-log URLs in polling and timeout diagnostics.

None

- Test
- [ ] Regression test — full S3 P0 cluster rerun has not been performed.
    - [x] Unit Test — 12 tests passed on the rebased branch with JDK 18:
      ```sh
      mvn -o -f regression-test/framework/pom.xml \

-Dtest=ConfigRootPasswordTest,HttpAuthenticationTest,MySqlClientTest,SuiteContextConnectTest
test
      ```
    - [x] Manual test
- Nine deterministic concurrency scenarios passed against the actual
plugin and insert-case scripts, including a negative control reproducing
cross-suite exception capture.
- Modified suite scripts compile. CLI call-site checks preserve all five
SSL modes, credential selection, SQL text and working directories.
- MySQL `--print-defaults` validated four option-file escaping cases
with dummy values, without connecting to a database.
      - `git diff --check` passed.

- Behavior changed:
- [x] Yes. Regression admin operations honor the configured root
password; worker failures stay with their owning suite; the routine load
case consumes the topic it populates and reports pause reasons.

- Does this need documentation?
    - [x] No.

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label
…cycle tests (apache#11836)

Cloud cache regression tests compare shared counters, rely on fixed file
sizes and unsupported metadata fields, or assume asynchronous
transitions finish after a fixed sleep. These changes scope checks to
the test's own tablets and owning backends and wait for the state
required by each assertion.

- Use column scans where backend execution is required, disable result
caches, and check target tablet metadata before warmup.
- Compare per-table/tablet cache bytes for warmup and synchronous
insertion. Check untouched partitions/tables, completed job details and
hotspot activity; batch warmup uses one scan per table per batch.
- Disable automatic sync load for explicit warmup and restore shared
settings, jobs and fixtures on failure.
- Check original cache blocks through TTL changes, natural expiry,
eviction and refill. Keep shared metrics as diagnostics, assert TTL
properties directly, and remove the redundant TTL suite.
- Preserve the scoped file-cache metadata lifecycle test and port
applicable regression fixes from the older branch.

Changes are limited to regression suites, expected outputs and the test
utility.

- [x] `git diff --check`.
- [x] Groovy compilation and serial regression execution.
- [x] Case issues found during execution were fixed and rerun.
- [x] Test-owned fixtures and temporary configuration changes cleaned
up.

Some suites continue to fail on product behavior. Complete suite reruns
are needed after those product issues are resolved, because later
assertions in failed suites have not executed. Detailed internal
diagnostics are retained in the validation records outside this PR.

None (regression tests only).

- [x] Regression tests updated.
- [x] Validation completed with the limitations stated above.
- [x] No production implementation change.
- [x] No documentation update required.

- [ ] Confirm the release note.
- [ ] Review test behavior and remaining validation limits.
- [ ] Confirm documentation requirements.
- [ ] Add branch pick label if needed.

---------

Co-authored-by: zhengyu <[email protected]>
- Compare visible key identity, parent binding, and modification time
instead of masked IV/ciphertext values in four TDE root-key rotation
suites.
- Repair Docker regression assumptions around curl process streams,
Docker client host, tablet ID types, insert-overwrite conflict messages,
the schema-change cross-V1 precondition, and VCG failover policy timing.
- Remove the `nonConcurrent` group from the inverted-index schema-change
race case.

- Parsed and converted all 11 changed Groovy suites to AST with Groovy
4.0.19.
- Exercised the curl process helper with a child producing 100 KB of
stdout and stderr concurrently.
- `git diff --check` passed.
- Full Docker regression execution was unavailable in the local
environment; CI should validate integration behavior.
- Route the failing nonConcurrent cases' direct HTTP requests through
the regression framework's TLS configuration, including BE delete bitmap
and BRPC metrics endpoints, profile APIs, and fault injection APIs.
- Reuse the framework's TLS-aware JDBC URL for independent connections
in the rowstore and group commit cases.
- Use the existing certificate settings for direct curl stream loads.
The archived `doris-dbgen` binary has no TLS/client-certificate options,
so mTLS runs generate the equivalent test data locally and load it
through the framework's TLS-aware stream load path.
- Cover the remaining independent JDBC connections in point query,
transaction, schema change, and cloud cluster cases, and the four P2
auto-partition cases that invoke `doris-dbgen`.

Related TeamCity build:
http://172.20.48.17:8111/buildConfiguration/Doris_Selectdb_BranchSelectdbDoris30_S3_Regression_NonConcurrent/212940?buildTab=tests&status=failed

- [x] Parsed all 30 changed Groovy files with the project's Groovy
4.0.19 parser.
- [x] Checked generated data column counts and date ranges against the
P2 table schemas.
- [x] `git diff --check`.
- [ ] Full framework compile: blocked locally because generated
`org.apache.doris.thrift` classes are absent from this checkout's build
output.
- [ ] mTLS regression rerun: requires a provisioned test
cluster/TeamCity build.
…pache#12012)

* Fix mTLS clients in nonConcurrent regression cases

* Cover remaining TLS JDBC and dbgen regression cases

* Fix plaintext HTTP regression clients in mTLS runs

* [fix](regression-test) Preserve mTLS in JDBC and Arrow Flight clients
…12064)

## Summary

- treat `SHOW TABLETS` rows as replicas and assert that `BUCKETS 1`
produces one distinct logical tablet
- capture the compaction baseline for every replica and verify that one
`ADMIN COMPACT TABLET` statement compacts all replicas
- report unfinished backend IDs and their last compaction status when
polling times out
## Summary

- call the Java Thrift client method generated by `java:fullcamel`
- fix the runtime `MissingMethodException` for `sync_load_for_tablets`
in S3 NonConcurrent regression
- keep the Thrift wire method and BE implementation unchanged

Failure observed in TeamCity build 213427. The compile pipeline built
the framework successfully because Groovy resolves this call
dynamically, but the generated `BackendService.Client` exposes
`syncLoadForTablets`.
@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?

@pingchunzhang pingchunzhang changed the title [fix](regression) Port post-cloud-26.1.2 stability fixes [fix](regression) make regression test more stability Sep 23, 2026
@pingchunzhang

Copy link
Copy Markdown
Contributor Author

run buildall

1 similar comment
@hello-stephen

Copy link
Copy Markdown
Contributor

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17650	3769	3750	3750
q2	2155	363	297	297
q3	10078	1452	817	817
q4	4694	471	343	343
q5	7484	821	551	551
q6	179	166	135	135
q7	735	780	568	568
q8	9287	1407	1591	1407
q9	5401	4209	4198	4198
q10	6826	1316	1006	1006
q11	432	260	242	242
q12	631	428	287	287
q13	18089	2632	1991	1991
q14	259	249	231	231
q15	q16	732	721	655	655
q17	1803	1153	1091	1091
q18	6537	5565	5499	5499
q19	1305	1249	1040	1040
q20	479	387	267	267
q21	5771	3186	2944	2944
q22	441	363	311	311
Total cold run time: 100968 ms
Total hot run time: 27630 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4506	4395	4351	4351
q2	726	552	548	548
q3	4682	5298	4597	4597
q4	2175	2345	1433	1433
q5	4562	4347	4397	4347
q6	227	172	127	127
q7	1823	1647	1515	1515
q8	2321	2051	1995	1995
q9	7174	6764	6864	6764
q10	3621	3530	3072	3072
q11	524	381	343	343
q12	700	709	501	501
q13	2256	2615	1992	1992
q14	266	279	251	251
q15	q16	652	682	596	596
q17	7282	6725	6601	6601
q18	12014	11249	11952	11249
q19	1162	1040	992	992
q20	2233	2174	1900	1900
q21	4987	4047	4224	4047
q22	492	435	422	422
Total cold run time: 64385 ms
Total hot run time: 57643 ms

@hello-stephen

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

query5	4304	622	442	442
query6	418	218	198	198
query7	4805	538	297	297
query8	315	167	164	164
query9	8793	3952	3929	3929
query10	439	306	253	253
query11	5897	3516	3225	3225
query12	149	93	87	87
query13	1251	601	430	430
query14	6532	4498	4198	4198
query14_1	3992	3915	3948	3915
query15	203	207	180	180
query16	983	465	453	453
query17	904	672	552	552
query18	2438	469	336	336
query19	205	182	144	144
query20	84	85	84	84
query21	218	135	114	114
query22	13002	12929	12789	12789
query23	13963	12868	12426	12426
query23_1	12675	12431	12453	12431
query24	7241	1165	704	704
query24_1	654	732	739	732
query25	560	437	373	373
query26	1283	311	177	177
query27	2630	567	342	342
query28	4528	1996	1993	1993
query29	1636	750	529	529
query30	306	220	184	184
query31	889	754	624	624
query32	149	103	101	101
query33	542	326	237	237
query34	1168	1100	606	606
query35	729	748	637	637
query36	829	795	693	693
query37	146	101	90	90
query38	1826	1760	1703	1703
query39	672	721	669	669
query39_1	658	622	646	622
query40	232	125	104	104
query41	72	68	68	68
query42	96	98	99	98
query43	345	345	299	299
query44	1373	717	720	717
query45	185	176	166	166
query46	1063	1190	738	738
query47	1483	1487	1404	1404
query48	406	414	343	343
query49	580	400	288	288
query50	927	333	254	254
query51	10641	10209	10225	10209
query52	86	91	74	74
query53	236	251	176	176
query54	245	204	186	186
query55	78	73	72	72
query56	232	231	214	214
query57	1525	1450	1170	1170
query58	268	262	254	254
query59	1971	2050	1875	1875
query60	283	248	220	220
query61	148	151	146	146
query62	396	323	270	270
query63	214	171	169	169
query64	2795	991	826	826
query65	3462	3399	3393	3393
query66	1789	434	308	308
query67	19911	19788	19735	19735
query68	3101	1494	939	939
query69	403	293	295	293
query70	888	824	833	824
query71	297	231	208	208
query72	2606	2443	2190	2190
query73	807	756	403	403
query74	4624	4451	4304	4304
query75	2282	2281	1941	1941
query76	2308	1117	733	733
query77	352	392	294	294
query78	9127	9099	8391	8391
query79	1369	1238	778	778
query80	585	460	366	366
query81	547	322	282	282
query82	629	168	122	122
query83	306	232	199	199
query84	324	142	116	116
query85	851	455	383	383
query86	336	242	225	225
query87	1969	1991	1838	1838
query88	3613	2727	2702	2702
query89	359	284	244	244
query90	1921	183	186	183
query91	171	158	127	127
query92	101	78	86	78
query93	1553	1394	891	891
query94	501	342	279	279
query95	669	362	340	340
query96	1052	776	308	308
query97	2444	2419	2311	2311
query98	158	150	148	148
query99	716	733	604	604
Total cold run time: 235787 ms
Total hot run time: 151711 ms

@hello-stephen

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

query1	0.01	0.00	0.01
query2	0.08	0.04	0.04
query3	0.26	0.13	0.14
query4	1.61	0.14	0.13
query5	0.24	0.22	0.21
query6	1.16	0.93	0.94
query7	0.03	0.00	0.00
query8	0.05	0.03	0.04
query9	0.39	0.33	0.34
query10	0.55	0.54	0.54
query11	0.20	0.15	0.14
query12	0.19	0.14	0.14
query13	0.45	0.45	0.47
query14	0.97	0.94	0.94
query15	0.60	0.58	0.57
query16	0.30	0.31	0.32
query17	1.10	1.06	1.03
query18	0.22	0.20	0.20
query19	2.03	1.92	1.95
query20	0.02	0.01	0.01
query21	15.48	0.25	0.13
query22	4.85	0.05	0.06
query23	16.14	0.29	0.12
query24	2.95	0.44	0.34
query25	0.12	0.05	0.04
query26	0.74	0.21	0.15
query27	0.05	0.04	0.04
query28	3.57	0.83	0.36
query29	12.48	4.08	3.20
query30	0.30	0.16	0.15
query31	2.77	0.55	0.31
query32	3.22	0.58	0.48
query33	3.15	3.18	3.20
query34	15.60	3.94	3.28
query35	3.23	3.21	3.24
query36	0.55	0.42	0.43
query37	0.09	0.06	0.06
query38	0.05	0.04	0.04
query39	0.04	0.03	0.03
query40	0.17	0.15	0.14
query41	0.08	0.02	0.02
query42	0.04	0.03	0.02
query43	0.04	0.03	0.04
Total cold run time: 96.17 s
Total hot run time: 23.85 s

### What problem does this PR solve?

Issue Number: N/A

Related PR: apache#68449

Problem Summary: The routine load advanced mapping case expected an unquoted whereExpr even though FE intentionally serializes translated slot labels with backticks. Restore the expected serialized expression and reset the polling counter before waiting for load statistics so each phase gets its full timeout.

### Release note

None

### Check List (For Author)

- Test: Manual test
    - Verified the expected expression against TeamCity build 1057564 output and the FE serialization path
    - Verified the input contains 20 rows, with 1 selected and 19 unselected rows
    - Ran git diff --check
- Behavior changed: No
- Does this need documentation: No
@pingchunzhang

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17577	3865	4008	3865
q2	2194	394	320	320
q3	10042	1408	800	800
q4	4686	481	350	350
q5	7472	827	559	559
q6	183	174	145	145
q7	762	791	621	621
q8	9334	1610	1570	1570
q9	5394	4209	4159	4159
q10	6822	1334	1033	1033
q11	436	270	237	237
q12	632	408	310	310
q13	18057	2646	1992	1992
q14	267	260	235	235
q15	q16	723	723	654	654
q17	1769	1199	1022	1022
q18	6467	5625	5538	5538
q19	1284	1285	1010	1010
q20	482	394	260	260
q21	5789	3521	3059	3059
q22	439	375	309	309
Total cold run time: 100811 ms
Total hot run time: 28048 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	4640	4636	4523	4523
q2	731	551	527	527
q3	4769	5124	4587	4587
q4	2265	2334	1459	1459
q5	4560	4353	4584	4353
q6	236	184	130	130
q7	1817	1707	1455	1455
q8	2335	2063	2022	2022
q9	7284	7301	7191	7191
q10	3694	3565	3089	3089
q11	505	370	340	340
q12	710	704	506	506
q13	2295	2609	2010	2010
q14	269	290	246	246
q15	q16	659	690	596	596
q17	7269	6717	6629	6629
q18	11876	11041	11825	11041
q19	1084	1020	1043	1020
q20	2195	2179	1912	1912
q21	5011	4126	4342	4126
q22	519	465	404	404
Total cold run time: 64723 ms
Total hot run time: 58166 ms

@hello-stephen

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

query5	4321	607	462	462
query6	424	216	192	192
query7	4814	530	301	301
query8	320	176	163	163
query9	8780	3968	4000	3968
query10	451	306	256	256
query11	5873	3554	3257	3257
query12	152	89	88	88
query13	1273	632	441	441
query14	6524	4516	4238	4238
query14_1	3967	3982	3898	3898
query15	206	194	176	176
query16	998	483	455	455
query17	921	678	542	542
query18	2426	457	341	341
query19	203	183	151	151
query20	84	80	82	80
query21	220	133	120	120
query22	13017	12941	12841	12841
query23	13931	13120	12492	12492
query23_1	12693	12463	12689	12463
query24	7311	1136	662	662
query24_1	729	680	745	680
query25	568	430	370	370
query26	1257	309	171	171
query27	2721	569	346	346
query28	4548	1965	1973	1965
query29	1637	743	531	531
query30	301	210	189	189
query31	891	751	656	656
query32	149	91	99	91
query33	538	316	255	255
query34	1174	1138	622	622
query35	740	766	640	640
query36	801	796	737	737
query37	143	111	99	99
query38	1824	1759	1708	1708
query39	701	676	658	658
query39_1	665	649	637	637
query40	230	127	103	103
query41	82	68	69	68
query42	99	97	94	94
query43	340	347	299	299
query44	1406	725	722	722
query45	188	174	177	174
query46	1055	1221	737	737
query47	1524	1489	1370	1370
query48	381	397	282	282
query49	585	404	283	283
query50	959	361	251	251
query51	10474	10498	10512	10498
query52	87	87	75	75
query53	242	245	178	178
query54	246	210	197	197
query55	79	74	71	71
query56	221	218	210	210
query57	1478	1312	1339	1312
query58	297	265	250	250
query59	2025	2080	1864	1864
query60	281	244	225	225
query61	141	154	147	147
query62	402	333	268	268
query63	209	174	176	174
query64	2800	985	837	837
query65	3469	3422	3419	3419
query66	1829	426	301	301
query67	20068	20090	19912	19912
query68	3281	1560	941	941
query69	397	301	258	258
query70	884	810	802	802
query71	292	236	211	211
query72	2668	2445	2281	2281
query73	833	780	430	430
query74	4603	4494	4280	4280
query75	2309	2260	1951	1951
query76	2329	1125	747	747
query77	364	387	310	310
query78	8940	9057	8491	8491
query79	1394	1191	753	753
query80	673	453	378	378
query81	554	323	277	277
query82	650	167	128	128
query83	285	232	199	199
query84	322	148	114	114
query85	923	475	371	371
query86	341	239	229	229
query87	1982	1981	1820	1820
query88	3672	2760	2750	2750
query89	365	289	245	245
query90	1866	185	179	179
query91	168	158	126	126
query92	100	89	84	84
query93	1495	1466	884	884
query94	554	351	302	302
query95	664	389	332	332
query96	1038	868	358	358
query97	2463	2445	2297	2297
query98	156	148	151	148
query99	735	746	620	620
Total cold run time: 236450 ms
Total hot run time: 152809 ms

@hello-stephen

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

query1	0.01	0.00	0.00
query2	0.10	0.05	0.05
query3	0.27	0.14	0.13
query4	1.61	0.15	0.14
query5	0.24	0.22	0.21
query6	1.16	0.89	0.93
query7	0.04	0.01	0.01
query8	0.05	0.04	0.03
query9	0.40	0.33	0.34
query10	0.58	0.54	0.55
query11	0.20	0.15	0.15
query12	0.19	0.14	0.15
query13	0.46	0.47	0.47
query14	0.95	0.93	0.98
query15	0.59	0.58	0.58
query16	0.31	0.33	0.33
query17	1.09	1.10	1.05
query18	0.22	0.21	0.20
query19	2.04	1.90	1.91
query20	0.02	0.02	0.01
query21	15.55	0.18	0.13
query22	5.06	0.05	0.05
query23	16.08	0.31	0.12
query24	3.07	0.42	0.32
query25	0.11	0.05	0.04
query26	0.74	0.21	0.16
query27	0.03	0.04	0.03
query28	3.49	0.78	0.36
query29	12.46	4.00	3.20
query30	0.27	0.16	0.17
query31	2.77	0.56	0.30
query32	3.22	0.59	0.48
query33	3.13	3.22	3.18
query34	15.73	3.95	3.29
query35	3.23	3.26	3.26
query36	0.55	0.45	0.42
query37	0.09	0.06	0.06
query38	0.05	0.04	0.04
query39	0.03	0.03	0.03
query40	0.17	0.15	0.14
query41	0.09	0.03	0.03
query42	0.04	0.02	0.03
query43	0.05	0.03	0.03
Total cold run time: 96.54 s
Total hot run time: 23.94 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 100% (0/0) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 76.42% (34519/45168)
Line Coverage 61.39% (388314/632540)
Region Coverage 57.78% (327060/566057)
Branch Coverage 58.60% (149260/254699)

@pingchunzhang

Copy link
Copy Markdown
Contributor Author

/review

@hello-stephen
hello-stephen merged commit 50a3981 into apache:master Sep 29, 2026
36 checks passed
yiguolei pushed a commit that referenced this pull request Sep 29, 2026
…68449) (#68618)

### What problem does this PR solve?

Issue Number: None

Related PR: #68449

Problem Summary:

Backport #68449 (`50a39819e185f54fbb3a82e67182b1ec8f78433b`) to
`branch-4.1`. The changes stabilize regression clients and orchestration
for TLS/mTLS, Docker isolation, multi-cluster state cleanup, cloud
cache/compaction, asynchronous metadata visibility, and delete-bitmap
restart/concurrency tests. Doris Compose uses exact container-name
matching and retries concurrent removal races.

Resolved 27 conflict paths with these branch adaptations:

- Keep the `nereids_p0` suite paths, generated database names, planner
settings, existing SHOW columns and 4.1-only test logic.
- Preserve configured-master JDBC/HTTP endpoints in the
insert-visible-timeout suite, including mapped ports from #65340.
- Keep the routine-load WHERE expectation `(k00 = 8)`: 4.1's
`PlanUtils.ExpressionToExpr` stores unquoted slot labels, unlike master.
Retain the source topic fix, diagnostic fields and independent polling
counters.
- Keep `nereids_p0/hbo` in the non-concurrent exclusions while excluding
all `cloud_p0` suites as intended by the source fix.
- Combine the shared TLS/compaction helpers with 4.1's existing
framework behavior; do not import unrelated scenarios present only in
the source commit's parent.
- Omit `test_partition_cloud_add_build_index_validation.groovy`: the
partition index-format rollout feature from #66475 and its required
properties/configuration are absent from 4.1.
- Reuse the original PR's result files without manually creating
expected output; retain the deterministic variant ordering fix.

The resulting backport changes 350 files; no FE implementation,
protocol, or storage-format change is added.

### Release note

None

### Check List (For Author)

- Test:
- [x] Regression test on an existing 4.1.4 cloud cluster (1 FE / 3 BE):
127 passed, 3 failed, 186 skipped across all 316 changed suites.
- Retained failures: `test_create_view_nereids` (SHOW VIEW column-name
quoting mismatch), `test_streaming_insert_job_priv` (one successful task
and one pending task after the 300-second wait), and
`test_load_channel_profile` (S3 TVF query reports unknown column `c1`).
Their failed assertions/queries are unchanged by this backport. Root
causes are not established by this run.
- Python support is disabled: 19 attempts hit that prerequisite and 23
more suites were skipped. One JDBC fixture was unavailable, and the
single-BE Java static-load case returned early on this three-BE cluster;
these are counted as skipped, not passes.
- Other skipped suites require dedicated Docker/multi-compute-group
fixtures, restarts, TLS/external services, global configuration/fault
injection, or stress capacity. Four packed-file injection suites were
excluded before launch.
- Arrow Flight authentication passed after correcting only the
task-local endpoint configuration. Three small-table TTL/row-store
compaction follow-ups also passed.
- The failed streaming job and its test user were cleaned up. All FE/BE
nodes remained alive and HTTP health returned 200 after execution.
- [x] Unit Test: `run-regression-test.sh --compile` completed on the
remote validation host; all 35 regression-framework tests passed (0
failures, 0 errors, 0 skips).
    - [x] Manual test:
        - Diff whitespace and conflict-marker checks passed.
- All 340 changed existing Groovy files passed conversion-phase parsing
with Groovy 4.0.19 / JDK 17; both changed Python files passed
`py_compile`.
- `build-support/check-format.sh` passed with clang-format 16.0.6 (4,400
C/C++ files).
- Compared conflict resolutions with the source patch and branch-4.1
implementations, including RPC/debug-point dependencies and routine-load
expression serialization.
- BE/FE module builds, deployment and clang-tidy were not run, per the
requested existing-cluster validation scope. The live enterprise cluster
is not a build of this backport, so BE debug-point additions and
excluded scenarios still require CI.
- Behavior changed: Yes. Regression framework/test behavior and Doris
Compose discovery match the applicable source fixes; BE additions are
gated debug points.
- Does this need documentation: No.

<details>
<summary>Backport self-review checkpoints</summary>

| Checkpoint | Conclusion |
| --- | --- |
| Goal and tests | Applicable source fixes preserved; syntax/static
checks and 35 framework unit tests pass. Existing-cluster suite outcomes
and remaining CI scope are listed above. |
| Scope | Source patch plus documented branch adaptations; unsupported
feature suite omitted. |
| Concurrency and locking | Existing production lock order retained;
debug-only post-calculation barrier releases the rowset lock before
waiting. Suite worker errors propagate to their owners. |
| Lifecycle | Source connection/process cleanup and shared-state
restoration retained. |
| Configuration | Existing TLS and debug configuration used; referenced
cloud sync settings exist in 4.1. |
| Compatibility | Target RPC/HTTP/debug APIs verified; branch endpoint
mappings and result schemas retained. No wire/storage format changes. |
| Parallel paths | Relevant plaintext/TLS and local/cloud helper paths
retained. |
| Conditional checks | Source bounded polling and negative assertions
retained; branch adaptations checked against implementation. |
| Test coverage | Source coverage retained; 35 framework tests and 127
existing-cluster suites passed, with 3 retained failures and 186
documented skips. |
| Expected results | Source result files reused; no hand-written golden
output. |
| Observability | Source timeout/last-state diagnostics and
token/tablet/transaction debug logs retained. |
| Persistence and failover | No production persistence or replay change.
|
| Writes and atomicity | Production write behavior unchanged outside
enabled test debug points. |
| FE/BE propagation | Existing target sync-load RPC and metadata
endpoints support new helpers. |
| Performance | Production additions are gated debug checks; regression
polling is bounded. |
| Other findings | Focused framework/BE, TLS-suite and cloud-suite
reviews found no unresolved backport-specific blocker. |

</details>

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases and CI results
- [ ] Confirm document
- [ ] Add branch pick label
yiguolei pushed a commit that referenced this pull request Oct 8, 2026
…68449) (#68618)

### What problem does this PR solve?

Issue Number: None

Related PR: #68449

Problem Summary:

Backport #68449 (`50a39819e185f54fbb3a82e67182b1ec8f78433b`) to
`branch-4.1`. The changes stabilize regression clients and orchestration
for TLS/mTLS, Docker isolation, multi-cluster state cleanup, cloud
cache/compaction, asynchronous metadata visibility, and delete-bitmap
restart/concurrency tests. Doris Compose uses exact container-name
matching and retries concurrent removal races.

Resolved 27 conflict paths with these branch adaptations:

- Keep the `nereids_p0` suite paths, generated database names, planner
settings, existing SHOW columns and 4.1-only test logic.
- Preserve configured-master JDBC/HTTP endpoints in the
insert-visible-timeout suite, including mapped ports from #65340.
- Keep the routine-load WHERE expectation `(k00 = 8)`: 4.1's
`PlanUtils.ExpressionToExpr` stores unquoted slot labels, unlike master.
Retain the source topic fix, diagnostic fields and independent polling
counters.
- Keep `nereids_p0/hbo` in the non-concurrent exclusions while excluding
all `cloud_p0` suites as intended by the source fix.
- Combine the shared TLS/compaction helpers with 4.1's existing
framework behavior; do not import unrelated scenarios present only in
the source commit's parent.
- Omit `test_partition_cloud_add_build_index_validation.groovy`: the
partition index-format rollout feature from #66475 and its required
properties/configuration are absent from 4.1.
- Reuse the original PR's result files without manually creating
expected output; retain the deterministic variant ordering fix.

The resulting backport changes 350 files; no FE implementation,
protocol, or storage-format change is added.

### Release note

None

### Check List (For Author)

- Test:
- [x] Regression test on an existing 4.1.4 cloud cluster (1 FE / 3 BE):
127 passed, 3 failed, 186 skipped across all 316 changed suites.
- Retained failures: `test_create_view_nereids` (SHOW VIEW column-name
quoting mismatch), `test_streaming_insert_job_priv` (one successful task
and one pending task after the 300-second wait), and
`test_load_channel_profile` (S3 TVF query reports unknown column `c1`).
Their failed assertions/queries are unchanged by this backport. Root
causes are not established by this run.
- Python support is disabled: 19 attempts hit that prerequisite and 23
more suites were skipped. One JDBC fixture was unavailable, and the
single-BE Java static-load case returned early on this three-BE cluster;
these are counted as skipped, not passes.
- Other skipped suites require dedicated Docker/multi-compute-group
fixtures, restarts, TLS/external services, global configuration/fault
injection, or stress capacity. Four packed-file injection suites were
excluded before launch.
- Arrow Flight authentication passed after correcting only the
task-local endpoint configuration. Three small-table TTL/row-store
compaction follow-ups also passed.
- The failed streaming job and its test user were cleaned up. All FE/BE
nodes remained alive and HTTP health returned 200 after execution.
- [x] Unit Test: `run-regression-test.sh --compile` completed on the
remote validation host; all 35 regression-framework tests passed (0
failures, 0 errors, 0 skips).
    - [x] Manual test:
        - Diff whitespace and conflict-marker checks passed.
- All 340 changed existing Groovy files passed conversion-phase parsing
with Groovy 4.0.19 / JDK 17; both changed Python files passed
`py_compile`.
- `build-support/check-format.sh` passed with clang-format 16.0.6 (4,400
C/C++ files).
- Compared conflict resolutions with the source patch and branch-4.1
implementations, including RPC/debug-point dependencies and routine-load
expression serialization.
- BE/FE module builds, deployment and clang-tidy were not run, per the
requested existing-cluster validation scope. The live enterprise cluster
is not a build of this backport, so BE debug-point additions and
excluded scenarios still require CI.
- Behavior changed: Yes. Regression framework/test behavior and Doris
Compose discovery match the applicable source fixes; BE additions are
gated debug points.
- Does this need documentation: No.

<details>
<summary>Backport self-review checkpoints</summary>

| Checkpoint | Conclusion |
| --- | --- |
| Goal and tests | Applicable source fixes preserved; syntax/static
checks and 35 framework unit tests pass. Existing-cluster suite outcomes
and remaining CI scope are listed above. |
| Scope | Source patch plus documented branch adaptations; unsupported
feature suite omitted. |
| Concurrency and locking | Existing production lock order retained;
debug-only post-calculation barrier releases the rowset lock before
waiting. Suite worker errors propagate to their owners. |
| Lifecycle | Source connection/process cleanup and shared-state
restoration retained. |
| Configuration | Existing TLS and debug configuration used; referenced
cloud sync settings exist in 4.1. |
| Compatibility | Target RPC/HTTP/debug APIs verified; branch endpoint
mappings and result schemas retained. No wire/storage format changes. |
| Parallel paths | Relevant plaintext/TLS and local/cloud helper paths
retained. |
| Conditional checks | Source bounded polling and negative assertions
retained; branch adaptations checked against implementation. |
| Test coverage | Source coverage retained; 35 framework tests and 127
existing-cluster suites passed, with 3 retained failures and 186
documented skips. |
| Expected results | Source result files reused; no hand-written golden
output. |
| Observability | Source timeout/last-state diagnostics and
token/tablet/transaction debug logs retained. |
| Persistence and failover | No production persistence or replay change.
|
| Writes and atomicity | Production write behavior unchanged outside
enabled test debug points. |
| FE/BE propagation | Existing target sync-load RPC and metadata
endpoints support new helpers. |
| Performance | Production additions are gated debug checks; regression
polling is bounded. |
| Other findings | Focused framework/BE, TLS-suite and cloud-suite
reviews found no unresolved backport-specific blocker. |

</details>

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases and CI results
- [ ] Confirm document
- [ ] Add branch pick label
yiguolei pushed a commit that referenced this pull request Oct 18, 2026
…llout (#69205)

### What problem does this PR solve?

Issue Number: None

Related PR: [#66793](#66793),
[#66475](#66475),
[#67583](#67583),
[#68449](#68449), [selectdb-core
#11528](selectdb/selectdb-core#11528)

Problem Summary:

Backport Cloud partition inverted-index storage format rollout to
`branch-4.2`. The change records the physical format in tablet and
rowset metadata, preserves it through recycling and schema changes, and
exposes the per-partition format in metadata views. New partitions can
use a new format while existing partitions retain theirs.

The commits carry the Meta Service prerequisite
(`a303308d7ed77027420c470dc314474463d38959`), the feature
(`7219c67265bc700c1457b3339c6a9d0143d36c1f`), the validation repair
(`8d14eba8b41f9ddad018903861a5d0d3c4a8a668`), and the four
feature-specific V1 test deletions from
`50a39819e185f54fbb3a82e67182b1ec8f78433b`.
[#68618](#68618) already backported
the other #68449 changes but skipped this suite because the feature was
absent then. The legacy ALTER TABLE analyzer still exists on this
branch, so the port also applies its integration from selectdb-core
#11528 (`ba8404d9db6f8cfea889ce5b67d852e16b039648`) and adds a focused
test.

V2, V3, and SNII are available on this branch.

Protobuf compatibility was checked against Doris master, both target
branches, and selectdb-core 4.1. All four repositories use exactly these
tags:

| Message | Field number |
| --- | ---: |
| `RowsetMetaPB.inverted_index_storage_format` | 1018 |
| `RowsetMetaCloudPB.inverted_index_storage_format` | 117 |
| `TabletMetaPB.inverted_index_storage_format` | 1006 |
| `TabletMetaCloudPB.inverted_index_storage_format` | 104 |

### Source and hunk audit

The port preserves existing branch APIs and JUnit style. It omits
unrelated row-binlog context absent from this branch while retaining the
exact protobuf field tags.

The range diff for #66793 shows only the protobuf context shift from
missing row-binlog fields. The #66475 range diff shows target API and
test adaptations, including the existing `CloudInternalCatalogTest`
class and the absence of `BinlogSize` in `PartitionsProcDir`. The #67583
range diff preserves its source code before the branch-specific format
adaptation. The following table records every source hunk; "Adapted"
rows explain target differences.

| PR | File | Source hunk | Status | Added lines for review |
| --- | --- | --- | --- | --- |
| 66793 | be/src/cloud/pb_convert.cpp | @@ -104,0 +105,3 @@ void
doris_rowset_meta_to_cloud(RowsetMetaCloudPB* out, const RowsetMetaPB&
in) | Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | be/src/cloud/pb_convert.cpp | @@ -200,0 +204,3 @@ void
doris_rowset_meta_to_cloud(RowsetMetaCloudPB* out, RowsetMetaPB&& in) {
| Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | be/src/cloud/pb_convert.cpp | @@ -312,0 +319,3 @@ void
cloud_rowset_meta_to_doris(RowsetMetaPB* out, const RowsetMetaCloudPB&
in) | Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | be/src/cloud/pb_convert.cpp | @@ -407,0 +417,3 @@ void
cloud_rowset_meta_to_doris(RowsetMetaPB* out, RowsetMetaCloudPB&& in) {
| Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | be/src/cloud/pb_convert.cpp | @@ -792,0 +805,3 @@ void
doris_tablet_meta_to_cloud(TabletMetaCloudPB* out, const TabletMetaPB&
in) | Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | be/src/cloud/pb_convert.cpp | @@ -877,0 +893,3 @@ void
doris_tablet_meta_to_cloud(TabletMetaCloudPB* out, TabletMetaPB&& in) {
| Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | be/src/cloud/pb_convert.cpp | @@ -969,0 +988,3 @@ void
cloud_tablet_meta_to_doris(TabletMetaPB* out, const TabletMetaCloudPB&
in) | Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | be/src/cloud/pb_convert.cpp | @@ -1054,0 +1076,3 @@ void
cloud_tablet_meta_to_doris(TabletMetaPB* out, TabletMetaCloudPB&& in) {
| Ported | if (in.has_inverted_index_storage_format()) {;
out->set_inverted_index_storage_format(in.inverted_index_storage_format());
|
| 66793 | cloud/src/recycler/checker.cpp | @@ -774,0 +775,4 @@ int
InstanceChecker::do_check() { | Ported | const auto index_format =;
rs_meta.has_inverted_index_storage_format() |
| 66793 | cloud/src/recycler/checker.cpp | @@ -777,2 +781 @@ int
InstanceChecker::do_check() { | Ported | if (index_format ==
InvertedIndexStorageFormatPB::V1) { |
| 66793 | cloud/src/recycler/recycler.cpp | @@ -3474,2 +3474,3 @@ int
InstanceRecycler::delete_rowset_data(const RowsetMetaCloudPB&
rs_meta_pb) { | Ported | InvertedIndexStorageFormatPB index_format =
rs_meta_pb.has_inverted_index_storage_format(); |
| 66793 | cloud/src/recycler/recycler.cpp | @@ -3487 +3488,2 @@ int
InstanceRecycler::delete_rowset_data(const RowsetMetaCloudPB&
rs_meta_pb) { | Ported | if
(!rs_meta_pb.has_inverted_index_storage_format() &&;
rs_meta_pb.tablet_schema().has_inverted_index_storage_format()) { |
| 66793 | cloud/src/recycler/recycler.cpp | @@ -3501 +3503,3 @@ int
InstanceRecycler::delete_rowset_data(const RowsetMetaCloudPB&
rs_meta_pb) { | Ported | if
(!rs_meta_pb.has_inverted_index_storage_format()) {; index_format =
index_info.first; |
| 66793 | cloud/src/recycler/recycler.cpp | @@ -4239 +4243,3 @@ int
InstanceRecycler::delete_rowset_data( | Ported |
InvertedIndexStorageFormatPB index_format =
rs.has_inverted_index_storage_format(); |
| 66793 | cloud/src/recycler/recycler.cpp | @@ -4247 +4253,2 @@ int
InstanceRecycler::delete_rowset_data( | Ported | if
(!rs.has_inverted_index_storage_format() &&;
rs.tablet_schema().has_inverted_index_storage_format()) { |
| 66793 | cloud/src/recycler/recycler.cpp | @@ -4265 +4272,3 @@ int
InstanceRecycler::delete_rowset_data( | Ported | if
(!rs.has_inverted_index_storage_format()) {; index_format =
index_info.first; |
| 66793 | cloud/test/recycler_test.cpp | @@ -8068,0 +8069,65 @@
TEST(RecyclerTest, delete_tmp_rowset_data_with_idx_v2) { | Ported |
TEST(RecyclerTest, delete_tmp_rowset_data_with_rowset_idx_v3) {; auto
txn_kv = std::make_shared<MemTxnKv>(); |
| 66793 | gensrc/proto/olap_file.proto | @@ -185,0 +186,3 @@ message
RowsetMetaPB { | Adapted | // Actual inverted-index format used by this
rowset's files. It is independent; // from the shared (index_id,
schema_version) schema key.; Unrelated row-binlog fields are absent on
target; format tags retain source numbers. |
| 66793 | gensrc/proto/olap_file.proto | @@ -303,0 +307,3 @@ message
RowsetMetaCloudPB { | Adapted | // Actual inverted-index format used by
this rowset's files. It is independent; // from the shared (index_id,
schema_version) schema key.; Unrelated row-binlog fields are absent on
target; format tags retain source numbers. |
| 66793 | gensrc/proto/olap_file.proto | @@ -735,0 +742,2 @@ message
TabletMetaPB { | Ported | // Immutable format of this tablet's
inverted-index files.; optional InvertedIndexStorageFormatPB
inverted_index_storage_format = 1006; |
| 66793 | gensrc/proto/olap_file.proto | @@ -794,0 +803,2 @@ message
TabletMetaCloudPB { | Ported | // Immutable format of this tablet's
inverted-index files.; optional InvertedIndexStorageFormatPB
inverted_index_storage_format = 104; |
| 66475 | be/src/cloud/cloud_rowset_writer.cpp | @@ -80,0 +81,4 @@
Status CloudRowsetWriter::init(const RowsetWriterContext&
rowset_writer_context) | Ported | if
(_context.persist_inverted_index_storage_format &&;
_context.inverted_index_storage_format.has_value()) { |
| 66475 | be/src/cloud/cloud_tablet.cpp | @@ -851,0 +852,3 @@
Result<std::unique_ptr<RowsetWriter>> CloudTablet::create_rowset_writer(
| Ported | context.inverted_index_storage_format =
tablet_meta()->inverted_index_storage_format();;
context.persist_inverted_index_storage_format = |
| 66475 | be/src/cloud/cloud_tablet.cpp | @@ -900,0 +904,3 @@
Result<std::unique_ptr<RowsetWriter>>
CloudTablet::create_transient_rowset_write | Ported |
context.inverted_index_storage_format =
tablet_meta()->inverted_index_storage_format();;
context.persist_inverted_index_storage_format = |
| 66475 | be/src/service/http/action/show_nested_index_file_action.cpp |
@@ -24,0 +25 @@ | Ported | #include "cloud/cloud_tablet.h" |
| 66475 | be/src/service/http/action/show_nested_index_file_action.cpp |
@@ -55,0 +57,4 @@ Status
ShowNestedIndexFileAction::_handle_show_nested_index_file(HttpRequest*
re | Ported | if (auto cloud_tablet =
std::dynamic_pointer_cast<CloudTablet>(tablet)) {; // The debug endpoint
must inspect all visible cloud rowsets, n |
| 66475 | be/src/storage/rowset/beta_rowset_writer.cpp | @@ -397,0
+398,4 @@ Status BaseBetaRowsetWriter::init(const RowsetWriterContext&
rowset_writer_conte | Ported | if
(_context.persist_inverted_index_storage_format &&;
_context.inverted_index_storage_format.has_value()) { |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -74,0 +75,6 @@ bool
RowsetMeta::init_from_pb(const RowsetMetaPB& rowset_meta_pb) { | Ported
| if (rowset_meta_pb.has_inverted_index_storage_format()) {;
_rowset_meta_pb.set_inverted_index_storage_format( |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -76 +82,6 @@ bool
RowsetMeta::init_from_pb(const RowsetMetaPB& rowset_meta_pb) { | Ported
| TabletSchemaPB schema_pb = rowset_meta_pb.tablet_schema();; if
(rowset_meta_pb.has_inverted_index_storage_format()) { |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -213,0 +225,4 @@
void RowsetMeta::to_rowset_pb(RowsetMetaPB* rs_meta_pb, bool
skip_schema) const | Ported | if
(rs_meta_pb->has_inverted_index_storage_format()) {;
rs_meta_pb->mutable_tablet_schema()->set_inverted_index_storage_fo |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -225,0 +241,6 @@
void RowsetMeta::set_tablet_schema(const TabletSchemaSPtr&
tablet_schema) { | Ported | if
(_rowset_meta_pb.has_inverted_index_storage_format()) {; TabletSchemaPB
schema_pb; |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -234,0 +256,5 @@
void RowsetMeta::set_tablet_schema(const TabletSchemaPB& tablet_schema)
{ | Ported | TabletSchemaPB resolved_schema = tablet_schema;; if
(_rowset_meta_pb.has_inverted_index_storage_format()) { |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -239 +265 @@ void
RowsetMeta::set_tablet_schema(const TabletSchemaPB& tablet_schema) { |
Ported | TabletSchema::deterministic_string_serialize(resolved_schema));
|
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -243,0 +270,10 @@
void RowsetMeta::set_tablet_schema(const TabletSchemaPB& tablet_schema)
{ | Ported | void
RowsetMeta::set_inverted_index_storage_format(InvertedIndexStorageFormatPB
format) {; _rowset_meta_pb.set_inverted_index_storage_format(forma |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -250 +286,6 @@ bool
RowsetMeta::_deserialize_from_pb(std::string_view value) { | Ported |
TabletSchemaPB schema_pb = _rowset_meta_pb.tablet_schema();; if
(_rowset_meta_pb.has_inverted_index_storage_format()) { |
| 66475 | be/src/storage/rowset/rowset_meta.cpp | @@ -262,0 +304,4 @@
bool RowsetMeta::_serialize_to_pb(std::string* value) { | Ported | if
(rowset_meta_pb.has_inverted_index_storage_format()) {;
rowset_meta_pb.mutable_tablet_schema()->set_inverted_index_storage_form
|
| 66475 | be/src/storage/rowset/rowset_meta.h | @@ -115,0 +116,10 @@
public: | Ported | bool has_inverted_index_storage_format() const {;
return _rowset_meta_pb.has_inverted_index_storage_format(); |
| 66475 | be/src/storage/rowset/rowset_writer_context.h | @@ -76 +76,5
@@ struct RowsetWriterContext { | Ported | // Immutable inverted-index
file format inherited from the owner tablet.;
std::optional<InvertedIndexStorageFormatPB> inverted_index_storage_f |
| 66475 | be/src/storage/tablet/tablet.cpp | @@ -2060,0 +2061 @@ void
Tablet::_init_context_common_fields(RowsetWriterContext& context) { |
Ported | context.inverted_index_storage_format =
tablet_meta()->inverted_index_storage_format(); |
| 66475 | be/src/storage/tablet/tablet_meta.cpp | @@ -281,2 +281,2 @@
TabletMeta::TabletMeta(const TabletMeta& b) | Ported |
_vertical_compaction_num_columns_per_group(b._vertical_compaction_num_columns_per_group),;
_inverted_index_storage_format(b._inver |
| 66475 | be/src/storage/tablet/tablet_meta.cpp | @@ -801,0 +802,4 @@
void TabletMeta::init_from_pb(const TabletMetaPB& tablet_meta_pb) { |
Ported | _inverted_index_storage_format.reset();; if
(tablet_meta_pb.has_inverted_index_storage_format()) { |
| 66475 | be/src/storage/tablet/tablet_meta.cpp | @@ -832 +836,5 @@ void
TabletMeta::init_from_pb(const TabletMetaPB& tablet_meta_pb) { | Ported
| TabletSchemaPB schema_pb = tablet_meta_pb.schema();; if
(_inverted_index_storage_format.has_value()) { |
| 66475 | be/src/storage/tablet/tablet_meta.cpp | @@ -957,0 +966,5 @@
void TabletMeta::to_meta_pb(TabletMetaPB* tablet_meta_pb, bool
cloud_get_rowset_ | Ported | if
(_inverted_index_storage_format.has_value()) {;
tablet_meta_pb->set_inverted_index_storage_format(*_inverted_index_storage_format);
|
| 66475 | be/src/storage/tablet/tablet_meta.h | @@ -336,0 +337,9 @@
public: | Ported | bool has_inverted_index_storage_format() const {;
return _inverted_index_storage_format.has_value(); |
| 66475 | be/src/storage/tablet/tablet_meta.h | @@ -405,0 +415,3 @@
private: | Ported | // The schema KV is shared by (index_id,
schema_version). Keep the tablet's; // immutable file format outside
that shared identity. |
| 66475 | be/test/cloud/cloud_meta_mgr_test.cpp | @@ -28,0 +29 @@ |
Ported | #include <utility> |
| 66475 | be/test/cloud/cloud_meta_mgr_test.cpp | @@ -31,0 +33 @@ |
Ported | #include "cloud/pb_convert.h" |
| 66475 | be/test/cloud/cloud_meta_mgr_test.cpp | @@ -287,0 +290,51 @@
TEST_F(CloudMetaMgrTest, abort_txn_uses_label_when_txn_id_is_missing) {
| Ported | TEST_F(CloudMetaMgrTest,
inverted_index_format_survives_meta_pb_conversion) {; RowsetMetaPB
local_rowset; |
| 66475 | be/test/storage/rowset/beta_rowset_test.cpp | @@ -296,0 +297,5
@@ class S3ClientMockGetErrorData : public S3ClientMock { | Ported |
class TestBetaRowsetWriter final : public BaseBetaRowsetWriter {;
public: |
| 66475 | be/test/storage/rowset/beta_rowset_test.cpp | @@ -376,0
+382,26 @@ TEST_F(BetaRowsetTest, AddToBinlogTest) { | Ported |
TEST_F(BetaRowsetTest, PersistInvertedIndexStorageFormatInRowsetMeta) {;
auto tablet_schema = std::make_shared<TabletSchema>(); |
| 66475 | be/test/storage/rowset/rowset_meta_test.cpp | @@ -35,0 +36 @@
| Ported | #include "storage/tablet/tablet_schema.h" |
| 66475 | be/test/storage/rowset/rowset_meta_test.cpp | @@ -111,0
+113,80 @@ TEST_F(RowsetMetaTest, TestInit) { | Ported |
TEST_F(RowsetMetaTest,
TopLevelInvertedIndexFormatOverridesEmbeddedSchemaFormat) {;
RowsetMetaPB rowset_meta_pb; |
| 66475 | be/test/storage/tablet/tablet_meta_test.cpp | @@ -83,0 +84,50
@@ TEST(TabletMetaTest, SaveAsBufferAndParse) { | Ported |
TEST(TabletMetaTest,
TopLevelInvertedIndexFormatOverridesSharedSchemaFormat) {; TabletMetaPB
tablet_meta_pb; |
| 66475 | fe/fe-common/src/main/java/org/apache/doris/common/Config.java
| @@ -2895,0 +2896,6 @@ public class Config extends ConfigBase { |
Ported | @ConfField(mutable = true, masterOnly = true,; callback =
PartitionInvertedIndexStorageFormatRolloutConfHandler.class, description
= " |
| 66475 |
fe/fe-common/src/main/java/org/apache/doris/common/ConfigBase.java | @@
-98,0 +99,15 @@ public class ConfigBase { | Ported | static class
PartitionInvertedIndexStorageFormatRolloutConfHandler implements
ConfHandler {; @OverRide |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java
| @@ -42,0 +43 @@ import org.apache.doris.task.AgentTaskQueue; | Ported
| import org.apache.doris.thrift.TInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java
| @@ -230 +230,0 @@ public class CloudSchemaChangeJobV2 extends
SchemaChangeJobV2 { | Adapted | ; The blank-line deletion is present in
the target diff. |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java
| @@ -239,0 +240,3 @@ public class CloudSchemaChangeJobV2 extends
SchemaChangeJobV2 { | Ported | TInvertedIndexFileStorageFormat
invertedIndexFileStorageFormat =; originIndexId == tbl.getBaseIndexId()
|
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/alter/CloudSchemaChangeJobV2.java
| @@ -266 +269 @@ public class CloudSchemaChangeJobV2 extends
SchemaChangeJobV2 { | Ported | invertedIndexFileStorageFormat, |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/analysis/InvertedIndexUtil.java
| @@ -320,5 +320 @@ public class InvertedIndexUtil { | Ported | //
dict_compression now silently ignores by V2/V3 inverted index |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -34,0 +35 @@ import org.apache.doris.qe.GlobalVariable; | Ported |
import org.apache.doris.thrift.TInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -239,0 +241,8 @@ public class CatalogRecycleBin extends
MasterDaemon implements Writable { | Ported | return
recyclePartition(dbId, tableId, tableName, partition, range,
listPartitionItem, dataProperty,; replicaAlloc, isInMemory |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -249 +258,2 @@ public class CatalogRecycleBin extends MasterDaemon
implements Writable { | Ported | range, listPartitionItem, dataProperty,
replicaAlloc, isInMemory, isMutable,; invertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -1077,0 +1088,4 @@ public class CatalogRecycleBin extends
MasterDaemon implements Writable { | Ported | if
(recoverPartitionInfo.getInvertedIndexFileStorageFormat() != null) {;
partitionInfo.setInvertedIndexFileStorageFormat(p |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -1143,0 +1158,4 @@ public class CatalogRecycleBin extends
MasterDaemon implements Writable { | Ported | if
(recyclePartitionInfo.getInvertedIndexFileStorageFormat() != null) {;
partitionInfo.setInvertedIndexFileStorage |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -1794,0 +1813,2 @@ public class CatalogRecycleBin extends
MasterDaemon implements Writable { | Ported | @SerializedName("iifsf");
private TInvertedIndexFileStorageFormat invertedIndexFileStorageFormat;
|
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -1803 +1823,2 @@ public class CatalogRecycleBin extends
MasterDaemon implements Writable { | Ported | boolean isInMemory,
boolean isMutable,; TInvertedIndexFileStorageFormat invert |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -1812,0 +1834 @@ public class CatalogRecycleBin extends
MasterDaemon implements Writable { | Ported |
this.invertedIndexFileStorageFormat = invertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java
| @@ -1850,0 +1873,4 @@ public class CatalogRecycleBin extends
MasterDaemon implements Writable { | Ported | public
TInvertedIndexFileStorageFormat getInvertedIndexFileStorageFormat() {;
return invertedIndexFileStorageFormat; |
| 66475 | fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java |
@@ -4024,0 +4025,7 @@ public class Env { | Ported | if
(olapTable.getTableProperty() != null; &&
olapTable.getTableProperty().getPartitionInvertedIndexFileStorageFormat()
!= null |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | @@
-1392 +1392,2 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf, GsonPostProc | Ported |
recyclePartitionParam.isMutable,;
recyclePartitionParam.invertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | @@
-1412 +1413,2 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf, GsonPostProc | Ported |
recyclePartitionParam.isMutable,;
recyclePartitionParam.invertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | @@
-1431 +1433,2 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf, GsonPostProc | Ported |
recyclePartitionParam.isMutable,;
recyclePartitionParam.invertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | @@
-2242,0 +2246,2 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf, GsonPostProc | Ported |
recyclePartitionParam.invertedIndexFileStorageFormat =;
partitionInfo.getInvertedIndexFileStorageFormat(partition.getId()); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | @@
-2283,0 +2289,2 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf, GsonPostProc | Ported |
partitionInfo.setInvertedIndexFileStorageFormat(newPartition.getId(),;
getPartitionInvertedIndexFileStorageFormat()); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | @@
-3217,0 +3225,7 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf, GsonPostProc | Ported | public void
setPartitionInvertedIndexFileStorageFormat(;
TInvertedIndexFileStorageFormat invertedIndexFileStorageFormat) { |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java | @@
-3231,0 +3246,17 @@ public class OlapTable extends Table implements
MTMVRelatedTableIf, GsonPostProc | Ported | public
TInvertedIndexFileStorageFormat
getPartitionInvertedIndexFileStorageFormat() {; if
(!Config.enable_partition_inverted_index_storage |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -29,0 +30 @@ import org.apache.doris.common.DdlException; | Ported |
import org.apache.doris.thrift.TInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -71,0 +73,3 @@ public class PartitionInfo { | Ported | // partition
id -> resolved base inverted-index storage format;
@SerializedName("IdToInvertedIndexFileStorageFormat") |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -100,0 +105 @@ public class PartitionInfo { | Ported |
this.idToInvertedIndexFileStorageFormat = new HashMap<>(); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -110,0 +116 @@ public class PartitionInfo { | Ported |
this.idToInvertedIndexFileStorageFormat = new HashMap<>(); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -314,0 +321,13 @@ public class PartitionInfo { | Ported | public
TInvertedIndexFileStorageFormat getInvertedIndexFileStorageFormat(long
partitionId) {; return idToInvertedIndexFileStorageFormat == |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -365,0 +385,3 @@ public class PartitionInfo { | Ported | if
(idToInvertedIndexFileStorageFormat != null) {;
idToInvertedIndexFileStorageFormat.remove(partitionId); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -425,0 +448,2 @@ public class PartitionInfo { | Ported | Map<Long,
TInvertedIndexFileStorageFormat> origIdToInvertedIndexFileStorageFormat
=; idToInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -430,0 +455 @@ public class PartitionInfo { | Ported |
idToInvertedIndexFileStorageFormat = Maps.newHashMap(); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java |
@@ -459,0 +485,7 @@ public class PartitionInfo { | Ported | if
(origIdToInvertedIndexFileStorageFormat != null) {;
TInvertedIndexFileStorageFormat invertedIndexFileStorageFormat = |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/RecyclePartitionParam.java
| whole file | Ported(verbatim) | |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java |
@@ -764,0 +765,5 @@ public class TableProperty implements
GsonPostProcessable { | Ported | public TInvertedIndexFileStorageFormat
getPartitionInvertedIndexFileStorageFormat() {; String format =
properties.get(PropertyAnalyzer.PRO |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
| @@ -43,0 +44 @@ import org.apache.doris.system.Backend; | Ported |
import org.apache.doris.thrift.TInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
| @@ -55,0 +57 @@ import java.util.ArrayList; | Ported | import
java.util.HashMap; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
| @@ -132,0 +135 @@ public class CloudSchemaChangeHandler extends
SchemaChangeHandler { | Ported |
add(PropertyAnalyzer.PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT);
|
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
| @@ -147,0 +151,19 @@ public class CloudSchemaChangeHandler extends
SchemaChangeHandler { | Ported | if
(properties.containsKey(PropertyAnalyzer.PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT))
{; TInvertedIndexFileStorageForma |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandler.java
| @@ -383,0 +406,2 @@ public class CloudSchemaChangeHandler extends
SchemaChangeHandler { | Ported | } else if
(properties.containsKey(PropertyAnalyzer.PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT))
{; // Existing tablet meta |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
| @@ -326,0 +327,2 @@ public class CloudInternalCatalog extends
InternalCatalog { | Ported | TInvertedIndexFileStorageFormat
partitionInvertedIndexFileStorageFormat =;
tbl.getPartitionInvertedIndexFileStorageFormat(); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
| @@ -406 +408 @@ public class CloudInternalCatalog extends
InternalCatalog { | Ported | indexId == tbl.getBaseIndexId() ?
partitionInvertedIndexFileStorageFormat : null, |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
| @@ -649,0 +652,6 @@ public class CloudInternalCatalog extends
InternalCatalog { | Ported | // schema KV is shared by (index_id,
schema_version). Persist the physical tablet format; // separately only
after partition-level for |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
| @@ -685,0 +694,4 @@ public class CloudInternalCatalog extends
InternalCatalog { | Ported | if
(Config.enable_partition_inverted_index_storage_format_rollout; &&
schema.hasInvertedIndexStorageFormat()) { |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/common/proc/PartitionsProcDir.java
| @@ -117 +117 @@ public class PartitionsProcDir implements
ProcDirInterface { | Adapted |
.add("RowCount").add("BinlogSize").add("InvertedIndexStorageFormat");
The target has no BinlogSize column; the new format column follows
RowCount. |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/common/proc/PartitionsProcDir.java
| @@ -640,0 +641,5 @@ public class PartitionsProcDir implements
ProcDirInterface { | Ported | String invertedIndexStorageFormat =;
olapTable.getInvertedIndexFileStorageFormatForPartition(partitionId).name
|
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
| @@ -129,0 +130,3 @@ public class PropertyAnalyzer { | Ported | public
static final String PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT
=; "partition.inverted_index_storage_format"; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
| @@ -1262,0 +1266,25 @@ public class PropertyAnalyzer { | Adapted |
public static TInvertedIndexFileStorageFormat
analyzePartitionInvertedIndexFileStorageFormat(; Map<String, String>
properties) throws ; The later #67583 validation fix modifies this
source hunk. |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1500,0 +1501 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | TInvertedIndexFileStorageFormat
partitionInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1682,0 +1684 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | partitionInvertedIndexFileStorageFormat
= olapTable.getPartitionInvertedIndexFileStorageFormat(); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1768,0 +1771,3 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | } else if
(olapTable.getPartitionInvertedIndexFileStorageFormat(); !=
partitionInvertedIndexFileStorageFormat) |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1815,0 +1821,2 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported |
partitionInfo.setInvertedIndexFileStorageFormat(partitionId,;
partitionInvertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1823 +1830,2 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | isTempPartition,
partitionInfo.getIsMutable(partitionId),;
partitionInvertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1828 +1836,2 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | isTempPartition,
partitionInfo.getIsMutable(partitionId),;
partitionInvertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1833 +1842,2 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | isTempPartition,
partitionInfo.getIsMutable(partitionId),;
partitionInvertedIndexFileStorageFormat); |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -1981,0 +1992,4 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | if
(info.getInvertedIndexFileStorageFormat() != null) {;
partitionInfo.setInvertedIndexFileStorageFormat(partition.getId() |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -2672,0 +2687,11 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | TInvertedIndexFileStorageFormat
partitionInvertedIndexFileStorageFormat;; try { |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -3192,0 +3218,2 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported |
partitionInfo.setInvertedIndexFileStorageFormat(partitionId,;
olapTable.getPartitionInvertedIndexFileStorageFo |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -3284,0 +3312,2 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported |
partitionInfo.setInvertedIndexFileStorageFormat(partition.getId(),;
olapTable.getPartitionInvertedInde |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
| @@ -3762,0 +3792,3 @@ public class InternalCatalog implements
CatalogIf<Database> { | Ported | } else if
(olapTable.getPartitionInvertedIndexFileStorageFormat(); !=
copiedTbl.getPartitionInvertedIndexFileStorageFo |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowPartitionIdCommand.java
| whole file | Ported(verbatim) | |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
| @@ -808,0 +809,7 @@ public class CreateTableInfo { | Ported | try {;
invertedIndexFileStorageFormat = |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
| @@ -812,5 +819,7 @@ public class CreateTableInfo { | Ported | if
(invertedIndexFileStorageFormat == null) {; try { |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
| @@ -37,0 +38 @@ import com.google.common.base.Strings; | Ported |
import java.util.HashMap; |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
| @@ -283,0 +285,3 @@ public class ModifyTablePropertiesOp extends
AlterTableOp { | Ported | } else if
(properties.containsKey(PropertyAnalyzer.PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT))
{; PropertyAnalyzer.analyz |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/persist/PartitionPersistInfo.java
| whole file | Ported(verbatim) | |
| 66475 |
fe/fe-core/src/main/java/org/apache/doris/tablefunction/PartitionsTableValuedFunction.java
| @@ -88 +88,4 @@ public class PartitionsTableValuedFunction extends
MetadataTableValuedFunction { | Ported | new Column("UnsyncTables",
ScalarType.createStringType()),; new Column("CommittedVersion",
ScalarType.createType(PrimitiveType |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/alter/CloudSchemaChangeJobV2Test.java
| whole file | Ported(verbatim) | |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/CatalogRecycleBinTest.java
| @@ -29,0 +30 @@ import
org.apache.doris.nereids.trees.expressions.functions.FunctionBuilder; |
Ported | import org.apache.doris.thrift.TInvertedIndexFileStorageFormat;
|
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/CatalogRecycleBinTest.java
| @@ -480 +481,2 @@ public class CatalogRecycleBinTest extends
TestWithFeService { | Ported | false,;
TInvertedIndexFileStorageFormat.SNII |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/CatalogRecycleBinTest.java
| @@ -485,0 +488,2 @@ public class CatalogRecycleBinTest extends
TestWithFeService { | Adapted |
Assertions.assertEquals(TInvertedIndexFileStorageFormat.SNII,
olapTable.getPartitionInfo(); .getInvertedIndexFileStorageFormat; The
target test uses JUnit Assert instead of Assertions. |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java |
@@ -28,0 +29 @@ import org.apache.doris.resource.Tag; | Ported | import
org.apache.doris.thrift.TInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java |
@@ -273,0 +275,17 @@ public class CreateTableTest extends
TestWithFeService { | Ported | @test; public void
testPartitionsStoreTableInvertedIndexStorageFormat() throws Exception {
|
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java |
@@ -25,0 +26,2 @@ import org.apache.doris.common.Config; | Ported |
import org.apache.doris.common.ConfigBase;; import
org.apache.doris.common.ConfigException; |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java |
@@ -31,0 +34 @@ import org.apache.doris.qe.SessionVariable; | Ported |
import org.apache.doris.thrift.TInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java |
@@ -44,0 +48,2 @@ import java.io.IOException; | Ported | import
java.nio.file.Files;; import java.nio.file.Path; |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java |
@@ -54,0 +60,86 @@ public class OlapTableTest { | Ported | @test; public
void testPartitionFormatChangeDoesNotChangeLogicalSchemaVersion() { |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/TablePropertyTest.java
| @@ -22,0 +23 @@ import org.apache.doris.resource.Tag; | Ported |
import org.apache.doris.thrift.TInvertedIndexFileStorageFormat; |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/catalog/TablePropertyTest.java
| @@ -43,0 +45,10 @@ public class TablePropertyTest { | Ported | @test;
public void testPartitionInvertedIndexStorageFormat() { |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandlerTest.java
| @@ -31,0 +32,2 @@ import org.apache.doris.common.util.DebugPointUtil;
| Ported | import org.apache.doris.common.util.DynamicPartitionUtil;;
import org.apache.doris.common.util.PropertyAnalyzer; |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandlerTest.java
| @@ -35,0 +38 @@ import org.apache.doris.system.SystemInfoService; |
Ported | import org.apache.doris.thrift.TInvertedIndexFileStorageFormat;
|
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandlerTest.java
| @@ -439,0 +443,88 @@ public class CloudSchemaChangeHandlerTest { |
Ported | @test; public void
testUpdatePartitionInvertedIndexStorageFormatDoesNotScanPartitions()
throws Exception { |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandlerTest.java
| @@ -477,0 +569 @@ public class CloudSchemaChangeHandlerTest { | Ported
| |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/cloud/datasource/CloudInternalCatalogTest.java
| @@ -0,0 +1,84 @@ | Adapted | // Licensed to the Apache Software
Foundation (ASF) under one; // or more contributor license agreements.
See the NOTICE file; The target already had this class; the source test
uses the target builder signature. |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/common/PropertyAnalyzerTest.java
| @@ -390,0 +391,42 @@ public class PropertyAnalyzerTest { | Adapted | ;
@test; The later #67583 validation fix modifies this test. |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/CreateTableCommandTest.java
| @@ -34,0 +35 @@ import org.apache.doris.catalog.Type; | Ported |
import org.apache.doris.common.Config; |
| 66475 |
fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/CreateTableCommandTest.java
| @@ -244,0 +246,21 @@ public class CreateTableCommandTest extends
TestWithFeService { | Ported | @test; public void
testPartitionInvertedIndexStorageFormatRejectedInLocalMode() { |
| 66475 |
regression-test/data/external_table_p0/tvf/test_partitions_tvf.out |
whole file | Ported(verbatim) | |
| 66475 |
regression-test/suites/cloud_p0/test_partition_cloud_add_build_index_validation.groovy
| whole file | Adapted | ; The later #68449 repair removes unsupported
V1 cases. |
| 66475 |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_format.groovy
| whole file | Ported(verbatim) | |
| 66475 |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_storage_format_meta_write_switch.groovy
| whole file | Ported(verbatim) | |
| 66475 |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_storage_format_recycle_truncate.groovy
| whole file | Ported(verbatim) | |
| 66475 |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_storage_format_rollout.groovy
| @@ -0,0 +1,507 @@ | Adapted | // Licensed to the Apache Software
Foundation (ASF) under one; // or more contributor license agreements.
See the NOTICE file; The later #67583 validation fix modifies this
suite. |
| 66475 |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_storage_format_rowset_schema.groovy
| whole file | Ported(verbatim) | |
| 66475 |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_storage_format_stream_load.groovy
| whole file | Ported(verbatim) | |
| 67583 |
fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
| @@ -1298,5 +1298,9 @@ public class PropertyAnalyzer { | Ported |
String formatValue =
properties.remove(PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT);;
// "default" resolves to the FE config in |
| 67583 |
fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
| @@ -1305 +1309,4 @@ public class PropertyAnalyzer { | Ported | ;
Map<String, String> formatProperties = new HashMap<>(); |
| 67583 |
fe/fe-core/src/test/java/org/apache/doris/common/PropertyAnalyzerTest.java
| @@ -400,2 +400,2 @@ public class PropertyAnalyzerTest { | Ported |
properties.put(PropertyAnalyzer.PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT,
"V3");; Assertions.assertEquals(TInvertedI |
| 67583 |
fe/fe-core/src/test/java/org/apache/doris/common/PropertyAnalyzerTest.java
| @@ -403,0 +404,5 @@ public class PropertyAnalyzerTest { | Ported |
properties.put(PropertyAnalyzer.PROPERTIES_PARTITION_INVERTED_INDEX_STORAGE_FORMAT,
"default");; AnalysisException defaultExce |
| 67583 |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_storage_format_rollout.groovy
| whole file | Adapted | Release branches limit table names to 64
characters; the validation case uses a shorter name. |
| 68449 |
regression-test/suites/cloud_p0/test_partition_cloud_add_build_index_validation.groovy
| @@ -42 +41,0 @@
suite("test_partition_cloud_add_build_index_validation", "p0, docker") {
| Ported | Removed unsupported V1 case omitted from #68618 backport. |
| 68449 |
regression-test/suites/cloud_p0/test_partition_cloud_add_build_index_validation.groovy
| @@ -46 +44,0 @@
suite("test_partition_cloud_add_build_index_validation", "p0, docker") {
| Ported | Removed unsupported V1 case omitted from #68618 backport. |
| 68449 |
regression-test/suites/cloud_p0/test_partition_cloud_add_build_index_validation.groovy
| @@ -75,28 +72,0 @@
suite("test_partition_cloud_add_build_index_validation", "p0, docker") {
| Ported | Removed unsupported V1 case omitted from #68618 backport. |
| 68449 |
regression-test/suites/cloud_p0/test_partition_cloud_add_build_index_validation.groovy
| @@ -173,35 +142,0 @@
suite("test_partition_cloud_add_build_index_validation", "p0, docker") {
| Ported | Removed unsupported V1 case omitted from #68618 backport. |
| 11528 |
fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java
| @@ -35,0 +36 @@ import com.google.common.base.Strings; | Ported | Keep
the legacy analyzer available on both release branches. |
| 11528 |
fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java
| @@ -273,0 +275,4 @@ public class ModifyTablePropertiesClause extends
AlterTableClause { | Ported | Validate the property without consuming it
and select synchronous alteration. |
| Local |
fe/fe-core/src/test/java/org/apache/doris/analysis/ModifyTablePropertiesClauseTest.java
| whole file | Adapted | New focused test covers legacy acceptance and
rejection. |
| Local |
fe/fe-core/src/test/java/org/apache/doris/cloud/alter/CloudSchemaChangeHandlerTest.java
| follow-up test hunk | Adapted | Mock cloud mode while rollout is
disabled so validation reaches the intended branch. |
| Local |
regression-test/suites/cloud_p0/test_partition_cloud_inverted_index_storage_format_rollout.groovy
| follow-up test hunk | Adapted | Shorten the rejected-default table
name to 50 characters on release branches. |

| Local | be/test/storage/rowset/beta_rowset_test.cpp | follow-up
include | Adapted | Include the writer definition explicitly because
release headers do not provide it transitively. |
| Local | cloud/test/recycler_test.cpp | follow-up declaration | Adapted
| Use explicit pointer and bool literals in the added Recycler test. |

### Release note

Cloud OLAP tables can roll out inverted-index storage formats by
partition.

The merge-tree clang-format 16 and FE Checkstyle preflight passed.
Direct LLVM 20 clang-tidy reports an unmatched `NOLINTEND` in unchanged
`be/src/core/types.h:578` and existing function-complexity findings; the
repository marks its clang-tidy review job as nonrequired.

### Check List (For Author)

- Test
- [x] Regression test: Seven cloud_p0 Docker suites passed against the
branch-built FE, BE, and Meta Service image.
- [x] Unit Test: 15 FE, 7 BE, and 1 Cloud Recycler targeted tests
passed.
- [x] Manual test: Protobuf tags match Doris master, both release
branches, and selectdb-core 4.1; protoc and the full FE and BE cloud
builds passed.
- Behavior changed:
- [x] Yes. Cloud partitions can retain separate physical inverted-index
formats.
- Does this need documentation?
    - [x] No.

### Check List (For Reviewer who merge this PR)

- [ ] Confirm release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label

---------

Co-authored-by: hoshinojyunn <[email protected]>
Co-authored-by: Chenyang Sun <[email protected]>
Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
Co-authored-by: chunping <[email protected]>
liaoxin01 added a commit that referenced this pull request Oct 31, 2026
…n_drop_force_table (#69846)

Related PR: #68449

Problem Summary:

`test_clean_tablet_when_drop_force_table` fails intermittently with
`File cache directories were not cleaned before timeout`. The leftover
cache dirs all belong to the version 3 rowsets.

#68449 set `disable_auto_compaction=true` for this case. Before that
change, cloud compaction called `sync_rowsets()` and loaded version 3
into the BE tablets as a side effect. Now nothing loads version 3
between the second stream load and `DROP TABLE FORCE`, because the case
only queries after the version 2 load. The cloud `drop_tablet_callback`
only recycles the file cache of rowsets in `get_snapshot_rowset(true)`,
so the version 3 cache stays and the cleanup assertion times out.

This PR queries the table after the version 3 load, the same way the
case already does after version 2. The query loads version 3 on every BE
before DROP. It also asserts the row count (160000) to confirm version 3
is visible.
github-actions Bot pushed a commit that referenced this pull request Oct 31, 2026
…n_drop_force_table (#69846)

Related PR: #68449

Problem Summary:

`test_clean_tablet_when_drop_force_table` fails intermittently with
`File cache directories were not cleaned before timeout`. The leftover
cache dirs all belong to the version 3 rowsets.

#68449 set `disable_auto_compaction=true` for this case. Before that
change, cloud compaction called `sync_rowsets()` and loaded version 3
into the BE tablets as a side effect. Now nothing loads version 3
between the second stream load and `DROP TABLE FORCE`, because the case
only queries after the version 2 load. The cloud `drop_tablet_callback`
only recycles the file cache of rowsets in `get_snapshot_rowset(true)`,
so the version 3 cache stays and the cleanup assertion times out.

This PR queries the table after the version 3 load, the same way the
case already does after version 2. The query loads version 3 on every BE
before DROP. It also asserts the row count (160000) to confirm version 3
is visible.
Gabriel39 pushed a commit that referenced this pull request Nov 6, 2026
…t_generation (#70308)

### Background

An auto-partition table with `partition.retention_count = N` keeps only
its N latest historical partitions: the FE's `DynamicPartitionScheduler`
drops older ones on every run, once per
`dynamic_partition_check_interval_seconds` (600 by default).
`partition_p0/auto_partition/test_auto_new_recycle` lowers that interval
to 1 s and checks the partition count after each load or ALTER.
`audit/test_sql_digest_generation` checks that the audit log gets an
`sql_digest` only for queries slower than the FE config
`sql_digest_generation_threshold_ms`, once with the threshold at 0 and
once at 100000. Both suites are in group `nonConcurrent`.

### What problem does this PR solve?

Issue Number: None
Related PR: #65375 and #65646 (the branch-4.1 recycle-suite fixes by
@shuke987, ported here), #65343 (the branch-4.1 digest-suite fix by
@shuke987, ported here), #65435 (master's earlier move of the recycle
suite's day-boundary guard)
PR Type: Test

Problem Summary:

Both suites rely on timing the product does not promise. The recycle
suite checks the partition count after a fixed `sleep(8000)` (5 s after
an ALTER), while the drop happens asynchronously at an unbounded time
after the config change; branch-4.1's NonConcurrent pipeline failed at
the first such check repeatedly (#65375). The digest suite's threshold-0
check needs the query's elapsed time to be above 0 ms. This PR gives
both suites their branch-4.1/4.2 form: the recycle suite polls the
partition count every second, for at most 1200 s, and widens its
day-boundary guard to cover the poll; the digest query adds `sleep(1)`.
Both files become identical to branch-4.2.

### Details

- **Failure:** On master's public NonConcurrent pipeline neither suite
has failed on its own since mid-July: of about 8,000 runs each, the
recycle suite failed 3 times and the digest suite 87 times, all in
builds whose cluster had died (most suites failing). The failures that
motivated the fixes are on branch-4.1's pipeline (#65375); #65343 made
the digest query deterministic there.
- **Cause:** `ADMIN SET FRONTEND CONFIG` sets the scheduler's new
interval at once, but the scheduler sleeps in 5-second slices and
notices the change only at the next slice. It then runs
`executeDynamicPartition` over every registered table before the drop.
So the drop lands 0 to 5 s plus one full pass after the config change,
and a pass longer than about 3 s fails the 8-second check. In the digest
suite, `AuditLogHelper` writes a digest only when `elapseMs >
sql_digest_generation_threshold_ms`, and nothing bounds the elapsed time
of `select *` on a two-row table from below (9 to 15 ms locally). With
`sleep(1)` on each row it takes about 2 s, still far below the second
check's 100000 ms.
- **Stability evidence:** The recycle checks now wait for the drop and
fail only when the count misses the target for 1200 s. The poll runs on
the suite thread, because the framework sets
`Awaitility.pollInSameThread()` (#68338), so it does not leak
connections. Shortening one of master's waits to 1 s reproduces the
branch-4.1 failure shape, and the ported suite passes; mutants show that
both suites still catch wrong results (see Testing).

### Testing

All runs used `./run-regression-test.sh --run -d
partition_p0/auto_partition -s test_auto_new_recycle` or `--run -d audit
-s test_sql_digest_generation` against a local single-FE, single-BE
cluster built from master.

| Suite | Version | Result |
|---|---|---|
| `test_auto_new_recycle` | master | passes |
| `test_auto_new_recycle` | this PR | passes; the polls reached the
target after 1, 2, 1, 3 and 3 s |
| `test_auto_new_recycle` | master, with the wait before the
10-partition check cut to 1 s | fails as #65375 describes: `expected:
<101> but was: <10>` (master's `assertEquals` has its arguments swapped,
so 101 partitions were still there) |
| `test_auto_new_recycle` | this PR, expecting 11 partitions, poll
capped at 20 s | fails as it should: `ConditionTimeoutException` |
| `test_sql_digest_generation` | master | passes |
| `test_sql_digest_generation` | this PR | passes; the query took 2,024
and 2,025 ms |
| `test_sql_digest_generation` | this PR, second threshold 1000 ms |
fails as it should: `Count of sql_digest changed` |

The PR NonConcurrent pipeline runs both suites; cloud_p0 skips
`nonConcurrent` suites.

### Notes for Reviewers

- The day-boundary guard before the final `now()`-based section goes
from 100 s to 1300 s, as in #65646, so that it covers the 1200 s poll
plus the insert and checks. It sleeps only when that section would
otherwise start within 1300 s of midnight.
- Four more suites fixed in the same branch-4.1 batch need nothing on
master: #65340 (master #68449 enables the publish debug point on all
FEs, superseding the open port #65556), #65929 (master #68329 fixed the
actual cause, a connection leak), #65885 (master #69723 removed the V1
scanner whose message it also accepted), and #67363 (ported as #67402).

### Release note

None

### Check List (For Author)

- Behavior changed: No
- Does this need documentation: No
- Pre-submission status: Ready

### AI Disclosure

- Tool: Claude Code (Claude Opus 5.5)
- Generated: the port (both suites taken from branch-4.2), the local
verification runs, and this description
- Human review: not stated
- Prompts: The author asked to continue moving branch-4.2's changes back
to master, where six branch-4.1 test fixes were recorded as one task.
After the check showed that master already covers four of them and has
not failed on the other two, the author chose to port those two exactly
as branch-4.2 has them and to verify them on a local cluster.

Co-authored-by: shuke <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants