)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9cc78ae0c3ce755eb7f35507af8d0ff9cf86e21e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1e25f69f_15b360e2","updated":"2026-09-15 17:37:18.000000000","message":"recheck\n\nlets get teim-ci run again","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1ed4c514d8d2933226f790544977e54655767d76","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"de3fe4fc_f4c81ba4","updated":"2026-09-18 08:37:17.000000000","message":"Thanks Doug for getting this done!","commit_id":"4ab3720c750adb73b6dd197504da3707d040ba4b"}],"doc/source/admin/wsgi.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"74bd83d0de1c364c925d0518270597e997fe3045","unresolved":true,"context_lines":[{"line_number":25,"context_line":"implement an equivalent ``.wsgi`` script. See :doc:`apache-mod-wsgi` for a"},{"line_number":26,"context_line":"worked ``mod_wsgi`` example."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"DevStack deploys the API behind Apache using uwsgi_ via mod_proxy_uwsgi_."},{"line_number":29,"context_line":"Inspecting the configuration created there can provide some guidance on one"},{"line_number":30,"context_line":"option for managing the WSGI application. It is important to remember,"},{"line_number":31,"context_line":"however, that one of the major features of using WSGI is that there are many"}],"source_content_type":"text/x-rst","patch_set":7,"id":"d26ec5a0_52e8b58d","side":"PARENT","line":28,"updated":"2026-09-17 17:34:37.000000000","message":"is this removal really needed\n\ndevstack is still deploying the wsgi applciation using uwsgi correct and mod porxy uwsgi so we proably shoudl not remove this\n\nthat arcetere was not because of eventelt it was becasue we did nto want to rely on mod_wsgi sematics in the ci","commit_id":"d1d774b55f06dbf0a7484af127e1d3bed857e519"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fc177c0ab9077975255bb41bc239feed4faa3eb1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"implement an equivalent ``.wsgi`` script. See :doc:`apache-mod-wsgi` for a"},{"line_number":26,"context_line":"worked ``mod_wsgi`` example."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"DevStack deploys the API behind Apache using uwsgi_ via mod_proxy_uwsgi_."},{"line_number":29,"context_line":"Inspecting the configuration created there can provide some guidance on one"},{"line_number":30,"context_line":"option for managing the WSGI application. It is important to remember,"},{"line_number":31,"context_line":"however, that one of the major features of using WSGI is that there are many"}],"source_content_type":"text/x-rst","patch_set":7,"id":"732671e3_960a5164","side":"PARENT","line":28,"in_reply_to":"d26ec5a0_52e8b58d","updated":"2026-09-17 20:52:40.000000000","message":"It was removed by mistake, since I just included in previous commit. I will get it back","commit_id":"d1d774b55f06dbf0a7484af127e1d3bed857e519"}],"doc/source/conf.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"74bd83d0de1c364c925d0518270597e997fe3045","unresolved":true,"context_lines":[{"line_number":22,"context_line":"# type will be configured (EVENTLET). Documenting watcher.api pulls"},{"line_number":23,"context_line":"# watcher/api/__init__.py, which selects the THREADING backend and"},{"line_number":24,"context_line":"# would fail if the eventlet one was already cached."},{"line_number":25,"context_line":"helper.init_oslo_service_backend()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from watcher import objects  # noqa: E402"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dbead2c2_00398b1b","line":25,"updated":"2026-09-17 17:34:37.000000000","message":"do we really need to do this in the docs generation\n\nthe docs should not really be running anything so setting the service backend feels odd. do other services do this?","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fc177c0ab9077975255bb41bc239feed4faa3eb1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# type will be configured (EVENTLET). Documenting watcher.api pulls"},{"line_number":23,"context_line":"# watcher/api/__init__.py, which selects the THREADING backend and"},{"line_number":24,"context_line":"# would fail if the eventlet one was already cached."},{"line_number":25,"context_line":"helper.init_oslo_service_backend()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from watcher import objects  # noqa: E402"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"523a5b7d_096f5a1a","line":25,"in_reply_to":"dbead2c2_00398b1b","updated":"2026-09-17 20:52:40.000000000","message":"Here is how it fails without configuring it here first:\n\n1. conf.py runs the oslo_config.sphinxconfiggen/sphinxext machinery for the watcher namespace → watcher/conf/opts.py:65 imports every watcher.conf.* module → watcher/conf/plugins.py:20,22 pulls the applier/decision-engine loaders → oslo_messaging → oslo_messaging/server.py:28 imports oslo_service.service → backend latched to EVENTLET.\n2. Later, glossary.rst\u0027s watcher-term:: directives import watcher.api.controllers.v1.* → watcher/api/__init__.py:10 calls init_backend(THREADING) → BackendAlreadySelected: Backend already set to \u0027eventlet\u0027 (Exception raised)\n\nnow, by moving init_oslo_service_backend() to watcher/__init__.py will also remove this code from here.","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"}],"requirements.txt":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"74bd83d0de1c364c925d0518270597e997fe3045","unresolved":true,"context_lines":[{"line_number":3,"context_line":"# you find any incorrect lower bounds, let us know or propose a fix."},{"line_number":4,"context_line":"apscheduler\u003e\u003d3.5.1 # MIT License"},{"line_number":5,"context_line":"debtcollector\u003e\u003d1.2.0 # Apache-2.0"},{"line_number":6,"context_line":"eventlet\u003e\u003d0.27.0 # MIT"},{"line_number":7,"context_line":"jsonpatch\u003e\u003d1.21 # BSD"},{"line_number":8,"context_line":"keystoneauth1\u003e\u003d3.4.0 # Apache-2.0"},{"line_number":9,"context_line":"jsonschema\u003e\u003d3.2.0 # MIT"}],"source_content_type":"text/plain","patch_set":7,"id":"10bcd04e_a7f8e96c","side":"PARENT","line":6,"updated":"2026-09-17 17:34:37.000000000","message":":) +1 congrats","commit_id":"d1d774b55f06dbf0a7484af127e1d3bed857e519"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fc177c0ab9077975255bb41bc239feed4faa3eb1","unresolved":false,"context_lines":[{"line_number":3,"context_line":"# you find any incorrect lower bounds, let us know or propose a fix."},{"line_number":4,"context_line":"apscheduler\u003e\u003d3.5.1 # MIT License"},{"line_number":5,"context_line":"debtcollector\u003e\u003d1.2.0 # Apache-2.0"},{"line_number":6,"context_line":"eventlet\u003e\u003d0.27.0 # MIT"},{"line_number":7,"context_line":"jsonpatch\u003e\u003d1.21 # BSD"},{"line_number":8,"context_line":"keystoneauth1\u003e\u003d3.4.0 # Apache-2.0"},{"line_number":9,"context_line":"jsonschema\u003e\u003d3.2.0 # MIT"}],"source_content_type":"text/plain","patch_set":7,"id":"5aa0d771_8735ee11","side":"PARENT","line":6,"in_reply_to":"10bcd04e_a7f8e96c","updated":"2026-09-17 20:52:40.000000000","message":"\\o/","commit_id":"d1d774b55f06dbf0a7484af127e1d3bed857e519"}],"watcher/__init__.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a96295b5fe3254ab9bb190bf448c826b42c947b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4d66d659_06246765","line":27,"range":{"start_line":26,"start_character":1,"end_line":27,"end_character":1},"updated":"2026-09-18 11:56:57.000000000","message":"as an aside we need to repalce this\nthe pbr team has asked us to remove all run time depencies on pbr\n\nwe can use importlib medatadda to replace thie cleanly and backport it as a seperate patch but we shoudl check all our repos and do that uniformly\ni can find the example later but ya its jsut a cleanup we shoudl do this cycle.","commit_id":"4ab3720c750adb73b6dd197504da3707d040ba4b"}],"watcher/api/__init__.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":"14cc551eda04d32db0063df0f8a356c5a1d6112d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from watcher.common import oslo_service_helper as helper"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# NOTE(dviroel): the oslo service backend must be selected before"}],"source_content_type":"text/x-python","patch_set":7,"id":"8e4e53de_709a454c","line":1,"updated":"2026-09-15 18:10:46.000000000","message":"The new watcher/api/__init__.py package initializer added by this change starts directly with the oslo_service backend initialization import and carries no Apache License 2.0 header. Every other Python source file in the repository carries the header, including watcher/cmd/__init__.py which this same commit creates with the full header for an identical side-effectful package initializer.\n\n**Severity**: SUGGESTION | **Confidence**: 0.92\n\n**Impact**: The file\u0027s licensing terms are undeclared, which matters for license scanning and reuse tooling that key on headers, and the omission is inconsistent with the project\u0027s required file structure and with the sibling initializer added in the same commit. There is no runtime effect.\n\n**Recommendation**:\nPrepend the standard Apache 2.0 license header used by the rest of the codebase, e.g. copy the header block from watcher/cmd/__init__.py (lines 1-13) in this same commit, keeping the helper import as the first code statement.","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"74bd83d0de1c364c925d0518270597e997fe3045","unresolved":true,"context_lines":[{"line_number":7,"context_line":"# Note the API itself never instantiates a backend specific object,"},{"line_number":8,"context_line":"# so moving or dropping this call does not fail loudly, it just"},{"line_number":9,"context_line":"# leaves the process on the eventlet backend."},{"line_number":10,"context_line":"helper.init_oslo_service_backend()"}],"source_content_type":"text/x-python","patch_set":7,"id":"d3b488de_b77dcb7c","line":10,"updated":"2026-09-17 17:34:37.000000000","message":"i think we could just move this to the top level watcher/__init__.py now correct?","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fc177c0ab9077975255bb41bc239feed4faa3eb1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"# Note the API itself never instantiates a backend specific object,"},{"line_number":8,"context_line":"# so moving or dropping this call does not fail loudly, it just"},{"line_number":9,"context_line":"# leaves the process on the eventlet backend."},{"line_number":10,"context_line":"helper.init_oslo_service_backend()"}],"source_content_type":"text/x-python","patch_set":7,"id":"f7f54a5d_2e0ebdf8","line":10,"in_reply_to":"d3b488de_b77dcb7c","updated":"2026-09-17 20:52:40.000000000","message":"Done","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"}],"watcher/applier/workflow_engine/default.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"74bd83d0de1c364c925d0518270597e997fe3045","unresolved":true,"context_lines":[{"line_number":118,"context_line":"            LOG.info("},{"line_number":119,"context_line":"                \"Using Taskflow parallel engine when running \""},{"line_number":120,"context_line":"                \"in native threading mode.\""},{"line_number":121,"context_line":"            )"},{"line_number":122,"context_line":"            e \u003d engines.load("},{"line_number":123,"context_line":"                flow,"},{"line_number":124,"context_line":"                executor\u003d\"threaded\","}],"source_content_type":"text/x-python","patch_set":7,"id":"40110958_12306237","line":121,"updated":"2026-09-17 17:34:37.000000000","message":"i think we can remove the log now as well since there is only one option and it hardcoded","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fc177c0ab9077975255bb41bc239feed4faa3eb1","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            LOG.info("},{"line_number":119,"context_line":"                \"Using Taskflow parallel engine when running \""},{"line_number":120,"context_line":"                \"in native threading mode.\""},{"line_number":121,"context_line":"            )"},{"line_number":122,"context_line":"            e \u003d engines.load("},{"line_number":123,"context_line":"                flow,"},{"line_number":124,"context_line":"                executor\u003d\"threaded\","}],"source_content_type":"text/x-python","patch_set":7,"id":"4f4e40e6_1089e227","line":121,"in_reply_to":"40110958_12306237","updated":"2026-09-17 20:52:40.000000000","message":"Done","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"}],"watcher/cmd/__init__.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"74bd83d0de1c364c925d0518270597e997fe3045","unresolved":true,"context_lines":[{"line_number":17,"context_line":"# NOTE(dviroel): oslo service backend needs to be initialize"},{"line_number":18,"context_line":"# as soon as possible, before importing any oslo_service, otherwise"},{"line_number":19,"context_line":"# the default backend type will be configured (EVENTLET)."},{"line_number":20,"context_line":"helper.init_oslo_service_backend()"}],"source_content_type":"text/x-python","patch_set":7,"id":"d941a61e_5b6885a2","line":20,"updated":"2026-09-17 17:34:37.000000000","message":"see other note about moving this to watcher/__init__.py","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fc177c0ab9077975255bb41bc239feed4faa3eb1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# NOTE(dviroel): oslo service backend needs to be initialize"},{"line_number":18,"context_line":"# as soon as possible, before importing any oslo_service, otherwise"},{"line_number":19,"context_line":"# the default backend type will be configured (EVENTLET)."},{"line_number":20,"context_line":"helper.init_oslo_service_backend()"}],"source_content_type":"text/x-python","patch_set":7,"id":"665dbb1c_cb8966ae","line":20,"in_reply_to":"d941a61e_5b6885a2","updated":"2026-09-17 20:52:40.000000000","message":"Done","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"}],"watcher/common/executor.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":"ca41140c943538d52bc3bc940614d63ecffcbe12","unresolved":false,"context_lines":[{"line_number":24,"context_line":"CONF \u003d cfg.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_futurist_pool_executor(max_workers\u003d10):"},{"line_number":28,"context_line":"    \"\"\"Returns a futurist pool executor"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    :param max_workers: the maximum number of spawned threads"}],"source_content_type":"text/x-python","patch_set":9,"id":"00133d1a_424ebdd6","line":27,"updated":"2026-09-17 21:03:45.000000000","message":"This commit removes the eventlet branch from get_futurist_pool_executor so it now always returns futurist.ThreadPoolExecutor. The docstrings of its direct consumers were not updated and still claim GreenFuture types, which were only possible in the removed eventlet mode: DecisionEngineThreadPool.submit (:rtype futurist.GreenFuture), do_while_futures and its mutating variant (:type futures: list of futurist.GreenFuture) in watcher/decision_engine/threading.py, and _compute_node_future in watcher/decision_engine/model/collector/nova.py (:rtype future and :rtype future_instances as futurist.GreenFuture). After this change those futures can only be plain concurrent.futures.Future objects.\n\n**Severity**: SUGGESTION | **Confidence**: 0.85\n\n**Impact**: No runtime impact, but the developer-facing API documentation of the decision engine threadpool and the nova collector now misstates the returned types. Contributors extending these hot paths after the threading consolidation may believe eventlet green threads are still involved, contradicting the concurrency model this change establishes and the updated contributor documentation.\n\n**Recommendation**:\nIn this same change, update the five docstring references to futurist.GreenFuture in watcher/decision_engine/threading.py (lines 48, 66, 94) and watcher/decision_engine/model/collector/nova.py (lines 252, 254) to the actual type, e.g. concurrent.futures.Future (futurist.Future), keeping the in-code API docs consistent with the threading-only executor this commit introduces.","commit_id":"4ab3720c750adb73b6dd197504da3707d040ba4b"}],"watcher/common/oslo_service_helper.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"74bd83d0de1c364c925d0518270597e997fe3045","unresolved":true,"context_lines":[{"line_number":24,"context_line":"# EVENTLET."},{"line_number":25,"context_line":"def init_oslo_service_backend():"},{"line_number":26,"context_line":"    backend.init_backend(backend.BackendType.THREADING)"},{"line_number":27,"context_line":"    LOG.info(\"Service is starting with Threading based service backend.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"7d5afbfb_6476ba2e","line":27,"updated":"2026-09-17 17:34:37.000000000","message":"this can move to watcher/__init__.py was well","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fc177c0ab9077975255bb41bc239feed4faa3eb1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# EVENTLET."},{"line_number":25,"context_line":"def init_oslo_service_backend():"},{"line_number":26,"context_line":"    backend.init_backend(backend.BackendType.THREADING)"},{"line_number":27,"context_line":"    LOG.info(\"Service is starting with Threading based service backend.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"ef3745c3_a70d3dcd","line":27,"in_reply_to":"7d5afbfb_6476ba2e","updated":"2026-09-17 20:52:40.000000000","message":"Done","commit_id":"e43cdbb5b9cbab0109f2f6d5016deba77b204e02"}]}
