Skip to content

[branch-4.1][fix](regression) Match Parquet TIME scanner errors - #65885

Merged
yiguolei merged 3 commits into
branch-4.1from
agent/branch41-parquet-time-error-assert
Jul 30, 2026
Merged

yiguolei merged 3 commits into
branch-4.1from
agent/branch41-parquet-time-error-assert

Conversation

@hello-stephen

@hello-stephen hello-stephen commented Jul 22, 2026 •

Copy link
Copy Markdown
Contributor

Internal External build 203691 used the branch-4.1 V1 scanner path and failed because the cases expected the FileScannerV2 Parquet TIME message. The first revision matched only the V1 messages, but terminal community External build 1004233 then proved that the current branch-4.1 merge runs the V2 path and the V1-only assertions fail in the opposite direction.

This test-only change now accepts exactly the two valid branch-4.1 scanner messages for each affected column:

  • V1: The column type of '<column>' is not supported
  • V2: Unsupported parquet column '<column>': Parquet TIME with isAdjustedToUTC=true is not supported

Unrelated exceptions are still rejected, and product behavior is unchanged.

Validation:

  • git diff --check: passed
  • Groovy 4.0.19 compilation: passed for both modified suites
  • Suite discover/load: test_hdfs_parquet_group5 and test_hdfs_parquet_group6, tags external,hive,tvf,external_docker
  • Message gate: both V1/V2 signatures accepted for timestamp and time_millis; unrelated connection refused rejected
  • Attempt 1 terminal evidence: External build 1004233 failed only because V1-only assertions met the current V2 messages
  • Fresh Compile and External runtime validation are required for the new head before merge

### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: The branch-4.1 HDFS TVF cases expected the FileScannerV2 Parquet TIME error, while this branch still uses the V1 scanner path and reports the unsupported column type. Match the exact V1 errors for the two affected files so the cases continue to verify that unsupported TIME columns are rejected.

### Release note

None

### Check List (For Author)

- Test: No need to test (test-only assertion update; validated against internal build 203691 failure output)
- Behavior changed: No
- Does this need documentation: No
@hello-stephen
hello-stephen requested a review from yiguolei as a code owner July 22, 2026 08:08
@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 externai

@hello-stephen

Copy link
Copy Markdown
Contributor Author

run external

@hello-stephen

Copy link
Copy Markdown
Contributor Author

[attempt-2-parquet-time-dual-scanner]

Attempt 1 (c8e08c70c87a7947e79de52f180bb4fad32ad5a9) was terminally disproved by External build 1004233:

  • test_hdfs_parquet_group5: expected V1 The column type of 'timestamp' is not supported, actual current V2 Unsupported parquet column 'timestamp': Parquet TIME with isAdjustedToUTC=true is not supported
  • test_hdfs_parquet_group6: expected V1 The column type of 'time_millis' is not supported, actual current V2 Unsupported parquet column 'time_millis': Parquet TIME with isAdjustedToUTC=true is not supported

The new head fd4fc791300 accepts only the exact V1 or V2 unsupported-TIME signatures for the relevant column; it does not accept arbitrary exceptions.

Static gates passed:

  • git diff --check
  • Groovy 4.0.19 compilation of both suites
  • suite discover/load for test_hdfs_parquet_group5 and test_hdfs_parquet_group6
  • positive checks for all four valid V1/V2 messages and a negative check rejecting connection refused

This is attempt 2. Fresh Compile and External runtime proof for this head are still required; a green check from the superseded head must not be reused.

@hello-stephen

Copy link
Copy Markdown
Contributor Author

run compile

@hello-stephen

Copy link
Copy Markdown
Contributor Author

[attempt-2-external-infra-retry]

External #1004728 finished FAILURE before any regression test executed (0 failed tests). The first actionable error was third-party startup: hadoop2-datanode became unhealthy, followed by cleanup/retry errors for missing container objects; run-thirdparties-docker.sh then exited 1. This is shared test-environment startup failure, not a result for the group5/group6 expectation change and does not count as a code-fix attempt.

