This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new 0c0480257ed [fix](regression) Wait for final Iceberg Variant STRING
profile counters (#68597)
0c0480257ed is described below
commit 0c0480257edef54c8c830cfc3a6f603244ff023d
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]