)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0cd6fdc6410d9732329c460beab1454886fc528f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b6876415_5c223ef8","updated":"2025-07-17 15:40:43.000000000","message":"Is this really proven to work ? If you use threading backend then you should explicit define it like;\n\nhttps://github.com/openstack/heat/blob/master/heat/cmd/engine.py#L31-L32\n\notherwise oslo.service loads the implementations based on eventlet","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"34a0c15d9df0ded993e1aef1a1274a97c7e7e8d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1fc9e981_4a4a244f","updated":"2025-07-17 16:29:08.000000000","message":"Thanks for the quick review!","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"f1f5f8d68129d63452db11c4bade7d37bf827cbd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"22c0247e_19bb7989","in_reply_to":"319ffbed_f31e2429","updated":"2025-08-18 11:43:15.000000000","message":"Done","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"cb4d09c2dc7db7b17fdc22df2353035af0f3b82c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f406c341_2c9f058a","in_reply_to":"5bc57999_beb68554","updated":"2025-07-24 20:53:28.000000000","message":"Would initializing the backend here as well result in an exception - even if the backend was already set by defining the hook?  Or is the exception thrown only if the backend is different - and if the backend is the same, its essentially a no-op?\n\nIt would be really nice to know exactly what backend is being used and maybe adding the init() here would validate that.","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"b849f0581f7edb0622725143ef84fef2e447cd08","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5bc57999_beb68554","in_reply_to":"b6876415_5c223ef8","updated":"2025-07-17 20:47:38.000000000","message":"Right now I set\n\nregister_backend_default_hook(lambda: BackendType.THREADING)\n\nin barbican/common/config.py\n\nwhen setting only\n\nbackend.init_backend(backend.BackendType.THREADING)\n\nit resulted in \n\noslo_service.backend.exceptions.BackendAlreadySelected: Backend already set to \u0027eventlet\u0027, cannot reinitialize with \u0027threading\u0027\n\nbut maybe I should do both?\n\n@alee@redhat.com voiced a concern that without a check like that, we don\u0027t really know if we\u0027re running threading or not...","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6f6b884bb7b3d0a24860e90d5f170dcf3468bd9c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"319ffbed_f31e2429","in_reply_to":"f406c341_2c9f058a","updated":"2025-08-05 12:16:22.000000000","message":"Hello,\n\nApparently there is no exception if the backend is initalized twice with the same backend:\n\n```\n\u003e\u003e\u003e from oslo_service.backend import init_backend, BackendType\n\u003e\u003e\u003e init_backend(BackendType.THREADING)\n\u003e\u003e\u003e init_backend(BackendType.THREADING)\n\u003e\u003e\u003e init_backend(BackendType.EVENTLET)\nTraceback (most recent call last):\n  File \"\u003cpython-input-3\u003e\", line 1, in \u003cmodule\u003e\n    init_backend(BackendType.EVENTLET)\n    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/hberaud/dev/oslo.service/oslo_service/backend/__init__.py\", line 85, in init_backend\n    raise exceptions.BackendAlreadySelected(\n    ...\u003c2 lines\u003e...\n    )\noslo_service.backend.exceptions.BackendAlreadySelected: Backend already set to \u0027threading\u0027, cannot reinitialize with \u0027eventlet\u0027\n\u003e\u003e\u003e \n```","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6f6b884bb7b3d0a24860e90d5f170dcf3468bd9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0cfdf6b0_a5af3233","updated":"2025-08-05 12:16:22.000000000","message":"Hey guys do you mind if I change the topic of this gerrit in favor of `eventlet-removal`? This way it will appear with all the other patches https://review.opendev.org/q/prefixtopic:eventlet-removal","commit_id":"96e821bc6ec761a5a16e44eb6e08cb31cb825951"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"02bb7fabb0a68ff4d6d09cc5b6d42bf12f41557e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7bb97da9_752dd13f","updated":"2025-08-07 08:14:20.000000000","message":"Hey guys,\n\nHere is the series of patch that correspond to the doc of the backend, you may find it useful https://review.opendev.org/c/openstack/oslo.service/+/956739/","commit_id":"96e821bc6ec761a5a16e44eb6e08cb31cb825951"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"cb4d09c2dc7db7b17fdc22df2353035af0f3b82c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"df15fd80_9875637e","updated":"2025-07-24 20:53:28.000000000","message":"Still unresolved py310 issue, and a question on how to verify that we\u0027re using threading at all.","commit_id":"96e821bc6ec761a5a16e44eb6e08cb31cb825951"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"f807a50a7e8f55473ed8f82477d7c003496cf56b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"fdc5b648_c8e9149b","updated":"2025-08-07 14:04:35.000000000","message":"The doc is now merged and online https://docs.openstack.org/oslo.service/latest/user/backend.html","commit_id":"96e821bc6ec761a5a16e44eb6e08cb31cb825951"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ca63928fd1c3e2f2e4f055c244d894055f03439c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"da234fd7_1ea0a270","in_reply_to":"0cfdf6b0_a5af3233","updated":"2025-08-05 12:17:10.000000000","message":"You beat me. Ignore my question","commit_id":"96e821bc6ec761a5a16e44eb6e08cb31cb825951"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"8731305249be501e18dc195e91eac0542bfab996","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c2e342aa_1964f1ba","updated":"2025-08-25 14:02:36.000000000","message":"Looks good to merge for me. Thanks a lot!","commit_id":"16b8a7cad9fb65478c65c00a5f26ca1417314ed0"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"6b2d76a53e14218166330d9574bae44552b10604","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"62bb5d40_aba04eef","updated":"2025-08-18 11:41:54.000000000","message":"Thanks for the reviews, I switched it back to init_backend(BackendType.THREADING) and it seems to work.","commit_id":"16b8a7cad9fb65478c65c00a5f26ca1417314ed0"}],"barbican/cmd/keystone_listener.py":[{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"1a6f911a69ba5e88a655817ae50872fa21b321d9","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"# Copyright (c) 2013-2016 Rackspace, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"4cf88833_2e700b65","line":2,"updated":"2025-07-17 19:06:23.000000000","message":"why the change in the copyright?","commit_id":"94df26c5315637d3b6dc61d9dcc068733fd3120d"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"10951645043a95f71a3ffb5394f84ba2cd4d89b4","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"# Copyright (c) 2013-2016 Rackspace, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"9e0d6d49_df766c99","line":2,"in_reply_to":"4cf88833_2e700b65","updated":"2025-07-17 19:58:40.000000000","message":"I pushed some generated code to check if I needed to patch the threading server, because I had different results on localhost.\n\nIt turns out, the issue was that eventlet was still initialized by default, resulting in:\n\noslo_service.backend.exceptions.BackendAlreadySelected: Backend already set to \u0027eventlet\u0027, cannot reinitialize with \u0027threading\u0027\n\nI was able to fix this by setting\nregister_backend_default_hook(lambda: BackendType.THREADING)\n\nBeyond the initial changes, I also had to work the threading dynamic timer.","commit_id":"94df26c5315637d3b6dc61d9dcc068733fd3120d"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"26ea3a8c6a7bbc484a83127b0610a08feb463704","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"# Copyright (c) 2013-2016 Rackspace, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"af27cc84_c6712044","line":2,"in_reply_to":"9e0d6d49_df766c99","updated":"2025-07-17 20:01:09.000000000","message":"s/work/mock/","commit_id":"94df26c5315637d3b6dc61d9dcc068733fd3120d"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"f1f5f8d68129d63452db11c4bade7d37bf827cbd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"# Copyright (c) 2013-2016 Rackspace, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"68738250_f3f8088b","line":2,"in_reply_to":"af27cc84_c6712044","updated":"2025-08-18 11:43:15.000000000","message":"Done","commit_id":"94df26c5315637d3b6dc61d9dcc068733fd3120d"},{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"f6f49824f9e2b98d0f52d330d50bb81466e7ea25","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        # Queuing initialization"},{"line_number":50,"context_line":"        queue.init(CONF, is_server_side\u003dFalse)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        service.launch("},{"line_number":53,"context_line":"            CONF,"},{"line_number":54,"context_line":"            keystone_listener.MessageServer(CONF),"},{"line_number":55,"context_line":"            restart_method\u003d\u0027mutate\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5cdae067_217c69cc","line":52,"updated":"2025-07-17 20:36:09.000000000","message":"Why is the check for the enablement of the listener no longer needed?","commit_id":"16d66bd6197f95c9c73ec310c40a08ab81c7d3eb"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"d27d84eb08fad71a5675b314bbf1d00c8abfd135","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        # Queuing initialization"},{"line_number":50,"context_line":"        queue.init(CONF, is_server_side\u003dFalse)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        service.launch("},{"line_number":53,"context_line":"            CONF,"},{"line_number":54,"context_line":"            keystone_listener.MessageServer(CONF),"},{"line_number":55,"context_line":"            restart_method\u003d\u0027mutate\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"8f50c949_7cf8a663","line":52,"in_reply_to":"5cdae067_217c69cc","updated":"2025-07-17 20:39:15.000000000","message":"This is an unrelated change that got in, I reverted this part.","commit_id":"16d66bd6197f95c9c73ec310c40a08ab81c7d3eb"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"b849f0581f7edb0622725143ef84fef2e447cd08","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # Queuing initialization"},{"line_number":50,"context_line":"        queue.init(CONF, is_server_side\u003dFalse)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        service.launch("},{"line_number":53,"context_line":"            CONF,"},{"line_number":54,"context_line":"            keystone_listener.MessageServer(CONF),"},{"line_number":55,"context_line":"            restart_method\u003d\u0027mutate\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1e2d8e14_ceed971f","line":52,"in_reply_to":"8f50c949_7cf8a663","updated":"2025-07-17 20:47:38.000000000","message":"Done","commit_id":"16d66bd6197f95c9c73ec310c40a08ab81c7d3eb"}],"barbican/common/config.py":[{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"04c5ea1eacdfb76f82e913d354c637e629db949a","unresolved":true,"context_lines":[{"line_number":325,"context_line":"parse_args(CONF)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"# Register oslo.service backend hook to use threading instead of eventlet"},{"line_number":328,"context_line":"register_backend_default_hook(lambda: BackendType.THREADING)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"# Adding global scope dict for all different configs created in various"},{"line_number":331,"context_line":"# modules. In barbican, each plugin module creates its own *new* config"}],"source_content_type":"text/x-python","patch_set":5,"id":"1cdb6b6f_6c584716","line":328,"updated":"2025-08-06 10:30:18.000000000","message":"Hi there,\n\nInstead of using register_backend_default_hook, could you initialize the backend with init_backend?","commit_id":"96e821bc6ec761a5a16e44eb6e08cb31cb825951"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"f1f5f8d68129d63452db11c4bade7d37bf827cbd","unresolved":false,"context_lines":[{"line_number":325,"context_line":"parse_args(CONF)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"# Register oslo.service backend hook to use threading instead of eventlet"},{"line_number":328,"context_line":"register_backend_default_hook(lambda: BackendType.THREADING)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"# Adding global scope dict for all different configs created in various"},{"line_number":331,"context_line":"# modules. In barbican, each plugin module creates its own *new* config"}],"source_content_type":"text/x-python","patch_set":5,"id":"8f448d72_f4b3779e","line":328,"in_reply_to":"1cdb6b6f_6c584716","updated":"2025-08-18 11:43:15.000000000","message":"Done","commit_id":"96e821bc6ec761a5a16e44eb6e08cb31cb825951"}],"barbican/queue/__init__.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2cda571404e2377cac29ab7bf97bb35a4082ba90","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    return messaging.get_rpc_server(TRANSPORT,"},{"line_number":82,"context_line":"                                    target,"},{"line_number":83,"context_line":"                                    endpoints,"},{"line_number":84,"context_line":"                                    executor\u003d\u0027threading\u0027,"},{"line_number":85,"context_line":"                                    serializer\u003dserializer,"},{"line_number":86,"context_line":"                                    access_policy\u003daccess_policy)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8ad21b82_3067a5f0","line":84,"range":{"start_line":84,"start_character":46,"end_line":84,"end_character":55},"updated":"2025-07-17 15:42:38.000000000","message":"Also you don\u0027t need the explicit executor argument and can drop this. The correct one should be selected according to whether threading module is patched or not.","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"34a0c15d9df0ded993e1aef1a1274a97c7e7e8d1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    return messaging.get_rpc_server(TRANSPORT,"},{"line_number":82,"context_line":"                                    target,"},{"line_number":83,"context_line":"                                    endpoints,"},{"line_number":84,"context_line":"                                    executor\u003d\u0027threading\u0027,"},{"line_number":85,"context_line":"                                    serializer\u003dserializer,"},{"line_number":86,"context_line":"                                    access_policy\u003daccess_policy)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e93ba596_0d14702d","line":84,"range":{"start_line":84,"start_character":46,"end_line":84,"end_character":55},"in_reply_to":"8ad21b82_3067a5f0","updated":"2025-07-17 16:29:08.000000000","message":"Done","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2cda571404e2377cac29ab7bf97bb35a4082ba90","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                                                          serializer)"},{"line_number":113,"context_line":"    # we don\u0027t want blocking executor so use threading as executor choice"},{"line_number":114,"context_line":"    return listener.NotificationServer(TRANSPORT, targets, dispatcher,"},{"line_number":115,"context_line":"                                       executor\u003d\u0027threading\u0027,"},{"line_number":116,"context_line":"                                       pool\u003dpool_name,"},{"line_number":117,"context_line":"                                       allow_requeue\u003dallow_requeue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1155908f_df7d2919","line":115,"range":{"start_line":115,"start_character":39,"end_line":115,"end_character":60},"updated":"2025-07-17 15:42:38.000000000","message":"ditto","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"34a0c15d9df0ded993e1aef1a1274a97c7e7e8d1","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                                          serializer)"},{"line_number":113,"context_line":"    # we don\u0027t want blocking executor so use threading as executor choice"},{"line_number":114,"context_line":"    return listener.NotificationServer(TRANSPORT, targets, dispatcher,"},{"line_number":115,"context_line":"                                       executor\u003d\u0027threading\u0027,"},{"line_number":116,"context_line":"                                       pool\u003dpool_name,"},{"line_number":117,"context_line":"                                       allow_requeue\u003dallow_requeue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfef612d_a8ff72e9","line":115,"range":{"start_line":115,"start_character":39,"end_line":115,"end_character":60},"in_reply_to":"1155908f_df7d2919","updated":"2025-07-17 16:29:08.000000000","message":"Done","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"}],"requirements.txt":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"da3d63e1235f27996fe43f10ef4ae958bf7b2d69","unresolved":true,"context_lines":[{"line_number":15,"context_line":"oslo.log\u003e\u003d4.3.0 # Apache-2.0"},{"line_number":16,"context_line":"oslo.policy\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":17,"context_line":"oslo.serialization!\u003d2.19.1,\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":18,"context_line":"oslo.service!\u003d1.28.1,\u003e\u003d1.24.0 # Apache-2.0"},{"line_number":19,"context_line":"oslo.upgradecheck\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":20,"context_line":"oslo.utils\u003e\u003d7.0.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.versionedobjects\u003e\u003d1.31.2 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"6b2d7c52_73d06243","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":42},"updated":"2025-07-17 15:43:48.000000000","message":"Also bump the min version of oslo.service and ensure the extra dependencies for threading are installed.\n\n```\noslo.service[threading]\u003e\u003d4.2.0 # Apache-2.0\n```","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"34a0c15d9df0ded993e1aef1a1274a97c7e7e8d1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"oslo.log\u003e\u003d4.3.0 # Apache-2.0"},{"line_number":16,"context_line":"oslo.policy\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":17,"context_line":"oslo.serialization!\u003d2.19.1,\u003e\u003d2.18.0 # Apache-2.0"},{"line_number":18,"context_line":"oslo.service!\u003d1.28.1,\u003e\u003d1.24.0 # Apache-2.0"},{"line_number":19,"context_line":"oslo.upgradecheck\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":20,"context_line":"oslo.utils\u003e\u003d7.0.0 # Apache-2.0"},{"line_number":21,"context_line":"oslo.versionedobjects\u003e\u003d1.31.2 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"b268a5b1_703bb628","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":42},"in_reply_to":"6b2d7c52_73d06243","updated":"2025-07-17 16:29:08.000000000","message":"Done","commit_id":"6162774d92c1434045b873e8d8f67ea660d5bd93"}]}
