consul/agent/grpc-internal
hc-github-team-consul-core 64c29e59fb
Backport of grpc: fix data race in balancer registration into release/1.15.x (#17351)
Registering gRPC balancers is thread-unsafe because they are stored in a
global map variable that is accessed without holding a lock. Therefore,
it's expected that balancers are registered _once_ at the beginning of
your program (e.g. in a package `init` function) and certainly not after
you've started dialing connections, etc.

> NOTE: this function must only be called during initialization time
> (i.e. in an init() function), and is not thread-safe.

While this is fine for us in production, it's challenging for tests that
spin up multiple agents in-memory. We currently register a balancer per-
agent which holds agent-specific state that cannot safely be shared.

This commit introduces our own registry that _is_ thread-safe, and
implements the Builder interface such that we can call gRPC's `Register`
method once, on start-up. It uses the same pattern as our resolver
registry where we use the dial target's host (aka "authority"), which is
unique per-agent, to determine which builder to use.
2023-05-15 12:34:17 +01:00
..
balancer Backport of grpc: fix data race in balancer registration into release/1.15.x (#17351) 2023-05-15 12:34:17 +01:00
resolver [1.15.x] grpc: ensure grpc resolver correctly uses lan/wan addresses on servers (#17285) 2023-05-11 11:11:05 -05:00
services/subscribe Remove legacy acl policies (#15922) 2023-02-06 15:35:52 +00:00
client.go Backport of grpc: fix data race in balancer registration into release/1.15.x (#17351) 2023-05-15 12:34:17 +01:00
client_test.go Backport of grpc: fix data race in balancer registration into release/1.15.x (#17351) 2023-05-15 12:34:17 +01:00
handler.go
handler_test.go Backport of grpc: fix data race in balancer registration into release/1.15.x (#17351) 2023-05-15 12:34:17 +01:00
server_test.go
stats_test.go
tracker.go grpc: switch servers and retry on error (#15892) 2023-01-05 10:21:27 +00:00