)]}'
{".zuul.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":true,"context_lines":[{"line_number":268,"context_line":"          NOVA_VNC_ENABLED: true"},{"line_number":269,"context_line":"          NOVA_SPICE_ENABLED: true"},{"line_number":270,"context_line":"          NOVNC_FROM_PACKAGE: false"},{"line_number":271,"context_line":"          \u0027SYSTEMD_ENV_VARS[\"n-cpu\"]\u0027: OS_NOVA_DISABLE_EVENTLET_PATCHING\u003dfalse"},{"line_number":272,"context_line":"        devstack_services:"},{"line_number":273,"context_line":"          # Disable OVN services"},{"line_number":274,"context_line":"          br-ex-tcpdump: false"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9ad776fa_e0b1cda4","line":271,"updated":"2026-06-18 12:10:30.000000000","message":"do we still need this?","commit_id":"68c37a985ba75459e53ad050352d276ac24af041"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a866f0117f507f37d9336f48dfa6243e6141722b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b8cf5356_2e1feddb","updated":"2026-06-17 15:16:39.000000000","message":"Nice, if this works then we are on track.\n\nLets update our docs https://docs.openstack.org/nova/latest/admin/concurrency.html and add a reno","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cbf653d8_2a7b62d0","updated":"2026-06-18 12:10:30.000000000","message":"recheck nova-next timeout\n\nAnd I have a couple of requests inline.","commit_id":"68c37a985ba75459e53ad050352d276ac24af041"}],"nova/conf/base.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a866f0117f507f37d9336f48dfa6243e6141722b","unresolved":true,"context_lines":[{"line_number":93,"context_line":"            (\u0027auto\u0027, \u0027Use the per-binary default concurrency backend. \u0027"},{"line_number":94,"context_line":"                    \u0027nova-compute and nova-conductor default to native \u0027"},{"line_number":95,"context_line":"                    \u0027threading; all other Nova services default to eventlet. \u0027"},{"line_number":96,"context_line":"                    \u0027This is the same as leaving the option unset.\u0027),"},{"line_number":97,"context_line":"            (\u0027threading\u0027, \u0027Start the service with native threading. \u0027"},{"line_number":98,"context_line":"                        \u0027Eventlet monkey patching is not applied.\u0027),"},{"line_number":99,"context_line":"            (\u0027eventlet\u0027, \u0027Start the service with eventlet coroutine-based \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"acdf99e5_bda25280","line":96,"updated":"2026-06-17 15:16:39.000000000","message":"I think we the option text is incorrect. We are defaulting everything to threading on master except the novnc and CLI entry points.","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"a34e1e5532d1aac2c8bccd00e7deb94d4c2d586b","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            (\u0027auto\u0027, \u0027Use the per-binary default concurrency backend. \u0027"},{"line_number":94,"context_line":"                    \u0027nova-compute and nova-conductor default to native \u0027"},{"line_number":95,"context_line":"                    \u0027threading; all other Nova services default to eventlet. \u0027"},{"line_number":96,"context_line":"                    \u0027This is the same as leaving the option unset.\u0027),"},{"line_number":97,"context_line":"            (\u0027threading\u0027, \u0027Start the service with native threading. \u0027"},{"line_number":98,"context_line":"                        \u0027Eventlet monkey patching is not applied.\u0027),"},{"line_number":99,"context_line":"            (\u0027eventlet\u0027, \u0027Start the service with eventlet coroutine-based \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a774ff6_b6dac19d","line":96,"in_reply_to":"acdf99e5_bda25280","updated":"2026-06-18 10:41:10.000000000","message":"Done","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a866f0117f507f37d9336f48dfa6243e6141722b","unresolved":true,"context_lines":[{"line_number":113,"context_line":"  When set to ``auto``, each Nova service binary applies its own built-in"},{"line_number":114,"context_line":"  default: nova-compute and nova-conductor use native threading; all other"},{"line_number":115,"context_line":"  services use eventlet. Setting an explicit value overrides that per-binary"},{"line_number":116,"context_line":"  default for every service that reads this config file."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"  The environment variable ``OS_NOVA_DISABLE_EVENTLET_PATCHING`` takes"},{"line_number":119,"context_line":"  precedence over this option when both are set."}],"source_content_type":"text/x-python","patch_set":1,"id":"83a598ca_680af18c","line":116,"updated":"2026-06-17 15:16:39.000000000","message":"ditto. Make sure we are synced with https://docs.openstack.org/nova/latest/admin/concurrency.html\n\nOr even link to this doc","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"a34e1e5532d1aac2c8bccd00e7deb94d4c2d586b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"  When set to ``auto``, each Nova service binary applies its own built-in"},{"line_number":114,"context_line":"  default: nova-compute and nova-conductor use native threading; all other"},{"line_number":115,"context_line":"  services use eventlet. Setting an explicit value overrides that per-binary"},{"line_number":116,"context_line":"  default for every service that reads this config file."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"  The environment variable ``OS_NOVA_DISABLE_EVENTLET_PATCHING`` takes"},{"line_number":119,"context_line":"  precedence over this option when both are set."}],"source_content_type":"text/x-python","patch_set":1,"id":"532a5be0_ed17b299","line":116,"in_reply_to":"83a598ca_680af18c","updated":"2026-06-18 10:41:10.000000000","message":"Done","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fe4dc7ea834c9d9979ff4d083f5b87bb2a2108fb","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  * ``[DEFAULT]/default_green_pool_size`` (only used in eventlet mode)"},{"line_number":130,"context_line":"  * ``[DEFAULT]/default_thread_pool_size`` (only used in native threading mode)"},{"line_number":131,"context_line":"  * ``[DEFAULT]/cell_worker_thread_pool_size`` (only used in native threading mode)"},{"line_number":132,"context_line":"  \"\"\"),"},{"line_number":133,"context_line":"    cfg.IntOpt("},{"line_number":134,"context_line":"        \u0027default_thread_pool_size\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e33a8209_1a379b66","line":131,"updated":"2026-06-17 17:33:10.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":true,"context_lines":[{"line_number":91,"context_line":"        default\u003d\u0027auto\u0027,"},{"line_number":92,"context_line":"        choices\u003d["},{"line_number":93,"context_line":"            (\u0027auto\u0027, \u0027Use the per-binary deployment default. On Nova master \u0027"},{"line_number":94,"context_line":"                    \u0027all services default to native threading except the \u0027"},{"line_number":95,"context_line":"                    \u0027novnc/serial/spice console proxy services and CLI entry \u0027"},{"line_number":96,"context_line":"                    \u0027points (nova-manage, nova-policy, nova-status). \u0027"},{"line_number":97,"context_line":"                    \u0027This is the same as leaving the option unset.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9743e177_27535303","line":94,"updated":"2026-06-18 12:10:30.000000000","message":"nit: it is a pretty strange hanging indentation. If you want the handing indent then I suggest to align the opening \u0027 to the same clumn","commit_id":"68c37a985ba75459e53ad050352d276ac24af041"}],"nova/monkey_patch.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a866f0117f507f37d9336f48dfa6243e6141722b","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def _get_concurrency_from_config():"},{"line_number":27,"context_line":"    import sys"},{"line_number":28,"context_line":"    from oslo_config.cfg import find_config_files, ConfigParser"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Pre-scan argv for --config-file (avoids reimplementing oslo\u0027s search)"},{"line_number":31,"context_line":"    config_files \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"55d68638_ca2f88ca","line":28,"updated":"2026-06-17 15:16:39.000000000","message":"hm if we can import this without issue (as it does not force backend selection) Then I think we migth be able to simplify the below to something like (not tested):\n\n```\nconf \u003d cfg.ConfigOpts() #\u003c- create a local conf object, keep the global CONF object intact so that can be initialized as normal later by the service. Or if that is pulling in too much then we can just pass our single config opt definition here \nconf.register_opts(\u003cthe config option definitions\u003e) #\u003c- we might be able to just use the existing nova.conf definitions here\nconf(sys.argv[1:])  #\u003c- this will do the CLI parsing automatically for us afaik\nreturn conf.concurrency_backend \u003c- access conf options normally\n```","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fe4dc7ea834c9d9979ff4d083f5b87bb2a2108fb","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def _get_concurrency_from_config():"},{"line_number":27,"context_line":"    import sys"},{"line_number":28,"context_line":"    from oslo_config.cfg import find_config_files, ConfigParser"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Pre-scan argv for --config-file (avoids reimplementing oslo\u0027s search)"},{"line_number":31,"context_line":"    config_files \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"55c42fe6_fee5bab3","line":28,"updated":"2026-06-17 17:33:10.000000000","message":"pep8: H301: one import per line","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def _get_concurrency_from_config():"},{"line_number":27,"context_line":"    import sys"},{"line_number":28,"context_line":"    from oslo_config.cfg import find_config_files, ConfigParser"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Pre-scan argv for --config-file (avoids reimplementing oslo\u0027s search)"},{"line_number":31,"context_line":"    config_files \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6dfca2_13422698","line":28,"in_reply_to":"55d68638_ca2f88ca","updated":"2026-06-18 12:10:30.000000000","message":"Done","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a866f0117f507f37d9336f48dfa6243e6141722b","unresolved":true,"context_lines":[{"line_number":123,"context_line":"            \"the backend can only be \u0027eventlet\u0027 or \u0027threading\u0027\")"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    env \u003d os.environ.get(\u0027OS_NOVA_DISABLE_EVENTLET_PATCHING\u0027, \u0027\u0027).lower()"},{"line_number":126,"context_line":"    if env \u003d\u003d \u0027\u0027:"},{"line_number":127,"context_line":"        cfg_val \u003d _get_concurrency_from_config()"},{"line_number":128,"context_line":"        if cfg_val \u003d\u003d \u0027threading\u0027:"},{"line_number":129,"context_line":"            should_patch \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"d4f41444_8148a5fb","line":126,"updated":"2026-06-17 15:16:39.000000000","message":"OK, so if the ENV is specified then that wins. I agree.","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            \"the backend can only be \u0027eventlet\u0027 or \u0027threading\u0027\")"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    env \u003d os.environ.get(\u0027OS_NOVA_DISABLE_EVENTLET_PATCHING\u0027, \u0027\u0027).lower()"},{"line_number":126,"context_line":"    if env \u003d\u003d \u0027\u0027:"},{"line_number":127,"context_line":"        cfg_val \u003d _get_concurrency_from_config()"},{"line_number":128,"context_line":"        if cfg_val \u003d\u003d \u0027threading\u0027:"},{"line_number":129,"context_line":"            should_patch \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"2da00a27_58bc9eab","line":126,"in_reply_to":"d4f41444_8148a5fb","updated":"2026-06-18 12:10:30.000000000","message":"Done","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fe4dc7ea834c9d9979ff4d083f5b87bb2a2108fb","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            should_patch \u003d False"},{"line_number":130,"context_line":"        elif cfg_val \u003d\u003d \u0027eventlet\u0027:"},{"line_number":131,"context_line":"            should_patch \u003d True"},{"line_number":132,"context_line":"        else:  # \u0027auto\u0027, None, or unrecognised — fall through to per-binary default"},{"line_number":133,"context_line":"            should_patch \u003d (backend \u003d\u003d \u0027eventlet\u0027)"},{"line_number":134,"context_line":"    elif env in (\u00271\u0027, \u0027true\u0027, \u0027yes\u0027):"},{"line_number":135,"context_line":"        should_patch \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"fd44116c_c998a105","line":132,"updated":"2026-06-17 17:33:10.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a866f0117f507f37d9336f48dfa6243e6141722b","unresolved":true,"context_lines":[{"line_number":129,"context_line":"            should_patch \u003d False"},{"line_number":130,"context_line":"        elif cfg_val \u003d\u003d \u0027eventlet\u0027:"},{"line_number":131,"context_line":"            should_patch \u003d True"},{"line_number":132,"context_line":"        else:  # \u0027auto\u0027, None, or unrecognised — fall through to per-binary default"},{"line_number":133,"context_line":"            should_patch \u003d (backend \u003d\u003d \u0027eventlet\u0027)"},{"line_number":134,"context_line":"    elif env in (\u00271\u0027, \u0027true\u0027, \u0027yes\u0027):"},{"line_number":135,"context_line":"        should_patch \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"8ad89970_15ccb945","line":132,"updated":"2026-06-17 15:16:39.000000000","message":"yepp this should be or \"deployment default\" I.e. if you just deploy openstack then it should be the per binary hard coded default that is applied automatically and the ENV and config is there only to \"override\" if shit happens.","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"a34e1e5532d1aac2c8bccd00e7deb94d4c2d586b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            should_patch \u003d False"},{"line_number":130,"context_line":"        elif cfg_val \u003d\u003d \u0027eventlet\u0027:"},{"line_number":131,"context_line":"            should_patch \u003d True"},{"line_number":132,"context_line":"        else:  # \u0027auto\u0027, None, or unrecognised — fall through to per-binary default"},{"line_number":133,"context_line":"            should_patch \u003d (backend \u003d\u003d \u0027eventlet\u0027)"},{"line_number":134,"context_line":"    elif env in (\u00271\u0027, \u0027true\u0027, \u0027yes\u0027):"},{"line_number":135,"context_line":"        should_patch \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"7b6058ed_b9a2d3fd","line":132,"in_reply_to":"8ad89970_15ccb945","updated":"2026-06-18 10:41:10.000000000","message":"Done","commit_id":"f0c3d0585a1c4ebc2f8b9eababbf080845864fac"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"27b5cf7d79e811fd5c47282876faa12eb7823872","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def _get_concurrency_from_config():"},{"line_number":28,"context_line":"    from oslo_config import cfg"},{"line_number":29,"context_line":"    from nova.conf import base as base_conf"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    conf \u003d cfg.ConfigOpts()"},{"line_number":32,"context_line":"    conf.register_opts(base_conf.base_options)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bdf496ec_ce516cce","line":29,"updated":"2026-06-18 12:42:29.000000000","message":"pep8: H306: imports not in alphabetical order (oslo_config.cfg, nova.conf.base)","commit_id":"68c37a985ba75459e53ad050352d276ac24af041"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    from nova.conf import base as base_conf"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    conf \u003d cfg.ConfigOpts()"},{"line_number":32,"context_line":"    conf.register_opts(base_conf.base_options)"},{"line_number":33,"context_line":"    try:"},{"line_number":34,"context_line":"        conf(sys.argv[1:])"},{"line_number":35,"context_line":"    except cfg.Error:"}],"source_content_type":"text/x-python","patch_set":2,"id":"db495ae2_1ab714e8","line":32,"updated":"2026-06-18 12:10:30.000000000","message":"Yeah, we don\u0027n need the full set of config defs as we only use one specific config option form this parser. \n\nMaybe it worth adding a comment here that we are doing this very narrow config parsing here due to selecting the backend early. And the normal, full config parsing will happen later in the service startup process.","commit_id":"68c37a985ba75459e53ad050352d276ac24af041"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":true,"context_lines":[{"line_number":32,"context_line":"    conf.register_opts(base_conf.base_options)"},{"line_number":33,"context_line":"    try:"},{"line_number":34,"context_line":"        conf(sys.argv[1:])"},{"line_number":35,"context_line":"    except cfg.Error:"},{"line_number":36,"context_line":"        return None"},{"line_number":37,"context_line":"    return conf.concurrency_backend"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1b939860_35afcab2","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":19},"updated":"2026-06-18 12:10:30.000000000","message":"I\u0027m wondering if we can let the error actually bubble up and fail the service startup. E.g. we should not try to start up with a badly formatted config file. Could you test is out locally if it is OK to let this bubble up  (I assume so).","commit_id":"68c37a985ba75459e53ad050352d276ac24af041"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d8f1f053ba576ed82b237ce3bc2675059dc3377","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    return True"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def patch(backend\u003d\u0027eventlet\u0027):"},{"line_number":89,"context_line":"    \"\"\"Apply eventlet monkey patching according to environment."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    :param backend: Defines the default backend if not explicitly set via"}],"source_content_type":"text/x-python","patch_set":2,"id":"660300dc_a50c4f30","line":88,"updated":"2026-06-18 12:10:30.000000000","message":"I think we have some unit test coverage in https://github.com/openstack/nova/blob/d5b82e107e46a8e29483c22f9713335f2e028939/nova/tests/unit/test_utils.py#L1688 for this code. Could you check it please if we can add to it to cover the config option part?","commit_id":"68c37a985ba75459e53ad050352d276ac24af041"}]}
