[controller] Fix user-initiated pushes blocked by TTL repushes #2391
+72
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What changes and why
User-initiated batch pushes were incorrectly blocked when a compliance repush (TTL repush) was ongoing, even though user pushes should be able to kill repushes and proceed. This issue was reported in DEPEND-92712.
Root Cause:
The bug was in
VeniceParentHelixAdmin.incrementVersionIdempotent()at lines 1813-1815. The code only checkedVersion.isPushIdRePush()which looks for the"venice_re_push_"prefix. However, TTL repushes (compliance repushes) use the"venice_ttl_re_push_"prefix, so they were not being detected as repushes. This caused the logic to fall through to throwing aConcurrentBatchPushException, blocking user-initiated pushes.How the fix achieves the goal
Updated the repush detection logic to check for both regular repushes and TTL repushes:
When
isExistingPushJobARepushis true and the incoming push is a user push (not a repush), the code at line 1841 correctly kills the existing repush and allows the user push to proceed.Testing done
Unit Tests Added:
testTTLRepushDetection()- Verifies that TTL repush IDs are correctly identified as repushes using the new logictestRepushTypeIdentification()- Validates all repush type detection including the bug scenarioTest Results:
Pre-commit Validation:
Files Changed
services/venice-controller/src/main/java/com/linkedin/venice/controller/VeniceParentHelixAdmin.java- Bug fixservices/venice-controller/src/test/java/com/linkedin/venice/controller/TestVeniceParentHelixAdmin.java- Unit testsChecklist