Skip to content

Conversation

denpeshkov
Copy link

@denpeshkov denpeshkov commented Aug 29, 2025

This PR refactors tcpproxy package and fixes some bugs and panics:

  • Use atomic.Bool for remote.inactive instead of a mutex to improve performance and reduce struct size
  • Use zap's no-op logger when none is provided by the client, removing repeated nil checks
  • Preallocate slices
  • Replace for loops with range loops
  • Use strconv.Itoa for int-to-string conversion instead of fmt.Sprintf for better performance
  • Use uint64 for pickCount to avoid overflow issues
  • Create the timer once and reset it on each loop iteration to avoid allocating a new timer every time
  • Add timeout for dialing
  • Simplify serve logic
  • Protect donec with a mutex
  • Add checks in Stop to prevent panic when stopping before Run or closing an already closed channel

Use atomic.Bool for remote.inactive instead of a mutex to improve performance and reduce struct size.

Signed-off-by: Denis Peshkov <[email protected]>
Use zap's no-op logger when none is provided by the client, removing repeated nil checks.

Signed-off-by: Denis Peshkov <[email protected]>
- Preallocate slices
- Replace for loops with range loops
- Use strconv.Itoa for int-to-string conversion instead of fmt.Sprintf for better performance

Signed-off-by: Denis Peshkov <[email protected]>
Using int for pickCount can overflow and cause panics when used
with modulo to index a slice, as the result of the modulo can become negative.
Switching to uint64 avoids this issue

Signed-off-by: Denis Peshkov <[email protected]>
Create the timer once and reset it on each loop iteration to avoid
allocating a new timer every time.

Signed-off-by: Denis Peshkov <[email protected]>
- Add timeout for dialing
- Simplify serve logic
- Protect donec with a mutex
- Add checks in Stop to prevent panic when stopping before Run or closing an already closed channel

Signed-off-by: Denis Peshkov <[email protected]>
@k8s-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: denpeshkov
Once this PR has been reviewed and has the lgtm label, please assign fuweid for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot
Copy link

Hi @denpeshkov. Thanks for your PR.

I'm waiting for a etcd-io member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@denpeshkov denpeshkov changed the title Refactor the tcpproxy package and fixe several bugs and potential panics Refactor the tcpproxy package and fix several bugs and potential panics Aug 29, 2025
@denpeshkov denpeshkov changed the title Refactor the tcpproxy package and fix several bugs and potential panics tcpproxy: Refactor, fix bugs and potential panics Aug 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

2 participants