Skip to content

[test](fe) Establish year-end FEUT CPU baseline#65937

Draft
hello-stephen wants to merge 4477 commits into
apache:hbofrom
hello-stephen:agent/feut-2025-year-end-baseline
Draft

[test](fe) Establish year-end FEUT CPU baseline#65937
hello-stephen wants to merge 4477 commits into
apache:hbofrom
hello-stephen:agent/feut-2025-year-end-baseline

Conversation

@hello-stephen

@hello-stephen hello-stephen commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Purpose

This is a disposable FEUT CPU baseline PR. It checks out the last Apache Doris master revision from 2025-12-31 (Beijing time) and adds a comment marker under the FE test tree so the old code is exercised by the current community TeamCity FEUT pipeline.

Do not merge this PR. Close it after the FEUT comparison is complete.

The temporary hbo base is intentional: the production FEUT runner merges PRs targeting master into the latest master, which would replace this historical baseline. hbo is accepted by the TeamCity PR provider but is outside that merge-to-latest branch list, so TeamCity executes the historical head directly. The target branch is only a test harness and is not a proposed merge destination.

Baseline

  • Base code: e9da494a6a51219484604cde0472d9d926ccbb78
  • Commit time: 2025-12-31 18:13:41 +08:00
  • Baseline subject: [minor](log) Add logs for WorkThreadPool (#59503)
  • Test marker head: 62baea354e6

What to compare

  • Agent CPU count and CPU utilization during the Maven Surefire phase
  • Resolved FE_UT_PARALLEL value
  • FEUT test count and elapsed time
  • Current pipeline behavior versus the year-end code baseline

Validation

  • git diff --check
  • No product behavior changed; the effective diff is one FE-test comment marker plus one trailing README blank-line cleanup

sollhui and others added 30 commits December 8, 2025 20:52
… for partial update (apache#58782)

### What problem does this PR solve?

related issue: apache#58780

Under the load to 5000-columns wide table, flush memtable consume lots
of memory:
<img width="526" height="430" alt="image"
src="https://github.com/user-attachments/assets/816bcc8b-d9d0-4105-a96b-3fbcc931b0b1"
/>

Set source content column by column when flush memtable for partial
update to solve this problem, the memory usage of
`_append_block_with_partial_content` is hardly visible in the profile
after optimization.
### What problem does this PR solve?

log print flight sql ticket error

Co-authored-by: wanglong16 <wanglong16@xiaomi.com>
### What problem does this PR solve?

#### Background
`build_current_tablet_schema` may consume a significant amount of memory
when load to a wide table with a large number of buckets:
<img width="716" height="718" alt="image"
src="https://github.com/user-attachments/assets/0b08c807-39df-4ab5-b7af-5896e1265009"
/>

#### Solution
Reuse tablet schema in load path to save load memory.

#### Test Result
Machine configuration: 16c 64G 3BE
Table Schema: 5000 column, 256 bucket

Each Be reduces 1G memory.
… to make mv regression test case stable (apache#58827)

### What problem does this PR solve?
In the regression testing for synchronous materialized views, many cases
specify` set enable_stats=false.` This can result in row counts being
reported as unknown, causing the Cost-Based Optimizer (CBO) to
inconsistently choose query plans that include materialized views. In
real‑world environments, enable_statsdefaults to true. Therefore, to
stabilize the pipeline and fix the flakiness of synchronous materialized
view test cases, we are removing `set enable_stats=false `from the
tests.
### What problem does this PR solve?

1. Fixes Pinyin filter behavior inconsistency with Elasticsearch
implementation.
2. Increase performance
…ot nodes (apache#58767)

PullUpSubqueryAliasToCTE rule is to pull up all subquery alias with
leading info into LogicalCTE. But it only do so for UnboundResultSink
root node, we need also do it for UnboundTableSink and LogicalFileSink
…che#58728)

### What problem does this PR solve?

When a page contains some NULL values, we set both the min value and its
associated flag to NULL for filtering purposes in IN and comparison
operations. In such cases, we can directly compare the min/max values to
determine whether the zone map is effective, without needing to handle
the scenario where the min value is NULL. However, if all values in the
page are NULL, the entire page can be directly filtered out.
…he#58835)

### What problem does this PR solve?

fail reason is recently some PR use two slot id, cause random's slot id
+ 2
…he#58833)

Make scanner wait worker time include the time consumption of the
following code:
<img width="1360" height="694" alt="QQ_1765247113654"
src="https://github.com/user-attachments/assets/54e2fadf-a51c-4bcf-804c-4b1ec52d7eb1"
/>


This pull request refactors how scanner resource usage counters are
updated in `ScannerScheduler::_scanner_scan`. The update logic for scan
CPU time and real-time counters is now managed using a deferred
execution pattern, ensuring counters are updated immediately after
scanning, regardless of how the function exits. This change improves
reliability and correctness, especially in error scenarios.

Resource usage counter updates:

* Replaced the manual update of scan CPU time and real-time counters at
the end of the function with a `Defer` object that ensures these
counters are updated as soon as possible after scanning, even if the
function exits early.
* Removed the previous explicit counter update block at the end of the
function, as this is now handled by the deferred logic.
…he#58756)

Fixes an undercount of compaction IO metrics. Vertical compaction only
populated bytes_read_from_local/remote and cached_bytes_total for the
key column group, so the final stats missed IO from value column groups.
We now collect IO stats per group and accumulate them in
vertical_merge_rowsets, while keeping row counters sourced from the key
group.
doc: apache/doris-website#3146

```text
Doris> SELECT TO_SECONDS('0000-01-01');
+--------------------------+
| TO_SECONDS('0000-01-01') |
+--------------------------+
|                    86400 |
+--------------------------+
1 row in set (0.01 sec)
```
…bles (apache#58755)

### What problem does this PR solve?

- **Issue Number**: part of apache#58199
- **Related PR**: N/A

Problem Summary:
This PR implements the `publish_changes` action for Iceberg tables. This
action serves as the "Publish" step in the Write-Audit-Publish (WAP)
pattern. The procedure locates a snapshot tagged with a specific
`wap.id` property and cherry-picks it into the current table state. This
allows users to atomically make "staged" data visible after validation.

Syntax:
```sql
EXECUTE TABLE catalog.db.table_name publish_changes("wap_id" = "batch_123");
````

Output:
Returns `previous_snapshot_id` (STRING) and `current_snapshot_id`
(STRING) indicating the state transition.

Use cases:

1.  Implement Write-Audit-Publish (WAP) workflows.
2.  Atomically publish validated data to the main branch.
3.  Manage staged snapshots based on custom WAP IDs.

Co-authored-by: Chenjunwei <chenjunwei@ChenjunweideMacBook-Pro.local>
### What problem does this PR solve?

fix flight sql when contains &, such as:
select 'a&b' as c

error message:
error org.apache.arrow.adbc.core.AdbcException: Malformed ticket, size:
5

Co-authored-by: wanglong16 <wanglong16@xiaomi.com>
…tributes conflict check (apache#58054)

In a Routine Load job, if the `load_to_single_tablet `property is set
for a table with a `hash distribution` scheme, the load job should be
canceled.

Similarly, in a Broker Load job with the same configuration, the job
should also fail.
…8655)

Fix aggregate error:

1. GROUP BY need forbit window expression.

```
MySQL root@127.0.0.1:db1> select a from t group by sum(a) over();
(1105, 'errCode = 2, detailMessage = GROUP BY expression must not contain window functions: sum(a) OVER()')
```

2. opt GROUP BY hint when its slot reference to aggregate function or
window expression.

Without this PR, when binding group by expression, it will exclude the
aggregate function slots, then if the group by contains aggregate
function slots, it will throw unknown column, the hint is not friendly.
So when bind group expression, it include the aggregate function slots
too.

```
select sum(id) as k from t1 group by k;
=> exception:  Unknown column 'k' in 'table list' in AGGREGATE clause

select SUM(id) OVER() as k FROM t1 group by k;
=> exception: Unknown column 'k' in 'table list' in AGGREGATE clause

select sum(id) as x, max(id) as y from t1 group by grouping sets((x), (y))
=> exception:  aggregate function is not allowed in LOGICAL_PROJECT
```

With this PR:

```
select sum(id) as k from t1 group by k;
=> exception:   GROUP BY expression must not contain aggregate functions: sum(id)

select SUM(id) OVER() as k FROM t1 group by k;
=> exception: GROUP BY expression must not contain window functions: sum(id) OVER()

select sum(id) as x, max(id) as y from t1 group by grouping sets((x), (y))
=> exception:  GROUP BY expression must not contain aggregate functions: sum(id)
```


4. HAVING need forbit window expression.

```
MySQL root@127.0.0.1:db1> select sum(a) from t group by a having sum(a) over() > 10;
(1105, 'errCode = 2, detailMessage = LOGICAL_HAVING can not contains WindowExpression expression: sum(a) OVER()')

MySQL root@127.0.0.1:db1> select sum(a) over() as k from t group by a having k > 10;
(1105, 'errCode = 2, detailMessage = LOGICAL_HAVING can not contains WindowExpression expression: sum(a) OVER()')
```

Notice the rule CheckAnalysis cann't detect the above error because the
aggregate function of having node have been replace with slot reference.

5. run rule CheckAnalysis twice,

run twice because fill missing slots will replace expression with slot
reference for having / sort / .., then check expression unexpected types
may not work.

    We also merge rule checkAfterBind into checkAnalysis.

6. WINDOW need run after HAVING

The root cause is because nereids allow LogicalAggregate contains window
expression. When nereids analyze sql, it put window expression into
LogicalAggregate too. But this is logical error, Window run after
Aggregate, so aggregate should not contains windows expression.

To fix this problem, we first try to extract window expression into a
top projection, and make sure LogicalAggregate nerver contain window
expression, but it make more problems because when analyze, it use
pattern match for analyze rewritting. So when add a project for window
expressions, then analyze rule BindExpression, FillMissingSlot's pattern
need to adapt for the new add PROJECT, well, quite a lot work. So we
allow LogicalAggregate contain window expression, though it have logical
error, but make pattern match more simple. Then after NormalAggregate,
the aggregate node will extract the window expression into a top project
node, then aggregate will not contains window expression. At the same
time, when apply NormalAggregate, if we have

```
having 
   | -- aggregate(agg function,   window expression,  other expression)
```

Without this PR,  NormalAggregate may generate plan as follow:

```
having
    |--- project(window expression, other expression)
               |-- aggregate(agg function)
```

then later the project will rewrite to logical window.

we need to pull the window expression above the having node, then we
will have:

```
project(window expression)
   | -- having
            |-- project(other expression)
                    |-- agg(agg expression)
``` 

so fix the problem.

What's more, we found trino can handle this problem more easy, when
analyze from AST, trino don't build logical tree immediately, it will
first collect aggreate / window and other information, because it don't
use tree and pattern matching, it can analyze the information for
combination of having, window, aggregate, order by more easy, then after
base analyze finish, it then build the logical tree, and trino can make
sure aggregate will nerver contains the window expression.
…dd debug log (apache#58857)

### What problem does this PR solve?

## Overview

This pull request (authored by HappenLee) focuses on **performance
optimization** (via sorting algorithm replacement) and **observability
enhancement** (via logging expansion) for Apache Doris, along with a
critical fix to ensure accurate digest calculation in predicate
expressions. The changes span core data structure handling, segment
iteration, and vectorized expression logic.

## Key Changes

### 1. Performance: Replace `std::sort` with `pdqsort` for Faster Set
Sorting

- **File**: `be/src/exprs/hybrid_set.h`

- Modifications

  :

- Added `#include <pdqsort.h>` to enable the pdqsort algorithm (a fast,
adaptive quicksort variant optimized for real-world data).

  - Replaced

     

    ```
    std::sort(elems.begin(), elems.end())
    ```

     

    with

     

    ```
    pdqsort(elems.begin(), elems.end())
    ```

     

    in three set classes:

    - `HybridSet`: For generic element type sets.
    - `StringSet`: For string reference (`StringRef`) sets.
    - `StringValueSet`: For string value-based sets.

- **Purpose**: pdqsort outperforms `std::sort` in most practical
scenarios (e.g., partially sorted data, duplicate values), reducing the
time to sort elements during digest calculation for set-based
operations.

### 2. Observability: Add Debug Logs for Condition Cache Operations

- **File**: `be/src/olap/rowset/segment_v2/segment_iterator.cpp`

- Modifications

  :

  - Cache Hit Logging

     

    (Line 132-138): Added

     

    ```
    VLOG_DEBUG
    ```

     

    output when a condition cache hit occurs, including:

    - Query ID (from `_opts.runtime_state->query_id()`).
    - Segment ID (`_segment->id()`).
    - Cache digest (`_opts.condition_cache_digest`).
    - Rowset ID (`_opts.rowset_id.to_string()`).

- **Cache Insert Logging** (Line 2379-2383): Added `VLOG_DEBUG` output
when inserting data into the condition cache, including the same fields
as the hit log.

- **Purpose**: Improve debuggability for cache-related issues (e.g.,
false misses, incorrect cache entries) by linking cache events to
specific queries and data segments.

### 3. Correctness: Fix Digest Calculation for `VDirectInPredicate`

- **File**: `be/src/vec/exprs/vdirect_in_predicate.h`

- Modifications

  :

  - Updated the

     

    ```
    get_digest(uint64_t seed)
    ```

     

    method to:

1. First incorporate the digest of the predicate’s child expression
(`_children[0]->get_digest(seed)`).
2. Only propagate the filter’s digest (`_filter->get_digest(seed)`) if
the child digest is non-zero; otherwise, return the original seed.

- Replaced the previous implementation (which directly returned
`_filter->get_digest(seed)` without including the child expression).

- **Purpose**: Ensure the digest uniquely identifies the full predicate
logic (including both the child expression and the filter), preventing
hash collisions that could lead to incorrect cache lookups or data
processing.

## Impact

- **Performance**: Faster sorting for set-based digest calculations may
reduce latency in query operations involving `IN` predicates or set
comparisons.
- **Debuggability**: Detailed cache logs enable quicker diagnosis of
cache performance issues.
- **Correctness**: Fixes a potential source of incorrect digest values,
improving the reliability of cache-dependent features (e.g., condition
cache, query result caching).
…ache#58666)

```sql
SELECT avg((ss_quantity * ss_list_price)) average_sales from store_sales;
```
before: 
partial_avg(CAST((CAST(ss_quantity[apache#23] AS decimalv3(10,0)) *
ss_list_price[apache#24]) AS decimalv3(19,4)))[apache#25]
doris               28.42 sec
doris disable check 25.17 sec

after: 
partial_avg((CAST(ss_quantity[apache#23] AS decimalv3(10,0)) *
ss_list_price[apache#24]))[apache#25]
doris               19.14 sec
doris disable check 17.12 sec
```sql
select
  count(*)
from
(
    select
      brand_id,
      class_id,
      category_id
    from
    (
        SELECT
          iss.i_brand_id brand_id,
          iss.i_class_id class_id,
          iss.i_category_id category_id
        FROM
          store_sales,
          item iss,
          date_dim d1
        WHERE
          (ss_item_sk = iss.i_item_sk)
          AND (ss_sold_date_sk = d1.d_date_sk)
          AND (
            d1.d_year BETWEEN 1999
            AND (1999 + 2)
          )
      )tmp
    group by
      brand_id,
      class_id,
      category_id
  )tmp2;
```

before:
<img width="904" height="262" alt="QQ_1764934227381"
src="https://github.com/user-attachments/assets/771a51d7-049d-49a0-a4af-eab318047c2d"
/>
after:
<img width="808" height="250" alt="QQ_1764934235361"
src="https://github.com/user-attachments/assets/56ea2e41-04d4-4cd7-a3a9-3c1f8eab596c"
/>


This pull request adds support for new fixed-width hash key types,
specifically `UInt96` and `UInt104`, across the aggregation, join, set,
partition, and dictionary hash map utilities in the codebase. The
changes ensure that these new types are fully integrated into the
relevant data structures, hash functions, and test coverage, improving
flexibility and performance for scenarios that require these key sizes.

**Support for new hash key types (`UInt96` and `UInt104`):**

* Added new struct definitions for `UInt96` and `UInt104` in
`uint128.h`, including equality operators.
* Updated the `HashKeyType` enum and `get_hash_key_type_with_fixed`
function to include `fixed96` and `fixed104` options.
[[1]](diffhunk://#diff-4f1fb8a89cd0e13a719c3427b1ae7581b42cb7325755a3ceac4c44bdc64bd144R41-R42)
[[2]](diffhunk://#diff-4f1fb8a89cd0e13a719c3427b1ae7581b42cb7325755a3ceac4c44bdc64bd144R67-R70)
* Implemented `HashCRC32` specializations for `UInt96` and `UInt104` to
enable CRC32 hashing for these types.

**Integration into aggregation, set, join, partition, and dictionary
utilities:**

* Extended the variant types and initialization logic in aggregation
(`agg_utils.h`), distinct aggregation (`distinct_agg_utils.h`), set
(`set_utils.h`), join (`join_utils.h`), partition sort
(`partition_sort_utils.h`), and dictionary hash map
(`complex_dict_hash_map.h`) utilities to support the new key types.
[[1]](diffhunk://#diff-50d8f62236d4e1f81d52e945edee5377b7b22d52e04128eea2c8b7f679b37254R85-R86)
[[2]](diffhunk://#diff-50d8f62236d4e1f81d52e945edee5377b7b22d52e04128eea2c8b7f679b37254R147-R154)
[[3]](diffhunk://#diff-62ad0a1cb1b62de5393935298725cfd2e9766215bdd7653d84cd1fd5e7f59fe3R109-R110)
[[4]](diffhunk://#diff-62ad0a1cb1b62de5393935298725cfd2e9766215bdd7653d84cd1fd5e7f59fe3R166-R173)
[[5]](diffhunk://#diff-8b095a1e764b3856129d9fd06fb9122a7e9eb16bc5c293d8dcaa4ff841a587edR71-R72)
[[6]](diffhunk://#diff-8b095a1e764b3856129d9fd06fb9122a7e9eb16bc5c293d8dcaa4ff841a587edR115-R122)
[[7]](diffhunk://#diff-66cf4052118abf5abbef2e0d9193df3c35a46f70db35853c5884d56d4118a963R70)
[[8]](diffhunk://#diff-66cf4052118abf5abbef2e0d9193df3c35a46f70db35853c5884d56d4118a963R112-R119)
[[9]](diffhunk://#diff-c557434b23ebbb39ef2851b7926d61af5be4bf8f56b83a92b98f9a574f805a90R144-R145)
[[10]](diffhunk://#diff-c557434b23ebbb39ef2851b7926d61af5be4bf8f56b83a92b98f9a574f805a90R209-R216)
[[11]](diffhunk://#diff-60243aa7720001b0983bd282c74f77c8a8542a9a6fed08d80061c4f25847b650R51)
[[12]](diffhunk://#diff-60243aa7720001b0983bd282c74f77c8a8542a9a6fed08d80061c4f25847b650R91-R97)
* Updated template instantiations and type extraction logic to handle
the new key types in join probe implementation.

**Test coverage:**

* Added test cases to verify initialization and type handling for the
new key types in set and distinct aggregation utilities.
[[1]](diffhunk://#diff-9e0e850ab93037077da8e96f7d72b1d45c40835221ccca205cc20ef571115603R167-R176)
[[2]](diffhunk://#diff-96eb9173d84e4c838fcef6dcef716e5e4519ea678f842b4a512c66bbd2f275b1R100-R107)
### What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

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

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
previous used machine `macOS-13` is deprecated. change to `macOS-15` now
yiguolei and others added 22 commits December 29, 2025 14:28
… and could not find revocable tasks (apache#59330)

### What problem does this PR solve?

There  are some problems in the previous code:
1. revocable memory size is ineffective for non-spill operators and
remains 0 in all cases. In this scenario, if we disable spill and enable
reserve, it appears that memlimit will stop working entirely.
2. too complicated in process reserve failed.

In this PR, I simplified the logic:
1. If the query is not enable spill, and if reserve memory failed, just
disable reserve memory and it will enable memory check immediately and
let the query run.
2. If reserve memory failed and not find any revocable tasks, then just
cancel the query.
3. If reserve memory failed, should add to paused query immediately
because it maybe the last block for join build. If not paused, it may
try to allocate a lot of memory.
4. If there are some query in cancel stage, then not check paused query
for a bit while because the cancelling query may release some memory.

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

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

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
### What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

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

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
…onRegrData (apache#59224)

### What problem does this PR solve?

Issue Number: close apache#38977

Problem Summary:

This PR migrates regr_sxx/syy/sxy onto the shared
Moment(AggregateFunctionRegrData) introduced in apache#55940.

The original implementation and tests were done in apache#39187 by @wyxxxcat.
This PR builds on top of that work, refactoring it to reuse the same
state and merge logic.

---------

Co-authored-by: wyxxxcat <1520358997@qq.com>
apache#59204)

During the execution of `init_file_cache_factory`, the following call
path is triggered:

```txt
init_file_cache_factory -> FileCacheFactory::create_file_cache -> cache->initialize() -> initialize_unlocked -> _storage->init(this) -> FSFileCacheStorage::init()

```

(At this point, a thread named `_cache_background_load_thread` is
created, and the remaining operations run within this thread)
`-> upgrade_cache_dir_if_necessary -> read_file_cache_version ->
FileSystem::open_file -> open_file_impl ->
LocalFileReader::LocalFileReader ->
BeConfDataDirReader::get_data_dir_by_file_path`

After `FSFileCacheStorage::init` completes (spawning the
`_cache_background_load_thread`), `ExecEnv::_init` continues to execute
`doris::io::BeConfDataDirReader::init_be_conf_data_dir`. This function
performs push operations on `be_config_data_dir_list`.

Simultaneously, `BeConfDataDirReader::get_data_dir_by_file_path`
(running in the background thread) iterates over this same
`be_config_data_dir_list`. This leads to a race condition: if
`doris::io::BeConfDataDirReader::init_be_conf_data_dir` is inserting
data while the vector is being read, two issues arise:

1. Modifying `be_config_data_dir_list` while iterating over it via a
range-based for loop results in **Undefined Behavior (UB)**.
2. If `be_config_data_dir_list` triggers a reallocation (expansion)
during the insertion, concurrent read operations on its elements will
access dangling references, triggering a **heap-use-after-free** error.

Since `init_be_conf_data_dir` depends on `cache_paths` derived from
`init_file_cache_factory`, we must carefully manage the synchronization
sequence to prevent these errors.
…sequence mapping (apache#54936)

In some business scenarios, business operations need to update different
columns in the same wide table through two or more data streams. For
example, one data stream will write in real time to update some fields
of this table; another data stream will perform imports on demand to
update other columns of this table. During the update process, both data
stream jobs need to ensure the order of replacement; and during queries,
data from all columns should be queryable.

```shell
CREATE TABLE `upsert_test` (
  `a` bigint(20) NULL COMMENT "",
  `b` int(11) NULL COMMENT "",
  `c` int(11) NULL COMMENT "",
  `d` int(11) NULL COMMENT "",
  `e` int(11) NULL COMMENT "",
  `s1` int(11) NULL COMMENT "",
  `s2` int(11) NULL COMMENT ""
) ENGINE=OLAP
UNIQUE KEY(`a`, `b`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`a`, `b`) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"sequence_mapping.s1" = "c,d",
"sequence_mapping.s2" = "e"
);

MySQL [test]> insert into upsert_test(a, b, c, d, s1) values (1,1,2,2,2);
Query OK, 1 row affected (0.15 sec)
{'label':'insert_fadb7c3fe6041c6-a51094f635017b12', 'status':'VISIBLE', 'txnId':'2'}

MySQL [test]> insert into upsert_test(a, b, c, d, s1) values (1,1,1,1,1);
Query OK, 1 row affected (0.07 sec)
{'label':'insert_1f3d1d5eb28447fe-889427c9da075c11', 'status':'VISIBLE', 'txnId':'3'}

MySQL [test]>  select * from upsert_test;
+------+------+------+------+------+------+------+
| a    | b    | c    | d    | e    | s1   | s2   |
+------+------+------+------+------+------+------+
|    1 |    1 |    2 |    2 | NULL |    2 | NULL |
+------+------+------+------+------+------+------+


MySQL [test]> insert into upsert_test(a, b, e, s2) values (1,1,2,2);
Query OK, 1 row affected (0.05 sec)
{'label':'insert_3b9614ce9a4e4dc3-97bbbb9b881c24aa', 'status':'VISIBLE', 'txnId':'4'}

MySQL [test]> select * from upsert_test;
+------+------+------+------+------+------+------+
| a    | b    | c    | d    | e    | s1   | s2   |
+------+------+------+------+------+------+------+
|    1 |    1 |    2 |    2 |    2 |    2 |    2 |
+------+------+------+------+------+------+------+
1 row in set (0.01 sec)

``` 

documentation: apache/doris-website#2954
…9464)

This pull request refactors error handling in the `BitmapValue` class to
improve robustness and provide clearer error messages. Instead of using
`CHECK` macros, it now throws exceptions with detailed information when
inconsistencies are detected in the bitmap value's set count.

**Error handling improvements:**

* Replaced `CHECK` and `CHECK_EQ` macros with explicit exception
throwing (`Exception(ErrorCode::INTERNAL_ERROR, ...)`) when the set
count exceeds the threshold or does not match the expected size,
including detailed error messages with the problematic values.
…#59478)

### What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

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

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
### What problem does this PR solve?

The function `update_hash_with_value` and `update_hashes_with_value` are
used by some `EngineChecksumTask::_compute_checksum()`.

Related PR: #xxx

Problem Summary:

### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [ ] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
apache/doris-website#1214 -->

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

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR
should merge into -->
- remove colocate group
- change tables' schema
…he#59395)

related PR apache#58964

Problem Summary:

This pull request refactors how child physical plans are accessed in the
`ChildrenPropertiesRegulator` class, simplifying the code and improving
test clarity. The main change is the removal of the
`getChildPhysicalPlan` helper method, replacing its usage with direct
access to the plan from the `children` list. The tests are also updated
to build child mocks more locally, improving test isolation and
readability.

Refactoring and Simplification:

* Removed the `getChildPhysicalPlan` method from
`ChildrenPropertiesRegulator`, and replaced its usage in
`visitPhysicalFilter` and `visitPhysicalProject` with direct access to
the child plan via `children.get(0).getPlan()`. This simplifies the code
by eliminating unnecessary indirection.
### What problem does this PR solve?

Issue Number: close apache#57367
…pache#59445)

- Modified ExplainCommand.java to remove checkBlockRules() call
- EXPLAIN statements should not be blocked by SQL block rules
- Updated test_sql_block_rule.groovy to expect EXPLAIN not blocked
- Added comprehensive external table tests for Hive, Paimon, Iceberg
- All tests verify EXPLAIN bypasses block rules for partition_num,
tablet_num, cardinality, and regex rules
…w group. (apache#59053)

### What problem does this PR solve?
Problem Summary:
This pull request achieves better filtering by fetching the latest join
runtime filter when creating the Parquet row group reader. Previously,
the join runtime filter was fetched at the Parquet file level.
### What problem does this PR solve?

Issue Number: close #xxx

Problem Summary: Run the FE unit-test pipeline against the last master revision from 2025-12-31 to separate code growth from current TeamCity parallelism and agent sizing. This is a disposable test PR and must not be merged.

### Release note

None

### Check List (For Author)

- Test: No need to test (documentation-only marker used to trigger FEUT)
- Behavior changed: No
- Does this need documentation: No
@hello-stephen

Copy link
Copy Markdown
Contributor Author

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@hello-stephen

Copy link
Copy Markdown
Contributor Author

run feut

### What problem does this PR solve?

Issue Number: close #xxx

Problem Summary: Make the disposable 2025-12-31 FEUT baseline visible to the existing FE path filter so the current TeamCity FEUT pipeline runs instead of reporting a documentation-only skip.

### Release note

None

### Check List (For Author)

- Test: No need to test (comment-only trigger marker)
- Behavior changed: No
- Does this need documentation: No
### What problem does this PR solve?

Issue Number: close #xxx

Problem Summary: Preserve the exact README layout from the 2025-12-31 baseline so the disposable PR has only the FE test marker as its effective diff.

### Release note

None

### Check List (For Author)

- Test: No need to test (whitespace restoration only)
- Behavior changed: No
- Does this need documentation: No
@hello-stephen

Copy link
Copy Markdown
Contributor Author

run feut

@hello-stephen
hello-stephen changed the base branch from master to hbo July 23, 2026 03:03
@hello-stephen

Copy link
Copy Markdown
Contributor Author

run feut

@hello-stephen

Copy link
Copy Markdown
Contributor Author

FE UT Coverage Report

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.