Repository navigation
Conversation
Aias00
left a comment
There was a problem hiding this comment.
Reviewed initial-attempt release, delayed failover, attempt ownership transfer, successful response-body lifetime, cancellation and synchronous request-construction failures. No actionable finding. Focused HTTP retry and Divide reactor tests: 59 tests passed.
Checkstyle and a separate Apache RAT check passed locally. This review covers source and the stated targeted verification; full Docker integration/E2E suites were not run locally.
2b39c40 to
dd3debb
Compare
dd3debb to
fe58aa2
Compare
|
@Aias00 I split the #8156 fix out of this PR: it now lives in the standalone PR #8253, so this branch again contains only the #8158 fix (one commit, fe58aa2). Nothing in the #8158 change itself moved; the branch was rebased to drop the second commit, hence the force push (which is also why the earlier approval shows as stale). Both modules pass clean again (httpclient 169, divide 158, checkstyle clean). Could you take a fresh look when convenient? |
Aias00
left a comment
There was a problem hiding this comment.
Stream Agent analysis
FINAL review of apache/shenyu PR #8251 (head fe58aa2): fix(divide) bind failover inflight accounting to each attempt's response lifetime. All 14 partition reviews passed with no blocking findings; global complete_diff true; CI passed with 64 checks.
Evidence
- Attached cross-file review: all_parts_passed=true, complete_diff=true, global_complete_diff=true
- CI: check_count=64, complete=true, passed=true
- 14 child partition reviews (part-0..part-13) all verdict PASS with empty blocking_findings
Recommended next steps
- Confirm non-Divide plugins (if any) that use DefaultRetryStrategy still correctly account inflight via the new ownership model
- Optionally extend test coverage with a chaos/fault-injection integration test for failover inflight leaks
Scope: captured diff and GitHub check metadata only; no local tests were executed.
Task: a58e9162-df7b-420c-9c4d-3168bbc0c57a · Commit: fe58aa28455c6f280b3c3fd87f6b35a22b80f285
Review verdict: PASS
FINAL scope: assessed cross-file correctness from all child summaries. No child returned NEEDS_CHANGES or INCONCLUSIVE. all_parts_passed=true, complete_diff=true, global_complete_diff=true, CI passed=true. The supplied diff segments cover new UpstreamAttemptOwner.java, import additions, DefaultRetryStrategy failover release logic, DividePlugin ownership tracking, and corresponding tests. Reviews indicate internally consistent accounting: reservations released on attempt terminal events, P2C/LEAST_ACTIVE increments balanced by owner release. No anchored HIGH/CRITICAL defects. Limitation: no local tests executed; reliance on CI and partition reviews. Verdict PASS is justified under the given rules.
Publication: APPROVE (EXPLICIT_PASS)
Review details
Synthesis of partition reviews shows the new UpstreamAttemptOwner class and modifications in DefaultRetryStrategy and DividePlugin consistently bind inflight reservation to attempt response lifetime, releasing on terminal events. All supplied diff segments (complete) were reviewed and no HIGH/CRITICAL defects were found. CI is green. Recommendation: maintainers may proceed with merge after their own checklist; this review does not execute tests or approve.
Aias00
left a comment
There was a problem hiding this comment.
Stream Agent analysis
FINAL review of apache/shenyu PR #8251 (head fe58aa2): fix(divide) bind failover inflight accounting to each attempt's response lifetime. All 14 partition reviews passed with no blocking findings; global complete_diff true; CI passed with 64 checks.
Evidence
- Attached cross-file review: all_parts_passed=true, complete_diff=true, global_complete_diff=true
- CI: check_count=64, complete=true, passed=true
- 14 child partition reviews (part-0..part-13) all verdict PASS with empty blocking_findings
Recommended next steps
- Confirm non-Divide plugins (if any) that use DefaultRetryStrategy still correctly account inflight via the new ownership model
- Optionally extend test coverage with a chaos/fault-injection integration test for failover inflight leaks
Scope: captured diff and GitHub check metadata only; no local tests were executed.
Task: a58e9162-df7b-420c-9c4d-3168bbc0c57a · Commit: fe58aa28455c6f280b3c3fd87f6b35a22b80f285
Review verdict: PASS
FINAL scope: assessed cross-file correctness from all child summaries. No child returned NEEDS_CHANGES or INCONCLUSIVE. all_parts_passed=true, complete_diff=true, global_complete_diff=true, CI passed=true. The supplied diff segments cover new UpstreamAttemptOwner.java, import additions, DefaultRetryStrategy failover release logic, DividePlugin ownership tracking, and corresponding tests. Reviews indicate internally consistent accounting: reservations released on attempt terminal events, P2C/LEAST_ACTIVE increments balanced by owner release. No anchored HIGH/CRITICAL defects. Limitation: no local tests executed; reliance on CI and partition reviews. Verdict PASS is justified under the given rules.
Publication: COMMENT (MERGEABILITY_NOT_CONFIRMED)
Review details
Synthesis of partition reviews shows the new UpstreamAttemptOwner class and modifications in DefaultRetryStrategy and DividePlugin consistently bind inflight reservation to attempt response lifetime, releasing on terminal events. All supplied diff segments (complete) were reviewed and no HIGH/CRITICAL defects were found. CI is green. Recommendation: maintainers may proceed with merge after their own checklist; this review does not execute tests or approve.
Fixes #8158.
Problem
On HTTP failover the initial target's
leastActivereservation is held until the whole logical request finishes, while the failover target's reservation is released as soon as its response headers arrive. While the failover target's body is still streaming,leastActivetherefore sees the failed node as busy and the serving node as idle — the opposite of the actual workload.Change
UpstreamAttemptOwner). It names the upstream that currently owns the request's reservation and releases only that upstream, using identity CAS so an immediate resend cannot release a newer target.DividePlugininstalls the owner forleastActive/ P2C after the reservation is taken and releases the current owner when the response body completes, errors or is cancelled. P2C keeps usingresponseTrigger(decrement + response-time accounting);leastActivedecrements.DefaultRetryStrategybinds releases to each attempt:CANNOT_FIND_HEALTHY_UPSTREAM_URL_AFTER_FAILOVERdiagnostic is restored.Tests
leastActivesuccess/cancel cases.Verification
Checkstyle clean on the affected modules. Only the failover/accounting path changed; ordinary forwarding without retry is untouched.