)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"d1a168f947145a11d53ba7a2e5e9510a12197422","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Piotr Milewski \u003cvurmil@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-09-03 08:49:15 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Silence health checks and OPTIONS requests in uWSGI logs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This updates the uWSGI configuration to silence frequent ping"},{"line_number":10,"context_line":"requests and health checks from load balancers."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"d43569d3_e31baba0","line":7,"updated":"2026-09-08 11:44:59.000000000","message":"rule filters HEAD but here states OPTIONS","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"25581fc2aa33988a5d1e2e9856f88b057185b26b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Piotr Milewski \u003cvurmil@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-09-03 08:49:15 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Silence health checks and OPTIONS requests in uWSGI logs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This updates the uWSGI configuration to silence frequent ping"},{"line_number":10,"context_line":"requests and health checks from load balancers."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"c794b8f0_4b86329e","line":7,"in_reply_to":"d43569d3_e31baba0","updated":"2026-09-08 12:13:29.000000000","message":"Acknowledged","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"d89db632af3af70458a6430793f80a66868acde6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"25c0f9e6_0d6e7fb5","updated":"2026-05-21 16:12:28.000000000","message":"I think this is unnecessary, haproxy logs /healthcheck anyway","commit_id":"99f2e8ea609a3fab4f5dae0baf640a1eb9ee95c3"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"a8a6d3c03340a2ee0be7d01e94f7fac4e5a0e1a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"24b22627_1174361e","updated":"2026-05-22 08:13:03.000000000","message":"After this change, the number of logs on our 5-node DEV environment over 30 minutes dropped from ~120k to ~85k.\n\nAnd if we switched all HAProxy health checks to HEAD requests, it would probably reduce the log volume even more and make the logs much cleaner/readable.","commit_id":"a841316278a487067203448c26da7a8081546571"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"ac4ac3d21def2b87530521aa24f36befcbdb4e5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bbf8ca7a_20216797","updated":"2026-06-25 19:44:14.000000000","message":"it would be great to backport it","commit_id":"8b73c6c74ea7e0bc235b2b5ae79e301ba4e46c57"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"0dcf050281ae3b691774152897a760ed039e84e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8dc15ff7_33319dfd","updated":"2026-07-16 13:52:24.000000000","message":"rechceck - noble-upgrade tempest","commit_id":"578d089a3c166c6261b9a948df813c4001fffff4"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"8cd1588727e80074a3e11c0a0a7ec4498a065a0e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"50dc04c7_43501f4d","updated":"2026-07-16 17:08:46.000000000","message":"recheck - noble-upgrade tempest","commit_id":"578d089a3c166c6261b9a948df813c4001fffff4"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"3a98ad068802580c18a81708b892584723aecdb4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0dd408c7_8922b50a","updated":"2026-07-16 11:16:55.000000000","message":"what about this ? https://review.opendev.org/c/openstack/kolla-ansible/+/985116","commit_id":"578d089a3c166c6261b9a948df813c4001fffff4"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"cd771ec8b79009593a243974c4b020f3394b01b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ace7b665_3f08bb95","updated":"2026-09-03 09:06:27.000000000","message":"LGTM","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"}],"ansible/roles/service-uwsgi-config/templates/uwsgi.ini.j2":[{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"d1a168f947145a11d53ba7a2e5e9510a12197422","unresolved":true,"context_lines":[{"line_number":46,"context_line":"{% endif %}"},{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"3543ff57_65b2fc1a","line":49,"updated":"2026-09-08 11:44:59.000000000","message":"we would loose also truly failing healthchecks ? maybe sth like is better?\n\n```suggestion\nresponse-route-if \u003d equal:${PATH_INFO}:${uwsgi[status]};/healthcheck:200 donotlog\n```","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"25581fc2aa33988a5d1e2e9856f88b057185b26b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"{% endif %}"},{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"b5fdad56_d711bf48","line":49,"in_reply_to":"3543ff57_65b2fc1a","updated":"2026-09-08 12:13:29.000000000","message":"Good point. I\u0027ll drop the HEAD rule and use your suggestion to only silence 200 OK.","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"d1a168f947145a11d53ba7a2e5e9510a12197422","unresolved":true,"context_lines":[{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":53,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"f9561bb6_50592d85","line":50,"updated":"2026-09-08 11:44:59.000000000","message":"Why suppressing HEAD? I couldn\u0027t see any spam messages in the logs, however keystone uses HEAD for checking group membership and we would filter that out https://docs.openstack.org/api-ref/identity/v3/index.html?expanded\u003dcheck-whether-user-belongs-to-group-detail#check-whether-user-belongs-to-group\n\nfor example here:\nhttps://655f829b5314efd0a430-298f4365cc798f0001a632f171eb41d6.ssl.cf1.rackcdn.com/openstack/9d8ffbb3efb74eae97fde551b3181668/primary/logs/kolla/haproxy/haproxy_latest.txt","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"25581fc2aa33988a5d1e2e9856f88b057185b26b","unresolved":true,"context_lines":[{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":53,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"38ad9b4d_eb688138","line":50,"in_reply_to":"21b3bd77_b7251b40","updated":"2026-09-08 12:13:29.000000000","message":"Acknowledged","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"a152544b9ae5c798865dd18652373072aec553e2","unresolved":true,"context_lines":[{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":53,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"65afc64f_71f8f071","line":50,"in_reply_to":"38ad9b4d_eb688138","updated":"2026-09-08 12:14:32.000000000","message":"Okay, this is also nice i would say ...","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"cc443c20890ef9346ec7ba6a818ef78ef3d96ec2","unresolved":true,"context_lines":[{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":53,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"6deb6785_442ba9bf","line":50,"in_reply_to":"65afc64f_71f8f071","updated":"2026-09-08 12:22:31.000000000","message":"I think @michal.arbet@ultimum.io option would also cover GET and OPTIONS checks, while keeping normal client requests and failed health checks logged, Granted this is bigger change though. I think current one should be enough as a good improvement","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"8c087bda0e71d4273ebd9ecc1d548a57a7315d30","unresolved":true,"context_lines":[{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":53,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"e5d16e58_a26d89e4","line":50,"in_reply_to":"65afc64f_71f8f071","updated":"2026-09-08 12:25:45.000000000","message":"[pid: 955|app: 0|req: 67/256] 10.0.164.60 () {26 vars in 284 bytes} [Tue Sep  8 14:25:18 2026] HEAD /healthcheck \u003d\u003e generated 0 bytes in 1 msecs (HTTP/1.1 204) 2 headers in 112 bytes (0 switches on core 0)","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"ea08dc5371398f944ff29be0429c9a69e3afa6d2","unresolved":true,"context_lines":[{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"route \u003d ^/healthcheck$ donotlog:"},{"line_number":50,"context_line":"route-if \u003d equal:${REQUEST_METHOD};HEAD donotlog:"},{"line_number":51,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":52,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":53,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":9,"id":"21b3bd77_b7251b40","line":50,"in_reply_to":"f9561bb6_50592d85","updated":"2026-09-08 12:09:45.000000000","message":"Hmm, @bartosz@stackhpc.com is right. It would by nice to add for example something as \u003e\u003e\n\n```\noption httpchk GET /healthcheck\nhttp-check send hdr X-Kolla-Healthcheck 1\n```\n\nAnd then we can filter out everything 200 if it is haproxy-check\n\n```\nresponse-route-if \u003d equal:${HTTP_X_KOLLA_HEALTHCHECK}:${uwsgi[status]};1:200 donotlog:\n```\n\nWDYT ?","commit_id":"7ba773dbb74bfa6e5ff84fe1e3df51fdd6cacaee"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"25b3d085bca6494de920e3b33268c0c190d541ab","unresolved":true,"context_lines":[{"line_number":46,"context_line":"{% endif %}"},{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"response-route-if \u003d startswith:${PATH_INFO}:${uwsgi[status]};/healthcheck:2 donotlog:"},{"line_number":50,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":51,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":52,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"bd8cb4e8_800da77a","line":49,"updated":"2026-09-08 12:40:30.000000000","message":"this would suppress all 2xx responses, as healthcheck is ``http-check expect status 200`` previous version was IMHO better","commit_id":"0760720fa5deaa2880ba77dec23c2cc3b8e36d43"},{"author":{"_account_id":34034,"name":"Franciszek Przewoźny","display_name":"Franciszek Przewozny","email":"przewozny.franciszek@gmail.com","username":"fprzewozn","status":"OpenStack Engineer / SRE @ Opera Software"},"change_message_id":"23aad27a31d8aa94aba11fad16f00694307d617b","unresolved":true,"context_lines":[{"line_number":46,"context_line":"{% endif %}"},{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"response-route-if \u003d startswith:${PATH_INFO}:${uwsgi[status]};/healthcheck:2 donotlog:"},{"line_number":50,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":51,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":52,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"f4767920_ab03b74a","line":49,"in_reply_to":"4272d021_58301074","updated":"2026-09-29 20:31:12.000000000","message":"ping @bartosz@stackhpc.com","commit_id":"0760720fa5deaa2880ba77dec23c2cc3b8e36d43"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"011fe92aec279299f9576c1ebda22ccd78098698","unresolved":true,"context_lines":[{"line_number":46,"context_line":"{% endif %}"},{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"response-route-if \u003d startswith:${PATH_INFO}:${uwsgi[status]};/healthcheck:2 donotlog:"},{"line_number":50,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":51,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":52,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"cfdef422_a153e2ff","line":49,"in_reply_to":"af7c4794_d0c074b5","updated":"2026-09-08 13:05:11.000000000","message":"I think we need to go back to previous comment of mine, what sends these HEADs? what the HEAD requests the original patch tries to silence? I couldn\u0027t see them in CI\n\nif there is real HEAD then maybe we should add specific rule for instead of catching all 2xx\n\nlike:\n\nresponse-route-if \u003d equal:${REQUEST_METHOD}:${PATH_INFO}:${uwsgi[status]};HEAD:/healthcheck:204 donotlog:","commit_id":"0760720fa5deaa2880ba77dec23c2cc3b8e36d43"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"a09be5f124b75f611c5525b700390a49c519162a","unresolved":true,"context_lines":[{"line_number":46,"context_line":"{% endif %}"},{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"response-route-if \u003d startswith:${PATH_INFO}:${uwsgi[status]};/healthcheck:2 donotlog:"},{"line_number":50,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":51,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":52,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"af7c4794_d0c074b5","line":49,"in_reply_to":"bd8cb4e8_800da77a","updated":"2026-09-08 12:45:00.000000000","message":"I checked that, but Keystone actually returns 204 for these health checks on the uWSGI level, not 200. Look at this log line:\n... HEAD /healthcheck \u003d\u003e generated 0 bytes in 1 msecs (HTTP/1.1 204) ...\nIf we revert to just checking for 200, Keystone will keep spamming. We can explicitly add rules for both 200 and 204 instead of a 2xx wildcard if that looks cleaner to you?","commit_id":"0760720fa5deaa2880ba77dec23c2cc3b8e36d43"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"a225796d7cc4b3b287dc4a8ca18476c37627cbd7","unresolved":true,"context_lines":[{"line_number":46,"context_line":"{% endif %}"},{"line_number":47,"context_line":"worker-reload-mercy \u003d {{ service_uwsgi_config_worker_timeout }}"},{"line_number":48,"context_line":"static-map \u003d /static\u003d/var/lib/kolla/venv/lib/python3/site-packages/static"},{"line_number":49,"context_line":"response-route-if \u003d startswith:${PATH_INFO}:${uwsgi[status]};/healthcheck:2 donotlog:"},{"line_number":50,"context_line":"{% for key, value in service_uwsgi_config_env.items() %}"},{"line_number":51,"context_line":"env \u003d {{ key }}\u003d{{ value }}"},{"line_number":52,"context_line":"{% endfor %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"4272d021_58301074","line":49,"in_reply_to":"cfdef422_a153e2ff","updated":"2026-09-08 14:05:12.000000000","message":"The HEAD requests are actually HAProxy health checks introduced in my other patch (https://review.opendev.org/c/openstack/kolla-ansible/+/994748).\n\nYour suggested rule (HEAD:/healthcheck:204) works for Keystone, but since this uWSGI config is global, we\u0027d have to write separate rules for every service (e.g., Nova uses /, Skyline uses /docs, and they return 200).\n\nTo handle this cleanly across all services without catching real API traffic, we can synchronize with the HAProxy patch:\n\nInject a custom header in HAProxy:\n- \"http-check send meth HEAD ... hdr User-Agent HAProxy-HealthCheck\"\n\nAdd a single, global rule here:\nresponse-route-if \u003d startswith:${HTTP_USER_AGENT}:${uwsgi[status]};HAProxy-HealthCheck:2 donotlog:\n\nThis isolates HAProxy checks completely and natively handles all paths and 2xx success codes. Thoughts?\"","commit_id":"0760720fa5deaa2880ba77dec23c2cc3b8e36d43"}]}
