Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@thevilledev
Copy link
Collaborator

@thevilledev thevilledev commented Sep 5, 2025

1. Why is this pull request needed and what does it do?

Fixes a goroutine leak in zone transfers: when a client disconnects (or tr.Out errors) mid-transfer, the server could return without draining the producer channel, leaving the producer goroutine blocked on a small buffer. This change drains the producer channel on client error, ensuring the producer completes and preventing leaks.

Adds a unit test to verify the producer finishes after a simulated write failure. These tests fail against master. Increases test coverage for plugin/transfer from 67.5% to 70.7%.

2. Which issues (if any) are related?

#6548

3. Which documentation changes (if any) need to be made?

None.

4. Does this introduce a backward incompatible change or deprecation?

No. The server now drains the producer channel to completion instead of leaking a goroutine.

@thevilledev
Copy link
Collaborator Author

e2e tests fail until #7515 is merged in. Will rebase this once it's in.

@thevilledev thevilledev changed the title plugin/transfer: goroutine leak on axfr err plugin/transfer: fix goroutine leak on axfr err Sep 5, 2025
@thevilledev thevilledev force-pushed the fix/transfer-goroutine-leak branch from 0476b28 to 4869d1d Compare September 5, 2025 18:49
@codecov
Copy link

codecov bot commented Sep 5, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 61.77%. Comparing base (93c57b6) to head (477e1b3).
⚠️ Report is 1616 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #7516      +/-   ##
==========================================
+ Coverage   55.70%   61.77%   +6.07%     
==========================================
  Files         224      274      +50     
  Lines       10016    18233    +8217     
==========================================
+ Hits         5579    11264    +5685     
- Misses       3978     6307    +2329     
- Partials      459      662     +203     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@thevilledev
Copy link
Collaborator Author

Lets check the test coverage. We should remain at least on the same level.

Fixes a goroutine leak in zone transfers: when a client disconnects
mid-transfer, the server could return without draining the producer
channel, leaving the producer goroutine blocked on a small buffer.

The writer goroutine only sends an error after channel is closed.
At this point "pchan" is fully drained, in the new implementation,
so nothing to drain on error anyway.

Signed-off-by: Ville Vesilehto <[email protected]>
@thevilledev thevilledev force-pushed the fix/transfer-goroutine-leak branch from 437e603 to 477e1b3 Compare September 5, 2025 19:53
@thevilledev
Copy link
Collaborator Author

Much better. :-)

@yongtang yongtang merged commit 0dd76bd into coredns:master Sep 5, 2025
13 checks passed
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