consul/agent
R.B. Boyer fe2d41ddad
cache: prevent goroutine leak in agent cache (#14908)
There is a bug in the error handling code for the Agent cache subsystem discovered:

1. NotifyCallback calls notifyBlockingQuery which calls getWithIndex in
   a loop (which backs off on-error up to 1 minute)

2. getWithIndex calls fetch if there’s no valid entry in the cache

3. fetch starts a goroutine which calls Fetch on the cache-type, waits
   for a while (again with backoff up to 1 minute for errors) and then
   calls fetch to trigger a refresh

The end result being that every 1 minute notifyBlockingQuery spawns an
ancestry of goroutines that essentially lives forever.

This PR ensures that the goroutine started by `fetch` cancels any prior
goroutine spawned by the same line for the same key.

In isolated testing where a cache type was tweaked to indefinitely
error, this patch prevented goroutine counts from skyrocketing.
2022-10-17 14:38:10 -05:00
..
ae
auto-config peering: initial sync (#12842) 2022-04-21 17:34:40 -05:00
cache cache: prevent goroutine leak in agent cache (#14908) 2022-10-17 14:38:10 -05:00
cache-types ca: fix a masked bug in leaf cert generation that would not be notified of root cert rotation after the first one (#15005) 2022-10-17 13:24:27 -05:00
checks fix(checks): os_service OK message in output 2022-09-21 09:27:33 +01:00
config Merge pull request #13388 from deblasis/feature/health-checks_windows_service 2022-10-17 09:26:19 -04:00
configentry Merge central config for GetEnvoyBootstrapParams (#14869) 2022-10-10 12:40:27 -05:00
connect Use internal server certificate for peering TLS 2022-10-07 09:05:32 -06:00
consul Fix issue with incorrect method signature on test. 2022-10-14 11:04:57 -05:00
debug
dns test: fix incorrect use of t instead of r in retry test (#13146) 2022-05-19 14:00:07 -05:00
exec
grpc-external Merge pull request #14981 from hashicorp/peering/dial-through-gateways 2022-10-14 09:44:56 -06:00
grpc-internal gRPC server metrics (#14922) 2022-10-11 17:00:32 -05:00
grpc-middleware gRPC server metrics (#14922) 2022-10-11 17:00:32 -05:00
hcp adding configuration option cloud.scada_address (#14936) 2022-10-13 11:31:28 +02:00
local Merge pull request #13499 from maxb/delete-unused-metric 2022-08-01 12:31:05 -06:00
metadata Change serf-tag references to field references. 2022-08-31 16:38:42 -05:00
mock
pool grpc: rename public/private directories to external/internal (#13721) 2022-07-13 16:33:48 +01:00
proxycfg proxycfg: fix goroutine leak when service is re-registered (#14988) 2022-10-17 11:31:10 +01:00
proxycfg-glue Prevent consul peer-exports by discovery chain. 2022-10-13 12:45:09 -05:00
proxycfg-sources xds: properly merge central config for "agentless" services (#14962) 2022-10-13 12:04:59 +01:00
router
routine-leak-checker
rpc Update peering establishment to maybe use gateways 2022-10-13 14:57:55 -06:00
rpcclient/health proxycfg-glue: server-local implementation of the `Health` interface 2022-07-14 18:22:12 +01:00
structs Merge pull request #13388 from deblasis/feature/health-checks_windows_service 2022-10-17 09:26:19 -04:00
submatview proxycfg: terminate stream on irrecoverable errors 2022-08-23 20:17:49 +01:00
systemd
token
uiserver Enable/Disable Peering Support in the UI (#13816) 2022-07-25 11:50:11 -04:00
xds Extend tcp keepalive settings to work for terminating gateways as well 2022-10-14 17:05:46 -07:00
acl.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
acl_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
acl_endpoint_legacy.go
acl_endpoint_legacy_test.go
acl_endpoint_test.go [OSS] Add new peering ACL rule (#13848) 2022-07-22 14:42:23 -06:00
acl_oss.go
acl_test.go chore: removed unused method AddService (#13905) 2022-07-26 16:54:53 -04:00
agent.go Merge pull request #13388 from deblasis/feature/health-checks_windows_service 2022-10-17 09:26:19 -04:00
agent_endpoint.go Merge branch 'main' of github.com:hashicorp/consul into derekm/split-grpc-ports 2022-09-08 14:53:08 -05:00
agent_endpoint_oss.go Fixup acl.EnterpriseMeta 2022-04-05 15:11:49 -07:00
agent_endpoint_oss_test.go Add oss test 2022-05-09 10:07:19 -07:00
agent_endpoint_test.go Use internal server certificate for peering TLS 2022-10-07 09:05:32 -06:00
agent_oss.go proxycfg: replace direct agent cache usage with interfaces (#13320) 2022-06-01 16:18:06 +01:00
agent_test.go proxycfg: rate-limit delivery of config snapshots (#14960) 2022-10-14 15:52:00 +01:00
apiserver.go
apiserver_test.go
catalog_endpoint.go [OSS] Support merge-central-config option in node services list API (#13450) 2022-06-15 08:30:31 -07:00
catalog_endpoint_oss.go
catalog_endpoint_test.go block PeerName register requests (#13887) 2022-07-29 14:36:22 -07:00
check.go Fixup acl.EnterpriseMeta 2022-04-05 15:11:49 -07:00
config_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
config_endpoint_test.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
connect_auth.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
connect_ca_endpoint.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
connect_ca_endpoint_test.go Update go version to 1.18.1 2022-04-18 11:41:10 -04:00
coordinate_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
coordinate_endpoint_test.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
delegate_mock_test.go Move ACLResolveResult into acl/resolver package (#13467) 2022-06-17 10:24:43 +01:00
denylist.go
denylist_test.go
discovery_chain_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
discovery_chain_endpoint_test.go Cluster peering failover disco chain changes (#14296) 2022-08-23 09:13:43 -04:00
dns.go Bind a dns mux handler to gRPC proxy 2022-09-29 21:44:45 -07:00
dns_oss.go Parse peer name for virtual IP DNS queries (#13602) 2022-07-06 10:30:04 -06:00
dns_test.go Bind a dns mux handler to gRPC proxy 2022-09-29 21:44:45 -07:00
enterprise_delegate_oss.go
event_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
event_endpoint_test.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
federation_state_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
health_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
health_endpoint_test.go block PeerName register requests (#13887) 2022-07-29 14:36:22 -07:00
http.go Reuse http.DefaultTransport in UIMetricsProxy (#14521) 2022-09-08 11:02:05 -04:00
http_decode_test.go
http_oss.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
http_oss_test.go
http_register.go Add new internal endpoint to list exported services to a peer 2022-09-23 09:43:56 -04:00
http_test.go Add separate grpc_tls port. 2022-08-29 13:43:43 -05:00
intentions_endpoint.go oss: peering, http: get peer service intentions (#2098) 2022-06-22 16:25:09 -07:00
intentions_endpoint_oss_test.go
intentions_endpoint_test.go oss: peering, http: get peer service intentions (#2098) 2022-06-22 16:25:09 -07:00
keyring.go Allows keyring operations on client agents 2022-02-24 17:24:57 +00:00
keyring_test.go
kvs_endpoint.go Fix KVSGet method to handle QueryOptions properly (#13344) 2022-06-02 12:26:18 -04:00
kvs_endpoint_test.go
metrics.go
metrics_test.go Middleware: `RequestRecorder` reports calls below 1ms as decimal value (#12905) 2022-09-15 13:04:37 -04:00
nodeid.go
nodeid_test.go
notify.go
notify_test.go
operator_endpoint.go Unify various status errors into one HTTP error type. (#12594) 2022-04-29 13:42:49 -04:00
operator_endpoint_oss.go
operator_endpoint_test.go
peering_endpoint.go Support Stale Queries for Trust Bundle Lookups (#14724) 2022-09-28 09:56:59 -07:00
peering_endpoint_oss_test.go [sync oss] api: add peering api module (#12911) 2022-05-02 11:49:05 -07:00
peering_endpoint_test.go Include stream-related information in peering endpoints 2022-10-10 13:20:14 -06:00
prepared_query_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
prepared_query_endpoint_test.go Add Cluster Peering Failover Support to Prepared Queries (#13835) 2022-07-22 09:14:43 -04:00
reload.go
remote_exec.go
remote_exec_test.go
retry_join.go add HCP integration component (#14723) 2022-09-26 14:58:15 -04:00
retry_join_test.go add HCP integration component (#14723) 2022-09-26 14:58:15 -04:00
service_checks_test.go Service http checks data source for agentless proxies (#14924) 2022-10-12 07:49:56 -07:00
service_manager.go Merge central config for GetEnvoyBootstrapParams (#14869) 2022-10-10 12:40:27 -05:00
service_manager_test.go Add support for merge-central-config query param (#13001) 2022-05-25 13:20:17 -07:00
session_endpoint.go Revert getPathSuffixUnescaped (#13256) 2022-06-01 13:17:14 -04:00
session_endpoint_test.go
setup.go Add consul.xds.server.streamStart metric (#14957) 2022-10-12 14:17:58 -05:00
setup_oss.go
sidecar_service.go PR #14057 follow up fix: service id parsing from sidecar id (#14541) 2022-09-09 09:47:10 -05:00
sidecar_service_test.go PR #14057 follow up fix: service id parsing from sidecar id (#14541) 2022-09-09 09:47:10 -05:00
signal_unix.go
signal_windows.go
snapshot_endpoint.go
snapshot_endpoint_test.go
status_endpoint.go
status_endpoint_test.go
streaming_test.go
testagent.go Use internal server certificate for peering TLS 2022-10-07 09:05:32 -06:00
testagent_test.go
translate_addr.go
txn_endpoint.go Merge pull request #13388 from deblasis/feature/health-checks_windows_service 2022-10-17 09:26:19 -04:00
txn_endpoint_test.go increase the size of txn to support vault (#14599) 2022-09-19 09:07:19 -07:00
ui_endpoint.go Add new internal endpoint to list exported services to a peer 2022-09-23 09:43:56 -04:00
ui_endpoint_oss_test.go
ui_endpoint_test.go Rename `PeerName` to `Peer` on prepared queries and exported services (#14854) 2022-10-04 14:46:15 -04:00
user_event.go
user_event_test.go chore: removed unused method AddService (#13905) 2022-07-26 16:54:53 -04:00
util.go
util_test.go
watch_handler.go
watch_handler_test.go