)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add comprehensive backend system documentation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented backend system in oslo.service. The documentation covers:"},{"line_number":10,"context_line":"\t•\tWhy the backend system was introduced (to facilitate migration and improve modularity)"},{"line_number":11,"context_line":"\t•\tArchitecture and components, including BaseBackend, BackendType, and the component registry"},{"line_number":12,"context_line":"\t•\tUsage guidelines, explaining backend initialization, component retrieval, and testing strategies"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1fbf3cd0_59a4a5c6","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":128},"updated":"2025-02-04 10:01:36.000000000","message":"Subsequent lines of the commit message should be wrapped at 72 characters. \n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"f6e000871cf8a3f1a3867c5289083fc95d8bdc0f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add comprehensive backend system documentation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented backend system in oslo.service. The documentation covers:"},{"line_number":10,"context_line":"\t•\tWhy the backend system was introduced (to facilitate migration and improve modularity)"},{"line_number":11,"context_line":"\t•\tArchitecture and components, including BaseBackend, BackendType, and the component registry"},{"line_number":12,"context_line":"\t•\tUsage guidelines, explaining backend initialization, component retrieval, and testing strategies"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2e2dd805_681045c6","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":128},"in_reply_to":"1fbf3cd0_59a4a5c6","updated":"2025-02-05 15:56:01.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add comprehensive backend system documentation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented backend system in oslo.service. The documentation covers:"},{"line_number":10,"context_line":"\t•\tWhy the backend system was introduced (to facilitate migration and improve modularity)"},{"line_number":11,"context_line":"\t•\tArchitecture and components, including BaseBackend, BackendType, and the component registry"},{"line_number":12,"context_line":"\t•\tUsage guidelines, explaining backend initialization, component retrieval, and testing strategies"},{"line_number":13,"context_line":"\t•\tException handling for backend selection and component availability"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"69c2b5cb_493178c0","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":1},"updated":"2025-02-04 10:01:36.000000000","message":"IMO, all these tabulates are not necessary.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"f6e000871cf8a3f1a3867c5289083fc95d8bdc0f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add comprehensive backend system documentation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented backend system in oslo.service. The documentation covers:"},{"line_number":10,"context_line":"\t•\tWhy the backend system was introduced (to facilitate migration and improve modularity)"},{"line_number":11,"context_line":"\t•\tArchitecture and components, including BaseBackend, BackendType, and the component registry"},{"line_number":12,"context_line":"\t•\tUsage guidelines, explaining backend initialization, component retrieval, and testing strategies"},{"line_number":13,"context_line":"\t•\tException handling for backend selection and component availability"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1441def8_06feb9ea","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":1},"in_reply_to":"69c2b5cb_493178c0","updated":"2025-02-05 15:56:01.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    and the component registry"},{"line_number":15,"context_line":"•\tUsage guidelines, explaining backend initialization, component"},{"line_number":16,"context_line":"    retrieval, and testing strategies"},{"line_number":17,"context_line":"•\tException handling for backend selection and component availability"},{"line_number":18,"context_line":"•\tPractical examples demonstrating backend usage in real-world"},{"line_number":19,"context_line":"    scenarios"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"bcc76e5c_6dc3a4ea","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":69},"updated":"2025-07-04 11:58:20.000000000","message":"I do not see where this is documented. I just find a sentence speaking about exceptions (`BackendAlreadySelected`) but without explaining what to do with that. I think it is worth documenting this part a bit more and explaining what to do in such circumstance.","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    and the component registry"},{"line_number":15,"context_line":"•\tUsage guidelines, explaining backend initialization, component"},{"line_number":16,"context_line":"    retrieval, and testing strategies"},{"line_number":17,"context_line":"•\tException handling for backend selection and component availability"},{"line_number":18,"context_line":"•\tPractical examples demonstrating backend usage in real-world"},{"line_number":19,"context_line":"    scenarios"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a97757a_d250ca9e","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":69},"in_reply_to":"bcc76e5c_6dc3a4ea","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"dd623e9999fed63d547ebc7ce0013a68d2cfd2d3","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented"},{"line_number":10,"context_line":"backend system in oslo.service. The documentation covers:"},{"line_number":11,"context_line":"•\tWhy the backend system was introduced ("},{"line_number":12,"context_line":"    to facilitate migration and improve modularity)"},{"line_number":13,"context_line":"•\tArchitecture and components, including BaseBackend, BackendType,"},{"line_number":14,"context_line":"    and the component registry"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"e0bb3c94_5f2506ed","line":11,"range":{"start_line":11,"start_character":1,"end_line":11,"end_character":2},"updated":"2025-08-05 12:29:17.000000000","message":"It may be good idea to remove tabs ...","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e5ff4e67974760f16273fe85a6c283cffd5a9d22","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented"},{"line_number":10,"context_line":"backend system in oslo.service. The documentation covers:"},{"line_number":11,"context_line":"•\tWhy the backend system was introduced ("},{"line_number":12,"context_line":"    to facilitate migration and improve modularity)"},{"line_number":13,"context_line":"•\tArchitecture and components, including BaseBackend, BackendType,"},{"line_number":14,"context_line":"    and the component registry"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"6993ea1c_0b90d62f","line":11,"range":{"start_line":11,"start_character":1,"end_line":11,"end_character":2},"in_reply_to":"e0bb3c94_5f2506ed","updated":"2025-08-06 10:18:33.000000000","message":"Done","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"31a480f87460320aca80eff0e016678ea9a740bb","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented"},{"line_number":10,"context_line":"backend system in oslo.service. The documentation covers:"},{"line_number":11,"context_line":"• Why the backend system was introduced (to facilitate migration and improve modularity)"},{"line_number":12,"context_line":"• Architecture and components, including BaseBackend, BackendType, and the component registry"},{"line_number":13,"context_line":"• Usage guidelines, explaining backend initialization, component retrieval, and testing strategies"},{"line_number":14,"context_line":"• Exception handling for backend selection and component availability"},{"line_number":15,"context_line":"• Practical examples demonstrating backend usage in real-world scenarios"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This documentation ensures that users understand the backend selection"},{"line_number":18,"context_line":"mechanism, how to interact with service components, and how to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"4e947b51_93c16695","line":15,"range":{"start_line":11,"start_character":0,"end_line":15,"end_character":72},"updated":"2025-08-06 10:32:35.000000000","message":"Please wrap lines at 72 characters so that this does not mess up git history.\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"6bb5687629b01a74313722aaf0341195173ba654"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"a0e4ec9ecea9c1b51dcddaa6c079f4c51fe5fdbd","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented"},{"line_number":10,"context_line":"backend system in oslo.service. The documentation covers:"},{"line_number":11,"context_line":"• Why the backend system was introduced (to facilitate migration and improve modularity)"},{"line_number":12,"context_line":"• Architecture and components, including BaseBackend, BackendType, and the component registry"},{"line_number":13,"context_line":"• Usage guidelines, explaining backend initialization, component retrieval, and testing strategies"},{"line_number":14,"context_line":"• Exception handling for backend selection and component availability"},{"line_number":15,"context_line":"• Practical examples demonstrating backend usage in real-world scenarios"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This documentation ensures that users understand the backend selection"},{"line_number":18,"context_line":"mechanism, how to interact with service components, and how to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"b0e91395_f7fca020","line":15,"range":{"start_line":11,"start_character":0,"end_line":15,"end_character":72},"in_reply_to":"4e947b51_93c16695","updated":"2025-08-06 10:50:06.000000000","message":"Yes sorry you\u0027re right.","commit_id":"6bb5687629b01a74313722aaf0341195173ba654"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"1883e44596c5a18f5b12f4adc3f6ec235aa84595","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces detailed documentation for the newly implemented"},{"line_number":10,"context_line":"backend system in oslo.service. The documentation covers:"},{"line_number":11,"context_line":"• Why the backend system was introduced (to facilitate migration and improve modularity)"},{"line_number":12,"context_line":"• Architecture and components, including BaseBackend, BackendType, and the component registry"},{"line_number":13,"context_line":"• Usage guidelines, explaining backend initialization, component retrieval, and testing strategies"},{"line_number":14,"context_line":"• Exception handling for backend selection and component availability"},{"line_number":15,"context_line":"• Practical examples demonstrating backend usage in real-world scenarios"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This documentation ensures that users understand the backend selection"},{"line_number":18,"context_line":"mechanism, how to interact with service components, and how to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"c2587b26_cc8236b9","line":15,"range":{"start_line":11,"start_character":0,"end_line":15,"end_character":72},"in_reply_to":"b0e91395_f7fca020","updated":"2025-08-06 10:50:19.000000000","message":"Done","commit_id":"6bb5687629b01a74313722aaf0341195173ba654"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"81418c7c_922f4765","updated":"2025-02-04 10:01:36.000000000","message":"Hey Daniel,\n\nThanks for this doc, that\u0027s great to have it.\nHowever, by reading it all along, I think we have 2 aspects:\n\n- the traditional user docs where we want to explain to users how to use a specific public feature/API;\n- a developer/maintainer documentation where we explain internal mechanism in order to lower the entry cost for other maintainers.\n\nIMO our priority is document end user features.\n\nWhat do you think of splitting this file into 2 separated files with clear audience targetting? One for end users, one for developers.\n\nIMO too much mixing these aspects in the same docs open the doors user misusages. I can already imagine people trying to reset the backend in production with the reset feature. I\u0027d recommend to not open that door.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"67e933c007ab90035cb465916e9f268820e515be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"64c6d380_62fb3a34","in_reply_to":"73ef5333_9eddb589","updated":"2025-02-05 09:12:29.000000000","message":"IMO the same is true for all the private/abstract/testing/internal elements.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"e6c7db392f25ee605640b9c262b56d432be3a224","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"73ef5333_9eddb589","in_reply_to":"81418c7c_922f4765","updated":"2025-02-05 09:11:33.000000000","message":"Concerning the part of this documentation that is more destinated to maintainer, maybe the solution is simply to improve the docstring by putting into them the elements (private, internal, and testing) that you refer too here.\n\nBy example, in https://review.opendev.org/c/openstack/oslo.service/+/935783/ the docstring of `_reset_backend` simply say:\n\n\u003e used by test functions to reset the selected backend [1]\n\nSo maybe the solution is simply to move all the sections related to `_reset_backend` into the related docstring. This way all these details will be available through the API reference [2], and this user documentation will remain free from this kind of tricks.\n\nThoughts?\n\n[1] https://opendev.org/openstack/oslo.service/src/branch/master/oslo_service/backend/__init__.py#L44 \n[2] https://docs.openstack.org/oslo.service/latest/reference/index.html","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"70ec5fcd_dc69963c","updated":"2025-07-02 13:43:25.000000000","message":"Thanks Daniel, I\u0027m resetting all my previous comments.\nApparently there is still docs issues, the job failed, I\u0027ll review it once fixed.","commit_id":"9ad8ec587bd5f8d428978f3a3d51d1dc0bc24051"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"a9a09496dd056d22de3abb8070179ae1fd2c1a2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ad345788_ff030d16","updated":"2025-07-03 14:41:30.000000000","message":"recheck","commit_id":"9ad8ec587bd5f8d428978f3a3d51d1dc0bc24051"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"2e00697038df1b3c2e8a6c3701fdc2673010c5a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"59ac2ce3_a4812913","updated":"2025-07-04 11:59:08.000000000","message":"(-1 to highlight my previous comment and to request a rework of the table of comparison, see my inline comments)","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1e1a9736_3c162a8a","updated":"2025-07-04 11:58:20.000000000","message":"Hey Daniel,\n\nThis new version looks really more efficient. I still have concerns on specific points, here is a first set of them, please see my inline comments.\n\nThanks.","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"c8c1c8eb_6caf6bf7","updated":"2025-07-16 15:08:14.000000000","message":"Hello Daniel,\n\nThanks for this new patch set. The table looks really more understandable. Good job.\n\nI just have one rewording suggestion, see my inline comment, but it remains a suggestion.\n\nI closed all the comments that seems to be well addressed.","commit_id":"299af3afb908e3b674e1d15a5626153ad2daf795"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"58cc4377ea608c48b830f9b1798d7038570b5ee1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7fd7b850_a1fd838f","updated":"2025-07-17 13:41:33.000000000","message":"LGTM","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"46ffce4ab3829b7d9dfb043c2dad4c79aa3661dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"61e4bcdd_8e2e84ee","updated":"2025-07-17 13:41:59.000000000","message":"Thanks Daniel, good job.","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"dd623e9999fed63d547ebc7ce0013a68d2cfd2d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"38aa29c8_5b6de416","updated":"2025-08-05 12:29:17.000000000","message":"The document looks almost good but I have several suggestions. Please see my comments inline.","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"240ab6847c9389bec3476e852445954ef48e3f5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"8785a8df_1ae49a5e","updated":"2025-08-06 11:19:10.000000000","message":"Latest PS LGTM","commit_id":"e822cc4b1f277c033e743a8678503c386411b70f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"8a98660fa70926b849920be01bcc52fea6ef9230","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"87266553_164cbdf6","updated":"2025-08-06 11:19:28.000000000","message":"Thanks Daniel","commit_id":"e822cc4b1f277c033e743a8678503c386411b70f"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"7f1e80f40729320fba91f67c6fe2c934919dfd1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"09196a50_4ce4b9b3","updated":"2025-08-06 11:30:26.000000000","message":"Would be worth to add a scenario where we explain `get_backend` to cover use cases similar barbican and where people want to check the loaded backend https://review.opendev.org/c/openstack/barbican/+/955301\n\nThis scenario could be added in a follow up patch.","commit_id":"e822cc4b1f277c033e743a8678503c386411b70f"}],"doc/source/backend/index.rst":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c382aeaf19e55adb25db1cb128e1e0ead778839b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"User Documentation for the oslo.service Backend System"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Why a Backend System?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a60677cc_03e35b8e","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":54},"updated":"2025-02-04 07:41:54.000000000","message":"This new page is not included in any toctree.\n\nIn my opinion we add a link somewhere into https://docs.openstack.org/oslo.service/latest/user/usage.html","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"User Documentation for the oslo.service Backend System"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Why a Backend System?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"53db3cc0_db8d5a21","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":54},"in_reply_to":"3c8e038b_4a000efc","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e1b43968188844fab5ef1ad589aefa753d67c330","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"User Documentation for the oslo.service Backend System"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Why a Backend System?"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3c8e038b_4a000efc","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":54},"in_reply_to":"a60677cc_03e35b8e","updated":"2025-02-04 09:10:19.000000000","message":"Yes I will add there.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":10,"context_line":"and with it, the backend system itself."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This backend system introduces a **modular architecture** that allows dynamic"},{"line_number":13,"context_line":"backend selection, enabling the use of either **Eventlet** or **Threading**"},{"line_number":14,"context_line":"without modifying core application logic."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Introduction"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ccceff18_d1f39be2","line":13,"range":{"start_line":13,"start_character":62,"end_line":13,"end_character":75},"updated":"2025-02-04 10:01:36.000000000","message":"Maybe we could specify that this backend is not yet implemented, just in case this patch is merged first, else users may looks for it.\n\nThoughts?","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"fdb2483103f319903adc2362d5416bda61ab8fa4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and with it, the backend system itself."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This backend system introduces a **modular architecture** that allows dynamic"},{"line_number":13,"context_line":"backend selection, enabling the use of either **Eventlet** or **Threading**"},{"line_number":14,"context_line":"without modifying core application logic."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Introduction"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c25f55d6_134c0e1d","line":13,"range":{"start_line":13,"start_character":62,"end_line":13,"end_character":75},"in_reply_to":"ccceff18_d1f39be2","updated":"2025-02-18 13:55:39.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":16,"context_line":"Introduction"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The backend system in `oslo.service` provides a flexible infrastructure for"},{"line_number":20,"context_line":"managing various service components"},{"line_number":21,"context_line":"(such as service launchers, looping calls, thread groups, etc.) by dynamically"},{"line_number":22,"context_line":"selecting the appropriate backend."}],"source_content_type":"text/x-rst","patch_set":2,"id":"21af1f42_4378e1e1","line":19,"range":{"start_line":19,"start_character":22,"end_line":19,"end_character":36},"updated":"2025-02-04 10:01:36.000000000","message":"Should be double \"`\", else it render in italics.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"fdb2483103f319903adc2362d5416bda61ab8fa4","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Introduction"},{"line_number":17,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The backend system in `oslo.service` provides a flexible infrastructure for"},{"line_number":20,"context_line":"managing various service components"},{"line_number":21,"context_line":"(such as service launchers, looping calls, thread groups, etc.) by dynamically"},{"line_number":22,"context_line":"selecting the appropriate backend."}],"source_content_type":"text/x-rst","patch_set":2,"id":"2d05b186_bfb906eb","line":19,"range":{"start_line":19,"start_character":22,"end_line":19,"end_character":36},"in_reply_to":"21af1f42_4378e1e1","updated":"2025-02-18 13:55:39.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This design enables:"},{"line_number":28,"context_line":"**A clear separation of concerns**"},{"line_number":29,"context_line":"**Easier backend switching** without affecting higher-level application logic"},{"line_number":30,"context_line":"**Better testability** by allowing backend reset in unit tests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Architecture and Components"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bd130868_7de80ddd","line":29,"range":{"start_line":29,"start_character":29,"end_line":29,"end_character":77},"updated":"2025-02-04 10:01:36.000000000","message":"I do not think that\u0027s true. Mike was saying the contrary in his recent mailing list thread [1]:\n\n\u003e More concretely, if you took nova, which were using oslo.service with eventlet and decided to try the \"threaded\" backend, that\u0027s naturally going to have a lot of implications for other parts of the code.   For example, if your code is setting eventlet monkey patching, that has to be turned off when this backend selection is made.   If your code has other explicit use of eventlet, this also needs to be changed.  Finally, threaded concurrency is naturally going to \"feel\" different than coroutine-based concurrency - context switches happen at different places and with different frequencies.  ...\n\n[1] https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/YTQJOJQSS4YZ3KVMUZSF7C3FFGSLELZD/","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This design enables:"},{"line_number":28,"context_line":"**A clear separation of concerns**"},{"line_number":29,"context_line":"**Easier backend switching** without affecting higher-level application logic"},{"line_number":30,"context_line":"**Better testability** by allowing backend reset in unit tests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Architecture and Components"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9cef77e2_2c1e1467","line":29,"range":{"start_line":29,"start_character":29,"end_line":29,"end_character":77},"in_reply_to":"bd130868_7de80ddd","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":25,"context_line":"through a centralized API."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This design enables:"},{"line_number":28,"context_line":"**A clear separation of concerns**"},{"line_number":29,"context_line":"**Easier backend switching** without affecting higher-level application logic"},{"line_number":30,"context_line":"**Better testability** by allowing backend reset in unit tests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Architecture and Components"},{"line_number":33,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9819505c_cc721d66","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":62},"updated":"2025-02-04 10:01:36.000000000","message":"All these lines looks like to a list, but do not render [1] like a list as the list markup [2] is absent from the beginning of each line.\n\n[1] https://de1aebab86538e659519-5ed0a2bf2deb0e6e6552538f21dcc4c4.ssl.cf2.rackcdn.com/940664/2/check/openstack-tox-docs/893c40b/docs/backend/index.html\n[2] https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#lists-and-quote-like-blocks","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":25,"context_line":"through a centralized API."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This design enables:"},{"line_number":28,"context_line":"**A clear separation of concerns**"},{"line_number":29,"context_line":"**Easier backend switching** without affecting higher-level application logic"},{"line_number":30,"context_line":"**Better testability** by allowing backend reset in unit tests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Architecture and Components"},{"line_number":33,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a0d58afc_a73169f5","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":62},"in_reply_to":"9819505c_cc721d66","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":35,"context_line":"Main Modules"},{"line_number":36,"context_line":"------------"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"- **``oslo_service/backend/__init__.py``**"},{"line_number":39,"context_line":"  Manages:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  - The selection and initialization of the backend via the ``init_backend()``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"035a5c0f_85249a98","line":38,"range":{"start_line":38,"start_character":2,"end_line":38,"end_character":42},"updated":"2025-02-04 10:01:36.000000000","message":"The bold rendering seems to broke the code snippet rendering.\n\nhttps://de1aebab86538e659519-5ed0a2bf2deb0e6e6552538f21dcc4c4.ssl.cf2.rackcdn.com/940664/2/check/openstack-tox-docs/893c40b/docs/backend/index.html","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":35,"context_line":"Main Modules"},{"line_number":36,"context_line":"------------"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"- **``oslo_service/backend/__init__.py``**"},{"line_number":39,"context_line":"  Manages:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  - The selection and initialization of the backend via the ``init_backend()``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"85cb5ea4_ea95bbdb","line":38,"range":{"start_line":38,"start_character":2,"end_line":38,"end_character":42},"in_reply_to":"035a5c0f_85249a98","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":36,"context_line":"------------"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"- **``oslo_service/backend/__init__.py``**"},{"line_number":39,"context_line":"  Manages:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  - The selection and initialization of the backend via the ``init_backend()``"},{"line_number":42,"context_line":"    function."}],"source_content_type":"text/x-rst","patch_set":2,"id":"2bc9ce76_24e5f0ed","line":39,"range":{"start_line":39,"start_character":2,"end_line":39,"end_character":9},"updated":"2025-02-04 10:01:36.000000000","message":"Could be merge to line above, and perhaps without capitalizing it as it is not the first word.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":36,"context_line":"------------"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"- **``oslo_service/backend/__init__.py``**"},{"line_number":39,"context_line":"  Manages:"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  - The selection and initialization of the backend via the ``init_backend()``"},{"line_number":42,"context_line":"    function."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7f8f6eee_ce0bc930","line":39,"range":{"start_line":39,"start_character":2,"end_line":39,"end_character":9},"in_reply_to":"2bc9ce76_24e5f0ed","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":42,"context_line":"    function."},{"line_number":43,"context_line":"  - Dynamic loading of the default backend using ``get_backend()``."},{"line_number":44,"context_line":"  - Access to specific backend components via the ``get_component()`` function."},{"line_number":45,"context_line":"  - A reset function (``_reset_backend()``) useful for testing purposes."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- **``oslo_service/backend/base.py``**"},{"line_number":48,"context_line":"  Contains:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"641f1565_5c156652","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":72},"updated":"2025-02-04 10:01:36.000000000","message":"That\u0027s a private internal stuff I don\u0027t think we need to expose it there. That\u0027s not a specification, that\u0027s a user docs. What do you think of moving into a separated doc file for maintenance purpose? (a kind of developer docs)","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    function."},{"line_number":43,"context_line":"  - Dynamic loading of the default backend using ``get_backend()``."},{"line_number":44,"context_line":"  - Access to specific backend components via the ``get_component()`` function."},{"line_number":45,"context_line":"  - A reset function (``_reset_backend()``) useful for testing purposes."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- **``oslo_service/backend/base.py``**"},{"line_number":48,"context_line":"  Contains:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"87f94678_8f9f1e1b","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":72},"in_reply_to":"641f1565_5c156652","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":44,"context_line":"  - Access to specific backend components via the ``get_component()`` function."},{"line_number":45,"context_line":"  - A reset function (``_reset_backend()``) useful for testing purposes."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- **``oslo_service/backend/base.py``**"},{"line_number":48,"context_line":"  Contains:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  - The abstract class ``BaseBackend`` that enforces the implementation of the"},{"line_number":51,"context_line":"    ``get_service_components()`` method."}],"source_content_type":"text/x-rst","patch_set":2,"id":"6b0fc60e_7e170c1c","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":11},"updated":"2025-02-04 10:01:36.000000000","message":"Same think than above, we don\u0027t now to bold code snippet and both line could be merged together without capitalizing the last word.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  - Access to specific backend components via the ``get_component()`` function."},{"line_number":45,"context_line":"  - A reset function (``_reset_backend()``) useful for testing purposes."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- **``oslo_service/backend/base.py``**"},{"line_number":48,"context_line":"  Contains:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  - The abstract class ``BaseBackend`` that enforces the implementation of the"},{"line_number":51,"context_line":"    ``get_service_components()`` method."}],"source_content_type":"text/x-rst","patch_set":2,"id":"c42678da_7b622c88","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":11},"in_reply_to":"6b0fc60e_7e170c1c","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":47,"context_line":"- **``oslo_service/backend/base.py``**"},{"line_number":48,"context_line":"  Contains:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  - The abstract class ``BaseBackend`` that enforces the implementation of the"},{"line_number":51,"context_line":"    ``get_service_components()`` method."},{"line_number":52,"context_line":"  - The ``ComponentRegistry`` class, which provides safe and explicit access to"},{"line_number":53,"context_line":"    backend components."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"b1967a46_1e343956","line":51,"range":{"start_line":50,"start_character":0,"end_line":51,"end_character":40},"updated":"2025-02-04 10:01:36.000000000","message":"IMO I don\u0027t think we want to document this kind of abstract class here... That\u0027s a user docs not a spec, we should only list on the public API available to users and useful for their use cases.\n\nI\u0027d suggest to move it into a into a maintenance purpose docs.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- **``oslo_service/backend/base.py``**"},{"line_number":48,"context_line":"  Contains:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  - The abstract class ``BaseBackend`` that enforces the implementation of the"},{"line_number":51,"context_line":"    ``get_service_components()`` method."},{"line_number":52,"context_line":"  - The ``ComponentRegistry`` class, which provides safe and explicit access to"},{"line_number":53,"context_line":"    backend components."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"e398a6fd_8d549857","line":51,"range":{"start_line":50,"start_character":0,"end_line":51,"end_character":40},"in_reply_to":"b1967a46_1e343956","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":52,"context_line":"  - The ``ComponentRegistry`` class, which provides safe and explicit access to"},{"line_number":53,"context_line":"    backend components."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"- **``oslo_service/backend/exceptions.py``**"},{"line_number":56,"context_line":"  Defines specific exceptions:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  - ``BackendAlreadySelected``: Raised when attempting to initialize the"},{"line_number":59,"context_line":"    backend more than once."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5c3c0365_97fd8c04","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":30},"updated":"2025-02-04 10:01:36.000000000","message":"Same think than above, we don\u0027t now to bold code snippet and both line could be merged together without capitalizing the last words.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":52,"context_line":"  - The ``ComponentRegistry`` class, which provides safe and explicit access to"},{"line_number":53,"context_line":"    backend components."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"- **``oslo_service/backend/exceptions.py``**"},{"line_number":56,"context_line":"  Defines specific exceptions:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  - ``BackendAlreadySelected``: Raised when attempting to initialize the"},{"line_number":59,"context_line":"    backend more than once."}],"source_content_type":"text/x-rst","patch_set":2,"id":"b2c36ed1_ba594cfc","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":30},"in_reply_to":"5c3c0365_97fd8c04","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":89,"context_line":"BaseBackend and Its Components"},{"line_number":90,"context_line":"-------------------------------"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The abstract class ``BaseBackend`` requires the implementation of the"},{"line_number":93,"context_line":"``get_service_components()`` method, which should return a dictionary mapping"},{"line_number":94,"context_line":"component names (for example, ``ServiceLauncher``, ``LoopingCall``, etc.) to"},{"line_number":95,"context_line":"their implementations."},{"line_number":96,"context_line":"The ``ComponentRegistry`` (located in ``base.py``) facilitates safe access to"},{"line_number":97,"context_line":"these components."},{"line_number":98,"context_line":"If a component is not available, it raises a ``BackendComponentNotAvailable``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9d265215_8055c30e","line":95,"range":{"start_line":92,"start_character":0,"end_line":95,"end_character":22},"updated":"2025-02-04 10:01:36.000000000","message":"Users won\u0027t implement backends, they will simply use the ones provided by oslo.service, so I don\u0027t think we need to give details like that. That\u0027s more a spec detail or a maintenance purpose docs.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":89,"context_line":"BaseBackend and Its Components"},{"line_number":90,"context_line":"-------------------------------"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The abstract class ``BaseBackend`` requires the implementation of the"},{"line_number":93,"context_line":"``get_service_components()`` method, which should return a dictionary mapping"},{"line_number":94,"context_line":"component names (for example, ``ServiceLauncher``, ``LoopingCall``, etc.) to"},{"line_number":95,"context_line":"their implementations."},{"line_number":96,"context_line":"The ``ComponentRegistry`` (located in ``base.py``) facilitates safe access to"},{"line_number":97,"context_line":"these components."},{"line_number":98,"context_line":"If a component is not available, it raises a ``BackendComponentNotAvailable``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"84bf5a0e_2428f004","line":95,"range":{"start_line":92,"start_character":0,"end_line":95,"end_character":22},"in_reply_to":"9d265215_8055c30e","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":126,"context_line":"   # Explicitly initialize the Eventlet backend"},{"line_number":127,"context_line":"   init_backend(BackendType.EVENTLET)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   # Or, initialize the Threading backend"},{"line_number":130,"context_line":"   init_backend(BackendType.THREADING)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":".. note::"},{"line_number":133,"context_line":"   Backend initialization can only occur **once** during the application"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7d6815e3_07d7e99a","line":130,"range":{"start_line":129,"start_character":3,"end_line":130,"end_character":38},"updated":"2025-02-04 10:01:36.000000000","message":"As this backend is not yet available I wonder if we should speak about now, thoughts?","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":126,"context_line":"   # Explicitly initialize the Eventlet backend"},{"line_number":127,"context_line":"   init_backend(BackendType.EVENTLET)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   # Or, initialize the Threading backend"},{"line_number":130,"context_line":"   init_backend(BackendType.THREADING)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":".. note::"},{"line_number":133,"context_line":"   Backend initialization can only occur **once** during the application"}],"source_content_type":"text/x-rst","patch_set":2,"id":"0bd2239e_21e9afe6","line":130,"range":{"start_line":129,"start_character":3,"end_line":130,"end_character":38},"in_reply_to":"7d6815e3_07d7e99a","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":130,"context_line":"   init_backend(BackendType.THREADING)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":".. note::"},{"line_number":133,"context_line":"   Backend initialization can only occur **once** during the application"},{"line_number":134,"context_line":"   lifecycle."},{"line_number":135,"context_line":"   Attempting to initialize it more than once will raise a"},{"line_number":136,"context_line":"   ``BackendAlreadySelected`` exception."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"513e699d_d3b4b4c4","line":134,"range":{"start_line":133,"start_character":3,"end_line":134,"end_character":13},"updated":"2025-02-04 10:01:36.000000000","message":"The previous example may make you think the opposite.\nEither it should demonstrate one single initialization, or maybe turned as a REPL example where the second initialization ends into an error with a ``BackendAlreadySelected`` and then this note explain why we observe an error like you did here.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":130,"context_line":"   init_backend(BackendType.THREADING)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":".. note::"},{"line_number":133,"context_line":"   Backend initialization can only occur **once** during the application"},{"line_number":134,"context_line":"   lifecycle."},{"line_number":135,"context_line":"   Attempting to initialize it more than once will raise a"},{"line_number":136,"context_line":"   ``BackendAlreadySelected`` exception."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"22cf4c4d_9641f2e3","line":134,"range":{"start_line":133,"start_character":3,"end_line":134,"end_character":13},"in_reply_to":"513e699d_d3b4b4c4","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":185,"context_line":"       # Initialize the backend (optional if you wish to use the default backend)"},{"line_number":186,"context_line":"       try:"},{"line_number":187,"context_line":"           init_backend(BackendType.EVENTLET)"},{"line_number":188,"context_line":"       except Exception as e:"},{"line_number":189,"context_line":"           print(f\"Error during backend initialization: {e}\")"},{"line_number":190,"context_line":"           return"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"42346756_3a60843c","line":188,"range":{"start_line":188,"start_character":14,"end_line":188,"end_character":23},"updated":"2025-02-04 10:01:36.000000000","message":"Would rather catch specific exception to demonstrate their usage.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":185,"context_line":"       # Initialize the backend (optional if you wish to use the default backend)"},{"line_number":186,"context_line":"       try:"},{"line_number":187,"context_line":"           init_backend(BackendType.EVENTLET)"},{"line_number":188,"context_line":"       except Exception as e:"},{"line_number":189,"context_line":"           print(f\"Error during backend initialization: {e}\")"},{"line_number":190,"context_line":"           return"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"f82f9271_29fa27c5","line":188,"range":{"start_line":188,"start_character":14,"end_line":188,"end_character":23},"in_reply_to":"42346756_3a60843c","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"       # Here, you can use ServiceLauncher and other components to launch your services."},{"line_number":204,"context_line":"       # For example:"},{"line_number":205,"context_line":"       # launcher \u003d ServiceLauncher(...)"},{"line_number":206,"context_line":"       # launcher.launch_service(...)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   if __name__ \u003d\u003d \"__main__\":"},{"line_number":209,"context_line":"       main()"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ac53da46_1eea86b2","line":206,"range":{"start_line":205,"start_character":0,"end_line":206,"end_character":37},"updated":"2025-02-04 10:01:36.000000000","message":"As this is an example, I don\u0027t think we need to comment these lines.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"       # Here, you can use ServiceLauncher and other components to launch your services."},{"line_number":204,"context_line":"       # For example:"},{"line_number":205,"context_line":"       # launcher \u003d ServiceLauncher(...)"},{"line_number":206,"context_line":"       # launcher.launch_service(...)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"   if __name__ \u003d\u003d \"__main__\":"},{"line_number":209,"context_line":"       main()"}],"source_content_type":"text/x-rst","patch_set":2,"id":"15b690f5_f1033d6b","line":206,"range":{"start_line":205,"start_character":0,"end_line":206,"end_character":37},"in_reply_to":"ac53da46_1eea86b2","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":208,"context_line":"   if __name__ \u003d\u003d \"__main__\":"},{"line_number":209,"context_line":"       main()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"Testing and Resetting the Backend"},{"line_number":212,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"For unit testing or scenarios where the backend needs to be reinitialized, an"},{"line_number":215,"context_line":"internal function ``_reset_backend()`` is provided in"},{"line_number":216,"context_line":"``oslo_service/backend/__init__.py``."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":".. warning::"},{"line_number":219,"context_line":"   This function is intended for **testing purposes only** and should not be"},{"line_number":220,"context_line":"   used in production."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Example for Tests"},{"line_number":223,"context_line":"~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"f5b853bb_189eb698","line":220,"range":{"start_line":211,"start_character":0,"end_line":220,"end_character":22},"updated":"2025-02-04 10:01:36.000000000","message":"That\u0027s internal and private mechanism where we do not want user to put their hands, so I\u0027d suggest to remove this section.\n\nFeel free to add it to a maintenance purpose docs if you want to document internal mechanism for backend developers/maintainers.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":208,"context_line":"   if __name__ \u003d\u003d \"__main__\":"},{"line_number":209,"context_line":"       main()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"Testing and Resetting the Backend"},{"line_number":212,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"For unit testing or scenarios where the backend needs to be reinitialized, an"},{"line_number":215,"context_line":"internal function ``_reset_backend()`` is provided in"},{"line_number":216,"context_line":"``oslo_service/backend/__init__.py``."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":".. warning::"},{"line_number":219,"context_line":"   This function is intended for **testing purposes only** and should not be"},{"line_number":220,"context_line":"   used in production."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Example for Tests"},{"line_number":223,"context_line":"~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ae1f4b06_aa8a1e07","line":220,"range":{"start_line":211,"start_character":0,"end_line":220,"end_character":22},"in_reply_to":"f5b853bb_189eb698","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c382aeaf19e55adb25db1cb128e1e0ead778839b","unresolved":true,"context_lines":[{"line_number":220,"context_line":"   used in production."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Example for Tests"},{"line_number":223,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":224,"context_line":".. code-block:: python"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"   from oslo_service.backend import _reset_backend, init_backend, BackendType"}],"source_content_type":"text/x-rst","patch_set":2,"id":"af450c51_4e66a55b","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":17},"updated":"2025-02-04 07:41:54.000000000","message":"Title level inconsistent","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":220,"context_line":"   used in production."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Example for Tests"},{"line_number":223,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":224,"context_line":".. code-block:: python"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"   from oslo_service.backend import _reset_backend, init_backend, BackendType"}],"source_content_type":"text/x-rst","patch_set":2,"id":"aba51346_93c40f0a","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":17},"in_reply_to":"726fe2f3_72e37268","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e1b43968188844fab5ef1ad589aefa753d67c330","unresolved":true,"context_lines":[{"line_number":220,"context_line":"   used in production."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Example for Tests"},{"line_number":223,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":224,"context_line":".. code-block:: python"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"   from oslo_service.backend import _reset_backend, init_backend, BackendType"}],"source_content_type":"text/x-rst","patch_set":2,"id":"726fe2f3_72e37268","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":17},"in_reply_to":"af450c51_4e66a55b","updated":"2025-02-04 09:10:19.000000000","message":"Thanks a lot. Right.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"70607a69477bd2cea7ea1c7b016a3d3d62419b41","unresolved":true,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Example for Tests"},{"line_number":223,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":224,"context_line":".. code-block:: python"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"   from oslo_service.backend import _reset_backend, init_backend, BackendType"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"   # Reset the backend for testing purposes"},{"line_number":229,"context_line":"   _reset_backend()"},{"line_number":230,"context_line":"   init_backend(BackendType.EVENTLET)"},{"line_number":231,"context_line":"   # Continue with your tests..."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":2,"id":"236afea7_72df03ed","line":231,"range":{"start_line":224,"start_character":0,"end_line":231,"end_character":32},"updated":"2025-02-04 10:01:36.000000000","message":"Same thing that with the previous section, I don\u0027t think we need to speak about it here.\n\nWould be more a maintenance details.","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c2fcf4e6b2af973ce7e756692aefe447bf1c1f38","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"Example for Tests"},{"line_number":223,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":224,"context_line":".. code-block:: python"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"   from oslo_service.backend import _reset_backend, init_backend, BackendType"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"   # Reset the backend for testing purposes"},{"line_number":229,"context_line":"   _reset_backend()"},{"line_number":230,"context_line":"   init_backend(BackendType.EVENTLET)"},{"line_number":231,"context_line":"   # Continue with your tests..."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":2,"id":"44cd3b30_ec9a54b8","line":231,"range":{"start_line":224,"start_character":0,"end_line":231,"end_character":32},"in_reply_to":"236afea7_72df03ed","updated":"2025-07-02 13:43:25.000000000","message":"Done","commit_id":"30c071047122f0306b6365562f61a84c8d634904"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ac4242533a757f0dfdb4f329d13c64b5bff8e4d1","unresolved":true,"context_lines":[{"line_number":20,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This system was introduced to enable a"},{"line_number":23,"context_line":"**gradual transition away from Eventlet**, which has known limitations for"},{"line_number":24,"context_line":"scaling and debugging in some Python environments. By using the backend system,"},{"line_number":25,"context_line":"you can test, adopt, or migrate to the Threading backend while keeping the same"},{"line_number":26,"context_line":"public API and service structure."}],"source_content_type":"text/x-rst","patch_set":10,"id":"5e59d39d_14db7037","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":41},"updated":"2025-07-04 15:15:54.000000000","message":"Would be good to reference https://specs.openstack.org/openstack/oslo-specs/specs/epoxy/remove-eventlet-from-oslo-service.html","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":20,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This system was introduced to enable a"},{"line_number":23,"context_line":"**gradual transition away from Eventlet**, which has known limitations for"},{"line_number":24,"context_line":"scaling and debugging in some Python environments. By using the backend system,"},{"line_number":25,"context_line":"you can test, adopt, or migrate to the Threading backend while keeping the same"},{"line_number":26,"context_line":"public API and service structure."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3c2b67ed_e771c64a","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":41},"in_reply_to":"5e59d39d_14db7037","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ac4242533a757f0dfdb4f329d13c64b5bff8e4d1","unresolved":true,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"1. **Explicit initialization**"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"   Call ``init_backend()`` early in your application entrypoint:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"   .. code-block:: python"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"06c224c6_763a7b92","line":61,"range":{"start_line":61,"start_character":27,"end_line":61,"end_character":32},"updated":"2025-07-04 15:15:54.000000000","message":"Would be good to precise how early it should be. Perhaps you can also give an example by linking the Nova patch here.\n\nhttps://review.opendev.org/c/openstack/nova/+/948311","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"1. **Explicit initialization**"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"   Call ``init_backend()`` early in your application entrypoint:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"   .. code-block:: python"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"52d94534_63655335","line":61,"range":{"start_line":61,"start_character":27,"end_line":61,"end_character":32},"in_reply_to":"06c224c6_763a7b92","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ac4242533a757f0dfdb4f329d13c64b5bff8e4d1","unresolved":true,"context_lines":[{"line_number":88,"context_line":"   to decide which backend to load."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. note::"},{"line_number":91,"context_line":"   There is **no automatic oslo.config option** for ``service_backend``."},{"line_number":92,"context_line":"   If you want to make the backend configurable through your application\u0027s"},{"line_number":93,"context_line":"   config file, you need to define and parse that option yourself, then"},{"line_number":94,"context_line":"   call ``init_backend()`` with the selected value."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Accessing Backend Components"},{"line_number":97,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":10,"id":"37b621c1_1a9b2df7","line":94,"range":{"start_line":91,"start_character":3,"end_line":94,"end_character":51},"updated":"2025-07-04 15:15:54.000000000","message":"Would be good to add a sentence to explain why we made this choice.","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":152,"context_line":"   if __name__ \u003d\u003d \"__main__\":"},{"line_number":153,"context_line":"       main()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Threading vs. Eventlet: Key Differences"},{"line_number":156,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":".. list-table::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"870c40c7_48e8a9c0","line":155,"range":{"start_line":155,"start_character":0,"end_line":155,"end_character":39},"updated":"2025-07-04 11:58:20.000000000","message":"I\u0027d suggest to precise that you speak about the backends and not about the difference between native threads and eventlet. I find it confusing in the current form. I wasn\u0027t sure what you tried to compare the first time I saw the table below.\n\nI\u0027d also suggest to split the comparison by columns in the table below. One column compared \"aspect\" (already there), one column eventlet backend, and one column threading backend.\n\nI also think this comparison miss from the elements planed for removal (WSGI server, backdoor, etc)","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":152,"context_line":"   if __name__ \u003d\u003d \"__main__\":"},{"line_number":153,"context_line":"       main()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Threading vs. Eventlet: Key Differences"},{"line_number":156,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":".. list-table::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"92bd463f_63e0faf5","line":155,"range":{"start_line":155,"start_character":0,"end_line":155,"end_character":39},"in_reply_to":"870c40c7_48e8a9c0","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":159,"context_line":"   :widths: 25 75"},{"line_number":160,"context_line":"   :header-rows: 1"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"   * - Aspect"},{"line_number":163,"context_line":"     - Comparison"},{"line_number":164,"context_line":"   * - Concurrency model"},{"line_number":165,"context_line":"     - Eventlet uses green threads; Threading uses native Python threads."}],"source_content_type":"text/x-rst","patch_set":10,"id":"e1221e2a_b7684dd5","line":162,"range":{"start_line":162,"start_character":7,"end_line":162,"end_character":13},"updated":"2025-07-04 11:58:20.000000000","message":"Would be good to rename it \"compared Aspects\" of \"comparison\" for sake of readiness.","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":159,"context_line":"   :widths: 25 75"},{"line_number":160,"context_line":"   :header-rows: 1"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"   * - Aspect"},{"line_number":163,"context_line":"     - Comparison"},{"line_number":164,"context_line":"   * - Concurrency model"},{"line_number":165,"context_line":"     - Eventlet uses green threads; Threading uses native Python threads."}],"source_content_type":"text/x-rst","patch_set":10,"id":"d7cb3959_441cb43e","line":162,"range":{"start_line":162,"start_character":7,"end_line":162,"end_character":13},"in_reply_to":"e1221e2a_b7684dd5","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":160,"context_line":"   :header-rows: 1"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"   * - Aspect"},{"line_number":163,"context_line":"     - Comparison"},{"line_number":164,"context_line":"   * - Concurrency model"},{"line_number":165,"context_line":"     - Eventlet uses green threads; Threading uses native Python threads."},{"line_number":166,"context_line":"   * - Process management"}],"source_content_type":"text/x-rst","patch_set":10,"id":"170a84ef_0967be5c","line":163,"range":{"start_line":163,"start_character":7,"end_line":163,"end_character":17},"updated":"2025-07-04 11:58:20.000000000","message":"Would be good to split it into 2 columns \"Eventlet backend\" and \"Threading backend\"","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":160,"context_line":"   :header-rows: 1"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"   * - Aspect"},{"line_number":163,"context_line":"     - Comparison"},{"line_number":164,"context_line":"   * - Concurrency model"},{"line_number":165,"context_line":"     - Eventlet uses green threads; Threading uses native Python threads."},{"line_number":166,"context_line":"   * - Process management"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d3802797_6479ac28","line":163,"range":{"start_line":163,"start_character":7,"end_line":163,"end_character":17},"in_reply_to":"170a84ef_0967be5c","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":164,"context_line":"   * - Concurrency model"},{"line_number":165,"context_line":"     - Eventlet uses green threads; Threading uses native Python threads."},{"line_number":166,"context_line":"   * - Process management"},{"line_number":167,"context_line":"     - Threading uses Cotyledon for multi-process support."},{"line_number":168,"context_line":"   * - Looping calls"},{"line_number":169,"context_line":"     - Threading uses Futurist for thread pools."},{"line_number":170,"context_line":"   * - API"}],"source_content_type":"text/x-rst","patch_set":10,"id":"464def46_6faed062","line":167,"range":{"start_line":167,"start_character":7,"end_line":167,"end_character":58},"updated":"2025-07-04 11:58:20.000000000","message":"Where Eventlet use greenlet","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":164,"context_line":"   * - Concurrency model"},{"line_number":165,"context_line":"     - Eventlet uses green threads; Threading uses native Python threads."},{"line_number":166,"context_line":"   * - Process management"},{"line_number":167,"context_line":"     - Threading uses Cotyledon for multi-process support."},{"line_number":168,"context_line":"   * - Looping calls"},{"line_number":169,"context_line":"     - Threading uses Futurist for thread pools."},{"line_number":170,"context_line":"   * - API"}],"source_content_type":"text/x-rst","patch_set":10,"id":"a52a3a60_56540361","line":167,"range":{"start_line":167,"start_character":7,"end_line":167,"end_character":58},"in_reply_to":"464def46_6faed062","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":166,"context_line":"   * - Process management"},{"line_number":167,"context_line":"     - Threading uses Cotyledon for multi-process support."},{"line_number":168,"context_line":"   * - Looping calls"},{"line_number":169,"context_line":"     - Threading uses Futurist for thread pools."},{"line_number":170,"context_line":"   * - API"},{"line_number":171,"context_line":"     - Same public API: your service code does not change."},{"line_number":172,"context_line":"   * - Debugging"}],"source_content_type":"text/x-rst","patch_set":10,"id":"47170422_95f78e7e","line":169,"range":{"start_line":169,"start_character":7,"end_line":169,"end_character":48},"updated":"2025-07-04 11:58:20.000000000","message":"Ditto, maybe with some words about cooperative multitasking. https://removal.eventlet.org/guide/understanding-eventlet/#common-usages","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":166,"context_line":"   * - Process management"},{"line_number":167,"context_line":"     - Threading uses Cotyledon for multi-process support."},{"line_number":168,"context_line":"   * - Looping calls"},{"line_number":169,"context_line":"     - Threading uses Futurist for thread pools."},{"line_number":170,"context_line":"   * - API"},{"line_number":171,"context_line":"     - Same public API: your service code does not change."},{"line_number":172,"context_line":"   * - Debugging"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c0897494_263b25b4","line":169,"range":{"start_line":169,"start_character":7,"end_line":169,"end_character":48},"in_reply_to":"47170422_95f78e7e","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":170,"context_line":"   * - API"},{"line_number":171,"context_line":"     - Same public API: your service code does not change."},{"line_number":172,"context_line":"   * - Debugging"},{"line_number":173,"context_line":"     - Threading backend may produce clearer stack traces."},{"line_number":174,"context_line":"   * - Compatibility"},{"line_number":175,"context_line":"     - Threading avoids some known issues with green threads on newer Python"},{"line_number":176,"context_line":"       versions."}],"source_content_type":"text/x-rst","patch_set":10,"id":"1c2894fe_54640057","line":173,"range":{"start_line":173,"start_character":7,"end_line":173,"end_character":58},"updated":"2025-07-04 11:58:20.000000000","message":"That\u0027s not clear if you speak of the eventlet backdoor [1], or simply about the fact that native threads are easier to debug due to all the recents improvements [2] around debug in the CPython side, and about native threads in general.\n\n[1] https://opendev.org/openstack/oslo.service/src/branch/master/oslo_service/eventlet_backdoor.py\n[2] https://docs.python.org/es/dev/whatsnew/3.14.html#whatsnew314-pep768","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":170,"context_line":"   * - API"},{"line_number":171,"context_line":"     - Same public API: your service code does not change."},{"line_number":172,"context_line":"   * - Debugging"},{"line_number":173,"context_line":"     - Threading backend may produce clearer stack traces."},{"line_number":174,"context_line":"   * - Compatibility"},{"line_number":175,"context_line":"     - Threading avoids some known issues with green threads on newer Python"},{"line_number":176,"context_line":"       versions."}],"source_content_type":"text/x-rst","patch_set":10,"id":"869df71e_f59d24c1","line":173,"range":{"start_line":173,"start_character":7,"end_line":173,"end_character":58},"in_reply_to":"1c2894fe_54640057","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":171,"context_line":"     - Same public API: your service code does not change."},{"line_number":172,"context_line":"   * - Debugging"},{"line_number":173,"context_line":"     - Threading backend may produce clearer stack traces."},{"line_number":174,"context_line":"   * - Compatibility"},{"line_number":175,"context_line":"     - Threading avoids some known issues with green threads on newer Python"},{"line_number":176,"context_line":"       versions."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"277d7a88_60302100","line":174,"range":{"start_line":174,"start_character":7,"end_line":174,"end_character":20},"updated":"2025-07-04 11:58:20.000000000","message":"I would precise which compatibility we compare (CPython, RLocks, etc)","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":171,"context_line":"     - Same public API: your service code does not change."},{"line_number":172,"context_line":"   * - Debugging"},{"line_number":173,"context_line":"     - Threading backend may produce clearer stack traces."},{"line_number":174,"context_line":"   * - Compatibility"},{"line_number":175,"context_line":"     - Threading avoids some known issues with green threads on newer Python"},{"line_number":176,"context_line":"       versions."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"d48a539f_a6d30243","line":174,"range":{"start_line":174,"start_character":7,"end_line":174,"end_character":20},"in_reply_to":"277d7a88_60302100","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"19cde66ebe5edeb3e641d7297bbdeac275b57d98","unresolved":true,"context_lines":[{"line_number":175,"context_line":"     - Threading avoids some known issues with green threads on newer Python"},{"line_number":176,"context_line":"       versions."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Resetting for Tests"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"If you are writing unit tests, you may need to reset the backend cache"}],"source_content_type":"text/x-rst","patch_set":10,"id":"96ee04ec_da3e62e5","line":178,"range":{"start_line":178,"start_character":0,"end_line":178,"end_character":19},"updated":"2025-07-04 11:58:20.000000000","message":"That would be worth to also document how to setup backends tests in devstack and gates like did by Neutron and Nova.\n\nhttps://review.opendev.org/c/openstack/devstack/+/948436\nhttps://gibizer.github.io/posts/Eventlet-Removal-Scheduler-First-Run/\nhttps://review.opendev.org/c/openstack/devstack/+/948408","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":false,"context_lines":[{"line_number":175,"context_line":"     - Threading avoids some known issues with green threads on newer Python"},{"line_number":176,"context_line":"       versions."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Resetting for Tests"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"If you are writing unit tests, you may need to reset the backend cache"}],"source_content_type":"text/x-rst","patch_set":10,"id":"06406942_7f43a83a","line":178,"range":{"start_line":178,"start_character":0,"end_line":178,"end_character":19},"in_reply_to":"96ee04ec_da3e62e5","updated":"2025-07-16 15:08:14.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ac4242533a757f0dfdb4f329d13c64b5bff8e4d1","unresolved":true,"context_lines":[{"line_number":192,"context_line":"References"},{"line_number":193,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"- `oslo.service Git repository \u003chttps://opendev.org/openstack/oslo.service\u003e`_"},{"line_number":196,"context_line":"- Python: `importlib \u003chttps://docs.python.org/3/library/importlib.html\u003e`_"},{"line_number":197,"context_line":"- Python: `enum.Enum \u003chttps://docs.python.org/3/library/enum.html\u003e`_"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"For any questions, please refer to the OpenStack mailing list"},{"line_number":200,"context_line":"or the oslo.service maintainers."}],"source_content_type":"text/x-rst","patch_set":10,"id":"c71f0ac8_8d2a548d","line":197,"range":{"start_line":195,"start_character":0,"end_line":197,"end_character":68},"updated":"2025-07-04 15:15:54.000000000","message":"Why do we need these references? They never appear in this document. I don\u0027t think we need to reference the git repo of oslo.service. \n\nThat would be better to add useful links in reference with the intent of this backend notion:\n- https://specs.openstack.org/openstack/oslo-specs/specs/epoxy/remove-eventlet-from-oslo-service.html\n- https://removal.eventlet.org/\n- https://wiki.openstack.org/wiki/Eventlet-removal\n- https://governance.openstack.org/tc/goals/selected/remove-eventlet.html","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"d476e5f23f67f4d7396e63efe4f41405fd1487df","unresolved":false,"context_lines":[{"line_number":192,"context_line":"References"},{"line_number":193,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"- `oslo.service Git repository \u003chttps://opendev.org/openstack/oslo.service\u003e`_"},{"line_number":196,"context_line":"- Python: `importlib \u003chttps://docs.python.org/3/library/importlib.html\u003e`_"},{"line_number":197,"context_line":"- Python: `enum.Enum \u003chttps://docs.python.org/3/library/enum.html\u003e`_"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"For any questions, please refer to the OpenStack mailing list"},{"line_number":200,"context_line":"or the oslo.service maintainers."}],"source_content_type":"text/x-rst","patch_set":10,"id":"f232e773_6d69393e","line":197,"range":{"start_line":195,"start_character":0,"end_line":197,"end_character":68},"in_reply_to":"c71f0ac8_8d2a548d","updated":"2025-07-16 10:46:16.000000000","message":"Done","commit_id":"72822ff0e164613e3f4d7fd96c2166eb7f90f33b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6486e795996f8c8c144e868cccc17466b467e891","unresolved":true,"context_lines":[{"line_number":181,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"The following table summarizes the main differences **between the backends**"},{"line_number":184,"context_line":"to help you choose:"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":".. list-table::"},{"line_number":187,"context_line":"   :widths: 20 40 40"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1bbc249b_3ced4133","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":18},"updated":"2025-07-16 15:08:14.000000000","message":"I do not thing there is any choice to made there, simply a better understanding of what imply a backend migration.","commit_id":"299af3afb908e3b674e1d15a5626153ad2daf795"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e3f10dc56e58920db8810a4cb7b2e46f2238cd80","unresolved":true,"context_lines":[{"line_number":181,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"The following table summarizes the main differences **between the backends**"},{"line_number":184,"context_line":"to help you choose:"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":".. list-table::"},{"line_number":187,"context_line":"   :widths: 20 40 40"}],"source_content_type":"text/x-rst","patch_set":11,"id":"8848a628_a2c7647a","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":18},"in_reply_to":"1bbc249b_3ced4133","updated":"2025-07-17 10:01:34.000000000","message":"Thanks a lot! Good point, you’re right, it’s more about understanding the implications than making a choice.\nDo you think I should update that now, or would a follow-up patch be fine? Really appreciate the insight!","commit_id":"299af3afb908e3b674e1d15a5626153ad2daf795"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"694ac40ff9e9981e34787cf3d94abf0180094dff","unresolved":false,"context_lines":[{"line_number":181,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"The following table summarizes the main differences **between the backends**"},{"line_number":184,"context_line":"to help you choose:"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":".. list-table::"},{"line_number":187,"context_line":"   :widths: 20 40 40"}],"source_content_type":"text/x-rst","patch_set":11,"id":"f706ac28_fb940f6c","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":18},"in_reply_to":"8848a628_a2c7647a","updated":"2025-07-17 13:41:23.000000000","message":"Well, as this is a really simple update and as I\u0027m the only person that voted here, I\u0027d suggest to fix it here and now directly.","commit_id":"299af3afb908e3b674e1d15a5626153ad2daf795"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"dd623e9999fed63d547ebc7ce0013a68d2cfd2d3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"User Documentation for the oslo.service Backend System"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"541d275c_f9df371c","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":59},"updated":"2025-08-05 12:29:17.000000000","message":"Can we rename this file to `doc/source/user/backend.rst` ? I don\u0027t get the point of creating a dedicated top-level directory for this.","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e5ff4e67974760f16273fe85a6c283cffd5a9d22","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"User Documentation for the oslo.service Backend System"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"b15b1e93_4924e78a","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":59},"in_reply_to":"541d275c_f9df371c","updated":"2025-08-06 10:18:33.000000000","message":"Done","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"dd623e9999fed63d547ebc7ce0013a68d2cfd2d3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"User Documentation for the oslo.service Backend System"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Introduction"}],"source_content_type":"text/x-rst","patch_set":12,"id":"adaf7f09_06ad3127","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":54},"updated":"2025-08-05 12:29:17.000000000","message":"This title is redundant to be part of Usage section. Something like \"Backend system\" is enough.","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e5ff4e67974760f16273fe85a6c283cffd5a9d22","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"User Documentation for the oslo.service Backend System"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Introduction"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fb32c95a_ac8c892a","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":54},"in_reply_to":"adaf7f09_06ad3127","updated":"2025-08-06 10:18:33.000000000","message":"Done","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"dd623e9999fed63d547ebc7ce0013a68d2cfd2d3","unresolved":true,"context_lines":[{"line_number":12,"context_line":"Currently, two backends are implemented and supported:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"- **Eventlet backend**: The traditional concurrency backend based on green"},{"line_number":15,"context_line":"    threads and cooperative multitasking (`greenlet` library)."},{"line_number":16,"context_line":"- **Threading backend**: A new backend using native Python threads, Cotyledon,"},{"line_number":17,"context_line":"  and Futurist, designed to be compatible with modern Python versions,"},{"line_number":18,"context_line":"  simplify debugging, and improve maintainability."}],"source_content_type":"text/x-rst","patch_set":12,"id":"296dee5a_c152d6cc","line":15,"range":{"start_line":15,"start_character":2,"end_line":15,"end_character":4},"updated":"2025-08-05 12:29:17.000000000","message":"Remove two spaces here","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e5ff4e67974760f16273fe85a6c283cffd5a9d22","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Currently, two backends are implemented and supported:"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"- **Eventlet backend**: The traditional concurrency backend based on green"},{"line_number":15,"context_line":"    threads and cooperative multitasking (`greenlet` library)."},{"line_number":16,"context_line":"- **Threading backend**: A new backend using native Python threads, Cotyledon,"},{"line_number":17,"context_line":"  and Futurist, designed to be compatible with modern Python versions,"},{"line_number":18,"context_line":"  simplify debugging, and improve maintainability."}],"source_content_type":"text/x-rst","patch_set":12,"id":"711f3dbc_42e54c2b","line":15,"range":{"start_line":15,"start_character":2,"end_line":15,"end_character":4},"in_reply_to":"296dee5a_c152d6cc","updated":"2025-08-06 10:18:33.000000000","message":"Done","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"}],"releasenotes/notes/backend-docs-7bd6dce205e7fb70.yaml":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"dd623e9999fed63d547ebc7ce0013a68d2cfd2d3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add comprehensive user documentation for the new backend system."},{"line_number":5,"context_line":"    This includes guidance on how to initialize and select a backend,"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"2d26a249_43a9549a","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"updated":"2025-08-05 12:29:17.000000000","message":"Release note is supposed to describe change in software and we don\u0027t usually add release note about documentation. IMO we should drop this.","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e5ff4e67974760f16273fe85a6c283cffd5a9d22","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add comprehensive user documentation for the new backend system."},{"line_number":5,"context_line":"    This includes guidance on how to initialize and select a backend,"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"38a198cf_13baf450","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"in_reply_to":"194469cf_bc391abe","updated":"2025-08-06 10:18:33.000000000","message":"Done","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"e55c32ba9cb36afd19689dc3a8f70cc9d0491824","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add comprehensive user documentation for the new backend system."},{"line_number":5,"context_line":"    This includes guidance on how to initialize and select a backend,"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"194469cf_bc391abe","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"in_reply_to":"2d26a249_43a9549a","updated":"2025-08-05 12:30:53.000000000","message":"I agree","commit_id":"88410e07861668b7e4096b79d8ec0941f650fc0b"}]}