A clean External retry #1004809 has been queued on the same head fd4fc791300f7271a9b75f05e928342338b5da42. Code validation remains pending until that build reaches terminal state and actually executes test_hdfs_parquet_group5 and test_hdfs_parquet_group6.

@hello-stephen

Copy link
Copy Markdown
Contributor Author

[attempt-3-assertion-signature]

Clean External retry #1004809 finished with the target product errors already matching the intended V1/V2 gate, but both target suites failed before accepting them because the new check called JUnit 5 as assertTrue(message, condition). The first real error was MissingMethodException: Assertions.assertTrue(GStringImpl, Boolean) at group5 line 131 and group6 line 435.

Attempt 3 head 330fcfc7fdc makes the minimal test-only correction to assertTrue(condition, message) in both suites. git diff --check and Groovy 4.0.19 compilation of both modified files pass. This is the third code attempt for this root; a fresh Compile/External run must prove both target suites before merge. If the same target problem remains after that terminal run, I will stop autonomous code changes and hand off the three-attempt evidence.

@hello-stephen

Copy link
Copy Markdown
Contributor Author

run compile

@hello-stephen

Copy link
Copy Markdown
Contributor Author

[attempt-3-external-1005126-terminal]

Attempt 3 runtime validation is terminal and successful on head 330fcfc7fdc510171ce63218cf56254c594e38e8:

  • Compile #1005104: finished SUCCESS
  • External #1005126: finished SUCCESS, 567 passed / 1 muted / 0 failed
  • test_hdfs_parquet_group6: executed and succeeded (12s)
  • test_hdfs_parquet_group5: executed and succeeded (13s)

The two target suites therefore accept the exact branch-4.1 V2 Parquet TIME errors without the prior JUnit MissingMethodException. Because this PR only changes these two External regression cases, the unrelated P0/cloud/Vault/NonConcurrent fan-out was canceled or removed to control concurrent capacity and cost; those canceled contexts are not code failures. The retained External target is the applicable runtime proof.

@hello-stephen

Copy link
Copy Markdown
Contributor Author

skip buildall

@hello-stephen

Copy link
Copy Markdown
Contributor Author

/review

@github-actions

Copy link
Copy Markdown
Contributor

Codex automated review failed and did not complete.

Error: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at Jul 30th, 2026 7:58 AM.
Workflow run: https://github.com/apache/doris/actions/runs/30109446676

Please inspect the workflow logs and rerun the review after the underlying issue is resolved.

@hello-stephen
hello-stephen requested a review from Gabriel39 July 27, 2026 03:18
@yiguolei
yiguolei merged commit 17644f9 into branch-4.1 Jul 30, 2026
30 of 33 checks passed
@morrySnow
morrySnow deleted the agent/branch41-parquet-time-error-assert branch August 20, 2026 04:00
Gabriel39 pushed a commit that referenced this pull request Nov 6, 2026
…t_generation (#70308)

### Background

An auto-partition table with `partition.retention_count = N` keeps only
its N latest historical partitions: the FE's `DynamicPartitionScheduler`
drops older ones on every run, once per
`dynamic_partition_check_interval_seconds` (600 by default).
`partition_p0/auto_partition/test_auto_new_recycle` lowers that interval
to 1 s and checks the partition count after each load or ALTER.
`audit/test_sql_digest_generation` checks that the audit log gets an
`sql_digest` only for queries slower than the FE config
`sql_digest_generation_threshold_ms`, once with the threshold at 0 and
once at 100000. Both suites are in group `nonConcurrent`.

### What problem does this PR solve?

Issue Number: None
Related PR: #65375 and #65646 (the branch-4.1 recycle-suite fixes by
@shuke987, ported here), #65343 (the branch-4.1 digest-suite fix by
@shuke987, ported here), #65435 (master's earlier move of the recycle
suite's day-boundary guard)
PR Type: Test

Problem Summary:

