Skip to content

[opt](build) Enable unity builds for the remaining BE targets - #66789

Open
morningman wants to merge 13 commits into
apache:masterfrom
morningman:be-build-opt-2-unity-remaining
Open

[opt](build) Enable unity builds for the remaining BE targets#66789
morningman wants to merge 13 commits into
apache:masterfrom
morningman:be-build-opt-2-unity-remaining

Conversation

@morningman

@morningman morningman commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Part of the BE build-time optimization series tracked in #66715.

Split out of #66510, which carries the whole
BE build-time batch. #66712 introduced the ENABLE_UNITY_BUILD switch and piloted
unity builds on three low-risk glue targets; #66776 extended it to Exec and Exprs.
This PR finishes the line: unity builds for every remaining BE target where it
helps, plus a fail-loud guard for the skip lists. It is the last PR of the unity
sub-series (the remaining two PRs of the batch are orthogonal: extern-template
convergence and olap_common decoupling).

What problem does this PR solve?

Related PR: #66510, #66712, #66776

Problem Summary:

Same mechanism as #66712/#66776: most of the cold-build cost of glue-heavy targets
is re-parsing the shared header closure once per small .cpp, and CMake's
UNITY_BUILD makes a batch pay that parse once. This PR applies it to the twelve
remaining targets where the win is real, and writes down (in-tree) the two places
where it is not.

