)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a478d7940d4146e3df728d86944fdcbe302f7095","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All the files was only used by service. Merged in one file."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Rename the common package with underscore to indicate it\u0027s private one. Made the same for the eventlet and threading backend."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id81d2737f45695f6ccda4807924615b9673bf376"},{"line_number":14,"context_line":"Signed-off-by: Daniel Bengtsson \u003cdbengt@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"0e6871d8_c440f9a6","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":125},"updated":"2025-08-06 10:33:04.000000000","message":"Wrap this line at 72 chars so that this does not mess up git history.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"14a6cb3ce471d6c3f3ba5b2d419232b613c473a9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All the files was only used by service. Merged in one file."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Rename the common package with underscore to indicate it\u0027s private one. Made the same for the eventlet and threading backend."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id81d2737f45695f6ccda4807924615b9673bf376"},{"line_number":14,"context_line":"Signed-off-by: Daniel Bengtsson \u003cdbengt@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1731fcf2_d849fb48","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":125},"in_reply_to":"0e6871d8_c440f9a6","updated":"2025-08-07 00:24:05.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2ca34bddf79e634591b8abd04e3bf1c2e4df2590","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All the files was only used by service. Merged in one file."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Rename the common package with underscore to indicate it\u0027s private one. Made the same for the eventlet and threading backend."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id81d2737f45695f6ccda4807924615b9673bf376"},{"line_number":14,"context_line":"Signed-off-by: Daniel Bengtsson \u003cdbengt@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a4c83cd_d5c7dd59","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":125},"in_reply_to":"1731fcf2_d849fb48","updated":"2025-08-07 10:29:53.000000000","message":"You reverted this in PS6...","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"003f670f518bcaa828d332341e705988efb95134","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"60d6f8b1_5cb5ca2d","updated":"2025-07-15 13:45:45.000000000","message":"IMO this should no longer be merged, because we did create a release with these new modules. If we attempt to merge these we should deprecate the existing interface. (That\u0027s why I asked merging these BEFORE we merged the original change...","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"1d7b425ca729f1ba570af94da0625efad065a22b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1d9ab74b_5d5175bd","in_reply_to":"0cce1ead_c3efdee2","updated":"2025-07-16 12:49:10.000000000","message":"... though even in that case we can technically use oslo_service.backend._eventlet, as python does not prohibit such import really.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"d348424e5ee56295d49f4fcdb25e2d1775eb83e6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6c016fa7_b570f75a","in_reply_to":"1d9ab74b_5d5175bd","updated":"2025-07-17 09:58:43.000000000","message":"Thanks a lot for the code review and the helpful suggestions!\n\nJust to make sure I fully understand the expectations.\nShould I rename common to _common, and do the same for backend submodules like threading and eventlet, to clearly mark them as internal?\nAnd in backend/__init__.py, should I explicitly define the public API like this?\n\nFor example:\n\n__all__ \u003d [\n    \"get_component\",\n    \"init_backend\",\n    \"BackendType\",\n    \"register_backend_default_hook\",\n    \"get_backend_type\",\n    \"get_backend\"\n]\n\nLet me know if that aligns with what you had in mind, and I’ll adjust accordingly!","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"11d36c889cbf889e08588693ed31a861274e7e2f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0cce1ead_c3efdee2","in_reply_to":"2db04fcf_6b6ff6e6","updated":"2025-07-16 12:44:48.000000000","message":"One use case we should be aware is where we have to override the implementation. Technically we can use the interface exposed in oslo_service.threadgroup though that requires additional hacks to make sure the threading backend is use everywhere, by adding multiple backend overrides in every single place.\n\nhttps://github.com/openstack/heat/blob/b9ea49af0f941f3af66bc9f995a58d65b2f67532/heat/engine/service.py#L33","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"7d0b8260eff4bfc5fd31c7b48244a739b07c254a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"75d8d8d9_800584a5","in_reply_to":"30027806_9cede58a","updated":"2025-07-16 12:06:00.000000000","message":"I agree with Takashi, I think there is a lack of naming convention in the backend logic, though.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8102e0c6771f37f5a00fc72a720084287c310d1c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"30027806_9cede58a","in_reply_to":"41fdc50c_6f87058f","updated":"2025-07-16 10:56:39.000000000","message":"Technically, any module without _ prefix is \"exposed\". I understand that you haven\u0027t seen any user using these new interfaces, as long as we keep these \"public\" we should be careful about restructuring.\n\nI\u0027m ok that we skip the deprecation process because these are added during this cycle although released, as long as a proper release note is added. However in any case if we don\u0027t want to be careful about the interfaces we expose in eventlet.backend then we should move these to a \"pviate\" name such as eventlet.backend._common at this timing.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"553b25666b7a04521af257a51f7fe6e17b6d9aeb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"abecf1f3_6317156c","in_reply_to":"60d6f8b1_5cb5ca2d","updated":"2025-07-15 14:41:35.000000000","message":"I understand what you mean, but it\u0027s used externally. So I think it\u0027s ok.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"23790e5bab67404c5b10c11b33c8ac9fb91f97a3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"de2f4fe9_5086dba1","in_reply_to":"6c016fa7_b570f75a","updated":"2025-08-05 12:08:44.000000000","message":"I think that\u0027s correct.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"bb760236d5d27a175d3310091f944c24dac194e7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2db04fcf_6b6ff6e6","in_reply_to":"75d8d8d9_800584a5","updated":"2025-07-16 12:11:42.000000000","message":"Only things like `get_component`, `init_backend`, `BackendType`, `register_backend_default_hook`, `get_backend_type`, `get_backend` should be public. In other words, only the public functions of this file should be considered as public https://opendev.org/openstack/oslo.service/src/branch/master/oslo_service/backend/__init__.py","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b18ddeff5e9ac3d306fcb00c8e95c01f33f097a5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ac45952e_18535c4a","in_reply_to":"abecf1f3_6317156c","updated":"2025-07-15 14:55:19.000000000","message":"I assume you meant it\u0027s NOT YET used externally, right ?\n\nAs long as a module is not intentionally made private, we should assume these may be used externally. If we don\u0027t want any users to import these directly then we should rename oslo_service.backend.common to oslo_service.backend._common (and others like threading, eventlet), with a proper release note.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"0a8838a727f3253a762cea21eef3742c5d53e472","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d412130b_3b85c5a7","in_reply_to":"ac45952e_18535c4a","updated":"2025-07-15 17:59:54.000000000","message":"Yes, sorry — that’s what I meant. We can rename the common package to make it private. Does that sound good to you?","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"440a2ae508f1c8cfd0876369d75f295b9b4fd4a4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f7031ab3_0cb4f865","in_reply_to":"d412130b_3b85c5a7","updated":"2025-07-16 08:46:42.000000000","message":"One question for my personal understanding, are you sure it is needed to deprecate the existing interfaces?\nIMO these interfaces are internal mechanisms.\nAs these interfaces are already in the backend logic, users use them via oslo.service API and the `get_component` function:\n\nFrom a user perspective that would lead to something like:\n\n```\nfrom oslo_service.backend import get_component\nSignalExit \u003d get_component(\"SignalExit\")\n```\n\nMoving these interfaces would not change the exposed user API.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"875d1a1b428785e00f7c99ab7b18ebc066aa6d79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"69277ace_0318a423","in_reply_to":"de2f4fe9_5086dba1","updated":"2025-08-07 00:24:43.000000000","message":"Done","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"e1deeb66902dbf75a44aac731426ef8b29fc464b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"41fdc50c_6f87058f","in_reply_to":"f7031ab3_0cb4f865","updated":"2025-07-16 09:13:32.000000000","message":"Yes, I fully agree, I do not think it will be necessary to deprecate the existing interfaces. As I mentioned previously, and as Hervé demonstrated with his example, these interfaces are typically used through the public API and the get_component function.\nI am also working on adding common LoopingCall and ThreadGroup implementations, but I do not believe this will cause any issues.","commit_id":"28ff2100aa99450348a1e148521ed51caa818a25"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5db324e7f62cf5530a27235d8b3a57c51fa1dea4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"26b435ab_a4a2d108","updated":"2025-08-05 12:16:32.000000000","message":"Can we at least add a release note to describe the change, because this breaks services using \"public\" interfaces we had (like heat).","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"23790e5bab67404c5b10c11b33c8ac9fb91f97a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"103791c2_31781d3e","updated":"2025-08-05 12:08:44.000000000","message":"PS2 LGTM","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ccbebbaa61dee10539386f30d7b39fe53e9ef000","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f3856420_9a400269","in_reply_to":"26b435ab_a4a2d108","updated":"2025-08-05 14:50:38.000000000","message":"Done","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"addae413_e293d48a","updated":"2025-08-06 11:57:28.000000000","message":"Do you mind taking a few minutes to look over the diff to catch any eventlet/threading which should not be replaced ? There are two many places to spot, IMHO.","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"eb5a0959444472ace50187b34e5bec8386860e62","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"be12bce4_78fa645f","in_reply_to":"addae413_e293d48a","updated":"2025-08-07 00:25:54.000000000","message":"Thanks a lot, you\u0027re right. Now it must be done.","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"1ee6f26d2b2d95e736a570f9f9695a96a8489653","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"08a68f31_e30627d5","updated":"2025-08-07 11:30:10.000000000","message":"LGTM. Thanks guys","commit_id":"89026fdbae9b86074e599ee81d136e58190d1206"}],"oslo_service/_options.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6caa389314d9cd4e3deada4cac0f30edcdbc3c2d","unresolved":true,"context_lines":[{"line_number":29,"context_line":"                   \"The \u0027backdoor_port\u0027 option is deprecated and will be\""},{"line_number":30,"context_line":"                   \" removed in a future release.\""},{"line_number":31,"context_line":"               ),"},{"line_number":32,"context_line":"               help\u003d\"Enable _eventlet backdoor.  %s\" % help_for_backdoor_port),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027backdoor_socket\u0027,"},{"line_number":34,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":35,"context_line":"               deprecated_reason\u003d("}],"source_content_type":"text/x-python","patch_set":4,"id":"8d3014cc_a2ea11eb","line":32,"range":{"start_line":32,"start_character":28,"end_line":32,"end_character":29},"updated":"2025-08-06 10:13:41.000000000","message":"revert this","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"875d1a1b428785e00f7c99ab7b18ebc066aa6d79","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                   \"The \u0027backdoor_port\u0027 option is deprecated and will be\""},{"line_number":30,"context_line":"                   \" removed in a future release.\""},{"line_number":31,"context_line":"               ),"},{"line_number":32,"context_line":"               help\u003d\"Enable _eventlet backdoor.  %s\" % help_for_backdoor_port),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027backdoor_socket\u0027,"},{"line_number":34,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":35,"context_line":"               deprecated_reason\u003d("}],"source_content_type":"text/x-python","patch_set":4,"id":"8c00b843_fb968ce7","line":32,"range":{"start_line":32,"start_character":28,"end_line":32,"end_character":29},"in_reply_to":"8d3014cc_a2ea11eb","updated":"2025-08-07 00:24:43.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6caa389314d9cd4e3deada4cac0f30edcdbc3c2d","unresolved":true,"context_lines":[{"line_number":36,"context_line":"                   \"The \u0027backdoor_socket\u0027 option is deprecated and will be\""},{"line_number":37,"context_line":"                   \" removed in a future release.\""},{"line_number":38,"context_line":"               ),"},{"line_number":39,"context_line":"               help\u003d\"Enable _eventlet backdoor, using the provided path\""},{"line_number":40,"context_line":"                    \" as a unix socket that can receive connections. This\""},{"line_number":41,"context_line":"                    \" option is mutually exclusive with \u0027backdoor_port\u0027 in\""},{"line_number":42,"context_line":"                    \" that only one should be provided. If both are provided\""}],"source_content_type":"text/x-python","patch_set":4,"id":"a9fe96f6_5b342160","line":39,"range":{"start_line":39,"start_character":28,"end_line":39,"end_character":29},"updated":"2025-08-06 10:13:41.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"875d1a1b428785e00f7c99ab7b18ebc066aa6d79","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                   \"The \u0027backdoor_socket\u0027 option is deprecated and will be\""},{"line_number":37,"context_line":"                   \" removed in a future release.\""},{"line_number":38,"context_line":"               ),"},{"line_number":39,"context_line":"               help\u003d\"Enable _eventlet backdoor, using the provided path\""},{"line_number":40,"context_line":"                    \" as a unix socket that can receive connections. This\""},{"line_number":41,"context_line":"                    \" option is mutually exclusive with \u0027backdoor_port\u0027 in\""},{"line_number":42,"context_line":"                    \" that only one should be provided. If both are provided\""}],"source_content_type":"text/x-python","patch_set":4,"id":"c6613349_69e5d6a8","line":39,"range":{"start_line":39,"start_character":28,"end_line":39,"end_character":29},"in_reply_to":"a9fe96f6_5b342160","updated":"2025-08-07 00:24:43.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}],"oslo_service/backend/__init__.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5db324e7f62cf5530a27235d8b3a57c51fa1dea4","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        return  # already initialized with same value; no-op"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    backend_name \u003d type_.value"},{"line_number":93,"context_line":"    LOG.info(f\"Loading backend: {backend_name}\")"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    try:"},{"line_number":96,"context_line":"        module_name \u003d f\"oslo_service.backend.{backend_name}\""}],"source_content_type":"text/x-python","patch_set":2,"id":"a09c7b16_a581788c","line":93,"range":{"start_line":93,"start_character":33,"end_line":93,"end_character":45},"updated":"2025-08-05 12:16:32.000000000","message":"IMO we should strip _ from here as well. Or we can probably adjust only L96.","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ccbebbaa61dee10539386f30d7b39fe53e9ef000","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        return  # already initialized with same value; no-op"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    backend_name \u003d type_.value"},{"line_number":93,"context_line":"    LOG.info(f\"Loading backend: {backend_name}\")"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    try:"},{"line_number":96,"context_line":"        module_name \u003d f\"oslo_service.backend.{backend_name}\""}],"source_content_type":"text/x-python","patch_set":2,"id":"a4144221_5b520681","line":93,"range":{"start_line":93,"start_character":33,"end_line":93,"end_character":45},"in_reply_to":"a09c7b16_a581788c","updated":"2025-08-05 14:50:38.000000000","message":"Done","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"bcb4f8a0f65aa8d645ab1942ee30735de938a086","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    LOG.info(f\"Loading backend: {backend_name}\")"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    try:"},{"line_number":105,"context_line":"        module_name \u003d f\"oslo_service.backend._{backend_name}\""},{"line_number":106,"context_line":"        module \u003d importlib.import_module(module_name)"},{"line_number":107,"context_line":"        backend_class \u003d getattr(module, f\"{backend_name.capitalize()}Backend\")"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7d691c2a_6db2e2b8","line":105,"updated":"2025-08-07 10:31:36.000000000","message":"This is much cleaner, isn\u0027t it ?","commit_id":"89026fdbae9b86074e599ee81d136e58190d1206"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"1620b28ab2c176c8b49bf8655dde8a384a71a236","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    LOG.info(f\"Loading backend: {backend_name}\")"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    try:"},{"line_number":105,"context_line":"        module_name \u003d f\"oslo_service.backend._{backend_name}\""},{"line_number":106,"context_line":"        module \u003d importlib.import_module(module_name)"},{"line_number":107,"context_line":"        backend_class \u003d getattr(module, f\"{backend_name.capitalize()}Backend\")"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3b30fd9d_d4123785","line":105,"in_reply_to":"7d691c2a_6db2e2b8","updated":"2025-08-07 11:48:30.000000000","message":"Ok, thanks a lot!","commit_id":"89026fdbae9b86074e599ee81d136e58190d1206"}],"oslo_service/backend/_eventlet/loopingcall.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":120,"context_line":"            looping. Value is in seconds."},{"line_number":121,"context_line":"        :param stop_on_exception: Whether to stop if an exception"},{"line_number":122,"context_line":"            occurs."},{"line_number":123,"context_line":"        :returns: _eventlet event instance"},{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        if self._thread is not None:"},{"line_number":126,"context_line":"            raise RuntimeError(self._RUN_ONLY_ONE_MESSAGE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fc910298_3289094b","line":123,"range":{"start_line":123,"start_character":18,"end_line":123,"end_character":27},"updated":"2025-08-06 11:57:28.000000000","message":"Revert this","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            looping. Value is in seconds."},{"line_number":121,"context_line":"        :param stop_on_exception: Whether to stop if an exception"},{"line_number":122,"context_line":"            occurs."},{"line_number":123,"context_line":"        :returns: _eventlet event instance"},{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        if self._thread is not None:"},{"line_number":126,"context_line":"            raise RuntimeError(self._RUN_ONLY_ONE_MESSAGE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b5e47153_f2f6d2fa","line":123,"range":{"start_line":123,"start_character":18,"end_line":123,"end_character":27},"in_reply_to":"fc910298_3289094b","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":252,"context_line":"                    delay \u003d periodic_interval_max"},{"line_number":253,"context_line":"                else:"},{"line_number":254,"context_line":"                    # Note(suro-patz): An application used to receive a"},{"line_number":255,"context_line":"                    #     TypeError thrown from _eventlet layer, before"},{"line_number":256,"context_line":"                    #     this RuntimeError was introduced."},{"line_number":257,"context_line":"                    raise RuntimeError("},{"line_number":258,"context_line":"                        self._TASK_MISSING_SLEEP_VALUE_MESSAGE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5b30d5_b5b65f6a","line":255,"range":{"start_line":255,"start_character":48,"end_line":255,"end_character":57},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                    delay \u003d periodic_interval_max"},{"line_number":253,"context_line":"                else:"},{"line_number":254,"context_line":"                    # Note(suro-patz): An application used to receive a"},{"line_number":255,"context_line":"                    #     TypeError thrown from _eventlet layer, before"},{"line_number":256,"context_line":"                    #     this RuntimeError was introduced."},{"line_number":257,"context_line":"                    raise RuntimeError("},{"line_number":258,"context_line":"                        self._TASK_MISSING_SLEEP_VALUE_MESSAGE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"eced887b_1c8b6696","line":255,"range":{"start_line":255,"start_character":48,"end_line":255,"end_character":57},"in_reply_to":"7a5b30d5_b5b65f6a","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}],"oslo_service/backend/_eventlet/service.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":87,"context_line":"        # Py_AddPendingCall()."},{"line_number":88,"context_line":"        #"},{"line_number":89,"context_line":"        # We only do one thing: schedule a call to _handle_signal_cb() later."},{"line_number":90,"context_line":"        # _eventlet.spawn() is not signal-safe: _handle_signal() can be called"},{"line_number":91,"context_line":"        # during a call to _eventlet.spawn(). This case is supported, it is"},{"line_number":92,"context_line":"        # ok to schedule multiple calls to _handle_signal() with the same"},{"line_number":93,"context_line":"        # signal number."}],"source_content_type":"text/x-python","patch_set":4,"id":"e29c6abe_86736c58","line":90,"range":{"start_line":90,"start_character":10,"end_line":90,"end_character":19},"updated":"2025-08-06 11:57:28.000000000","message":"Revert this","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        # Py_AddPendingCall()."},{"line_number":88,"context_line":"        #"},{"line_number":89,"context_line":"        # We only do one thing: schedule a call to _handle_signal_cb() later."},{"line_number":90,"context_line":"        # _eventlet.spawn() is not signal-safe: _handle_signal() can be called"},{"line_number":91,"context_line":"        # during a call to _eventlet.spawn(). This case is supported, it is"},{"line_number":92,"context_line":"        # ok to schedule multiple calls to _handle_signal() with the same"},{"line_number":93,"context_line":"        # signal number."}],"source_content_type":"text/x-python","patch_set":4,"id":"596fba80_5313e02f","line":90,"range":{"start_line":90,"start_character":10,"end_line":90,"end_character":19},"in_reply_to":"e29c6abe_86736c58","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        #"},{"line_number":89,"context_line":"        # We only do one thing: schedule a call to _handle_signal_cb() later."},{"line_number":90,"context_line":"        # _eventlet.spawn() is not signal-safe: _handle_signal() can be called"},{"line_number":91,"context_line":"        # during a call to _eventlet.spawn(). This case is supported, it is"},{"line_number":92,"context_line":"        # ok to schedule multiple calls to _handle_signal() with the same"},{"line_number":93,"context_line":"        # signal number."},{"line_number":94,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":4,"id":"4fef2caf_06ae9efc","line":91,"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        #"},{"line_number":89,"context_line":"        # We only do one thing: schedule a call to _handle_signal_cb() later."},{"line_number":90,"context_line":"        # _eventlet.spawn() is not signal-safe: _handle_signal() can be called"},{"line_number":91,"context_line":"        # during a call to _eventlet.spawn(). This case is supported, it is"},{"line_number":92,"context_line":"        # ok to schedule multiple calls to _handle_signal() with the same"},{"line_number":93,"context_line":"        # signal number."},{"line_number":94,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":4,"id":"16c99cf6_8f89b4a2","line":91,"in_reply_to":"4fef2caf_06ae9efc","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":97,"context_line":"        # clear(): clear() is not reentrant (bug #1538204)."},{"line_number":98,"context_line":"        eventlet.spawn(self._handle_signal_cb, signo, frame)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # On Python \u003e\u003d 3.5, ensure that _eventlet\u0027s poll() or sleep() call is"},{"line_number":101,"context_line":"        # interrupted by raising an exception. If the signal handler does not"},{"line_number":102,"context_line":"        # raise an exception then due to PEP 475 the call will not return until"},{"line_number":103,"context_line":"        # an event is detected on a file descriptor or the timeout is reached,"}],"source_content_type":"text/x-python","patch_set":4,"id":"59451092_3bbec464","line":100,"range":{"start_line":100,"start_character":40,"end_line":100,"end_character":49},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # clear(): clear() is not reentrant (bug #1538204)."},{"line_number":98,"context_line":"        eventlet.spawn(self._handle_signal_cb, signo, frame)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # On Python \u003e\u003d 3.5, ensure that _eventlet\u0027s poll() or sleep() call is"},{"line_number":101,"context_line":"        # interrupted by raising an exception. If the signal handler does not"},{"line_number":102,"context_line":"        # raise an exception then due to PEP 475 the call will not return until"},{"line_number":103,"context_line":"        # an event is detected on a file descriptor or the timeout is reached,"}],"source_content_type":"text/x-python","patch_set":4,"id":"2e400df7_82c33a75","line":100,"range":{"start_line":100,"start_character":40,"end_line":100,"end_character":49},"in_reply_to":"59451092_3bbec464","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        # interrupted by raising an exception. If the signal handler does not"},{"line_number":102,"context_line":"        # raise an exception then due to PEP 475 the call will not return until"},{"line_number":103,"context_line":"        # an event is detected on a file descriptor or the timeout is reached,"},{"line_number":104,"context_line":"        # and thus _eventlet will not wake up and notice that there has been a"},{"line_number":105,"context_line":"        # new thread spawned."},{"line_number":106,"context_line":"        if self.__force_interrupt_on_signal:"},{"line_number":107,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"44cabb27_1aa3074d","line":104,"range":{"start_line":104,"start_character":19,"end_line":104,"end_character":28},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        # interrupted by raising an exception. If the signal handler does not"},{"line_number":102,"context_line":"        # raise an exception then due to PEP 475 the call will not return until"},{"line_number":103,"context_line":"        # an event is detected on a file descriptor or the timeout is reached,"},{"line_number":104,"context_line":"        # and thus _eventlet will not wake up and notice that there has been a"},{"line_number":105,"context_line":"        # new thread spawned."},{"line_number":106,"context_line":"        if self.__force_interrupt_on_signal:"},{"line_number":107,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"51beb0b4_33367aae","line":104,"range":{"start_line":104,"start_character":19,"end_line":104,"end_character":28},"in_reply_to":"44cabb27_1aa3074d","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":119,"context_line":"        \"\"\"Set up to do the Right Thing with signals during poll() and sleep()."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        Deal with the changes introduced in PEP 475 that prevent a"},{"line_number":122,"context_line":"        signal from interrupting _eventlet\u0027s call to poll() or sleep()."},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        select_module \u003d eventlet.patcher.original(\u0027select\u0027)"},{"line_number":125,"context_line":"        self.__force_interrupt_on_signal \u003d hasattr(select_module, \u0027poll\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"33986c0a_9e9a95ac","line":122,"range":{"start_line":122,"start_character":33,"end_line":122,"end_character":42},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        \"\"\"Set up to do the Right Thing with signals during poll() and sleep()."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        Deal with the changes introduced in PEP 475 that prevent a"},{"line_number":122,"context_line":"        signal from interrupting _eventlet\u0027s call to poll() or sleep()."},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        select_module \u003d eventlet.patcher.original(\u0027select\u0027)"},{"line_number":125,"context_line":"        self.__force_interrupt_on_signal \u003d hasattr(select_module, \u0027poll\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"8b92131c_c476f91a","line":122,"range":{"start_line":122,"start_character":33,"end_line":122,"end_character":42},"in_reply_to":"33986c0a_9e9a95ac","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":440,"context_line":"    def _child_process(self, service):"},{"line_number":441,"context_line":"        self._child_process_handle_signal()"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        # Reopen the _eventlet hub to make sure we don\u0027t share an epoll"},{"line_number":444,"context_line":"        # fd with parent and/or siblings, which would be bad"},{"line_number":445,"context_line":"        eventlet.hubs.use_hub()"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3de0f37c_19c16906","line":443,"range":{"start_line":443,"start_character":21,"end_line":443,"end_character":30},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":440,"context_line":"    def _child_process(self, service):"},{"line_number":441,"context_line":"        self._child_process_handle_signal()"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        # Reopen the _eventlet hub to make sure we don\u0027t share an epoll"},{"line_number":444,"context_line":"        # fd with parent and/or siblings, which would be bad"},{"line_number":445,"context_line":"        eventlet.hubs.use_hub()"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"e5c48ac2_2b2f078c","line":443,"range":{"start_line":443,"start_character":21,"end_line":443,"end_character":30},"in_reply_to":"3de0f37c_19c16906","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}],"oslo_service/backend/_threading/loopingcall.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        self._future \u003d None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _sleep(self, timeout):"},{"line_number":125,"context_line":"        # Instead of _eventlet.sleep, we wait on the abort event for timeout"},{"line_number":126,"context_line":"        # seconds."},{"line_number":127,"context_line":"        self._abort.wait(timeout)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"170cd772_fade88c2","line":125,"range":{"start_line":125,"start_character":21,"end_line":125,"end_character":30},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self._future \u003d None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _sleep(self, timeout):"},{"line_number":125,"context_line":"        # Instead of _eventlet.sleep, we wait on the abort event for timeout"},{"line_number":126,"context_line":"        # seconds."},{"line_number":127,"context_line":"        self._abort.wait(timeout)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"36db96a2_06aa8035","line":125,"range":{"start_line":125,"start_character":21,"end_line":125,"end_character":30},"in_reply_to":"170cd772_fade88c2","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}],"oslo_service/backend/_threading/service.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":223,"context_line":"        if wait_interval is not None:"},{"line_number":224,"context_line":"            warnings.warn("},{"line_number":225,"context_line":"                \"\u0027wait_interval\u0027 is deprecated and has no effect in the\""},{"line_number":226,"context_line":"                \" \u0027_threading\u0027 backend. It is accepted only for compatibility\""},{"line_number":227,"context_line":"                \" reasons and will be removed.\","},{"line_number":228,"context_line":"                category\u003dDeprecationWarning,"},{"line_number":229,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"a13d853b_a10b0cd5","line":226,"range":{"start_line":226,"start_character":19,"end_line":226,"end_character":29},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        if wait_interval is not None:"},{"line_number":224,"context_line":"            warnings.warn("},{"line_number":225,"context_line":"                \"\u0027wait_interval\u0027 is deprecated and has no effect in the\""},{"line_number":226,"context_line":"                \" \u0027_threading\u0027 backend. It is accepted only for compatibility\""},{"line_number":227,"context_line":"                \" reasons and will be removed.\","},{"line_number":228,"context_line":"                category\u003dDeprecationWarning,"},{"line_number":229,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"665e3eea_b7c8217d","line":226,"range":{"start_line":226,"start_character":19,"end_line":226,"end_character":29},"in_reply_to":"a13d853b_a10b0cd5","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}],"oslo_service/backend/_threading/threadgroup.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":26,"context_line":"class Thread:"},{"line_number":27,"context_line":"    \"\"\"A simple wrapper around native threads."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        This class mimics the _eventlet Thread interface (stop, wait, link,"},{"line_number":30,"context_line":"        cancel) for compatibility with oslo.service consumers. The methods"},{"line_number":31,"context_line":"        `stop`, `link`, and `cancel` are implemented as no-ops in the threading"},{"line_number":32,"context_line":"        backend since native Python threads do not support these operations"}],"source_content_type":"text/x-python","patch_set":4,"id":"64428862_d3bb889c","line":29,"range":{"start_line":29,"start_character":30,"end_line":29,"end_character":39},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class Thread:"},{"line_number":27,"context_line":"    \"\"\"A simple wrapper around native threads."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        This class mimics the _eventlet Thread interface (stop, wait, link,"},{"line_number":30,"context_line":"        cancel) for compatibility with oslo.service consumers. The methods"},{"line_number":31,"context_line":"        `stop`, `link`, and `cancel` are implemented as no-ops in the threading"},{"line_number":32,"context_line":"        backend since native Python threads do not support these operations"}],"source_content_type":"text/x-python","patch_set":4,"id":"f676d018_6d43bd75","line":29,"range":{"start_line":29,"start_character":30,"end_line":29,"end_character":39},"in_reply_to":"64428862_d3bb889c","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        return self._ident"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def stop(self):"},{"line_number":47,"context_line":"        # These methods are no-ops in the _threading backend because native"},{"line_number":48,"context_line":"        # Python threads cannot be forcefully stopped or cancelled once"},{"line_number":49,"context_line":"        # started. They are kept here to preserve API compatibility with the"},{"line_number":50,"context_line":"        # _eventlet backend, where these methods are implemented."}],"source_content_type":"text/x-python","patch_set":4,"id":"3357f63a_93bd92e5","line":47,"range":{"start_line":47,"start_character":42,"end_line":47,"end_character":52},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"14a6cb3ce471d6c3f3ba5b2d419232b613c473a9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        return self._ident"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def stop(self):"},{"line_number":47,"context_line":"        # These methods are no-ops in the _threading backend because native"},{"line_number":48,"context_line":"        # Python threads cannot be forcefully stopped or cancelled once"},{"line_number":49,"context_line":"        # started. They are kept here to preserve API compatibility with the"},{"line_number":50,"context_line":"        # _eventlet backend, where these methods are implemented."}],"source_content_type":"text/x-python","patch_set":4,"id":"3b290984_bba9c419","line":47,"range":{"start_line":47,"start_character":42,"end_line":47,"end_character":52},"in_reply_to":"3357f63a_93bd92e5","updated":"2025-08-07 00:24:05.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        # These methods are no-ops in the _threading backend because native"},{"line_number":48,"context_line":"        # Python threads cannot be forcefully stopped or cancelled once"},{"line_number":49,"context_line":"        # started. They are kept here to preserve API compatibility with the"},{"line_number":50,"context_line":"        # _eventlet backend, where these methods are implemented."},{"line_number":51,"context_line":"        pass"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def wait(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"f2324ab4_fde0d2c3","line":50,"range":{"start_line":50,"start_character":10,"end_line":50,"end_character":19},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"14a6cb3ce471d6c3f3ba5b2d419232b613c473a9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # These methods are no-ops in the _threading backend because native"},{"line_number":48,"context_line":"        # Python threads cannot be forcefully stopped or cancelled once"},{"line_number":49,"context_line":"        # started. They are kept here to preserve API compatibility with the"},{"line_number":50,"context_line":"        # _eventlet backend, where these methods are implemented."},{"line_number":51,"context_line":"        pass"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def wait(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9b8703ea_e0ad216e","line":50,"range":{"start_line":50,"start_character":10,"end_line":50,"end_character":19},"in_reply_to":"f2324ab4_fde0d2c3","updated":"2025-08-07 00:24:05.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class ThreadGroup:"},{"line_number":66,"context_line":"    \"\"\"A group of threads and timers similar to _eventlet\u0027s GreenPool.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def __init__(self, max_threads\u003d1000):"},{"line_number":69,"context_line":"        self.max_threads \u003d max_threads"}],"source_content_type":"text/x-python","patch_set":4,"id":"87588eb8_a9cdbaa3","line":66,"range":{"start_line":66,"start_character":48,"end_line":66,"end_character":57},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"14a6cb3ce471d6c3f3ba5b2d419232b613c473a9","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class ThreadGroup:"},{"line_number":66,"context_line":"    \"\"\"A group of threads and timers similar to _eventlet\u0027s GreenPool.\"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def __init__(self, max_threads\u003d1000):"},{"line_number":69,"context_line":"        self.max_threads \u003d max_threads"}],"source_content_type":"text/x-python","patch_set":4,"id":"678ee4e5_4eec73ad","line":66,"range":{"start_line":66,"start_character":48,"end_line":66,"end_character":57},"in_reply_to":"87588eb8_a9cdbaa3","updated":"2025-08-07 00:24:05.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"469acaebbffb58668a265da5f991e75cd7bd055f","unresolved":true,"context_lines":[{"line_number":224,"context_line":"        for timer in timers_copy:"},{"line_number":225,"context_line":"            timer.wait()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    # NOTE(tkajinam): To keep interface consistent with _eventlet version"},{"line_number":228,"context_line":"    wait \u003d waitall"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def _set_attr(self, obj, attr, value):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1746fdd7_356fe107","line":227,"range":{"start_line":227,"start_character":56,"end_line":227,"end_character":65},"updated":"2025-08-06 11:57:28.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"14a6cb3ce471d6c3f3ba5b2d419232b613c473a9","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        for timer in timers_copy:"},{"line_number":225,"context_line":"            timer.wait()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    # NOTE(tkajinam): To keep interface consistent with _eventlet version"},{"line_number":228,"context_line":"    wait \u003d waitall"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def _set_attr(self, obj, attr, value):"}],"source_content_type":"text/x-python","patch_set":4,"id":"520cf1e5_2842a38d","line":227,"range":{"start_line":227,"start_character":56,"end_line":227,"end_character":65},"in_reply_to":"1746fdd7_356fe107","updated":"2025-08-07 00:24:05.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}],"oslo_service/eventlet_backdoor.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5db324e7f62cf5530a27235d8b3a57c51fa1dea4","unresolved":true,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"def _listen_func(host, port):"},{"line_number":164,"context_line":"    # _eventlet is setting SO_REUSEPORT by default from v0.20."},{"line_number":165,"context_line":"    # But we can configure it by passing reuse_port argument"},{"line_number":166,"context_line":"    # from v0.22"},{"line_number":167,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1459b724_20cba45e","line":164,"range":{"start_line":164,"start_character":6,"end_line":164,"end_character":7},"updated":"2025-08-05 12:16:32.000000000","message":"revert this","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ccbebbaa61dee10539386f30d7b39fe53e9ef000","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"def _listen_func(host, port):"},{"line_number":164,"context_line":"    # _eventlet is setting SO_REUSEPORT by default from v0.20."},{"line_number":165,"context_line":"    # But we can configure it by passing reuse_port argument"},{"line_number":166,"context_line":"    # from v0.22"},{"line_number":167,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"e1073c85_eb52f7cb","line":164,"range":{"start_line":164,"start_character":6,"end_line":164,"end_character":7},"in_reply_to":"1459b724_20cba45e","updated":"2025-08-05 14:50:38.000000000","message":"Done","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5db324e7f62cf5530a27235d8b3a57c51fa1dea4","unresolved":true,"context_lines":[{"line_number":231,"context_line":"            backdoor_socket_path \u003d conf.backdoor_socket.format(pid\u003dos.getpid())"},{"line_number":232,"context_line":"        except (KeyError, IndexError, ValueError) as e:"},{"line_number":233,"context_line":"            backdoor_socket_path \u003d conf.backdoor_socket"},{"line_number":234,"context_line":"            LOG.warning(\"Could not apply format string to _eventlet \""},{"line_number":235,"context_line":"                        \"backdoor socket path ({}) - continuing with \""},{"line_number":236,"context_line":"                        \"unformatted path\""},{"line_number":237,"context_line":"                        \"\".format(e))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9373f383_33233924","line":234,"range":{"start_line":234,"start_character":58,"end_line":234,"end_character":59},"updated":"2025-08-05 12:16:32.000000000","message":"This is a message for users and IMO heading _ is just confusing and should not be added.","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ccbebbaa61dee10539386f30d7b39fe53e9ef000","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            backdoor_socket_path \u003d conf.backdoor_socket.format(pid\u003dos.getpid())"},{"line_number":232,"context_line":"        except (KeyError, IndexError, ValueError) as e:"},{"line_number":233,"context_line":"            backdoor_socket_path \u003d conf.backdoor_socket"},{"line_number":234,"context_line":"            LOG.warning(\"Could not apply format string to _eventlet \""},{"line_number":235,"context_line":"                        \"backdoor socket path ({}) - continuing with \""},{"line_number":236,"context_line":"                        \"unformatted path\""},{"line_number":237,"context_line":"                        \"\".format(e))"}],"source_content_type":"text/x-python","patch_set":2,"id":"e8a88105_3225e2a7","line":234,"range":{"start_line":234,"start_character":58,"end_line":234,"end_character":59},"in_reply_to":"9373f383_33233924","updated":"2025-08-05 14:50:38.000000000","message":"Done","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"}],"oslo_service/tests/backend/tests/test_backend_init.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5db324e7f62cf5530a27235d8b3a57c51fa1dea4","unresolved":true,"context_lines":[{"line_number":30,"context_line":"        backend_module._reset_backend()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_default_backend(self):"},{"line_number":33,"context_line":"        \"\"\"Test default backend is _eventlet.\"\"\""},{"line_number":34,"context_line":"        backend \u003d get_backend()"},{"line_number":35,"context_line":"        self.assertEqual(backend.__class__.__name__, \"EventletBackend\")"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"625fdabf_5045a9cc","line":33,"range":{"start_line":33,"start_character":35,"end_line":33,"end_character":36},"updated":"2025-08-05 12:16:32.000000000","message":"revert this","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ccbebbaa61dee10539386f30d7b39fe53e9ef000","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        backend_module._reset_backend()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_default_backend(self):"},{"line_number":33,"context_line":"        \"\"\"Test default backend is _eventlet.\"\"\""},{"line_number":34,"context_line":"        backend \u003d get_backend()"},{"line_number":35,"context_line":"        self.assertEqual(backend.__class__.__name__, \"EventletBackend\")"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"67d958e2_a39a1ede","line":33,"range":{"start_line":33,"start_character":35,"end_line":33,"end_character":36},"in_reply_to":"625fdabf_5045a9cc","updated":"2025-08-05 14:50:38.000000000","message":"Done","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5db324e7f62cf5530a27235d8b3a57c51fa1dea4","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        get_backend()"},{"line_number":46,"context_line":"        with self.assertRaisesRegex("},{"line_number":47,"context_line":"            exceptions.BackendAlreadySelected,"},{"line_number":48,"context_line":"            \"Backend already set to \u0027_eventlet\u0027\","},{"line_number":49,"context_line":"        ):"},{"line_number":50,"context_line":"            init_backend(BackendType.THREADING)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d16fc204_0a4bb810","line":48,"range":{"start_line":48,"start_character":37,"end_line":48,"end_character":38},"updated":"2025-08-05 12:16:32.000000000","message":"ditto","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ccbebbaa61dee10539386f30d7b39fe53e9ef000","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        get_backend()"},{"line_number":46,"context_line":"        with self.assertRaisesRegex("},{"line_number":47,"context_line":"            exceptions.BackendAlreadySelected,"},{"line_number":48,"context_line":"            \"Backend already set to \u0027_eventlet\u0027\","},{"line_number":49,"context_line":"        ):"},{"line_number":50,"context_line":"            init_backend(BackendType.THREADING)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"64b8797c_ebb6e974","line":48,"range":{"start_line":48,"start_character":37,"end_line":48,"end_character":38},"in_reply_to":"d16fc204_0a4bb810","updated":"2025-08-05 14:50:38.000000000","message":"Done","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5db324e7f62cf5530a27235d8b3a57c51fa1dea4","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        init_backend(BackendType.EVENTLET)"},{"line_number":55,"context_line":"        with self.assertRaisesRegex("},{"line_number":56,"context_line":"            exceptions.BackendAlreadySelected,"},{"line_number":57,"context_line":"            \"Backend already set to \u0027_eventlet\u0027\","},{"line_number":58,"context_line":"        ):"},{"line_number":59,"context_line":"            init_backend(BackendType.THREADING)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"14f28aa9_8d8cbe68","line":57,"range":{"start_line":57,"start_character":37,"end_line":57,"end_character":38},"updated":"2025-08-05 12:16:32.000000000","message":"ditto","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"ccbebbaa61dee10539386f30d7b39fe53e9ef000","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        init_backend(BackendType.EVENTLET)"},{"line_number":55,"context_line":"        with self.assertRaisesRegex("},{"line_number":56,"context_line":"            exceptions.BackendAlreadySelected,"},{"line_number":57,"context_line":"            \"Backend already set to \u0027_eventlet\u0027\","},{"line_number":58,"context_line":"        ):"},{"line_number":59,"context_line":"            init_backend(BackendType.THREADING)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df0b364d_5c35fe78","line":57,"range":{"start_line":57,"start_character":37,"end_line":57,"end_character":38},"in_reply_to":"14f28aa9_8d8cbe68","updated":"2025-08-05 14:50:38.000000000","message":"Done","commit_id":"dadd729190bdaa22f5194d11f9ca6f618d8d2571"}],"oslo_service/wsgi.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"37e3f52dddd9d48b41f3fd1c8f5efc60971f5eeb","unresolved":true,"context_lines":[{"line_number":74,"context_line":"    def __init__(self, conf, name, app, host\u003d\u00270.0.0.0\u0027, port\u003d0,  # nosec"},{"line_number":75,"context_line":"                 pool_size\u003dNone, protocol\u003deventlet.wsgi.HttpProtocol,"},{"line_number":76,"context_line":"                 backlog\u003d128, use_ssl\u003dFalse, max_url_len\u003dNone,"},{"line_number":77,"context_line":"                 logger_name\u003d\u0027_eventlet.wsgi.server\u0027,"},{"line_number":78,"context_line":"                 socket_family\u003dNone, socket_file\u003dNone, socket_mode\u003dNone):"},{"line_number":79,"context_line":"        \"\"\"Initialize, but do not start, a WSGI server."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"74e75f87_4b9a9d39","line":77,"range":{"start_line":77,"start_character":30,"end_line":77,"end_character":39},"updated":"2025-08-06 11:58:51.000000000","message":"IMO this should NOT be updated","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def __init__(self, conf, name, app, host\u003d\u00270.0.0.0\u0027, port\u003d0,  # nosec"},{"line_number":75,"context_line":"                 pool_size\u003dNone, protocol\u003deventlet.wsgi.HttpProtocol,"},{"line_number":76,"context_line":"                 backlog\u003d128, use_ssl\u003dFalse, max_url_len\u003dNone,"},{"line_number":77,"context_line":"                 logger_name\u003d\u0027_eventlet.wsgi.server\u0027,"},{"line_number":78,"context_line":"                 socket_family\u003dNone, socket_file\u003dNone, socket_mode\u003dNone):"},{"line_number":79,"context_line":"        \"\"\"Initialize, but do not start, a WSGI server."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"0237e0c9_eeddef1d","line":77,"range":{"start_line":77,"start_character":30,"end_line":77,"end_character":39},"in_reply_to":"74e75f87_4b9a9d39","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"37e3f52dddd9d48b41f3fd1c8f5efc60971f5eeb","unresolved":true,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _get_socket(self, host, port, backlog):"},{"line_number":136,"context_line":"        bind_addr \u003d (host, port)"},{"line_number":137,"context_line":"        # TODO(dims): _eventlet\u0027s green dns/socket module does not actually"},{"line_number":138,"context_line":"        # support IPv6 in getaddrinfo(). We need to get around this in the"},{"line_number":139,"context_line":"        # future or monitor upstream for a fix"},{"line_number":140,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6b3eb8e9_d5588b79","line":137,"range":{"start_line":137,"start_character":22,"end_line":137,"end_character":31},"updated":"2025-08-06 11:58:51.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _get_socket(self, host, port, backlog):"},{"line_number":136,"context_line":"        bind_addr \u003d (host, port)"},{"line_number":137,"context_line":"        # TODO(dims): _eventlet\u0027s green dns/socket module does not actually"},{"line_number":138,"context_line":"        # support IPv6 in getaddrinfo(). We need to get around this in the"},{"line_number":139,"context_line":"        # future or monitor upstream for a fix"},{"line_number":140,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"70f7c832_af722ded","line":137,"range":{"start_line":137,"start_character":22,"end_line":137,"end_character":31},"in_reply_to":"6b3eb8e9_d5588b79","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"37e3f52dddd9d48b41f3fd1c8f5efc60971f5eeb","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        # sockets can hang around forever without keepalive"},{"line_number":206,"context_line":"        _socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # This option isn\u0027t available in the OS X version of _eventlet"},{"line_number":209,"context_line":"        if hasattr(socket, \u0027TCP_KEEPIDLE\u0027):"},{"line_number":210,"context_line":"            _socket.setsockopt(socket.IPPROTO_TCP,"},{"line_number":211,"context_line":"                               socket.TCP_KEEPIDLE,"}],"source_content_type":"text/x-python","patch_set":4,"id":"f78c2d3f_55dfc7ca","line":208,"range":{"start_line":208,"start_character":61,"end_line":208,"end_character":70},"updated":"2025-08-06 11:58:51.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        # sockets can hang around forever without keepalive"},{"line_number":206,"context_line":"        _socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # This option isn\u0027t available in the OS X version of _eventlet"},{"line_number":209,"context_line":"        if hasattr(socket, \u0027TCP_KEEPIDLE\u0027):"},{"line_number":210,"context_line":"            _socket.setsockopt(socket.IPPROTO_TCP,"},{"line_number":211,"context_line":"                               socket.TCP_KEEPIDLE,"}],"source_content_type":"text/x-python","patch_set":4,"id":"de5b7db5_063ae749","line":208,"range":{"start_line":208,"start_character":61,"end_line":208,"end_character":70},"in_reply_to":"f78c2d3f_55dfc7ca","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"37e3f52dddd9d48b41f3fd1c8f5efc60971f5eeb","unresolved":true,"context_lines":[{"line_number":222,"context_line":"        self._pool.resize(self.pool_size)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def stop(self):"},{"line_number":225,"context_line":"        \"\"\"Stops _eventlet server. Doesn\u0027t allow accept new connecting."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :returns: None"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"b05600a3_f70a2753","line":225,"range":{"start_line":225,"start_character":17,"end_line":225,"end_character":26},"updated":"2025-08-06 11:58:51.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        self._pool.resize(self.pool_size)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def stop(self):"},{"line_number":225,"context_line":"        \"\"\"Stops _eventlet server. Doesn\u0027t allow accept new connecting."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :returns: None"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df8f5aae_6ac8f9e9","line":225,"range":{"start_line":225,"start_character":17,"end_line":225,"end_character":26},"in_reply_to":"b05600a3_f70a2753","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"37e3f52dddd9d48b41f3fd1c8f5efc60971f5eeb","unresolved":true,"context_lines":[{"line_number":230,"context_line":"        LOG.info(\"Stopping WSGI server.\")"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        if self._server is not None:"},{"line_number":233,"context_line":"            # let _eventlet close socket"},{"line_number":234,"context_line":"            self._pool.resize(0)"},{"line_number":235,"context_line":"            self._server.kill()"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"c0a3007e_23d4528f","line":233,"range":{"start_line":233,"start_character":18,"end_line":233,"end_character":27},"updated":"2025-08-06 11:58:51.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        LOG.info(\"Stopping WSGI server.\")"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        if self._server is not None:"},{"line_number":233,"context_line":"            # let _eventlet close socket"},{"line_number":234,"context_line":"            self._pool.resize(0)"},{"line_number":235,"context_line":"            self._server.kill()"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"13e6269b_d64d1c62","line":233,"range":{"start_line":233,"start_character":18,"end_line":233,"end_character":27},"in_reply_to":"c0a3007e_23d4528f","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"37e3f52dddd9d48b41f3fd1c8f5efc60971f5eeb","unresolved":true,"context_lines":[{"line_number":237,"context_line":"    def wait(self):"},{"line_number":238,"context_line":"        \"\"\"Block, until the server has stopped."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        Waits on the server\u0027s _eventlet to finish, then returns."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        :returns: None"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"4e40473f_3b43b47a","line":240,"range":{"start_line":240,"start_character":30,"end_line":240,"end_character":39},"updated":"2025-08-06 11:58:51.000000000","message":"ditto","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"5bae3a0273b32338a8cf28a0b18537b0665c636a","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    def wait(self):"},{"line_number":238,"context_line":"        \"\"\"Block, until the server has stopped."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        Waits on the server\u0027s _eventlet to finish, then returns."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        :returns: None"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3e49c91b_71967fa3","line":240,"range":{"start_line":240,"start_character":30,"end_line":240,"end_character":39},"in_reply_to":"4e40473f_3b43b47a","updated":"2025-08-07 00:15:27.000000000","message":"Done","commit_id":"ec5f6e30472d36eaa513dfa23e8812cb72c48d41"}]}
