Skip to content

fix(regression): Make test_analyze_mv row_count assertion stable after truncate#64419

Open
yujun777 wants to merge 1 commit into
apache:masterfrom
yujun777:fix-flaky-test-analyze-mv-rowcount
Open

fix(regression): Make test_analyze_mv row_count assertion stable after truncate#64419
yujun777 wants to merge 1 commit into
apache:masterfrom
yujun777:fix-flaky-test-analyze-mv-rowcount

Conversation

@yujun777

@yujun777 yujun777 commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Problem

statistics/test_analyze_mv.groovy line 614 asserts assertEquals("-1", result_row[0][4]) immediately after truncate table, expecting report_row_count_for_nereids to be -1 (unreported). This is a race condition: BE asynchronously reports new tablet stats (0 rows for empty table) to FE, and if the report arrives before the assertion, the value is 0 instead of -1.

On cloud, this is amplified by CloudTabletStatMgr unconditionally setting rowCountReported=true, making the -1 state exceptionally short-lived or unobservable.

Root Cause

After truncate table, the FE stat manager (CloudTabletStatMgr / TabletStatMgr) updates MaterializedIndex.rowCount and sets rowCountReported=true. The test assertion races with this update:

  • If BE hasn't reported yet → getRowCountForIndex(id, true) returns -1 ✓
  • If BE has reported → returns 0 ✗ (test fails)

Fix

Change the assertion to accept both -1 and 0, since both are valid states for an empty table after truncate:

  • -1: tablet row count not yet reported
  • 0: tablet row count reported as 0 (empty table)

Add assertion message with actual value for debuggability.

🤖 Generated with Claude Code

@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?

The row_count_for_nereids (column 4 of show index stats) can be either -1
(not yet reported by BE) or 0 (reported as 0 rows for empty table) right
after truncate table. Asserting exactly -1 creates a race condition with
BE tablet reporting, especially on cloud where CloudTabletStatMgr
unconditionally sets rowCountReported=true.

Change the assertion to accept both -1 and 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@yujun777 yujun777 force-pushed the fix-flaky-test-analyze-mv-rowcount branch from 1839fa6 to ed91cd0 Compare June 11, 2026 08:58
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