Both suites rely on timing the product does not promise. The recycle
suite checks the partition count after a fixed `sleep(8000)` (5 s after
an ALTER), while the drop happens asynchronously at an unbounded time
after the config change; branch-4.1's NonConcurrent pipeline failed at
the first such check repeatedly (#65375). The digest suite's threshold-0
check needs the query's elapsed time to be above 0 ms. This PR gives
both suites their branch-4.1/4.2 form: the recycle suite polls the
partition count every second, for at most 1200 s, and widens its
day-boundary guard to cover the poll; the digest query adds `sleep(1)`.
Both files become identical to branch-4.2.

### Details

- **Failure:** On master's public NonConcurrent pipeline neither suite
has failed on its own since mid-July: of about 8,000 runs each, the
recycle suite failed 3 times and the digest suite 87 times, all in
builds whose cluster had died (most suites failing). The failures that
motivated the fixes are on branch-4.1's pipeline (#65375); #65343 made
the digest query deterministic there.
- **Cause:** `ADMIN SET FRONTEND CONFIG` sets the scheduler's new
interval at once, but the scheduler sleeps in 5-second slices and
notices the change only at the next slice. It then runs
`executeDynamicPartition` over every registered table before the drop.
So the drop lands 0 to 5 s plus one full pass after the config change,
and a pass longer than about 3 s fails the 8-second check. In the digest
suite, `AuditLogHelper` writes a digest only when `elapseMs >
sql_digest_generation_threshold_ms`, and nothing bounds the elapsed time
of `select *` on a two-row table from below (9 to 15 ms locally). With
`sleep(1)` on each row it takes about 2 s, still far below the second
check's 100000 ms.
- **Stability evidence:** The recycle checks now wait for the drop and
fail only when the count misses the target for 1200 s. The poll runs on
the suite thread, because the framework sets
`Awaitility.pollInSameThread()` (#68338), so it does not leak
connections. Shortening one of master's waits to 1 s reproduces the
branch-4.1 failure shape, and the ported suite passes; mutants show that
both suites still catch wrong results (see Testing).

### Testing

All runs used `./run-regression-test.sh --run -d
partition_p0/auto_partition -s test_auto_new_recycle` or `--run -d audit
-s test_sql_digest_generation` against a local single-FE, single-BE
cluster built from master.

| Suite | Version | Result |
|---|---|---|
| `test_auto_new_recycle` | master | passes |
| `test_auto_new_recycle` | this PR | passes; the polls reached the
target after 1, 2, 1, 3 and 3 s |
| `test_auto_new_recycle` | master, with the wait before the
10-partition check cut to 1 s | fails as #65375 describes: `expected:
<101> but was: <10>` (master's `assertEquals` has its arguments swapped,
so 101 partitions were still there) |
| `test_auto_new_recycle` | this PR, expecting 11 partitions, poll
capped at 20 s | fails as it should: `ConditionTimeoutException` |
| `test_sql_digest_generation` | master | passes |
| `test_sql_digest_generation` | this PR | passes; the query took 2,024
and 2,025 ms |
| `test_sql_digest_generation` | this PR, second threshold 1000 ms |
fails as it should: `Count of sql_digest changed` |

The PR NonConcurrent pipeline runs both suites; cloud_p0 skips
`nonConcurrent` suites.

### Notes for Reviewers

- The day-boundary guard before the final `now()`-based section goes
from 100 s to 1300 s, as in #65646, so that it covers the 1200 s poll
plus the insert and checks. It sleeps only when that section would
otherwise start within 1300 s of midnight.
- Four more suites fixed in the same branch-4.1 batch need nothing on
master: #65340 (master #68449 enables the publish debug point on all
FEs, superseding the open port #65556), #65929 (master #68329 fixed the
actual cause, a connection leak), #65885 (master #69723 removed the V1
scanner whose message it also accepted), and #67363 (ported as #67402).

### Release note

None

### Check List (For Author)

- Behavior changed: No
- Does this need documentation: No
- Pre-submission status: Ready

### AI Disclosure

- Tool: Claude Code (Claude Opus 5.5)
- Generated: the port (both suites taken from branch-4.2), the local
verification runs, and this description
- Human review: not stated
- Prompts: The author asked to continue moving branch-4.2's changes back
to master, where six branch-4.1 test fixes were recorded as one task.
After the check showed that master already covers four of them and has
not failed on the other two, the author chose to port those two exactly
as branch-4.2 has them and to verify them on a local cluster.

Co-authored-by: shuke <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
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.

2 participants