Repository navigation
[fix](regression) make regression test more stability - #68449
Merged
hello-stephen merged 31 commits intoSep 29, 2026
Merged
hello-stephen merged 31 commits into
hello-stephen merged 31 commits into
Conversation
…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]>
…un and other cases (apache#11929)
- 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`.
Contributor
|
Thank you for your contribution to Apache Doris. Please clearly describe your PR:
|
Contributor
Author
|
run buildall |
1 similar comment
Contributor
|
run buildall |
Contributor
TPC-H: Total hot run time: 27630 ms |
Contributor
TPC-DS: Total hot run time: 151711 ms |
Contributor
ClickBench: 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
Contributor
Author
|
run buildall |
Contributor
TPC-H: Total hot run time: 28048 ms |
Contributor
TPC-DS: Total hot run time: 152809 ms |
Contributor
ClickBench: Total hot run time: 23.94 s |
Contributor
BE Regression && UT Coverage ReportIncrement line coverage Increment coverage report
|
gavinchou
approved these changes
Sep 28, 2026
Contributor
Author
|
/review |
3 of 7 tasks
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
2 tasks done
5 of 9 tasks
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]>
5 of 16 tasks
Merged
3 of 16 tasks
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]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
Manual validation performed:
git diff --check origin/master...HEADScanned the complete diff for unresolved conflict markers.
python3 -m py_compile docker/runtime/doris-compose/utils.pyAttempted
mvn -q testinregression-test/framework; it could not start becausethirdparty/installed/bin/thriftis not present in this checkout.Behavior changed:
Does this need documentation?
Check List (For Reviewer who merge this PR)