This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-4.2 in repository https://gitbox.apache.org/repos/asf/doris.git
commit e3e6cdbfb7136a89f0203bc39a91ffed07ca5f93 Author: Gabriel <[email protected]> AuthorDate: Tue Sep 29 14:23:37 2026 +0800 [fix](regression) Wait for final Iceberg Variant STRING profile counters (#68597) ### What problem does this PR solve? Related PR: #66941 `test_iceberg_variant_read` can fail its STRING leaf projection assertion after the SQL result has already passed the 4,096-row check. The profile fetch only requires counter names to be present, which does not ensure their final values have arrived. In the observed failure, the profile HTTP request started at `03:16:04.601`, overlapping the final BE report processed at `03:16:04.604`. The archived profile subsequently contained `VariantLeafProjectionRowGroupColumns = 1`, `VariantDirectLeafRows = 8192`, and zero residual/full projection and reconstruction counters. Reuse the suite's bounded positive-counter wait for the STRING query. Allow the helper to also require the counters expected to remain zero, preserving every existing assertion and presence check. Permanently zero positive counters still time out with counter diagnostics; unexpected reconstruction still fails. This targets `branch-4.1`, where the affected STRING assertion exists. ### Release note None ### Check List (For Author) - Test - [x] Manual test: ran a Groovy 4 harness that executes the suite's actual parsing/wait closures and STRING assertions against deterministic profile snapshots. The delayed-counter sequence reproduced the original assertion failure before the fix and passed afterward. Also verified an already-ready profile, a permanent-zero timeout, and rejection of nonzero reconstruction. This is a focused replay, not an end-to-end cluster run. - [x] Manual test: full Groovy suite syntax check and `git diff --check` passed. - Full external regression was not run locally; CI validation is pending. - Behavior changed: - [x] No production behavior change; only regression profile synchronization changes. - Does this need documentation? - [x] No. ### Check List (For Reviewer who merge this PR) - [ ] Confirm the release note - [ ] Confirm test cases - [ ] Confirm document - [ ] Add branch pick label --- .../iceberg/test_iceberg_variant_read.groovy | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/regression-test/suites/external_table_p0/iceberg/test_iceberg_variant_read.groovy b/regression-test/suites/external_table_p0/iceberg/test_iceberg_variant_read.groovy index d1d02d12247..b0190b28813 100644 --- a/regression-test/suites/external_table_p0/iceberg/test_iceberg_variant_read.groovy +++ b/regression-test/suites/external_table_p0/iceberg/test_iceberg_variant_read.groovy @@ -1220,14 +1220,16 @@ public class AppendVariantEqualityDelete { } return sum } - def getProfileByToken = { String token, List<String> positiveCounters = [] -> - String lastProfile = profileAction.getProfileBySql(token, positiveCounters) + def getProfileByToken = { String token, List<String> positiveCounters = [], + List<String> requiredCounters = [] -> + List<String> requiredContents = positiveCounters + requiredCounters + String lastProfile = profileAction.getProfileBySql(token, requiredContents) if (positiveCounters.every { String counter -> counterSum(lastProfile, counter) > 0 }) { return lastProfile } try { return profileAction.waitProfile({ - lastProfile = profileAction.getProfileBySql(token, positiveCounters) + lastProfile = profileAction.getProfileBySql(token, requiredContents) return positiveCounters.every { String counter -> counterSum(lastProfile, counter) > 0 } ? lastProfile : "" @@ -1831,11 +1833,12 @@ public class AppendVariantEqualityDelete { assertEquals(1, stringLeafRows.size()) assertEquals(4096L, ((Number) stringLeafRows[0][1]).longValue(), "The pinned shredded STRING fixture did not return all padding rows") - String stringLeafProfile = profileAction.getProfileBySql(stringLeafToken, - ["VariantLeafProjectionRowGroupColumns", - "VariantResidualProjectionRowGroupColumns", - "VariantFullProjectionRowGroupColumns", - "VariantDirectLeafRows", "VariantReconstructedRows"]).toString() + // Counter names can arrive before the final BE report fills in their values. Wait for the + // positive counters while still requiring the zero-valued counters used by the assertions. + String stringLeafProfile = getProfileByToken(stringLeafToken, + ["VariantLeafProjectionRowGroupColumns", "VariantDirectLeafRows"], + ["VariantResidualProjectionRowGroupColumns", + "VariantFullProjectionRowGroupColumns", "VariantReconstructedRows"]).toString() assertTrue(counterSum(stringLeafProfile, "VariantLeafProjectionRowGroupColumns") > 0, "A STRING leaf predicate did not retain its physical row-group leaf projection") assertEquals(0L, counterSum(stringLeafProfile, --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
