statsd icon indicating copy to clipboard operation
statsd copied to clipboard

Don't mute/discard connection when "quick listener check" fails

Open zstyblik opened this issue 8 years ago • 3 comments

Hello,

I'm wondering whether it would be possible to try to either connect(un-mute) or from time to time.

Currently, when:

Failed to init StatsD: write udp [::1]:51628->[::1]:8125: write: connection refusedSlept: 0

Then no attempt is made to connect again. I don't want to fail application just because connection cannot be established, although may be I should. Also, it seems to me a bit cumbersome to introduce some check-whether-StatsD-is-initialized logic.

Would it be possible to try to connect from time to time eg. on flush() or just from time to time and un-mute?

If I kill listener, then connection is re-established once listener comes back. However, if listener isn't there when StatsD client is initialized, we never try again.

Thanks, Z.

zstyblik avatar Jun 03 '16 13:06 zstyblik

The "problem" is in https://github.com/alexcesaro/statsd/blob/master/conn.go#L50. But after reading the code, the only thing I came up is to remove this code block. :| Because then it works as ... I need it to. :)

It seems https://github.com/gdiazlo/statsd/commit/d12d68c9bd9adeab98f3f002402774e862640e13 did the same.

zstyblik avatar Jun 04 '16 09:06 zstyblik

@zstyblik's fork seems good. @alexcesaro is there a great reason to keep that check in there? Would you be willing to accept a PR where that check is optional?

wbbradley avatar May 30 '17 16:05 wbbradley

Very old issue, but I've been doing some work on my fork.

As I understand it, muting the client returned by New on error is intentional and desirable behavior, that makes the UDP and TCP/streaming implementations consistent. For the UDP case, it is beneficial to be able to fail fast (like TCP), if possible, to detect potential misconfigurations.

Ignoring the initial check is still a valid use case, though, so I've made two changes:

  1. Documented that New always returns a non-nil client, but it (and all clients cloned from it) will be muted, if it was returned with an error
  2. Added an option that allows the initial UDP conn checking to be disabled (does what y'all seem to want, without breaking the existing behavior)

joeycumines avatar Dec 31 '21 05:12 joeycumines