)]}'
{".zuul.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":270,"context_line":"    parent: watcher-sg-core-tempest-base"},{"line_number":271,"context_line":"    vars:"},{"line_number":272,"context_line":"      devstack_localrc:"},{"line_number":273,"context_line":"        \u0027SYSTEMD_ENV_VARS[\"watcher-decision-engine\"]\u0027: OS_WATCHER_DISABLE_EVENTLET_PATCHING\u003dtrue"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"- project:"},{"line_number":276,"context_line":"    queue: watcher"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"d0298e72_7fc3a63b","line":273,"updated":"2025-06-12 12:27:23.000000000","message":"+1 yep this is hte correct way to do this","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"aebcd7a5739e6e7c85feaeded36f340bd32e1d89","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    parent: watcher-sg-core-tempest-base"},{"line_number":271,"context_line":"    vars:"},{"line_number":272,"context_line":"      devstack_localrc:"},{"line_number":273,"context_line":"        \u0027SYSTEMD_ENV_VARS[\"watcher-decision-engine\"]\u0027: OS_WATCHER_DISABLE_EVENTLET_PATCHING\u003dtrue"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"- project:"},{"line_number":276,"context_line":"    queue: watcher"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"46aa6f6d_83ef2e37","line":273,"in_reply_to":"d0298e72_7fc3a63b","updated":"2025-07-11 18:01:33.000000000","message":"Acknowledged","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":true,"context_lines":[{"line_number":148,"context_line":"      - openstack/python-watcherclient"},{"line_number":149,"context_line":"      - openstack/watcher-tempest-plugin"},{"line_number":150,"context_line":"      - openstack/devstack-plugin-prometheus"},{"line_number":151,"context_line":"      - openstack/oslo.service"},{"line_number":152,"context_line":"    vars:"},{"line_number":153,"context_line":"      configure_swap_size: 8192"},{"line_number":154,"context_line":"      devstack_plugins:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7a3cdd4a_04b274c6","line":151,"updated":"2025-08-01 11:53:53.000000000","message":"so we nolonger need this as there is now an oslo release with threadign mode support","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":true,"context_lines":[{"line_number":148,"context_line":"      - openstack/python-watcherclient"},{"line_number":149,"context_line":"      - openstack/watcher-tempest-plugin"},{"line_number":150,"context_line":"      - openstack/devstack-plugin-prometheus"},{"line_number":151,"context_line":"      - openstack/oslo.service"},{"line_number":152,"context_line":"    vars:"},{"line_number":153,"context_line":"      configure_swap_size: 8192"},{"line_number":154,"context_line":"      devstack_plugins:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"b624d576_317eb03f","line":151,"in_reply_to":"7a3cdd4a_04b274c6","updated":"2025-08-01 19:54:10.000000000","message":"correct, we now have a release with threading and the follow up fixes. Can now be removedl thanks","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"923e9cf1910f3547bc567c9d2534c0a9853dbba8","unresolved":false,"context_lines":[{"line_number":148,"context_line":"      - openstack/python-watcherclient"},{"line_number":149,"context_line":"      - openstack/watcher-tempest-plugin"},{"line_number":150,"context_line":"      - openstack/devstack-plugin-prometheus"},{"line_number":151,"context_line":"      - openstack/oslo.service"},{"line_number":152,"context_line":"    vars:"},{"line_number":153,"context_line":"      configure_swap_size: 8192"},{"line_number":154,"context_line":"      devstack_plugins:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"063f19c7_1f48c36e","line":151,"in_reply_to":"b624d576_317eb03f","updated":"2025-08-05 19:53:19.000000000","message":"Done","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":true,"context_lines":[{"line_number":298,"context_line":"              - ^watcher/api/*"},{"line_number":299,"context_line":"        - watcher-tempest-functional-ipv6-only"},{"line_number":300,"context_line":"        - watcher-prometheus-integration"},{"line_number":301,"context_line":"        - watcher-prometheus-integration-threading"},{"line_number":302,"context_line":"    gate:"},{"line_number":303,"context_line":"      jobs:"},{"line_number":304,"context_line":"        - watcher-tempest-functional"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"82ae90ab_48399fd8","line":301,"range":{"start_line":301,"start_character":0,"end_line":301,"end_character":50},"updated":"2025-08-01 19:54:10.000000000","message":"Shoul we set this to non-voting, and discuss again on making it voting in the next cycle?","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d76a1d6b1e3e3cb197daf264ea15dd3a12b98e8","unresolved":true,"context_lines":[{"line_number":298,"context_line":"              - ^watcher/api/*"},{"line_number":299,"context_line":"        - watcher-tempest-functional-ipv6-only"},{"line_number":300,"context_line":"        - watcher-prometheus-integration"},{"line_number":301,"context_line":"        - watcher-prometheus-integration-threading"},{"line_number":302,"context_line":"    gate:"},{"line_number":303,"context_line":"      jobs:"},{"line_number":304,"context_line":"        - watcher-tempest-functional"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"eb5f6220_52fe7082","line":301,"range":{"start_line":301,"start_character":0,"end_line":301,"end_character":50},"in_reply_to":"82ae90ab_48399fd8","updated":"2025-08-01 22:22:03.000000000","message":"if we were closer to the start of the cycle i would not really have an concern about starting voting and making it non voting if it was unstable.\n\nim a little more conservative coming up to feature freeze but i think we are far enough out to try leaving this voting and just monitor it.\n\nwe can make it non voting pretty simply so if your happy with the stability im ok with this as is. if we start needing rechecks we can downgrade it.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"923e9cf1910f3547bc567c9d2534c0a9853dbba8","unresolved":false,"context_lines":[{"line_number":298,"context_line":"              - ^watcher/api/*"},{"line_number":299,"context_line":"        - watcher-tempest-functional-ipv6-only"},{"line_number":300,"context_line":"        - watcher-prometheus-integration"},{"line_number":301,"context_line":"        - watcher-prometheus-integration-threading"},{"line_number":302,"context_line":"    gate:"},{"line_number":303,"context_line":"      jobs:"},{"line_number":304,"context_line":"        - watcher-tempest-functional"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"32cdd010_19866f0f","line":301,"range":{"start_line":301,"start_character":0,"end_line":301,"end_character":50},"in_reply_to":"eb5f6220_52fe7082","updated":"2025-08-05 19:53:19.000000000","message":"agree, we can easily move to non-voting if needed","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4bb88f0e199eda743980486c2de6d29287457646","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"465a0ded_abcd691f","updated":"2025-06-12 19:13:57.000000000","message":"Tks Sean, I agree with all.. going to improve in the next PS.","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"9dbb3b439fc3efacd43a4e9a0e3436ea47884b24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"49fc0d0f_d49b2e68","updated":"2025-07-04 11:28:33.000000000","message":"recheck\n\nprevious failures are devstack related","commit_id":"5bcb1754968e5b134c7e2572418a47aea8c2a0f7"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a45a741483d088fa106b45a971494932eff095e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0e9e43d8_46699e94","updated":"2025-07-04 17:41:06.000000000","message":"recheck\n\ntest_execute_workload_balance_strategy_cpu test failed[1], unable to move instance to another host due to threshold. Lets rerun and see if is consistent.\n\n[1] https://612ec249c8533c7a9703-ef02a6c5e2cf8d78c9c91d8a83ee626c.ssl.cf2.rackcdn.com/openstack/1fc1fe1c884141a1ba2c836990fc1e1b/testr_results.html","commit_id":"403b178c7176b84452e024d217e79adb9ab49437"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5681eddd60d6627f328569ce61debcb14c6af427","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3efa92fa_58632f9a","updated":"2025-07-08 00:24:19.000000000","message":"recheck\n\ndepends-on tempest test updated","commit_id":"49404251a6570cf3a17e769db75015b91c1ea440"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d79b0949b4762ca7b740c303aa4118d048e628e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"046fc0d2_ff62c06d","updated":"2025-07-08 14:02:20.000000000","message":"recheck\n\ndepends-on tempest patch updated","commit_id":"4cec673772dead8c51c3c2e3ffd0cf1fdaf72c72"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"10c4820e_8f64a1ba","updated":"2025-08-01 11:53:53.000000000","message":"+1 for direction. -1 overall although most comments are minor.\n\nthe production code looks ok to me for the most part.\ni agree with declaring it as experimental but we have not formally deprecated eventlet in watcher or in openstack in general.\nservice cant deprecate it until we have the ability to run without it.\noslo jumpted the gun with there deprecations and  they shoudl actually fix that as a bug fix really but formally speaking eventlet is not deprecated in openstack in general.\n\ni think there is a good change that we can deprecate it next cycle based on the progress you have made adn we can remvoe it in 2026.2","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bb9c59cf_cf5077c2","updated":"2025-08-01 19:54:10.000000000","message":"Thanks Sean for your comments. I will provide a new ps with improvements as suggested. Some other discussions may continue and we can agree in an approach for them.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d0fda4829d07c5799aea89b39b1630610795e72d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5f3b2f5b_c756f16d","updated":"2025-08-01 01:02:05.000000000","message":"check experimental","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1cce052a3abed330a1c532a31ae835d8f1710f82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b4ceec8a_6f5445ff","updated":"2025-08-01 01:05:25.000000000","message":"check-rdo","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"4293f7c8920c4de7a4939eaa278705a55ce02b09","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"58749bc6_8d046d1c","updated":"2025-08-06 08:46:42.000000000","message":"LGTM","commit_id":"f879b10b05fdbd67ba2e5e4890fc0235403dd7d8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c0bdc056d0c8b5888f8a155cabaec6c5c7d2ab5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"ed1e8c47_1702d5c0","updated":"2025-08-05 20:33:02.000000000","message":"one minor nit but over all this looks much better to me","commit_id":"f879b10b05fdbd67ba2e5e4890fc0235403dd7d8"}],"doc/source/contributor/concurrency.rst":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"a657ba2fceb8d97e048c04863a3ae605b3474962","unresolved":true,"context_lines":[{"line_number":61,"context_line":"thread solution, Watcher services will be supporting both modes, with the usage"},{"line_number":62,"context_line":"of native threading mode initially classified as ``experimental``."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Evenlet has been the main concurrency library within the OpenStack community,"},{"line_number":65,"context_line":"but it is now being removed as it has become deprecated and is no longer a"},{"line_number":66,"context_line":"safe solution for most projects. While transitioning to a new native thread"},{"line_number":67,"context_line":"solution, Watcher services will support both modes, with the usage of the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"4008c6b4_aa7c33ff","line":64,"updated":"2025-07-15 14:01:59.000000000","message":"this paragraph is duplicated","commit_id":"35000a8f35aeedd8b02042138514332ed2a58852"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0747aa2125fe08b5c38468ad3c4062ecdf06136d","unresolved":true,"context_lines":[{"line_number":61,"context_line":"thread solution, Watcher services will be supporting both modes, with the usage"},{"line_number":62,"context_line":"of native threading mode initially classified as ``experimental``."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Evenlet has been the main concurrency library within the OpenStack community,"},{"line_number":65,"context_line":"but it is now being removed as it has become deprecated and is no longer a"},{"line_number":66,"context_line":"safe solution for most projects. While transitioning to a new native thread"},{"line_number":67,"context_line":"solution, Watcher services will support both modes, with the usage of the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"df6243e5_cf6856b2","line":64,"in_reply_to":"4008c6b4_aa7c33ff","updated":"2025-07-15 18:11:20.000000000","message":"oh tks, fixed.","commit_id":"35000a8f35aeedd8b02042138514332ed2a58852"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":false,"context_lines":[{"line_number":61,"context_line":"thread solution, Watcher services will be supporting both modes, with the usage"},{"line_number":62,"context_line":"of native threading mode initially classified as ``experimental``."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Evenlet has been the main concurrency library within the OpenStack community,"},{"line_number":65,"context_line":"but it is now being removed as it has become deprecated and is no longer a"},{"line_number":66,"context_line":"safe solution for most projects. While transitioning to a new native thread"},{"line_number":67,"context_line":"solution, Watcher services will support both modes, with the usage of the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"0b83d4f8_152306c5","line":64,"in_reply_to":"df6243e5_cf6856b2","updated":"2025-08-01 19:54:10.000000000","message":"Done","commit_id":"35000a8f35aeedd8b02042138514332ed2a58852"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":true,"context_lines":[{"line_number":55,"context_line":"Concurrency modes"},{"line_number":56,"context_line":"#################"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Evenlet has been the main concurrency library within the OpenStack community,"},{"line_number":59,"context_line":"but it is now being removed as it has become deprecated and is no longer a"},{"line_number":60,"context_line":"safe solution for most of the projects. While transitioning to a new native"},{"line_number":61,"context_line":"thread solution, Watcher services will be supporting both modes, with the usage"},{"line_number":62,"context_line":"of native threading mode initially classified as ``experimental``."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"178e6bb6_63dae269","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":39},"updated":"2025-08-01 11:53:53.000000000","message":"This not a saftey concern.\n\nthe removal is happening because eventlet depended on specific behaviour of cpython\nthat are begin altered as part fo the work to remove the gil, and since the core remainers fo rhte project did nto have time to continue maintaining it we are moving off ot to remove the unmaintained dependency and enable newer version fo python to be used.\n\n\n```suggestion\nEvenlet has been the main concurrency library within the OpenStack community\nfor the last 10 years since the removal of twisted.\nOver the last few years the maintenance of eventlet has decreased and the\nefforts to remove the GIL from python, pep 703, have fundamentally changed how\nconcurrency making eventlet no longer viable. While transitioning to a new native ...\n```","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":true,"context_lines":[{"line_number":55,"context_line":"Concurrency modes"},{"line_number":56,"context_line":"#################"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Evenlet has been the main concurrency library within the OpenStack community,"},{"line_number":59,"context_line":"but it is now being removed as it has become deprecated and is no longer a"},{"line_number":60,"context_line":"safe solution for most of the projects. While transitioning to a new native"},{"line_number":61,"context_line":"thread solution, Watcher services will be supporting both modes, with the usage"},{"line_number":62,"context_line":"of native threading mode initially classified as ``experimental``."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"2a899a8b_f3c188ff","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":39},"in_reply_to":"178e6bb6_63dae269","updated":"2025-08-01 19:54:10.000000000","message":"right, to call it deprecated was easy then explaining the real situation, I agree with your proposal here, going to update soon.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"923e9cf1910f3547bc567c9d2534c0a9853dbba8","unresolved":true,"context_lines":[{"line_number":55,"context_line":"Concurrency modes"},{"line_number":56,"context_line":"#################"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Evenlet has been the main concurrency library within the OpenStack community,"},{"line_number":59,"context_line":"but it is now being removed as it has become deprecated and is no longer a"},{"line_number":60,"context_line":"safe solution for most of the projects. While transitioning to a new native"},{"line_number":61,"context_line":"thread solution, Watcher services will be supporting both modes, with the usage"},{"line_number":62,"context_line":"of native threading mode initially classified as ``experimental``."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"6c8834b2_36df0925","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":39},"in_reply_to":"2a899a8b_f3c188ff","updated":"2025-08-05 19:53:19.000000000","message":"Doc updated, thanks!","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c0bdc056d0c8b5888f8a155cabaec6c5c7d2ab5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"Concurrency modes"},{"line_number":56,"context_line":"#################"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Evenlet has been the main concurrency library within the OpenStack community,"},{"line_number":59,"context_line":"but it is now being removed as it has become deprecated and is no longer a"},{"line_number":60,"context_line":"safe solution for most of the projects. While transitioning to a new native"},{"line_number":61,"context_line":"thread solution, Watcher services will be supporting both modes, with the usage"},{"line_number":62,"context_line":"of native threading mode initially classified as ``experimental``."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"0ae0bfc7_3ecb2cb5","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":39},"in_reply_to":"6c8834b2_36df0925","updated":"2025-08-05 20:33:02.000000000","message":"Acknowledged","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c0bdc056d0c8b5888f8a155cabaec6c5c7d2ab5","unresolved":true,"context_lines":[{"line_number":58,"context_line":"Evenlet has been the main concurrency library within the OpenStack community"},{"line_number":59,"context_line":"for the last 10 years since the removal of twisted. Over the last few years,"},{"line_number":60,"context_line":"the maintenance of eventlet has decreased and the efforts to remove the GIL"},{"line_number":61,"context_line":"from Python (PEP 703), have fundamentally changed how concurrency is making"},{"line_number":62,"context_line":"eventlet no longer viable. While transitioning to a new native thread"},{"line_number":63,"context_line":"solution, Watcher services will be supporting both modes, with the usage of"},{"line_number":64,"context_line":"native threading mode initially classified as ``experimental``."}],"source_content_type":"text/x-rst","patch_set":11,"id":"933232c9_181598e2","line":61,"range":{"start_line":61,"start_character":66,"end_line":61,"end_character":68},"updated":"2025-08-05 20:33:02.000000000","message":"nit: works\nor delete is and perhaps add a comma","commit_id":"f879b10b05fdbd67ba2e5e4890fc0235403dd7d8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"81087f816f7da876b62d907eb6c337404148a033","unresolved":true,"context_lines":[{"line_number":58,"context_line":"Evenlet has been the main concurrency library within the OpenStack community"},{"line_number":59,"context_line":"for the last 10 years since the removal of twisted. Over the last few years,"},{"line_number":60,"context_line":"the maintenance of eventlet has decreased and the efforts to remove the GIL"},{"line_number":61,"context_line":"from Python (PEP 703), have fundamentally changed how concurrency is making"},{"line_number":62,"context_line":"eventlet no longer viable. While transitioning to a new native thread"},{"line_number":63,"context_line":"solution, Watcher services will be supporting both modes, with the usage of"},{"line_number":64,"context_line":"native threading mode initially classified as ``experimental``."}],"source_content_type":"text/x-rst","patch_set":11,"id":"d31058af_a854395c","line":61,"range":{"start_line":61,"start_character":66,"end_line":61,"end_character":68},"in_reply_to":"933232c9_181598e2","updated":"2025-08-05 20:35:05.000000000","message":"i.e. \n```\nfrom Python (PEP 703), have fundamentally changed concurrency, making\n```\nor \n```suggestion\nfrom Python (PEP 703), have fundamentally changed how concurrency works, making\n```","commit_id":"f879b10b05fdbd67ba2e5e4890fc0235403dd7d8"}],"releasenotes/notes/decision-engine-threading-mode-26fc8066dcd499a2.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Decision Engine service now supports running with ``native threading``"},{"line_number":5,"context_line":"    mode enabled instead of of the deprecated Eventlet library."},{"line_number":6,"context_line":"    Note that the use of ``native threading`` is still ``experimental``,"},{"line_number":7,"context_line":"    and is disabled by default. It should not be used in production. To"},{"line_number":8,"context_line":"    switch from Evenlet to native threading mode, the environment variable"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"4bba04db_771985d3","line":5,"range":{"start_line":5,"start_character":35,"end_line":5,"end_character":45},"updated":"2025-08-01 11:53:53.000000000","message":"i would remove this.\n\nthere has not been a deprecation fo eventlet yet.\nfor watcher that wont happen until all of watcher can run with out it hopefully next cycle.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"923e9cf1910f3547bc567c9d2534c0a9853dbba8","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Decision Engine service now supports running with ``native threading``"},{"line_number":5,"context_line":"    mode enabled instead of of the deprecated Eventlet library."},{"line_number":6,"context_line":"    Note that the use of ``native threading`` is still ``experimental``,"},{"line_number":7,"context_line":"    and is disabled by default. It should not be used in production. To"},{"line_number":8,"context_line":"    switch from Evenlet to native threading mode, the environment variable"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"6252565b_851e3b0a","line":5,"range":{"start_line":5,"start_character":35,"end_line":5,"end_character":45},"in_reply_to":"0c338fa9_a3d5d180","updated":"2025-08-05 19:53:19.000000000","message":"Done","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Decision Engine service now supports running with ``native threading``"},{"line_number":5,"context_line":"    mode enabled instead of of the deprecated Eventlet library."},{"line_number":6,"context_line":"    Note that the use of ``native threading`` is still ``experimental``,"},{"line_number":7,"context_line":"    and is disabled by default. It should not be used in production. To"},{"line_number":8,"context_line":"    switch from Evenlet to native threading mode, the environment variable"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"0c338fa9_a3d5d180","line":5,"range":{"start_line":5,"start_character":35,"end_line":5,"end_character":45},"in_reply_to":"4bba04db_771985d3","updated":"2025-08-01 19:54:10.000000000","message":"yep, will fix that, thanks.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"}],"watcher/cmd/decisionengine.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":33,"context_line":"CONF \u003d conf.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def main():"},{"line_number":37,"context_line":"    watcher_service.prepare_service(sys.argv, CONF)"},{"line_number":38,"context_line":"    gmr.register_gmr_plugins()"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2c70d508_7c0d4cc1","line":36,"updated":"2025-06-12 12:27:23.000000000","message":"you shoudl be doing the oslo service backend intialistaion here.\n\nor in watcher.common.service","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4bb88f0e199eda743980486c2de6d29287457646","unresolved":true,"context_lines":[{"line_number":33,"context_line":"CONF \u003d conf.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def main():"},{"line_number":37,"context_line":"    watcher_service.prepare_service(sys.argv, CONF)"},{"line_number":38,"context_line":"    gmr.register_gmr_plugins()"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0a71fe5b_fdfc17f6","line":36,"in_reply_to":"2c70d508_7c0d4cc1","updated":"2025-06-12 19:13:57.000000000","message":"agree Sean, i will do that in the following patch sets","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"}],"watcher/cmd/eventlet/__init__.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":true,"context_lines":[{"line_number":33,"context_line":"# as soon as possible, before importing oslo service. If eventlet"},{"line_number":34,"context_line":"# patching is enabled, it should be patched before calling this"},{"line_number":35,"context_line":"# function"},{"line_number":36,"context_line":"helper.init_oslo_service_backend()"}],"source_content_type":"text/x-python","patch_set":10,"id":"d67255c5_3a4dd7ce","line":36,"updated":"2025-08-01 11:53:53.000000000","message":"we should likely avoid splitting the monkey patching and backed init.\n\nin nova we are doing the backend init in the eventlet.patch call.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d76a1d6b1e3e3cb197daf264ea15dd3a12b98e8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"# as soon as possible, before importing oslo service. If eventlet"},{"line_number":34,"context_line":"# patching is enabled, it should be patched before calling this"},{"line_number":35,"context_line":"# function"},{"line_number":36,"context_line":"helper.init_oslo_service_backend()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ca0612a_9b380ac8","line":36,"in_reply_to":"3e4f5356_322c75f8","updated":"2025-08-01 22:22:03.000000000","message":"ok we can keep this split we just need to be careful of the order","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":true,"context_lines":[{"line_number":33,"context_line":"# as soon as possible, before importing oslo service. If eventlet"},{"line_number":34,"context_line":"# patching is enabled, it should be patched before calling this"},{"line_number":35,"context_line":"# function"},{"line_number":36,"context_line":"helper.init_oslo_service_backend()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3e4f5356_322c75f8","line":36,"in_reply_to":"d67255c5_3a4dd7ce","updated":"2025-08-01 19:54:10.000000000","message":"I don\u0027t think we should. The `init_backend` just need to be called after eventlet patch, so we know which backend to initialize. Once we start removing eventlet code, we may still need to maintain the initalization of oslo_service backend, since EVENTLET is still the default backend there. We will still need to initialize the backend before importing anything from oslo_service, while it still have both backends, and since once one type is configured, it can\u0027t be modified afterwards.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"}],"watcher/common/executor.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d76a1d6b1e3e3cb197daf264ea15dd3a12b98e8","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        super(ThreadPoolExecutor, self).__init__(pool)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class APSchedulerPoolExecutorFactory:"},{"line_number":48,"context_line":"    \"\"\"Pool executor factory class"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    A simple factory class that returns a APScheduler pool executor"},{"line_number":51,"context_line":"    based on monkey patching flag enabled or not."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    @classmethod"},{"line_number":54,"context_line":"    def get_pool_executor(cls, max_workers\u003d10):"},{"line_number":55,"context_line":"        if eventlet_helper.is_patched():"},{"line_number":56,"context_line":"            return GreenThreadPoolExecutor(max_workers)"},{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            return ThreadPoolExecutor(max_workers)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class FuturistPoolExecutorFactory:"},{"line_number":62,"context_line":"    \"\"\"Futurist thread pool executor factory class"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    A simple factory class that returns a thread pool executor"},{"line_number":65,"context_line":"    based on monkey patching flag enabled  or not."},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def get_pool_executor(cls, max_workers\u003d10):"},{"line_number":69,"context_line":"        if eventlet_helper.is_patched():"},{"line_number":70,"context_line":"            return futurist.GreenThreadPoolExecutor(max_workers)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            return futurist.ThreadPoolExecutor(max_workers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"42ff20c1_4d41df28","line":72,"range":{"start_line":47,"start_character":0,"end_line":72,"end_character":59},"updated":"2025-08-01 22:22:03.000000000","message":"i feel like these clases only exist to namespace the get_pool_executor ckass mothods\n\nis there a reason not to do the folliwing\n\n```suggestion\ndef get_aps_pool_executor(max_workers\u003d10):\n    if eventlet_helper.is_patched():\n        return GreenThreadPoolExecutor(max_workers)\n    else:\n        return ThreadPoolExecutor(max_workers)\n\ndef get_futurist_executor(max_workers\u003d10):\n    if eventlet_helper.is_patched():\n        return futurist.GreenThreadPoolExecutor(max_workers)\n    else:\n        return futurist.ThreadPoolExecutor(max_workers)\n```\n\n\n\nis there a reason not to just make these module level method.\n\ninfact im tempeted to do this diffently delete all 4 classes and replace it with this.\n\n```\ndef get_futurist_executor(max_workers):\n    if eventlet_helper.is_patched():\n        return futurist.GreenThreadPoolExecutor(max_workers)\n    else:\n        return futurist.ThreadPoolExecutor(max_workers)\n        \nclass FuturistPoolExecutor(pool_executor.BasePoolExecutor):\n    \"\"\"pool executor for APScheduler wrapping futurist\n    \n    :param max_workers: the maximum number of spawned threads.\n    \"\"\"\n    def __init__(self, max_workers\u003d4):\n        pool \u003d get_futurist_executor(max_workers)\n        super(GreenThreadPoolExecutor, self).__init__(pool)\n\n```","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c0bdc056d0c8b5888f8a155cabaec6c5c7d2ab5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        super(ThreadPoolExecutor, self).__init__(pool)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class APSchedulerPoolExecutorFactory:"},{"line_number":48,"context_line":"    \"\"\"Pool executor factory class"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    A simple factory class that returns a APScheduler pool executor"},{"line_number":51,"context_line":"    based on monkey patching flag enabled or not."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    @classmethod"},{"line_number":54,"context_line":"    def get_pool_executor(cls, max_workers\u003d10):"},{"line_number":55,"context_line":"        if eventlet_helper.is_patched():"},{"line_number":56,"context_line":"            return GreenThreadPoolExecutor(max_workers)"},{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            return ThreadPoolExecutor(max_workers)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class FuturistPoolExecutorFactory:"},{"line_number":62,"context_line":"    \"\"\"Futurist thread pool executor factory class"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    A simple factory class that returns a thread pool executor"},{"line_number":65,"context_line":"    based on monkey patching flag enabled  or not."},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def get_pool_executor(cls, max_workers\u003d10):"},{"line_number":69,"context_line":"        if eventlet_helper.is_patched():"},{"line_number":70,"context_line":"            return futurist.GreenThreadPoolExecutor(max_workers)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            return futurist.ThreadPoolExecutor(max_workers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3849b04a_de7308c5","line":72,"range":{"start_line":47,"start_character":0,"end_line":72,"end_character":59},"in_reply_to":"0134cca6_fda98b6d","updated":"2025-08-05 20:33:02.000000000","message":"Done","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"923e9cf1910f3547bc567c9d2534c0a9853dbba8","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        super(ThreadPoolExecutor, self).__init__(pool)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class APSchedulerPoolExecutorFactory:"},{"line_number":48,"context_line":"    \"\"\"Pool executor factory class"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    A simple factory class that returns a APScheduler pool executor"},{"line_number":51,"context_line":"    based on monkey patching flag enabled or not."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    @classmethod"},{"line_number":54,"context_line":"    def get_pool_executor(cls, max_workers\u003d10):"},{"line_number":55,"context_line":"        if eventlet_helper.is_patched():"},{"line_number":56,"context_line":"            return GreenThreadPoolExecutor(max_workers)"},{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            return ThreadPoolExecutor(max_workers)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class FuturistPoolExecutorFactory:"},{"line_number":62,"context_line":"    \"\"\"Futurist thread pool executor factory class"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    A simple factory class that returns a thread pool executor"},{"line_number":65,"context_line":"    based on monkey patching flag enabled  or not."},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def get_pool_executor(cls, max_workers\u003d10):"},{"line_number":69,"context_line":"        if eventlet_helper.is_patched():"},{"line_number":70,"context_line":"            return futurist.GreenThreadPoolExecutor(max_workers)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            return futurist.ThreadPoolExecutor(max_workers)"}],"source_content_type":"text/x-python","patch_set":10,"id":"0134cca6_fda98b6d","line":72,"range":{"start_line":47,"start_character":0,"end_line":72,"end_character":59},"in_reply_to":"42ff20c1_4d41df28","updated":"2025-08-05 19:53:19.000000000","message":"Indeed they don\u0027t need and probably will not get anything else other then this single method. Only the APScheduler executor needs to be a class to inherit from base class.\nand yeah, looks better in this way, makes more sense to be a method due to the simplicity of their logic.\nUpdating in the next PS\nThanks for the suggestion!","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"}],"watcher/common/scheduling.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        super(GreenThreadPoolExecutor, self).__init__(pool)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class ThreadPoolExecutor(pool_executor.BasePoolExecutor):"},{"line_number":48,"context_line":"    \"\"\"Thread pool executor for ApScheduler based classes"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    An executor that runs jobs in a native thread pool."}],"source_content_type":"text/x-python","patch_set":1,"id":"d0b8b472_e7b7c0a0","line":47,"updated":"2025-06-12 12:27:23.000000000","message":"none of this feels approation to put in the secheduling module i woudl prefer if you created a new watcher.common.executor module and put all of the executor logic there","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"aebcd7a5739e6e7c85feaeded36f340bd32e1d89","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        super(GreenThreadPoolExecutor, self).__init__(pool)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class ThreadPoolExecutor(pool_executor.BasePoolExecutor):"},{"line_number":48,"context_line":"    \"\"\"Thread pool executor for ApScheduler based classes"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    An executor that runs jobs in a native thread pool."}],"source_content_type":"text/x-python","patch_set":1,"id":"223bea0d_c2f07c0d","line":47,"in_reply_to":"08372448_97127f55","updated":"2025-07-11 18:01:33.000000000","message":"Done","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4bb88f0e199eda743980486c2de6d29287457646","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        super(GreenThreadPoolExecutor, self).__init__(pool)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class ThreadPoolExecutor(pool_executor.BasePoolExecutor):"},{"line_number":48,"context_line":"    \"\"\"Thread pool executor for ApScheduler based classes"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    An executor that runs jobs in a native thread pool."}],"source_content_type":"text/x-python","patch_set":1,"id":"08372448_97127f55","line":47,"in_reply_to":"d0b8b472_e7b7c0a0","updated":"2025-06-12 19:13:57.000000000","message":"Yes, I\u0027m not happy with them here too. Still testing some approaches, but for sure will move to another place. Tks","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        # NOTE(dviroel): to make sure that we monkey patch when needed."},{"line_number":46,"context_line":"        # helper patch() now checks a environment variable to see if"},{"line_number":47,"context_line":"        # the service should or not be patched."},{"line_number":48,"context_line":"        eventlet_helper.patch()"},{"line_number":49,"context_line":"        super()._main_loop()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"aa530488_e77f9b09","line":48,"updated":"2025-08-01 11:53:53.000000000","message":"i think we can actully remove this entirly.\n\nthe should patch method was added to work aroudn an issue that was \n1 fixed partly in eventlet and partly via other fixes to how we were\nhandeling db conenctions.\n\ni would consier just removing this entirly although taht could be a seperate chagne.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c0bdc056d0c8b5888f8a155cabaec6c5c7d2ab5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # NOTE(dviroel): to make sure that we monkey patch when needed."},{"line_number":46,"context_line":"        # helper patch() now checks a environment variable to see if"},{"line_number":47,"context_line":"        # the service should or not be patched."},{"line_number":48,"context_line":"        eventlet_helper.patch()"},{"line_number":49,"context_line":"        super()._main_loop()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"922043db_76d933bc","line":48,"in_reply_to":"0114c0e7_22058656","updated":"2025-08-05 20:33:02.000000000","message":"Acknowledged","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d76a1d6b1e3e3cb197daf264ea15dd3a12b98e8","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        # NOTE(dviroel): to make sure that we monkey patch when needed."},{"line_number":46,"context_line":"        # helper patch() now checks a environment variable to see if"},{"line_number":47,"context_line":"        # the service should or not be patched."},{"line_number":48,"context_line":"        eventlet_helper.patch()"},{"line_number":49,"context_line":"        super()._main_loop()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"d68e914a_72bb3cc6","line":48,"in_reply_to":"22d8eefe_2c89f29e","updated":"2025-08-01 22:22:03.000000000","message":"let do it as a sperate patch. before or after is fine,\nwe may or may not want to backport that later but it seam to be stabel currently so its  up to you honestly.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        # NOTE(dviroel): to make sure that we monkey patch when needed."},{"line_number":46,"context_line":"        # helper patch() now checks a environment variable to see if"},{"line_number":47,"context_line":"        # the service should or not be patched."},{"line_number":48,"context_line":"        eventlet_helper.patch()"},{"line_number":49,"context_line":"        super()._main_loop()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"22d8eefe_2c89f29e","line":48,"in_reply_to":"aa530488_e77f9b09","updated":"2025-08-01 19:54:10.000000000","message":"Agree, I don\u0027t think that is needed anymore, I was almost removing it. Should we remove this before this `threading` change, or after?","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"923e9cf1910f3547bc567c9d2534c0a9853dbba8","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        # NOTE(dviroel): to make sure that we monkey patch when needed."},{"line_number":46,"context_line":"        # helper patch() now checks a environment variable to see if"},{"line_number":47,"context_line":"        # the service should or not be patched."},{"line_number":48,"context_line":"        eventlet_helper.patch()"},{"line_number":49,"context_line":"        super()._main_loop()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"0114c0e7_22058656","line":48,"in_reply_to":"d68e914a_72bb3cc6","updated":"2025-08-05 19:53:19.000000000","message":"ack, I will defer to a follow up due to the tests already made with this code as is.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"}],"watcher/eventlet.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":17,"context_line":"MONKEY_PATCHED \u003d False"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def is_patched():"},{"line_number":21,"context_line":"    return MONKEY_PATCHED"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"36a29f1f_fb313f5b","line":20,"updated":"2025-06-12 12:27:23.000000000","message":"this is the external interface to know if monkey patching is enabled.","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"aebcd7a5739e6e7c85feaeded36f340bd32e1d89","unresolved":false,"context_lines":[{"line_number":17,"context_line":"MONKEY_PATCHED \u003d False"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def is_patched():"},{"line_number":21,"context_line":"    return MONKEY_PATCHED"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0e67fa62_12934bd0","line":20,"in_reply_to":"36a29f1f_fb313f5b","updated":"2025-07-11 18:01:33.000000000","message":"Done","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    return MONKEY_PATCHED"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _monkey_patch():"},{"line_number":25,"context_line":"    if is_patched():"},{"line_number":26,"context_line":"        return False"},{"line_number":27,"context_line":"    # Anything imported here will not be monkey patched. It is"}],"source_content_type":"text/x-python","patch_set":1,"id":"e94ea7df_dc4f8254","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":17},"updated":"2025-06-12 12:27:23.000000000","message":"this is private and should not return anything.","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"aebcd7a5739e6e7c85feaeded36f340bd32e1d89","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    return MONKEY_PATCHED"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _monkey_patch():"},{"line_number":25,"context_line":"    if is_patched():"},{"line_number":26,"context_line":"        return False"},{"line_number":27,"context_line":"    # Anything imported here will not be monkey patched. It is"}],"source_content_type":"text/x-python","patch_set":1,"id":"19239888_328c57b5","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":17},"in_reply_to":"e94ea7df_dc4f8254","updated":"2025-07-11 18:01:33.000000000","message":"Done","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    return True"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def is_patching_enabled():"},{"line_number":38,"context_line":"    if (os.environ.get(\u0027OS_WATCHER_DISABLE_EVENTLET_PATCHING\u0027, \u0027\u0027).lower()"},{"line_number":39,"context_line":"            not in (\u00271\u0027, \u0027true\u0027, \u0027yes\u0027, \u0027y\u0027)):"},{"line_number":40,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"8819db3a_8e25dde1","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":23},"updated":"2025-06-12 12:27:23.000000000","message":"this shoudl be private  and not used out side this module.\n\n\n```suggestion\ndef _is_patching_enabled():\n```","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"aebcd7a5739e6e7c85feaeded36f340bd32e1d89","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    return True"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def is_patching_enabled():"},{"line_number":38,"context_line":"    if (os.environ.get(\u0027OS_WATCHER_DISABLE_EVENTLET_PATCHING\u0027, \u0027\u0027).lower()"},{"line_number":39,"context_line":"            not in (\u00271\u0027, \u0027true\u0027, \u0027yes\u0027, \u0027y\u0027)):"},{"line_number":40,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"df229e89_7ca59b9f","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":23},"in_reply_to":"8819db3a_8e25dde1","updated":"2025-07-11 18:01:33.000000000","message":"Done","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        # global MONKEY_PATCHED"},{"line_number":50,"context_line":"        # MONKEY_PATCHED \u003d True"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if _monkey_patch():"},{"line_number":53,"context_line":"            global MONKEY_PATCHED"},{"line_number":54,"context_line":"            MONKEY_PATCHED \u003d True"},{"line_number":55,"context_line":"            import oslo_service.backend as service"}],"source_content_type":"text/x-python","patch_set":1,"id":"9c32befa_dd1d9b4a","line":52,"range":{"start_line":52,"start_character":11,"end_line":52,"end_character":24},"updated":"2025-06-12 12:27:23.000000000","message":"_is_patching_enabled","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"aebcd7a5739e6e7c85feaeded36f340bd32e1d89","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # global MONKEY_PATCHED"},{"line_number":50,"context_line":"        # MONKEY_PATCHED \u003d True"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        if _monkey_patch():"},{"line_number":53,"context_line":"            global MONKEY_PATCHED"},{"line_number":54,"context_line":"            MONKEY_PATCHED \u003d True"},{"line_number":55,"context_line":"            import oslo_service.backend as service"}],"source_content_type":"text/x-python","patch_set":1,"id":"642babf9_4c0051d4","line":52,"range":{"start_line":52,"start_character":11,"end_line":52,"end_character":24},"in_reply_to":"9c32befa_dd1d9b4a","updated":"2025-07-11 18:01:33.000000000","message":"Done","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a74e227dedd0a2de6aa24d8ed6c569b43d55f67e","unresolved":true,"context_lines":[{"line_number":52,"context_line":"        if _monkey_patch():"},{"line_number":53,"context_line":"            global MONKEY_PATCHED"},{"line_number":54,"context_line":"            MONKEY_PATCHED \u003d True"},{"line_number":55,"context_line":"            import oslo_service.backend as service"},{"line_number":56,"context_line":"            service.init_backend(service.BackendType.EVENTLET)"},{"line_number":57,"context_line":"            from oslo_log import log as logging"},{"line_number":58,"context_line":"            LOG \u003d logging.getLogger(__name__)"},{"line_number":59,"context_line":"            LOG.warning("},{"line_number":60,"context_line":"                \"Service is starting with Eventlet based service backend\")"},{"line_number":61,"context_line":"    else:"},{"line_number":62,"context_line":"        # We asked not to monkey patch so we will run in native threading mode"},{"line_number":63,"context_line":"        import oslo_service.backend as service"}],"source_content_type":"text/x-python","patch_set":1,"id":"f58e139f_a243216b","line":60,"range":{"start_line":55,"start_character":11,"end_line":60,"end_character":74},"updated":"2025-06-12 12:27:23.000000000","message":"i dont think this really belongs here\n\nthis shoudl be doen in the cmd modules based on is_patched.\n\nrember that htis file will eventually be deleted and we should not need to move this logic when we do\n\nso this module shoudl only deal with monkey patching and reportign if we are pattched and nothign else.","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"aebcd7a5739e6e7c85feaeded36f340bd32e1d89","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if _monkey_patch():"},{"line_number":53,"context_line":"            global MONKEY_PATCHED"},{"line_number":54,"context_line":"            MONKEY_PATCHED \u003d True"},{"line_number":55,"context_line":"            import oslo_service.backend as service"},{"line_number":56,"context_line":"            service.init_backend(service.BackendType.EVENTLET)"},{"line_number":57,"context_line":"            from oslo_log import log as logging"},{"line_number":58,"context_line":"            LOG \u003d logging.getLogger(__name__)"},{"line_number":59,"context_line":"            LOG.warning("},{"line_number":60,"context_line":"                \"Service is starting with Eventlet based service backend\")"},{"line_number":61,"context_line":"    else:"},{"line_number":62,"context_line":"        # We asked not to monkey patch so we will run in native threading mode"},{"line_number":63,"context_line":"        import oslo_service.backend as service"}],"source_content_type":"text/x-python","patch_set":1,"id":"096b57e8_e199dfc2","line":60,"range":{"start_line":55,"start_character":11,"end_line":60,"end_character":74},"in_reply_to":"73e73e32_35dff0dc","updated":"2025-07-11 18:01:33.000000000","message":"Done","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4bb88f0e199eda743980486c2de6d29287457646","unresolved":true,"context_lines":[{"line_number":52,"context_line":"        if _monkey_patch():"},{"line_number":53,"context_line":"            global MONKEY_PATCHED"},{"line_number":54,"context_line":"            MONKEY_PATCHED \u003d True"},{"line_number":55,"context_line":"            import oslo_service.backend as service"},{"line_number":56,"context_line":"            service.init_backend(service.BackendType.EVENTLET)"},{"line_number":57,"context_line":"            from oslo_log import log as logging"},{"line_number":58,"context_line":"            LOG \u003d logging.getLogger(__name__)"},{"line_number":59,"context_line":"            LOG.warning("},{"line_number":60,"context_line":"                \"Service is starting with Eventlet based service backend\")"},{"line_number":61,"context_line":"    else:"},{"line_number":62,"context_line":"        # We asked not to monkey patch so we will run in native threading mode"},{"line_number":63,"context_line":"        import oslo_service.backend as service"}],"source_content_type":"text/x-python","patch_set":1,"id":"73e73e32_35dff0dc","line":60,"range":{"start_line":55,"start_character":11,"end_line":60,"end_character":74},"in_reply_to":"f58e139f_a243216b","updated":"2025-06-12 19:13:57.000000000","message":"correct, this evenlet file will be delete in a near future. It is here because I only copied from one of the nova\u0027s patch, but the idea is to move to another module. I will update all in on if the next PSs. Still try to get decision engine to work...","commit_id":"a24adde6429535263f67436c6ca7a431efaa8abc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":true,"context_lines":[{"line_number":43,"context_line":"    # NOTE(dviroel): monkey_patch when called, even if is already patched."},{"line_number":44,"context_line":"    # Ignore if the control flag is disabling patching"},{"line_number":45,"context_line":"    if _is_patching_enabled():"},{"line_number":46,"context_line":"        _monkey_patch()"}],"source_content_type":"text/x-python","patch_set":10,"id":"63d0fe49_e729f787","line":46,"updated":"2025-08-01 11:53:53.000000000","message":"i would move the backend init here","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d76a1d6b1e3e3cb197daf264ea15dd3a12b98e8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    # NOTE(dviroel): monkey_patch when called, even if is already patched."},{"line_number":44,"context_line":"    # Ignore if the control flag is disabling patching"},{"line_number":45,"context_line":"    if _is_patching_enabled():"},{"line_number":46,"context_line":"        _monkey_patch()"}],"source_content_type":"text/x-python","patch_set":10,"id":"8a228240_0990383e","line":46,"in_reply_to":"63d0fe49_e729f787","updated":"2025-08-01 22:22:03.000000000","message":"we agreed to keep it as it is.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"}],"watcher/tests/common/test_executor.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"925549a38368c903f038156b80efa3bb6f9e8957","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestAPSchedulerExecutors(base.TestCase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @mock.patch.object(pool_executor.BasePoolExecutor, \u0027__init__\u0027,"},{"line_number":28,"context_line":"                       return_value\u003dNone)"},{"line_number":29,"context_line":"    @mock.patch.object(futurist.GreenThreadPoolExecutor, \u0027__init__\u0027,"},{"line_number":30,"context_line":"                       return_value\u003dNone)"},{"line_number":31,"context_line":"    def test_green_thread_pool_executor(self,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1454b0ef_a89a9a71","line":28,"range":{"start_line":27,"start_character":3,"end_line":28,"end_character":41},"updated":"2025-08-01 11:53:53.000000000","message":"mocking init does not prevent constucitng the object it will mean in the test\nanythign that inherits form BasePoolExecutor will be constucting, have its init run and then teh parent will not fully init.\n\nthis  does nto really fell like a correc tthing to do and looking at the test ist not really testing thing properly IMO\n\nyou shoudl not really be testing the internalls like this i.e. that GreenThreadPoolExecutor calls its parent with the expected workers.\n\nin unit test we shoudl not eb asserting the internal behavior of apscheduler or futureist.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5a13694a54b25f4c37eb9955699305fba045931f","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestAPSchedulerExecutors(base.TestCase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @mock.patch.object(pool_executor.BasePoolExecutor, \u0027__init__\u0027,"},{"line_number":28,"context_line":"                       return_value\u003dNone)"},{"line_number":29,"context_line":"    @mock.patch.object(futurist.GreenThreadPoolExecutor, \u0027__init__\u0027,"},{"line_number":30,"context_line":"                       return_value\u003dNone)"},{"line_number":31,"context_line":"    def test_green_thread_pool_executor(self,"}],"source_content_type":"text/x-python","patch_set":10,"id":"20ddc555_dbd726d3","line":28,"range":{"start_line":27,"start_character":3,"end_line":28,"end_character":41},"in_reply_to":"08b72c38_5ceec227","updated":"2025-08-05 19:57:53.000000000","message":"Updated based on common/executor.py changes. With that I am just testing the method `get_futurist_pool_executor` which is also used in the APSchedulerThreadPoolExecutor class, so the logic is already validated.\nThanks for the inputs!","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e7afd53a9595024adc32bf2d09f241bef1d5a739","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestAPSchedulerExecutors(base.TestCase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @mock.patch.object(pool_executor.BasePoolExecutor, \u0027__init__\u0027,"},{"line_number":28,"context_line":"                       return_value\u003dNone)"},{"line_number":29,"context_line":"    @mock.patch.object(futurist.GreenThreadPoolExecutor, \u0027__init__\u0027,"},{"line_number":30,"context_line":"                       return_value\u003dNone)"},{"line_number":31,"context_line":"    def test_green_thread_pool_executor(self,"}],"source_content_type":"text/x-python","patch_set":10,"id":"930d5fea_d7ce5949","line":28,"range":{"start_line":27,"start_character":3,"end_line":28,"end_character":41},"in_reply_to":"1454b0ef_a89a9a71","updated":"2025-08-01 19:54:10.000000000","message":"yeah right, only mocking the init will not prevent from constructing the object, it was just helping in passing the test.\nI can mock the entire class here, and continue testing that watcher\u0027s `GreenThreadPoolExecutor` is actually instantiating a `futurist.GreenThreadPoolExecutor` executor. That\u0027s the only thing that I can test here, which doesn\u0027t have too much value, it is only for coverage really.\nShoud we drop all tests here? since the entire test_executor is only about factory classes?\nThe idea was not to test any internal behavior of apscheduler or futurist, and the assert is really for what watcher\u0027s `GreenThreadPoolExecutor` class is calling at its init method.","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c0bdc056d0c8b5888f8a155cabaec6c5c7d2ab5","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestAPSchedulerExecutors(base.TestCase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @mock.patch.object(pool_executor.BasePoolExecutor, \u0027__init__\u0027,"},{"line_number":28,"context_line":"                       return_value\u003dNone)"},{"line_number":29,"context_line":"    @mock.patch.object(futurist.GreenThreadPoolExecutor, \u0027__init__\u0027,"},{"line_number":30,"context_line":"                       return_value\u003dNone)"},{"line_number":31,"context_line":"    def test_green_thread_pool_executor(self,"}],"source_content_type":"text/x-python","patch_set":10,"id":"4fdda898_5931f355","line":28,"range":{"start_line":27,"start_character":3,"end_line":28,"end_character":41},"in_reply_to":"20ddc555_dbd726d3","updated":"2025-08-05 20:33:02.000000000","message":"Done","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d76a1d6b1e3e3cb197daf264ea15dd3a12b98e8","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestAPSchedulerExecutors(base.TestCase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @mock.patch.object(pool_executor.BasePoolExecutor, \u0027__init__\u0027,"},{"line_number":28,"context_line":"                       return_value\u003dNone)"},{"line_number":29,"context_line":"    @mock.patch.object(futurist.GreenThreadPoolExecutor, \u0027__init__\u0027,"},{"line_number":30,"context_line":"                       return_value\u003dNone)"},{"line_number":31,"context_line":"    def test_green_thread_pool_executor(self,"}],"source_content_type":"text/x-python","patch_set":10,"id":"08b72c38_5ceec227","line":28,"range":{"start_line":27,"start_character":3,"end_line":28,"end_character":41},"in_reply_to":"930d5fea_d7ce5949","updated":"2025-08-01 22:22:03.000000000","message":"ya im not sure.\n\nim not a fan of 100% test coverage just for 100% test coverage.\n\nim not going to block on this either way so use your own judgement\n\nif you want to keep this for the minimal coverage we get that ok.\n\nim not sure its adding much so im fine with removing it but its not required.\n\ni think i woudl personlaly jsut focus on testing get_pool_executor","commit_id":"33b1e847e85564ae280c1b7f520f05a9c06abaef"}]}
