Fix flaky pauseless ingestion integration tests - #19133
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #19133 +/- ##
============================================
+ Coverage 65.68% 65.69% +0.01%
Complexity 1423 1423
============================================
Files 3439 3439
Lines 218063 218063
Branches 34678 34678
============================================
+ Hits 143232 143258 +26
+ Misses 63294 63258 -36
- Partials 11537 11547 +10
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR reduces flakiness in pauseless real-time ingestion integration tests by scoping the controller’s “max segment completion” timeout override (10s) to only the failure-injection scenarios, preventing normal pauseless and comparison-table ingestion from being forced into repeated deadline-expiry repairs on busy CI runners.
Changes:
- Apply the 10-second segment-completion timeout only when a failure point is configured (i.e., failure-injection tests).
- Delay applying the short timeout until after the non-pauseless comparison table has completed setup.
- Keep the short timeout through the validation/repair pass, then restore the default 5-minute timeout via a
finallyblock.
220eca6 to
6d10620
Compare
…seless tests to the repair pass
e5f34a5 to
b91ed56
Compare
…ailure-injecting manager
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.
Suppressed comments (1)
pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/BasePauselessRealtimeIngestionTest.java:169
getFailurePoint()is now explicitly nullable, butinjectFailure()/disableFailure()still callenableTestFault(getFailurePoint())/disableTestFault(getFailurePoint())and set_failureEnabledeven when the failure point isnull(e.g.TableRebalancePauselessIntegrationTest). This leaves anullkey in the failure-config map and can also flip_failureEnabledtotrueeven though no failure is injected, which can change expectations such asgetCountStarResult()in future subclasses. Consider treatingnullas "no failure" in these helpers.
protected void injectFailure() {
PinotLLCRealtimeSegmentManager realtimeSegmentManager = _helixResourceManager.getRealtimeSegmentManager();
if (realtimeSegmentManager instanceof FailureInjectingPinotLLCRealtimeSegmentManager) {
((FailureInjectingPinotLLCRealtimeSegmentManager) realtimeSegmentManager).enableTestFault(getFailurePoint());
}
_failureEnabled = true;
|
Addressed the suppressed review comment on 🤖 Addressed by Claude Code |
…0/pinot-pr-19133-review-288211
Summary
Root cause
BasePauselessRealtimeIngestionTestglobally replaced the controller segment-completion deadline with 10 seconds. That affected ordinary pauseless tests, table rebalance tests, and the non-pauseless comparison table even when no controller fault was injected. On a busy CI runner, normal segment commits exceeded the artificial deadline and were repeatedly repaired, causing otherwise unrelated tests to hit their 20-minute timeout.How to reproduce
Run the Set 2 integration-test shard containing the pauseless suites under CI load. In the failing job, the basic pauseless test logged 38 segment-completion deadline expirations, the rebalance test logged 14, and the ideal-state failure test logged 2 before five tests timed out. The passing run on the same branch and a passing master run logged no such expirations for those classes.
Testing
./mvnw -pl pinot-integration-tests -am -Dtest=PauselessRealtimeIngestionIntegrationTest,TableRebalancePauselessIntegrationTest,PauselessRealtimeIngestionIdealStateUpdateFailureTest,PauselessRealtimeIngestionNewSegmentMetadataCreationFailureTest,PauselessRealtimeIngestionCommitEndMetadataFailureTest -Dsurefire.failIfNoSpecifiedTests=false test(6 tests, 0 failures)./mvnw spotless:apply -pl pinot-integration-tests./mvnw license:format -pl pinot-integration-tests./mvnw checkstyle:check -pl pinot-integration-tests./mvnw license:check -pl pinot-integration-teststest-compilewith-Xlint:all