The eleven commits, in fix-then-enable pairs:

  1. Deduplicate cloud/storage file-scope names that clash under unity
    identical copies hoisted to one shared definition (warm-up metric window
    spans -> bvar_windowed_adder.h; the "D0R1" segment footer magic ->
    segment/common.h; the path_allocated_bytes PathInData accounting helper
    that [feature](variant) Support ColumnVariantV2 segment reads and writes #66204 landed in two variant v2 TUs -> util/json/path_in_data.h), a
    divergent copy renamed instead (create_ext_meta_io_context keeps
    file-cache stats where its siblings reset them); plus one real latent
    bug
    : merger.cpp threw with INTERNAL_ERROR bound to
    PPlanFragmentCancelReason::INTERNAL_ERROR (=3) from types.pb.h instead
    of ErrorCode::INTERNAL_ERROR (=6) — no ErrorCode using-directive was in
    scope. Qualified; those compaction-failure statuses now carry the intended
    code.
  2. Unity for Cloud (batch 12) and Storage target-wide (batch 12) — Storage's
    previous index/-only inverse-selection flips to graded opt-outs. Cloud: 37
    members -> 4 batches. Storage: 232 members -> 20 batches.
  3. Deduplicate format_v2 file-scope helpers that clash under unity.
  4. Unity for the format_v2 half of Format (batch 8) — the v1 format/ tree is
    slated for removal, so every v1 file stays individual rather than paying the
    v1/v2 twin-symbol dedup a joint unity would need.
  5. Resolve runtime/load/io/util file-scope clashes — including two more latent
    bugs found by merged TUs: column_predicate.h had the same unqualified
    INTERNAL_ERROR mis-binding as merger.cpp, and vdatetime_value.h defined a
    static RE2 in the header (one RE2 construction per including TU at startup;
    now a C++17 inline variable, one program-wide). runtime_profile.h also
    carried two never-referenced private fields; removed.
  6. Unity for Runtime, Load, IO and Util (batch 12/12/16/24 by member weight).
  7. Add missing include guards to two more headers (cgroup_cpu_ctl.h,
    complex_type_deserialize_util.h) — found the same way as the two in [opt](build) Enable unity builds for the Exec and Exprs targets #66776.
  8. Unity for Core, Agent, Udf, Common, ann_index — and the Service negative
    result recorded in-tree (see below).
  9. Unity for the thrift half of DorisGen (batch 8) — protobuf .cc files stay
    individual structurally: protoc emits identical file-scope statics
    (schemas[], file_default_instances[]) in every one.
  10. Evict file_cache_lru_tool.cpp from libIO.a — a standalone tool with its
    own main() must not be an archive member once unity can merge it into an
    object the doris_be link actually pulls in.
  11. Fail the configure when a unity skip entry goes stale
    set_source_files_properties() silently ignores nonexistent paths, so a
    rename would quietly dissolve a skip entry and the file would rejoin its
    batch with no diagnostic. All thirteen skip lists (including the merged
    Exec/Exprs and pilot ones) now go through doris_skip_unity_inclusion(),
    which FATAL_ERRORs on a nonexistent entry (generated GENSRC_DIR paths
    exempt — they legitimately do not exist on a fresh configure).

Benefit

Measured on the development branch this series is split from (arm64 macOS,
clang 20, -j14, PCH on, cold builds, same-machine paired runs):

  • this wave (on top of the [opt](build) Enable unity builds for the Exec and Exprs targets #66776 state): 7m57s -> 6m18s (-99s / -20.7%),
    sum-of-TU CPU (user) 98.7 -> 76.7 min, compile units 7810 -> 7280.
  • static archives collapse as duplicate DWARF / weak-template copies merge
    (measured on this branch, unity OFF vs ON): libStorage.a 1592 -> 514 MB,
    libCloud.a 441 -> 107 MB, libRuntime.a 356 -> 122 MB, libLoad.a 311 ->
    100 MB, libFormat.a 1057 -> 760 MB, libCore.a 371 -> 182 MB. Less disk
    thrash per build, faster archiving and linking.
  • the four latent bugs above found and fixed (two of them wrong-code).

Verification on this branch (arm64 macOS, clang 20, ENABLE_PCH=ON)

  • unity=ON full build: zero failures across all 7927 TUs, doris_be links
    (319 MB). One upstream-drift clash surfaced and fixed first (the [feature](variant) Support ColumnVariantV2 segment reads and writes #66204
    path_allocated_bytes twins — folded into the dedup commit).
  • unity coverage after this PR: 110 batches / 1224 member files tree-wide, of
    which this PR adds 63 batches / 696 members (per-target counts in the commit
    messages); compile_commands.json agrees.
  • ENABLE_UNITY_BUILD=OFF reconfigure: unity entries drop to zero and the TU
    count goes 7927 -> 9041 = exactly the 110 batches dissolving into their 1224
    members; full rebuild green, doris_be relinks -> the switch's blast radius
    is precisely the unity config.
  • BE UT (BUILD_TYPE_UT=Debug): doris_be_test compiles and links clean — this
    specifically exercises the four "a test #includes the src .cpp" opt-outs below.
  • fail-loud helper: deliberately renaming one skip entry makes the configure
    fail with unity skip entry does not exist (renamed or moved?): <path> and
    the offending CMakeLists line; reverting restores a clean configure.

First CI round: two reds, both root-caused and fixed in-tree

  • ASAN Compile: libstdc++-15 annotates loops in its own headers with
    #pragma GCC unroll; under -O1 + sanitizers + coverage the unroller punts
    and clang's -Wpass-failed (a missed-hint diagnostic with no correctness
    signal) became fatal under -Werror once a storage unity batch changed the
    emission context. Fixed by -Wno-pass-failed for clang tree-wide.
  • BE UT: FSFileCacheLeakCleanerTest.remove_orphan_and_tmp_files — a
    pre-existing test-helper race: it waited for the meta-store write queue to
    drain, but the async worker dequeues before it issues the rocksdb Put, so
    the leak scan could still count zero metadata blocks and skip cleanup. The
    unity-batched IO objects shifted thread timing on the ASAN runner and hit
    the window (this test's only failure in its last 40 CI runs is this PR's
    round — the race is upstream, the timing shift is ours). Fixed by polling
    the store itself instead of the queue size.

Deliberate opt-outs (not omissions)

  • Per-file opt-outs (~50 files across the targets, each annotated in its
    CMakeLists): file-scope macro leakers, the heaviest template-instantiation TUs
    (so no batch inherits their weight), ENABLE_VARIANT_NESTED_GROUP /
    ENABLE_TDE module swaps (unaudited out-of-tree sources), and generated
    protobuf .cc.
  • Four files a test compiles a second time by #include-ing the .cpp
    (storage/compaction/collection_statistics.cpp, runtime/descriptors.cpp,
    core/column/column_variant.cpp, core/data_type/convert_field_to_type.cpp):
    the test object must shadow a never-pulled archive member, but a unity batch
    is pulled in for its siblings and the linker sees a duplicate definition.
    Same failure class the first CI round of [opt](build) Enable unity builds for the Exec and Exprs targets #66776 hit; this time the whole tree
    was swept up front (grep -rn '#include ".*\.cpp"' be/test) and the remaining
    hits are either already opted out, structurally outside unity scope, or
    test-side files.
  • Service stays at http-only unity: widening to the whole target at batch 8
    was tried and measured slower (service segment slot time 104s -> 132s) —
    splitting the single http jumbo repays the shared-closure parse per batch and
    the heterogeneous non-http TUs gain too little to cover it. The CMakeLists
    comment records this so nobody retries it blind.
  • contrib (openblas/clucene) deliberately untouched: openblas is f2c output —
    2055 files with colliding static c__1 file-scope constants, structurally
    un-unifiable.

Cross-platform note (please watch the gcc pipeline)

All local verification is macOS/clang. gcc-only hazards were audited up front:
the -Wsubobject-linkage pattern that bit #66776 (an anonymous-namespace type as
a member of an external-linkage class turns into an error only once unity makes
the file #include-d) was swept across all 627 files entering unity scope —
every anonymous-namespace type usage found is function-local, so no hazard — but
the sweep is heuristic, so the first Performance (gcc) CI round is worth watching.

Release note

None

Check List (For Author)

  • Test

    • Manual test (add detailed scripts or steps below)
      • Full BE build with unity ON: all 7927 TUs green, doris_be links.
      • ENABLE_UNITY_BUILD=OFF reconfigure + full rebuild green; TU
        accounting closes exactly (7927 -> 9041); flip back ON restores.
      • BE UT (BUILD_TYPE_UT=Debug): doris_be_test compiles and links with
        zero duplicate symbols.
      • Deliberately breaking a unity skip entry fails the configure with the
        new fail-loud diagnostic; reverting restores a clean configure.
  • Behavior changed:

    • Yes. Two latent wrong-code fixes surfaced by unity merges (details in
      the commit messages): merger.cpp and column_predicate.h threw with
      INTERNAL_ERROR accidentally bound to PPlanFragmentCancelReason (=3);
      they now carry ErrorCode::INTERNAL_ERROR as intended. Also
      vdatetime_value.h's header-defined static RE2 became a C++17 inline
      variable: one instance program-wide instead of one per including TU
      (same matching behavior, less startup work and memory).
  • Does this need documentation?

    • No.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Gdfkk7RqgD5e3Uv7bTM3NV

morningman and others added 11 commits August 14, 2026 23:09
…der unity

Preparation for unity builds of the whole Cloud and Storage targets: merged
TUs surface copy-pasted file-scope names as redefinitions. Same-value copies
get one shared definition; a diverged copy gets its own name.

- WINDOW_5M/30M/1H (cloud_internal_service.cpp, cloud_warm_up_manager.cpp):
  identical warm-up metric window spans, moved to util/bvar_windowed_adder.h
  next to the class they parameterize.
- k_segment_magic/_length (segment_writer.cpp, vertical_segment_writer.cpp):
  identical "D0R1" footer magic; now inline constexpr in segment/common.h.
  segment_writer.cpp's copy was accidentally external (declared extern in
  segment_writer.h for segment.cpp's footer check); segment.cpp now includes
  common.h for it instead of the whole writer header.
- path_allocated_bytes (variant_shredder.cpp, variant_path_builder.cpp, both
  in doris::segment_v2's anonymous namespaces; the copies arrived with
  ColumnVariantV2 segment IO in apache#66204): identical PathInData heap-accounting
  helper, now one inline definition in util/json/path_in_data.h next to
  PathInData. variant_shredder.cpp picks up the direct include it was
  missing.
- create_index_io_context (segment.cpp, external_col_meta_util.cpp, both in
  doris::segment_v2's anonymous namespaces): the external_col_meta_util copy
  KEEPS the source context's file_cache_stats when stats==nullptr while the
  others reset it, so it is a divergent variant, renamed to
  create_ext_meta_io_context rather than deduplicated. (The third copy in
  primary_key_index.cpp lives in doris::(anon), a different namespace, and
  can never clash.)
- merger.cpp used Status::Error<INTERNAL_ERROR> with types.pb.h in scope and
  no ErrorCode using-directive, so INTERNAL_ERROR bound to
  PPlanFragmentCancelReason::INTERNAL_ERROR (=3), not
  ErrorCode::INTERNAL_ERROR (=6): the five compaction-failure statuses
  carried the wrong code. Under unity a sibling's ErrorCode using-directive
  makes the name ambiguous, which is what surfaced it. Qualified all five as
  ErrorCode::INTERNAL_ERROR. Behavior change: those statuses now report
  TStatusCode::INTERNAL_ERROR, as intended.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
…rget-wide

Cloud: 39 homogeneous glue TUs sharing the CloudStorageEngine / meta-service
RPC header closure -> UNITY_BUILD ON, batch 12. Two http action TUs opt out:
sibling TUs' file-scope `using namespace ErrorCode` makes the unscoped
HttpStatus enum constants shadow ErrorCode variables under -Wshadow -Werror.

Storage: flip the previous inverse-selection (index/-only unity) to graded
opt-outs and let the whole target unity, batch 12:
- seven macro-leak files stay individual (the four index/ ones, plus
  vcollect_iterator.cpp, tablet.cpp, engine_clone_task.cpp)
- the three heaviest template-instantiation TUs (predicate creators, 16-32s
  each) stay individual so no batch inherits their weight
- ENABLE_VARIANT_NESTED_GROUP module sources stay individual (unaudited)
- compaction/collection_statistics.cpp stays individual: its test compiles
  it a second time by #including the .cpp, and the test object must shadow
  a never-pulled archive member (a unity batch would get pulled in for its
  siblings and hand the linker a duplicate definition)

Verification on this branch (arm64, clang 20, -j14 + PCH):
- 232 storage + 37 cloud members -> 20 + 4 unity TUs; full build green and
  doris_be links clean
- ENABLE_UNITY_BUILD=OFF reconfigure: unity entries drop to zero and the
  batches dissolve back into their member files (TU accounting closes
  exactly); full rebuild green
- libStorage.a 1592 MB -> 514 MB, libCloud.a 441 MB -> 107 MB
  (duplicate DWARF / weak-template collapse)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
…r unity

Preparation for a unity build of the format_v2 tree: anonymous namespaces of
sibling TUs merge inside a unity TU, so identical file-local helper copies
become redefinitions. All three pairs are byte-identical, so each gets one
shared inline definition next to the type it operates on:

- is_cast_expr (column_mapper.cpp, column_mapper_nested.cpp)
  -> format_v2/expr/cast.h, beside the Cast class it downcasts to
- get_field_ptr (table_reader.cpp, table/schema_history_util.cpp)
  -> format_v2/table/schema_history_util.h
- count_range_rows (parquet/parquet_scan.cpp, parquet/parquet_statistics.cpp)
  -> format_v2/parquet/selection_vector.h, beside RowRange

The other same-name constants the pre-scan flagged across the two trees
(ROW_LINEAGE_*, HADOOP_OPTION_PREFIX, PAIMON_*) live in different enclosing
namespaces (doris::format vs ::iceberg vs ::paimon) and cannot clash; left
untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
The Format target compiles both trees: format/ (v1) and format_v2/. The v1
tree is slated for removal in a future version, so the v1/v2 twin-symbol
deduplication a whole-target unity would require (~20 constant groups plus
copied static helpers in the JNI/iceberg/parquet twins) is not worth doing:
unity is scoped to format_v2/ only and every v1 file stays individual until
the tree is deleted. When that happens, this configuration needs no work.

A build-time "v2 only" switch was evaluated and rejected for now: 54 files
across eight other targets include format/ (v1) headers directly (hive and
iceberg sink writers, WAL/push_handler load paths, UDF glue, exec_env_init,
storage predicates), and v1-vs-v2 reader selection happens at runtime, so
compiling v1 out is call-site surgery that belongs to the v1 removal work,
not to the build system.

Within format_v2, adbc_reader.cpp opts out (file-scope RETURN_IF_ADBC_ERROR
macro must not leak into unity siblings). Batch 8: 62 members -> 8 unity TUs.

Verification (arm64, clang 20, -j14 + PCH): two dedup iterations then green;
full incremental build + doris_be link clean; heaviest unity TU 14.5s under
full -j14 load; archive symbol diff vs pre-change explained in full (five
weak linkonce_odr libc++ template instantiations shifted emission location,
one added, same class); libFormat.a 1091 MB -> 786 MB (-28%).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
… by unity

Preparation for unity builds of Runtime, Load, IO and Util. Merged sibling
TUs surface five independent latent issues:

- column_predicate.h threw Exception(INTERNAL_ERROR, ...) with no ErrorCode
  using-directive in scope at header-parse time, so the name bound to
  PPlanFragmentCancelReason::INTERNAL_ERROR (=3) from types.pb.h instead of
  ErrorCode::INTERNAL_ERROR (=6) -- same latent wrong-code family as the
  merger.cpp fix. Qualified both throw sites. Behavior change: these two
  defensive throws now carry TStatusCode::INTERNAL_ERROR, as intended.
- vdatetime_value.h defined `static RE2 time_zone_offset_format_reg` in the
  header: one RE2 instance constructed per including TU at startup. Now a
  C++17 inline variable, one instance program-wide. timezone_utils.cpp had
  its own external-linkage twin of the same regex; renamed to a file-local
  static tz_offset_format_reg (nothing else referenced it).
- runtime_profile.h carried two never-referenced private fields
  (_is_sink/_is_set_sink, no reads or writes anywhere); unity's merged TU
  makes -Wunused-private-field notice them. Removed.
- file_cache_type_index copied identically in the anonymous namespaces of
  block_file_cache.cpp and lru_queue_recorder.cpp: one inline definition in
  file_cache_common.h next to FileCacheType.
- sm3.cpp's function-local hex table shadowed sha.cpp's file-scope
  dig_vec_lower under -Wshadow; renamed sm3_dig_vec_lower.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
Four mid-size targets of homogeneous glue TUs, each re-parsing its shared
header closure once per file. Batch sizes track member weight: 12 for
Runtime/Load (5s-mean TUs), 16 for IO (2.8s mean), 24 for Util (1.2s mean).

Opt-outs, all macro-leak or hazard isolation:
- Runtime: memory/jemalloc_hook.cpp (Linux-only member; malloc hooks,
  __THROW/ALIAS macros); descriptors.cpp, which a test compiles a second
  time by #including the .cpp -- the test object must shadow a never-pulled
  archive member, so it cannot join a unity batch that siblings pull in
- Load: channel/load_stream.cpp, routine_load/routine_load_task_executor.cpp
- IO: the CHECK_*_CLIENT filesystem trio, http_file_system.cpp (unscoped
  HttpStatus enum vs sibling `using namespace ErrorCode` under -Wshadow),
  benchmark/tool sources, ENABLE_TDE module swaps
- Util: ten macro-leak files (bfd_parser, murmur_hash3, network_util,
  os_info, os_util, perf_counters, simd/parquet_kernels, thrift_util, zlib)
  plus hash/city.cc whose generic k0..k4 statics stay out of sibling scopes

Verification (arm64, clang 20, -j14 + PCH): one fix iteration then all four
targets green; full incremental rebuild of the broad-header ripple plus
doris_be link clean; archive symbol diffs explained; unity TU envelopes well
inside the 30-40s / 2.5-3GB budget.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
complex_type_deserialize_util.h and cgroup_cpu_ctl.h have no include guard
at all -- the third and fourth such headers found by unity builds (after
schema_scanner_helper.h and dictionary_factory.h). A single-TU compile never
notices; any TU that reaches them twice redefines their classes. #pragma
once, matching their sibling headers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
Core (batch 12): column/data_type/serde glue. Opt-outs beyond the macro-leak
files: column_vector.cpp (the target's heaviest instantiation TU),
data_type_serde.cpp (its member-level explicit instantiations collide with
the per-type serde TUs' class-level ones when merged), the value/variant/
family (copied file-local helpers with diverging signatures; 9s of slot time
total, not worth renaming), and the two files tests compile a second time by
#including the .cpp (column_variant.cpp, convert_field_to_type.cpp) -- the
test object must shadow a never-pulled archive member, so they cannot join a
unity batch that siblings pull in.

Agent, Udf, Common, ann_index (batch 0): small homogeneous targets merge into
one unity TU each. Common keeps its seven macro-leak files individual, which
also keeps the three same-name metric _s_hook_name statics apart.

Service stays at the http-only unity scope: widening to the whole target at
batch 8 was tried and measured slower (service segment slot time 104s ->
132s) -- splitting the single http jumbo into 8-file batches repays the
shared-closure parse per batch, and the heterogeneous non-http TUs gain too
little to cover it. The CMakeLists comment now records that negative result.

Verification (arm64, clang 20, -j14 + PCH): one fix round then all five
targets green; full incremental build + doris_be link clean; heaviest unity
TU 25.9s under full -j14 load; archive symbol diffs all weak linkonce_odr
shifts (plus the expected inline time_zone_offset_format_reg weak symbol).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
The 38 thrift-generated .cpp files pre-scan clean (thrift emits fully
namespaced code, no file-scope statics) and merge without any source change:
the archive exports the identical symbol set, to the symbol. Batch 8.

Generated sources cannot be edited, so anything that clashes can only be
opted out: every protobuf .cc stays individual (protoc emits the same
file-scope statics -- schemas[], file_default_instances[] -- in each file, a
structural clash for any merged pair), plus the two heaviest thrift TUs so
no batch inherits their weight.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND7L1ZVTJf91TBpLwYSqct
…link

The tool has its own main() and is GLOB_RECURSE'd into IO_FILES. As an
individual archive member it was never pulled into the doris_be link
(nothing references its symbols), but unity builds merge it into
unity_0_cxx.cxx.o together with IO files the link does need, so its
main() collides with doris_main.cpp's:

  ld.lld: error: duplicate symbol: main

Remove it from the library exactly like fs_benchmark_tool.cpp above:
the file is still built standalone by its own add_executable target
when BUILD_FILE_CACHE_LRU_TOOL=ON, which does not read IO_FILES.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0121aRtZYjjYdNr2a6z8BLzR
set_source_files_properties() silently ignores paths that do not exist.
Every unity opt-out list is therefore one rename away from quietly
dissolving: the skip entry stops matching, the file rejoins its unity batch,
and the build gets slower -- or starts clashing -- with no diagnostic
anywhere. This is the one unguarded regression vector in the unity setup.

Route all thirteen skip lists (including the previously merged Exec, Exprs
and pilot-target ones) through a doris_skip_unity_inclusion() helper that
FATAL_ERRORs on a nonexistent entry. Entries under GENSRC_DIR are exempt:
they are emitted by add_custom_command at build time (wkt_lex.l.cpp,
wkt_yacc.y.cpp, the generated thrift/protobuf sources) and legitimately do
not exist on a fresh configure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gdfkk7RqgD5e3Uv7bTM3NV
@hello-stephen

Copy link
Copy Markdown
Contributor

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

Please clearly describe your PR:

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

@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

1 similar comment
@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

gavinchou
gavinchou previously approved these changes Aug 14, 2026
@github-actions github-actions Bot added the approved Indicates a PR has been approved by one committer. label Aug 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR approved by at least one committer and no changes requested.

@github-actions

Copy link
Copy Markdown
Contributor

PR approved by anyone and no changes requested.

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17662	3043	3031	3031
q2	1905	244	154	154
q3	10452	940	527	527
q4	4669	251	206	206
q5	7669	571	383	383
q6	139	115	93	93
q7	529	508	385	385
q8	9249	858	899	858
q9	3410	2360	2358	2358
q10	6542	853	700	700
q11	448	260	247	247
q12	702	388	324	324
q13	17857	1888	1528	1528
q14	178	144	139	139
q15	q16	441	403	364	364
q17	849	783	763	763
q18	3106	2287	2244	2244
q19	1272	879	842	842
q20	678	527	437	437
q21	5667	1823	2013	1823
q22	328	267	227	227
Total cold run time: 93752 ms
Total hot run time: 17633 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3392	3364	3338	3338
q2	208	212	157	157
q3	2211	2285	2194	2194
q4	1182	1151	894	894
q5	2166	2108	2087	2087
q6	172	118	86	86
q7	999	886	817	817
q8	1629	1393	1396	1393
q9	3044	3021	3023	3021
q10	1860	1828	1629	1629
q11	354	272	252	252
q12	457	447	349	349
q13	1838	1877	1543	1543
q14	176	184	168	168
q15	q16	396	392	358	358
q17	1039	1034	1027	1027
q18	4896	4406	4800	4406
q19	871	845	853	845
q20	968	943	790	790
q21	3872	3082	3289	3082
q22	407	353	411	353
Total cold run time: 32137 ms
Total hot run time: 28789 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 85815 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 614a3f22d1664683dbf229721d171d4735585f5d, data reload: false

query5	4275	416	338	338
query6	425	179	158	158
query7	4837	431	284	284
query8	295	129	118	118
query9	8681	2897	2903	2897
query10	403	267	234	234
query11	5407	1043	919	919
query12	118	73	70	70
query13	1199	449	332	332
query14	5961	2001	1853	1853
query14_1	1786	1764	1756	1756
query15	177	127	109	109
query16	931	398	378	378
query17	807	460	370	370
query18	2340	323	235	235
query19	169	150	122	122
query20	70	70	74	70
query21	205	120	105	105
query22	5443	5363	5410	5363
query23	7485	6772	6585	6585
query23_1	6576	6730	6699	6699
query24	7295	1127	815	815
query24_1	793	775	767	767
query25	409	285	232	232
query26	1251	275	164	164
query27	2708	434	295	295
query28	4633	1508	1484	1484
query29	915	435	339	339
query30	273	176	149	149
query31	978	660	611	611
query32	104	49	54	49
query33	457	208	165	165
query34	991	852	514	514
query35	403	382	328	328
query36	551	540	525	525
query37	151	88	71	71
query38	1012	836	823	823
query39	544	533	507	507
query39_1	525	524	528	524
query40	217	118	115	115
query41	52	51	50	50
query42	75	73	77	73
query43	247	254	212	212
query44	1059	559	572	559
query45	120	102	104	102
query46	803	861	533	533
query47	952	993	988	988
query48	313	315	230	230
query49	546	239	187	187
query50	824	318	269	269
query51	8051	8009	8089	8009
query52	71	71	59	59
query53	207	211	159	159
query54	232	174	163	163
query55	75	59	54	54
query56	224	216	209	209
query57	656	617	636	617
query58	229	220	189	189
query59	1104	1094	1030	1030
query60	265	222	212	212
query61	131	110	113	110
query62	345	197	180	180
query63	185	152	151	151
query64	2593	687	549	549
query65	1540	1504	1529	1504
query66	1785	284	233	233
query67	9553	9615	9632	9615
query68	2722	1170	791	791
query69	340	224	190	190
query70	658	616	582	582
query71	301	252	238	238
query72	2307	1720	1610	1610
query73	640	633	361	361
query74	1587	1218	1145	1145
query75	1238	1137	1018	1018
query76	2294	759	555	555
query77	245	253	194	194
query78	5216	4854	4497	4497
query79	1179	846	568	568
query80	1257	407	353	353
query81	480	197	179	179
query82	610	137	107	107
query83	353	253	233	233
query84	307	128	104	104
query85	1033	513	472	472
query86	399	179	163	163
query87	1003	974	899	899
query88	2836	2139	2156	2139
query89	324	239	215	215
query90	1890	150	159	150
query91	171	157	141	141
query92	53	49	47	47
query93	1388	1233	781	781
query94	653	285	221	221
query95	616	365	347	347
query96	863	569	290	290
query97	1034	1049	1001	1001
query98	140	138	133	133
query99	412	342	308	308
Total cold run time: 178035 ms
Total hot run time: 85815 ms

@hello-stephen

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

query1	0.00	0.00	0.00
query2	0.08	0.03	0.04
query3	0.24	0.11	0.11
query4	1.61	0.09	0.10
query5	0.18	0.15	0.16
query6	1.26	0.70	0.69
query7	0.03	0.00	0.00
query8	0.04	0.03	0.03
query9	0.29	0.21	0.20
query10	0.35	0.35	0.35
query11	0.17	0.12	0.12
query12	0.14	0.12	0.12
query13	0.31	0.30	0.29
query14	0.46	0.47	0.47
query15	0.36	0.34	0.35
query16	0.20	0.24	0.24
query17	0.69	0.79	0.67
query18	0.18	0.17	0.17
query19	1.12	1.13	1.21
query20	0.01	0.01	0.01
query21	15.45	0.17	0.13
query22	5.20	0.05	0.04
query23	16.22	0.25	0.10
query24	3.05	0.32	0.26
query25	0.11	0.04	0.04
query26	0.73	0.17	0.13
query27	0.04	0.04	0.03
query28	3.61	0.53	0.28
query29	12.46	3.17	2.56
query30	0.24	0.11	0.12
query31	2.75	0.38	0.17
query32	3.52	0.31	0.23
query33	1.47	1.39	1.50
query34	15.36	2.21	1.83
query35	1.75	1.69	1.72
query36	0.45	0.29	0.30
query37	0.07	0.04	0.04
query38	0.05	0.03	0.03
query39	0.03	0.03	0.03
query40	0.12	0.08	0.08
query41	0.07	0.02	0.02
query42	0.03	0.02	0.02
query43	0.04	0.02	0.03
Total cold run time: 90.54 s
Total hot run time: 14.73 s

morningman and others added 2 commits August 15, 2026 07:00
…s sanitizers

libstdc++-15 annotates loops inside its own headers with `#pragma GCC unroll`
(bits/stl_algobase.h). clang honors the pragma and, when an optimization
pass cannot apply it, raises -Wpass-failed=transform-warning -- which -Werror
turns into a build failure. Whether the unroller punts depends on the exact
codegen context: the ASAN+coverage pipeline compiles at -O1 with
instrumentation, and there a storage unity batch emitted one such loop and
went red (clang + libstdc++ only; local clang + libc++ builds never see it).

A missed unrolling *hint* inside a system header carries no correctness
signal, so drop the diagnostic tree-wide for clang instead of playing
whack-a-mole per TU.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gdfkk7RqgD5e3Uv7bTM3NV
… queue

FSFileCacheLeakCleanerTest's add_metadata_entry() waited for the meta store's
write queue to drain as its "async write completed" barrier. But the async
worker dequeues an operation *before* it issues the rocksdb Put, so an empty
queue only proves the write is in flight, not that it is readable. If
run_leak_cleanup() runs inside that window, approximate_entry_count() (which
iterates rocksdb only, by design) sees zero metadata blocks and skips the
cleanup entirely -- remove_orphan_and_tmp_files then finds its orphan and tmp
files still on disk.

The window is a few statements wide and never fired in per-file CI builds;
the unity-batched IO objects shifted thread timing on the ASAN pipeline and
hit it on the first round. Poll the store itself (get() reads only rocksdb,
the same source approximate_entry_count() counts) instead of the queue size.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gdfkk7RqgD5e3Uv7bTM3NV
@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

@github-actions github-actions Bot removed the approved Indicates a PR has been approved by one committer. label Aug 14, 2026
@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17568	3064	3026	3026
q2	1952	243	158	158
q3	10392	896	525	525
q4	4672	249	202	202
q5	7679	577	384	384
q6	137	124	93	93
q7	522	511	398	398
q8	9239	970	1011	970
q9	3448	2396	2368	2368
q10	6550	850	718	718
q11	442	267	239	239
q12	685	396	335	335
q13	17882	1874	1555	1555
q14	162	156	147	147
q15	q16	429	402	361	361
q17	828	774	766	766
q18	3108	2278	2286	2278
q19	1114	932	810	810
q20	596	539	452	452
q21	4885	1945	1971	1945
q22	326	274	233	233
Total cold run time: 92616 ms
Total hot run time: 17963 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3396	3353	3347	3347
q2	208	217	152	152
q3	2213	2369	2184	2184
q4	1200	1167	891	891
q5	2192	2150	2155	2150
q6	174	122	87	87
q7	1037	910	835	835
q8	1617	1400	1402	1400
q9	3109	3080	3051	3051
q10	1883	1822	1649	1649
q11	356	266	248	248
q12	465	435	342	342
q13	1801	1843	1561	1561
q14	181	179	179	179
q15	q16	397	402	371	371
q17	1044	1036	1019	1019
q18	5019	4453	4811	4453
q19	873	855	869	855
q20	955	946	827	827
q21	3881	3140	3269	3140
q22	415	493	328	328
Total cold run time: 32416 ms
Total hot run time: 29069 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 85549 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 0b3406309dcfa2dfbc1bf3f5c5d35712ca6d4c45, data reload: false

query5	4241	384	316	316
query6	408	167	153	153
query7	4914	436	255	255
query8	287	124	109	109
query9	8652	2899	2905	2899
query10	419	256	230	230
query11	5398	1050	920	920
query12	117	71	72	71
query13	1198	460	343	343
query14	5951	2012	1869	1869
query14_1	1775	1763	1768	1763
query15	170	123	112	112
query16	907	376	367	367
query17	797	464	368	368
query18	2331	351	242	242
query19	175	144	124	124
query20	73	67	72	67
query21	208	119	106	106
query22	5323	5277	5444	5277
query23	7208	6701	6652	6652
query23_1	6703	6610	6646	6610
query24	7295	1151	768	768
query24_1	757	775	763	763
query25	430	311	266	266
query26	1259	256	170	170
query27	2724	474	297	297
query28	4584	1515	1523	1515
query29	974	455	361	361
query30	277	179	154	154
query31	974	666	623	623
query32	99	51	51	51
query33	459	214	177	177
query34	989	810	476	476
query35	412	422	336	336
query36	567	555	531	531
query37	126	87	79	79
query38	1001	851	832	832
query39	550	557	542	542
query39_1	515	532	514	514
query40	218	124	115	115
query41	59	56	56	56
query42	78	76	78	76
query43	245	253	219	219
query44	1011	577	579	577
query45	112	106	105	105
query46	823	873	523	523
query47	1025	980	911	911
query48	319	353	231	231
query49	531	247	186	186
query50	852	311	274	274
query51	7916	7947	7993	7947
query52	81	69	63	63
query53	207	213	187	187
query54	237	200	168	168
query55	79	59	55	55
query56	238	235	219	219
query57	653	627	622	622
query58	217	196	188	188
query59	1091	1128	984	984
query60	262	200	206	200
query61	141	129	113	113
query62	365	203	170	170
query63	193	156	156	156
query64	2808	648	528	528
query65	1570	1542	1515	1515
query66	1787	296	236	236
query67	9774	9971	9646	9646
query68	3016	1151	786	786
query69	345	239	202	202
query70	657	577	573	573
query71	297	269	246	246
query72	2300	1759	1590	1590
query73	676	581	354	354
query74	1977	1214	1146	1146
query75	1241	1146	1026	1026
query76	2349	745	569	569
query77	243	242	189	189
query78	5057	4773	4516	4516
query79	1947	920	582	582
query80	1556	423	346	346
query81	485	193	170	170
query82	624	138	104	104
query83	309	255	238	238
query84	296	124	101	101
query85	837	437	376	376
query86	389	174	167	167
query87	1010	978	890	890
query88	2800	2140	2120	2120
query89	297	226	205	205
query90	1862	143	144	143
query91	154	143	123	123
query92	50	49	42	42
query93	1430	1189	760	760
query94	615	263	240	240
query95	636	399	352	352
query96	853	547	268	268
query97	1040	1034	1012	1012
query98	150	134	136	134
query99	417	347	304	304
Total cold run time: 179473 ms
Total hot run time: 85549 ms

@hello-stephen

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

query1	0.00	0.01	0.00
query2	0.08	0.04	0.04
query3	0.25	0.11	0.11
query4	1.60	0.08	0.10
query5	0.17	0.16	0.15
query6	1.29	0.69	0.69
query7	0.03	0.00	0.00
query8	0.04	0.03	0.03
query9	0.30	0.20	0.20
query10	0.35	0.35	0.34
query11	0.16	0.11	0.11
query12	0.15	0.12	0.12
query13	0.32	0.31	0.31
query14	0.47	0.48	0.46
query15	0.36	0.34	0.35
query16	0.21	0.22	0.22
query17	0.72	0.68	0.73
query18	0.16	0.17	0.17
query19	1.26	1.22	1.22
query20	0.01	0.01	0.01
query21	15.47	0.15	0.11
query22	5.07	0.05	0.04
query23	16.16	0.25	0.10
query24	2.96	0.34	0.29
query25	0.12	0.05	0.03
query26	0.73	0.16	0.13
query27	0.02	0.02	0.03
query28	3.66	0.55	0.29
query29	12.50	3.14	2.57
query30	0.26	0.12	0.12
query31	2.76	0.39	0.17
query32	3.51	0.32	0.22
query33	1.43	1.37	1.44
query34	15.33	2.16	1.77
query35	1.75	1.72	1.75
query36	0.46	0.32	0.31
query37	0.06	0.04	0.03
query38	0.05	0.04	0.03
query39	0.03	0.02	0.02
query40	0.12	0.07	0.08
query41	0.08	0.02	0.03
query42	0.03	0.02	0.03
query43	0.04	0.02	0.03
Total cold run time: 90.53 s
Total hot run time: 14.75 s

@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

@morningman

Copy link
Copy Markdown
Contributor Author

run performance

@morningman

Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 80.00% (20/25) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 75.60% (32406/42864)
Line Coverage 60.46% (363039/600434)
Region Coverage 57.36% (306357/534094)
Branch Coverage 58.01% (137410/236876)

@hello-stephen

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

------ Round 1 ----------------------------------
============================================
q1	17585	3041	3053	3041
q2	1880	236	171	171
q3	10450	954	498	498
q4	4669	246	196	196
q5	7693	580	380	380
q6	138	115	93	93
q7	520	496	385	385
q8	9245	939	934	934
q9	3413	2339	2321	2321
q10	6528	869	715	715
q11	444	258	235	235
q12	715	391	338	338
q13	17870	1846	1577	1577
q14	163	153	145	145
q15	q16	428	394	364	364
q17	761	834	710	710
q18	3118	2277	2268	2268
q19	1277	910	810	810
q20	659	543	457	457
q21	5654	1660	1908	1660
q22	334	271	230	230
Total cold run time: 93544 ms
Total hot run time: 17528 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	3417	3345	3362	3345
q2	212	212	158	158
q3	2220	2387	2219	2219
q4	1182	1161	890	890
q5	2164	2105	2116	2105
q6	176	124	89	89
q7	1053	915	874	874
q8	1607	1411	1396	1396
q9	3074	3032	3027	3027
q10	1853	1794	1615	1615
q11	355	268	252	252
q12	458	440	342	342
q13	1800	1886	1545	1545
q14	168	162	156	156
q15	q16	394	406	352	352
q17	1047	1020	1021	1020
q18	4940	4383	4770	4383
q19	873	862	879	862
q20	967	926	811	811
q21	3825	3157	3358	3157
q22	399	363	378	363
Total cold run time: 32184 ms
Total hot run time: 28961 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 85305 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 0b3406309dcfa2dfbc1bf3f5c5d35712ca6d4c45, data reload: false

query5	4233	405	326	326
query6	403	158	155	155
query7	4902	457	260	260
query8	295	118	109	109
query9	8698	2876	2883	2876
query10	416	258	211	211
query11	5377	1045	915	915
query12	122	71	71	71
query13	1200	471	349	349
query14	5950	2002	1856	1856
query14_1	1764	1762	1764	1762
query15	171	117	110	110
query16	900	369	351	351
query17	774	432	371	371
query18	2326	326	225	225
query19	162	135	112	112
query20	71	67	67	67
query21	201	117	96	96
query22	5426	5339	5327	5327
query23	7317	6719	6429	6429
query23_1	6660	6725	6680	6680
query24	7332	1103	801	801
query24_1	767	800	785	785
query25	434	309	260	260
query26	1250	263	169	169
query27	2717	483	292	292
query28	4577	1495	1513	1495
query29	958	459	377	377
query30	282	185	151	151
query31	976	656	613	613
query32	106	51	56	51
query33	476	215	177	177
query34	989	812	503	503
query35	413	391	339	339
query36	551	563	542	542
query37	125	85	77	77
query38	1017	846	803	803
query39	521	535	534	534
query39_1	522	539	524	524
query40	225	123	109	109
query41	59	58	55	55
query42	79	77	76	76
query43	256	257	218	218
query44	1010	568	574	568
query45	108	104	101	101
query46	772	854	566	566
query47	986	988	935	935
query48	329	332	234	234
query49	562	245	191	191
query50	845	339	268	268
query51	7958	8309	7892	7892
query52	76	78	65	65
query53	217	206	167	167
query54	220	200	169	169
query55	69	59	53	53
query56	229	213	203	203
query57	661	624	608	608
query58	231	197	186	186
query59	1119	1112	1004	1004
query60	250	221	200	200
query61	132	111	117	111
query62	349	221	177	177
query63	187	158	160	158
query64	2653	657	575	575
query65	1573	1556	1589	1556
query66	1797	304	240	240
query67	10065	9542	9765	9542
query68	2939	1178	806	806
query69	330	221	216	216
query70	655	586	584	584
query71	293	260	233	233
query72	2307	1729	1554	1554
query73	656	605	340	340
query74	1959	1221	1157	1157
query75	1216	1149	1007	1007
query76	2322	749	560	560
query77	244	257	207	207
query78	5087	4829	4485	4485
query79	2311	816	583	583
query80	1591	395	341	341
query81	483	198	172	172
query82	763	137	109	109
query83	308	255	234	234
query84	306	125	101	101
query85	842	464	375	375
query86	397	179	176	176
query87	1010	967	906	906
query88	2816	2129	2094	2094
query89	307	227	205	205
query90	1977	139	145	139
query91	158	144	121	121
query92	51	46	44	44
query93	1456	1234	779	779
query94	601	255	216	216
query95	620	433	326	326
query96	829	648	281	281
query97	1049	1049	1058	1049
query98	143	139	139	139
query99	418	341	311	311
Total cold run time: 180286 ms
Total hot run time: 85305 ms

@hello-stephen

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

query1	0.00	0.00	0.01
query2	0.07	0.04	0.03
query3	0.26	0.10	0.11
query4	1.60	0.09	0.10
query5	0.16	0.16	0.16
query6	1.25	0.69	0.69
query7	0.03	0.00	0.01
query8	0.05	0.03	0.03
query9	0.31	0.22	0.21
query10	0.38	0.35	0.34
query11	0.16	0.11	0.12
query12	0.14	0.11	0.12
query13	0.30	0.30	0.30
query14	0.47	0.47	0.46
query15	0.37	0.35	0.35
query16	0.21	0.23	0.22
query17	0.69	0.68	0.68
query18	0.19	0.18	0.17
query19	1.17	1.17	1.17
query20	0.01	0.01	0.01
query21	15.46	0.15	0.11
query22	5.07	0.05	0.04
query23	16.20	0.25	0.10
query24	3.04	0.32	0.24
query25	0.09	0.06	0.04
query26	0.82	0.16	0.12
query27	0.03	0.02	0.03
query28	3.67	0.57	0.28
query29	12.44	3.14	2.55
query30	0.25	0.11	0.12
query31	2.76	0.37	0.17
query32	3.56	0.32	0.23
query33	1.70	1.44	1.55
query34	15.37	2.15	1.76
query35	1.76	1.71	1.71
query36	0.47	0.31	0.29
query37	0.06	0.04	0.04
query38	0.05	0.03	0.03
query39	0.03	0.02	0.03
query40	0.12	0.08	0.07
query41	0.08	0.03	0.03
query42	0.03	0.02	0.02
query43	0.04	0.02	0.03
Total cold run time: 90.92 s
Total hot run time: 14.67 s

@hello-stephen

Copy link
Copy Markdown
Contributor

BE Regression && UT Coverage Report

Increment line coverage 80.00% (20/25) 🎉

Increment coverage report
Complete coverage report

Category Coverage
Function Coverage 74.80% (32063/42864)
Line Coverage 59.28% (355916/600434)
Region Coverage 55.59% (296893/534094)
Branch Coverage 56.43% (133674/236876)

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants