)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"439be9471220773f995293606539ecc93bb9bb94","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a1b9e1bb_1b939bea","updated":"2026-06-30 08:26:00.000000000","message":"This is changing log levels for some libraries. From:\n\n[\u0027amqp\u003dWARN\u0027, \u0027amqplib\u003dWARN\u0027, \u0027qpid.messaging\u003dINFO\u0027, \u0027oslo.messaging\u003dINFO\u0027, \u0027sqlalchemy\u003dWARN\u0027, \u0027stevedore\u003dINFO\u0027, \u0027eventlet.wsgi.server\u003dWARN\u0027, \u0027iso8601\u003dWARN\u0027, \u0027requests\u003dWARN\u0027, \u0027neutronclient\u003dWARN\u0027, \u0027apscheduler\u003dWARN\u0027]\n\nTo:\n\n[\u0027amqp\u003dWARN\u0027, \u0027boto\u003dWARN\u0027, \u0027sqlalchemy\u003dWARN\u0027, \u0027suds\u003dINFO\u0027, \u0027oslo.messaging\u003dINFO\u0027, \u0027oslo_messaging\u003dINFO\u0027, \u0027iso8601\u003dWARN\u0027, \u0027requests.packages.urllib3.connectionpool\u003dWARN\u0027, \u0027urllib3.connectionpool\u003dWARN\u0027, \u0027websocket\u003dWARN\u0027, \u0027requests.packages.urllib3.util.retry\u003dWARN\u0027, \u0027urllib3.util.retry\u003dWARN\u0027, \u0027keystonemiddleware\u003dWARN\u0027, \u0027routes.middleware\u003dWARN\u0027, \u0027stevedore\u003dWARN\u0027, \u0027taskflow\u003dWARN\u0027, \u0027keystoneauth\u003dWARN\u0027, \u0027oslo.cache\u003dINFO\u0027, \u0027oslo_policy\u003dINFO\u0027, \u0027dogpile.core.dogpile\u003dINFO\u0027, \u0027neutronclient\u003dWARN\u0027, \u0027apscheduler\u003dWARN\u0027]\n\n\nWhen setting debug level, it\u0027s cleaning some debug messages which were annoying as:\n\n```\nJun 29 17:47:44.815586 np9d47585e9f7a4 watcher-decision-engine[101083]: DEBUG oslo_messaging._drivers.amqpdriver [-] AMQPListener connection timeout {{(pid\u003d101083) poll /opt/stack/data/venv/lib/python3.12/site-packages/oslo_messaging/_drivers/amqpdriver.py:437}}\n```\n\nI guess by adding \u0027oslo_messaging\u003dINFO in addition of oslo.messaging\u003dINFO\n\nBut also it is getting rid of debug information for rest API calls made via urllib3 and keystoneauth as:\n\n```\nJun 29 17:51:28.777815 np9d47585e9f7a4 watcher-decision-engine[101083]: DEBUG urllib3.connectionpool [None req-eeb71b19-30c2-499d-a3b3-adf8fd85fd0d None None] https://217.182.140.65:443 \"GET /compute/v2.1 HTTP/1.1\" 200 393 {{(pid\u003d101083) _make_request /opt/stack/data/venv/lib/python3.12/site-packages/urllib3/connectionpool.py:544}}\nJun 29 17:51:28.778888 np9d47585e9f7a4 watcher-decision-engine[101083]: DEBUG keystoneauth.session [None req-eeb71b19-30c2-499d-a3b3-adf8fd85fd0d None None] RESP: [200] Connection: close Content-Length: 393 Content-Type: application/json Date: Mon, 29 Jun 2026 17:51:28 GMT OpenStack-API-Version: compute 2.1 Server: Apache/2.4.58 (Ubuntu) Vary: OpenStack-API-Version,X-OpenStack-Nova-API-Version X-OpenStack-Nova-API-Version: 2.1 x-compute-request-id: req-1c0e775f-64a4-4308-a2c9-6e6bcc030e03 x-openstack-request-id: req-1c0e775f-64a4-4308-a2c9-6e6bcc030e03 {{(pid\u003d101083) _http_log_response /opt/stack/data/venv/lib/python3.12/site-packages/keystoneauth1/session.py:616}}\nJun 29 17:51:28.779288 np9d47585e9f7a4 watcher-decision-engine[101083]: DEBUG keystoneauth.session [None req-eeb71b19-30c2-499d-a3b3-adf8fd85fd0d None None] RESP BODY: {\"version\": {\"id\": \"v2.1\", \"status\": \"CURRENT\", \"version\": \"2.104\", \"min_version\": \"2.1\", \"updated\": \"2013-07-23T11:33:21Z\", \"links\": [{\"rel\": \"self\", \"href\": \"https://217.182.140.65/compute/v2.1/\"}, {\"rel\": \"describedby\", \"type\": \"text/html\", \"href\": \"http://docs.openstack.org/\"}], \"media-types\": [{\"base\": \"application/json\", \"type\": \"application/vnd.openstack.compute+json;version\u003d2.1\"}]}} {{(pid\u003d101083) _http_log_response /opt/stack/data/venv/lib/python3.12/site-packages/keystoneauth1/session.py:651}}\n```\n\nMaybe this was too noisy but I found useful in the past. Leaving the keystoneauth debug messages while removing the urllib3 may be a good solution as it\u0027s mostly duplicated information. For observabilityclient we have debug messages from the library, so no need to have the urllib3 ones. What others think about?","commit_id":"f7df4545c8b0231730fc5394731d1867c5b8645d"}],"watcher/common/service.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c9756f3580f51c44e231b9fe5bd840258bb9e273","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    gmr_opts.set_defaults(conf)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    config.parse_args(argv)"},{"line_number":409,"context_line":"    log_levels \u003d log.get_default_log_levels() + ["},{"line_number":410,"context_line":"        \u0027neutronclient\u003dWARN\u0027,"},{"line_number":411,"context_line":"        \u0027apscheduler\u003dWARN\u0027,"},{"line_number":412,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"48b623d1_3ab4866e","line":409,"updated":"2026-06-29 16:08:24.000000000","message":"Behavioral change: stevedore log level shifts from INFO (old watcher default) to WARNING (oslo.log default). The old _DEFAULT_LOG_LEVELS explicitly set stevedore\u003dINFO, but oslo.log\u0027s get_default_log_levels() returns stevedore\u003dWARN. This change is not documented in the commit message.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Watcher relies heavily on stevedore for plugin and strategy discovery. Reducing stevedore from INFO to WARNING will suppress plugin loading log messages that operators may use to diagnose strategy loading failures or missing plugin issues.\n\n**Suggestion**:\nIf stevedore INFO-level logging is still desired, add \u0027stevedore\u003dINFO\u0027 to the watcher-specific extension list alongside neutronclient and apscheduler. Alternatively, document in the commit message that stevedore is intentionally lowered to WARNING to align with the oslo.log global default.","commit_id":"881bc34e9bb30e6906add0fa9310c79a941de08c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c9756f3580f51c44e231b9fe5bd840258bb9e273","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    gmr_opts.set_defaults(conf)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    config.parse_args(argv)"},{"line_number":409,"context_line":"    log_levels \u003d log.get_default_log_levels() + ["},{"line_number":410,"context_line":"        \u0027neutronclient\u003dWARN\u0027,"},{"line_number":411,"context_line":"        \u0027apscheduler\u003dWARN\u0027,"},{"line_number":412,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b0c972b_fd365b3a","line":409,"updated":"2026-06-29 16:08:24.000000000","message":"Several log level entries from the old hardcoded list have no equivalent in oslo.log defaults and are silently dropped: requests\u003dWARN (oslo.log only covers requests.packages.urllib3 subpaths), eventlet.wsgi.server\u003dWARN, and amqplib\u003dWARN.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Adding these to the watcher-specific extension list preserves the original logging behavior for these libraries, preventing unexpected verbose output from requests or eventlet WSGI that could fill logs in production.\n\n**Recommendation**:\nConsider adding \u0027eventlet.wsgi.server\u003dWARN\u0027 and \u0027requests\u003dWARN\u0027 to the extension list if watcher services use eventlet WSGI or the requests library directly. The legacy amqp and qpid entries can safely remain removed as they are obsolete transport libraries.","commit_id":"881bc34e9bb30e6906add0fa9310c79a941de08c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c9756f3580f51c44e231b9fe5bd840258bb9e273","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        \u0027neutronclient\u003dWARN\u0027,"},{"line_number":411,"context_line":"        \u0027apscheduler\u003dWARN\u0027,"},{"line_number":412,"context_line":"    ]"},{"line_number":413,"context_line":"    cfg.set_defaults(_options.log_opts, log_levels)"},{"line_number":414,"context_line":"    config.set_lib_defaults()"},{"line_number":415,"context_line":"    log.setup(conf, \u0027python-watcher\u0027)"},{"line_number":416,"context_line":"    conf.log_opt_values(LOG, log.DEBUG)"}],"source_content_type":"text/x-python","patch_set":1,"id":"eeb21cc4_66bca568","line":413,"updated":"2026-06-29 16:08:24.000000000","message":"cfg.set_defaults(_options.log_opts, log_levels) passes log_levels as a bare positional argument. oslo.config set_defaults has signature set_defaults(opts, **kwargs) with one positional param, so this raises TypeError at runtime.\n\n**Severity**: CRITICAL | **Confidence**: 1.0\n\n**Risk**: All watcher services (API, decision-engine, applier) will crash with TypeError during prepare_service() at startup. No watcher service can boot until this is fixed.\n\n**Priority**: Immediate\n**Why This Matters**: prepare_service() is the entry point for every watcher service. This TypeError prevents the entire watcher deployment from starting, causing a complete service outage on upgrade or deployment. The old code correctly used default_log_levels\u003d as a keyword argument.\n\n**Recommendation**:\nChange the call to cfg.set_defaults(_options.log_opts, default_log_levels\u003dlog_levels). The keyword argument name must match the Opt dest name \u0027default_log_levels\u0027 defined in oslo_log._options.log_opts. This matches the pattern used by other OpenStack services (nova, cinder, neutron).","commit_id":"881bc34e9bb30e6906add0fa9310c79a941de08c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e3b9a369d1af41be3f5accd0fb911750319f3a8","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    gmr_opts.set_defaults(conf)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    config.parse_args(argv)"},{"line_number":409,"context_line":"    log_levels \u003d log.get_default_log_levels() + ["},{"line_number":410,"context_line":"        \u0027neutronclient\u003dWARN\u0027,"},{"line_number":411,"context_line":"        \u0027apscheduler\u003dWARN\u0027,"},{"line_number":412,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":2,"id":"79d66358_5bf8791e","line":409,"updated":"2026-06-30 03:13:38.000000000","message":"The change calls log.get_default_log_levels(), which was introduced in oslo.log 5.1.0, but requirements.txt still pins the lower bound to oslo.log\u003e\u003d3.37.0 and was not updated in this patch.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: In an environment where oslo.log between 3.37.0 and 5.1.0 is installed (satisfying the declared lower bound), prepare_service() raises AttributeError at startup, preventing the watcher service and applier/decision-engine processes from starting.\n\n**Priority**: Before merge\n**Why This Matters**: OpenStack global requirements lower bounds are treated as a compatibility contract. Introducing a dependency on a newer API without bumping the constraint breaks that contract and can cause hard failures in packaging or constrained-install scenarios.\n\n**Recommendation**:\nBump oslo.log to \u003e\u003d5.1.0 in requirements.txt in the same patch (or whichever release first shipped get_default_log_levels). Verify against the current global-requirements minimum and add a release note if the minimum was raised. This is the same coupling nova/neutron applied when they adopted get_default_log_levels().","commit_id":"f7df4545c8b0231730fc5394731d1867c5b8645d"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e3b9a369d1af41be3f5accd0fb911750319f3a8","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    gmr_opts.set_defaults(conf)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    config.parse_args(argv)"},{"line_number":409,"context_line":"    log_levels \u003d log.get_default_log_levels() + ["},{"line_number":410,"context_line":"        \u0027neutronclient\u003dWARN\u0027,"},{"line_number":411,"context_line":"        \u0027apscheduler\u003dWARN\u0027,"},{"line_number":412,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f6dd1d7_56ee7954","line":409,"updated":"2026-06-30 03:13:38.000000000","message":"The old _DEFAULT_LOG_LEVELS included \u0027qpid.messaging\u003dINFO\u0027, \u0027amqp\u003dWARN\u0027, \u0027amqplib\u003dWARN\u0027, and \u0027iso8601\u003dWARN\u0027. These are dropped, relying on oslo.log\u0027s current default set which no longer carries some of them (notably qpid).\n\n**Severity**: WARNING | **Confidence**: 0.7\n\n**Impact**: Deployments still emitting qpid/amqp/iso8601 logs will see those loggers fall back to the root level rather than the previously-pinned levels, which could change log volume (e.g. iso8601 at DEBUG instead of WARN). Operators relying on the old levels should be made aware of this intentional change.\n\n**Suggestion**:\nAdd a brief release note documenting that watcher now derives default_log_levels from oslo.log and that the previously hardcoded amqp/qpid/iso8601/requests levels are dropped in favor of oslo.log defaults, so operators can adjust if they relied on the old levels.","commit_id":"f7df4545c8b0231730fc5394731d1867c5b8645d"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"439be9471220773f995293606539ecc93bb9bb94","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    gmr_opts.set_defaults(conf)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    config.parse_args(argv)"},{"line_number":409,"context_line":"    log_levels \u003d log.get_default_log_levels() + ["},{"line_number":410,"context_line":"        \u0027neutronclient\u003dWARN\u0027,"},{"line_number":411,"context_line":"        \u0027apscheduler\u003dWARN\u0027,"},{"line_number":412,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":2,"id":"562fefe6_6e9e74fc","line":409,"in_reply_to":"79d66358_5bf8791e","updated":"2026-06-30 08:26:00.000000000","message":"I think this is wrong, it was introduced in 3.21.0. Method is there in 3.37.0:\n\n```\n\u003e\u003e\u003e version(\u0027oslo_log\u0027)\n\u00273.37.0\u0027\n\u003e\u003e\u003e log.get_default_log_levels()\n[\u0027amqp\u003dWARN\u0027, \u0027amqplib\u003dWARN\u0027, \u0027boto\u003dWARN\u0027, \u0027qpid\u003dWARN\u0027, \u0027sqlalchemy\u003dWARN\u0027, \u0027suds\u003dINFO\u0027, \u0027oslo.messaging\u003dINFO\u0027, \u0027oslo_messaging\u003dINFO\u0027, \u0027iso8601\u003dWARN\u0027, \u0027requests.packages.urllib3.connectionpool\u003dWARN\u0027, \u0027urllib3.connectionpool\u003dWARN\u0027, \u0027websocket\u003dWARN\u0027, \u0027requests.packages.urllib3.util.retry\u003dWARN\u0027, \u0027urllib3.util.retry\u003dWARN\u0027, \u0027keystonemiddleware\u003dWARN\u0027, \u0027routes.middleware\u003dWARN\u0027, \u0027stevedore\u003dWARN\u0027, \u0027taskflow\u003dWARN\u0027, \u0027keystoneauth\u003dWARN\u0027, \u0027oslo.cache\u003dINFO\u0027, \u0027dogpile.core.dogpile\u003dINFO\u0027]\n\u003e\u003e\u003e \n```","commit_id":"f7df4545c8b0231730fc5394731d1867c5b8645d"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9e3b9a369d1af41be3f5accd0fb911750319f3a8","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    config.parse_args(argv)"},{"line_number":409,"context_line":"    log_levels \u003d log.get_default_log_levels() + ["},{"line_number":410,"context_line":"        \u0027neutronclient\u003dWARN\u0027,"},{"line_number":411,"context_line":"        \u0027apscheduler\u003dWARN\u0027,"},{"line_number":412,"context_line":"    ]"},{"line_number":413,"context_line":"    cfg.set_defaults(_options.log_opts, default_log_levels\u003dlog_levels)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ac5693c0_3adadcd2","line":410,"updated":"2026-06-30 03:13:38.000000000","message":"The two retained watcher-specific filters (\u0027neutronclient\u003dWARN\u0027, \u0027apscheduler\u003dWARN\u0027) are appended as an inline list literal with no comment explaining why they diverge from oslo.log\u0027s defaults.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: A short comment clarifying that these two are watcher-specific overrides (neutronclient is chatty at INFO; apscheduler emits frequent scheduler ticks) makes the intent self-documenting and guards against a future cleanup that drops them by accident.\n\n**Recommendation**:\nAdd a one-line comment above the list, e.g. \u0027# Watcher-specific overrides on top of oslo.log defaults\u0027. Keep neutronclient and apscheduler since both are confirmed in active use (watcher/common/executor.py, scheduling.py, and neutronclient API calls).","commit_id":"f7df4545c8b0231730fc5394731d1867c5b8645d"}]}
