mirror of https://github.com/status-im/consul.git
11213ae180
The primary bug here is in the streaming subsystem that makes the overall v1/health/service/:service request behave incorrectly when servicing a blocking request with a filter provided. There is a secondary non-streaming bug being fixed here that is much less obvious related to when to update the `reply` variable in a `blockingQuery` evaluation. It is unlikely that it is triggerable in practical environments and I could not actually get the bug to manifest, but I fixed it anyway while investigating the original issue. Simple reproduction (streaming): 1. Register a service with a tag. curl -sL --request PUT 'http://localhost:8500/v1/agent/service/register' \ --header 'Content-Type: application/json' \ --data-raw '{ "ID": "ID1", "Name": "test", "Tags":[ "a" ], "EnableTagOverride": true }' 2. Do an initial filter query that matches on the tag. curl -sLi --get 'http://localhost:8500/v1/health/service/test' --data-urlencode 'filter=a in Service.Tags' 3. Note you get one result. Use the `X-Consul-Index` header to establish a blocking query in another terminal, this should not return yet. curl -sLi --get 'http://localhost:8500/v1/health/service/test?index=$INDEX' --data-urlencode 'filter=a in Service.Tags' 4. Re-register that service with a different tag. curl -sL --request PUT 'http://localhost:8500/v1/agent/service/register' \ --header 'Content-Type: application/json' \ --data-raw '{ "ID": "ID1", "Name": "test", "Tags":[ "b" ], "EnableTagOverride": true }' 5. Your blocking query from (3) should return with a header `X-Consul-Query-Backend: streaming` and empty results if it works correctly `[]`. Attempts to reproduce with non-streaming failed (where you add `&near=_agent` to the read queries and ensure `X-Consul-Query-Backend: blocking-query` shows up in the results). |
||
---|---|---|
.. | ||
ae | ||
auto-config | ||
cache | ||
cache-types | ||
checks | ||
config | ||
configentry | ||
connect | ||
consul | ||
debug | ||
dns | ||
exec | ||
grpc | ||
local | ||
metadata | ||
mock | ||
pool | ||
proxycfg | ||
router | ||
routine-leak-checker | ||
rpc | ||
rpcclient/health | ||
structs | ||
submatview | ||
systemd | ||
token | ||
uiserver | ||
xds | ||
acl.go | ||
acl_endpoint.go | ||
acl_endpoint_legacy.go | ||
acl_endpoint_legacy_test.go | ||
acl_endpoint_test.go | ||
acl_oss.go | ||
acl_test.go | ||
agent.go | ||
agent_endpoint.go | ||
agent_endpoint_oss.go | ||
agent_endpoint_test.go | ||
agent_oss.go | ||
agent_test.go | ||
apiserver.go | ||
apiserver_test.go | ||
catalog_endpoint.go | ||
catalog_endpoint_oss.go | ||
catalog_endpoint_test.go | ||
check.go | ||
config_endpoint.go | ||
config_endpoint_test.go | ||
connect_auth.go | ||
connect_ca_endpoint.go | ||
connect_ca_endpoint_test.go | ||
coordinate_endpoint.go | ||
coordinate_endpoint_test.go | ||
delegate_mock_test.go | ||
denylist.go | ||
denylist_test.go | ||
discovery_chain_endpoint.go | ||
discovery_chain_endpoint_test.go | ||
dns.go | ||
dns_oss.go | ||
dns_test.go | ||
enterprise_delegate_oss.go | ||
event_endpoint.go | ||
event_endpoint_test.go | ||
federation_state_endpoint.go | ||
health_endpoint.go | ||
health_endpoint_test.go | ||
http.go | ||
http_decode_test.go | ||
http_oss.go | ||
http_oss_test.go | ||
http_register.go | ||
http_test.go | ||
intentions_endpoint.go | ||
intentions_endpoint_oss_test.go | ||
intentions_endpoint_test.go | ||
keyring.go | ||
keyring_test.go | ||
kvs_endpoint.go | ||
kvs_endpoint_test.go | ||
metrics.go | ||
metrics_test.go | ||
nodeid.go | ||
nodeid_test.go | ||
notify.go | ||
notify_test.go | ||
operator_endpoint.go | ||
operator_endpoint_oss.go | ||
operator_endpoint_test.go | ||
peering_endpoint.go | ||
peering_endpoint_oss_test.go | ||
peering_endpoint_test.go | ||
prepared_query_endpoint.go | ||
prepared_query_endpoint_test.go | ||
reload.go | ||
remote_exec.go | ||
remote_exec_test.go | ||
retry_join.go | ||
retry_join_test.go | ||
service_checks_test.go | ||
service_manager.go | ||
service_manager_test.go | ||
session_endpoint.go | ||
session_endpoint_test.go | ||
setup.go | ||
setup_oss.go | ||
sidecar_service.go | ||
sidecar_service_test.go | ||
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 | ||
testagent_test.go | ||
translate_addr.go | ||
txn_endpoint.go | ||
txn_endpoint_test.go | ||
ui_endpoint.go | ||
ui_endpoint_oss_test.go | ||
ui_endpoint_test.go | ||
user_event.go | ||
user_event_test.go | ||
util.go | ||
util_test.go | ||
watch_handler.go | ||
watch_handler_test.go |