)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"7f8d8bc974c7a40ec55a2f1f43aef4e5288b8de5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3d101de4_8b069a8e","updated":"2026-09-02 13:41:04.000000000","message":"Looks good, one suggestion below but it\u0027s optional\n\nReviewed with assistance from Claude Sonnet 5","commit_id":"9ee44b5b93f1b1214db44244f7e721e2f0cc3f3d"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"427bd30c32fc4d408fe7d21fd30b9b9ef7289b6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a1a98642_9a4eabd4","updated":"2026-09-02 13:42:11.000000000","message":"Sorry, one thing I missed. Can you add a releasenote using the \"reno new\" command with a description of the bugfix?","commit_id":"9ee44b5b93f1b1214db44244f7e721e2f0cc3f3d"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"ea99b649f54ee8f8ff573fb0313c814b739332ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5ba9194b_7002dbca","updated":"2026-09-02 15:25:52.000000000","message":"LGTM, thanks for adding the release note","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"6fd5f688f4c24150991d92c69088b51408e1c264","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"22fdcfd9_8f8d6230","updated":"2026-09-02 14:29:42.000000000","message":"added a release note entry","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"a23b399ff032a787b926b0e1337796fa67224552","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1b17fda8_08c22a6f","updated":"2026-09-03 12:38:56.000000000","message":"Added `conn.session.session.close()` (and changed my mind about a new close_user_neutron_client function)","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":5490,"name":"Kurt Garloff","email":"kurt@garloff.de","username":"kgarloff"},"change_message_id":"9db2d95b5fcf368692a84c5083d6ef48f945118d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f4a96306_7563ffc8","updated":"2026-09-03 16:26:56.000000000","message":"I retested to confirm that the leak exists with my 2025.1 test system (octavia 16.0.2dev14).\nIt does.\nI then patched it with patchset 4 and restarted the two octavia-api processes.\nNo more leaks!\nGreat work, thanks Bodo!","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"ed1ef2536e1a838150fdf34a5163439ae8176066","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7f1f96d3_17440c63","updated":"2026-09-03 13:04:03.000000000","message":"opened an sdk bug: https://bugs.launchpad.net/openstacksdk/+bug/2166351","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"553b42fc524c614251a73ca7bd50a998fdf09b32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4f70fdd3_7505fd23","in_reply_to":"1b17fda8_08c22a6f","updated":"2026-09-03 12:52:51.000000000","message":"ack, i\u0027ll let other folks review it, but LGTM","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5a935522c688be28f80ec890b2dc76f294e85943","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"696e2fc8_fae324cf","in_reply_to":"7f1f96d3_17440c63","updated":"2026-09-03 13:06:19.000000000","message":"great, thanks!","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":5490,"name":"Kurt Garloff","email":"kurt@garloff.de","username":"kgarloff"},"change_message_id":"329df03c68f18c4bb3087b8fb1a60d4677acc086","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ca49dd1b_8bb7d9f4","in_reply_to":"eb288320_5b3c1045","updated":"2026-09-15 16:09:33.000000000","message":"OK, inside the octavia_api container, I applied Artem\u0027s patches 0c49994ac1045f810b347106ef5ea38fb4cd950f, 4741636c9075a7eefe5f13c2fa0796b5fd8508a5\nand your Patchset6 669cff3608a89d79df35879f856cf7829942a346.\nI had to do some trivial manual resolution for Artem\u0027s patches to make them apply to 2025.1.\n\nI have three control plane nodes with octavia-api running now, one unpatched, one with Patchset5 and one with above described combination of 3 patches.\nResults:\n- The unpatched container continues to leak sockets\n- The two other containers have a rather stable number of TCP sockets (~10 per process).\n\nSo the new combination also survives the testing. I agree that the SDK should do the session cleanup, by the way, somewhat surprising to see it was not done before. Could have easily lead to leaks at other places ...\n\nI absolutely think this should be backported. Nightly `docker restart octavia_api` is not a good approach to keeping your OpenStack stable. I am a bit afraid that the combination of three patches is somewhat harder to get coordinated for backporting -- if so, we might look at patchset5 again for backporting ...\n\nThanks for your work Bodo and Artem!","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"ca1709a982a8fa2b9dbecbff4d118c28dab94317","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"eb288320_5b3c1045","in_reply_to":"f4a96306_7563ffc8","updated":"2026-09-04 08:43:22.000000000","message":"Kurt, I removed conn.session.session.close() here again as that will be handled by Artem\u0027s changes to openstacksdk and keystoneauth1. So you may need his patches too.","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"beff943983b64a0e4c4be6bfc3bbd373a75a5b93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3d58a911_f8c2d101","updated":"2026-09-04 08:38:03.000000000","message":"following is submitted for sdk/keystoneauth to improve connection closing\nhttps://review.opendev.org/c/openstack/openstacksdk/+/1003921\nhttps://review.opendev.org/c/openstack/keystoneauth/+/1003922","commit_id":"669cff3608a89d79df35879f856cf7829942a346"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"ef9399479f8d9cd4d9b2e60bd82b5c29c5db8349","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c0c13f4f_c3012bc0","updated":"2026-09-08 13:27:13.000000000","message":"LGTM","commit_id":"e3613a16d2398b0384ff1cb04c26ea19d69ac87b"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"a2768da9eaf08345aa1386d1e0706887ba215536","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"360ca51b_72769b68","updated":"2026-09-07 12:39:07.000000000","message":"LGTM Thanks","commit_id":"e3613a16d2398b0384ff1cb04c26ea19d69ac87b"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"7388f5d870eb573d9664cd488bc1cb169bb9944e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b1c1bc8d_33fb549c","updated":"2026-09-08 13:51:33.000000000","message":"let\u0027s merge it","commit_id":"e3613a16d2398b0384ff1cb04c26ea19d69ac87b"}],"octavia/network/drivers/neutron/base.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"7f8d8bc974c7a40ec55a2f1f43aef4e5288b8de5","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                resource_type\u003dresource_type, resource_id\u003dresource_id)"},{"line_number":214,"context_line":"            LOG.exception(message)"},{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"09a7ce2a_a472d56c","line":216,"updated":"2026-09-02 13:41:04.000000000","message":"One suggestion, you could also change this block to use a context manager instead of relying on the finally block (not blocking, just an idea)","commit_id":"9ee44b5b93f1b1214db44244f7e721e2f0cc3f3d"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"5c6820535b6b9a1de1672f8dfded6ebf44cd7e2d","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                resource_type\u003dresource_type, resource_id\u003dresource_id)"},{"line_number":214,"context_line":"            LOG.exception(message)"},{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"113dbed7_4808298e","line":216,"in_reply_to":"09a7ce2a_a472d56c","updated":"2026-09-02 14:35:11.000000000","message":"I thought of a contextmanager, but it\u0027s a bit tricky because there\u0027s the case where it\u0027s not `get_user_neutron_client` but self.network_proxy. There\u0027s one case where the code should be inside a \"with\" block and one where it shouldn\u0027t.","commit_id":"9ee44b5b93f1b1214db44244f7e721e2f0cc3f3d"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"ea99b649f54ee8f8ff573fb0313c814b739332ab","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                resource_type\u003dresource_type, resource_id\u003dresource_id)"},{"line_number":214,"context_line":"            LOG.exception(message)"},{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"16d1ed1c_b719fd4f","line":216,"in_reply_to":"113dbed7_4808298e","updated":"2026-09-02 15:25:52.000000000","message":"Oh yeah, that is a good point","commit_id":"9ee44b5b93f1b1214db44244f7e721e2f0cc3f3d"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"cc7158d01a88c874d2d2f6f9baa800121be97ebf","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"563487af_baefcf2a","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"updated":"2026-09-03 05:52:57.000000000","message":"I just tested it, for me it doesn\u0027t work, conn.close() doesn\u0027t close the FDs.\n\nHowever calling conn.session.session.close() just before it closes the session in requests and cleans up the FD.\n(Claude suggested it but I\u0027m sure this is the perfect solution)","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"cb6e6d920b2315b11dd367def5548dbb2e55cfc2","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"6e809e10_eb505ed2","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"563487af_baefcf2a","updated":"2026-09-03 07:00:55.000000000","message":"sorry I meant \"I\u0027m not sure\" lol","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"21da757d9f462ffae422f36b727d2d939005cd7c","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5e358256_4d159268","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"57172940_eddadd70","updated":"2026-09-03 08:41:29.000000000","message":"When I tried the patch here I saw that eventually the sockets do close, after garbage collector cleaned up. So we didn\u0027t reach FD 1024 anymore. A close on the requests Session does close the sockets immediately, but I agree that that should be added inside the sdk Connection close.","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"97612f8fbaa902e665842ab4310169ac3a475eaa","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"2d4615cd_d8cea886","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"57172940_eddadd70","updated":"2026-09-03 08:30:40.000000000","message":"yeah it could be, I\u0027m writing a simple reproducer without Octavia.\n\nNote: sockets/fds are eventually closed after a timeout. Openstack connections are usually reused by the caller, but in the case of Octavia API, we create one connection for each user (with the user\u0027s context), so we may have a lot of sockets waiting to be closed","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"0ef37ff5eaf3192faa1f0a985d5ad6035ce4ae42","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"635f03bb_defafa2f","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"5e358256_4d159268","updated":"2026-09-03 11:59:13.000000000","message":"I ran a small script (it uses only openstacksdk), the script does 1000 times:\n\n- create an openstacksdk connection\n- list the subnets from neutron\n- optional cleanup\n\nthen:\n- when cleanup is conn.close(): there are still 317 opened sockets \n- without cleanup: 1024 opened sockets\n- when clean is conn.session.session.close() + conn.close(): 0 sockets\n\nafter waiting 1 hour, same results\n\n\nSo maybe conn.session.session.close() relies to much on internals that may change in the future... if conn.close() only is enough and works for you, I think it\u0027s good for me too.\nmaybe we should also consider opening a bug in openstacksdk","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"e8446631641e61c2be296b92f596f402791da451","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"d5b9a1cd_353193dc","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"635f03bb_defafa2f","updated":"2026-09-03 12:24:42.000000000","message":"conn.close() only makes sure the connection is unregistered from the atexit handler and thus has a reference less and GC can clean it up. There are some other references though from an LRU cache (on openstack.proxy.Proxy._extract_name) with maxsize\u003d256, which can explain why some connections and sockets stay around even after GC. I will open a bug in openstacksdk to get the session close in.\n\nFor here: I\u0027m inclined to add the explicit conn.session.session.close() before the conn.close(). Probably in a new `close_user_network_client` and with some try/except and a comment that the session close can be removed once openstacksdk does it itself.","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"0b5a4e17e66750f9777a2722fc5f0f1e2398436d","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"b5a2d698_a1a7a634","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"6e809e10_eb505ed2","updated":"2026-09-03 07:04:58.000000000","message":"just some details:\n- conn is a openstacksdk connection\n- conn.session is a keystoneauth1 Session\n- conn.session.session is a requests Session\n\nit looks like the only way to close the fd is to call the close method() of the requests session.\nkeystoneauth1 only calls it from the destructor of the Session class (__dell__).\nopenstacksdk doesn\u0027t call the destructor of keystoneauth1 session\n\nSo it seems that there\u0027s no other way than using \"conn.session.session.close()\" directly (maybe we should put a try/except block around it, we never know when internal structures change.","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"003865fa82732acfa475613194062e7a31997e51","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"57172940_eddadd70","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"b5a2d698_a1a7a634","updated":"2026-09-03 08:15:48.000000000","message":"At the risk of asking the dumb question, is this a bug in the openstack SDK? It seems like it should be closing it\u0027s underlying connections when it\u0027s session is finished","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"d6ba9ac393a40f8f5d141d71e34612c1fd9e4968","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7c19fa8_15413243","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"c00d1438_e4c5b68f","updated":"2026-09-04 06:43:53.000000000","message":"Artem, thanks for looking at it\n\nBodo, in case the session is terminated in openstacksdk, maybe we should not use the conn.session.session.close() here, it could create a double-close situation if a fix is merged later in openstacksdk, wdyt?","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"8fd8a248ad7ec011496f2e6b6eedf6bdaa876452","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"c00d1438_e4c5b68f","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"d5b9a1cd_353193dc","updated":"2026-09-03 16:30:20.000000000","message":"we will add corresponding internal session closing under the connection closing, but it can land only after the FF is lifted. All this connections magic ... Actually ksa1 session has also a delete handler that should theoretically close the session (https://opendev.org/openstack/keystoneauth/src/branch/master/keystoneauth1/session.py#L456) so I wonder why calling conn.session isn\u0027t sufficient","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"20249256a14af2abff94cfcbfe004f7c9d965fb1","unresolved":true,"context_lines":[{"line_number":215,"context_line":"            raise base.NetworkException(message) from e"},{"line_number":216,"context_line":"        finally:"},{"line_number":217,"context_line":"            if conn is not None:"},{"line_number":218,"context_line":"                conn.close()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _get_resources_by_filters(self, resource_type, unique_item\u003dFalse,"},{"line_number":221,"context_line":"                                  **filters):"}],"source_content_type":"text/x-python","patch_set":3,"id":"e706def3_48cef50d","line":218,"range":{"start_line":218,"start_character":16,"end_line":218,"end_character":28},"in_reply_to":"f7c19fa8_15413243","updated":"2026-09-04 08:33:59.000000000","message":"right, having conn.session.session.close() here could lead to a double-close after the sdk is updated. I removed it again. For a full fix deployments will then need this patch here and the updated sdk.","commit_id":"ef1d91510919692ca8187ee4931753f856ab643a"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"04f32c68a7492c260e4e165190b04280d4ee57da","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                # inside conn.close()."},{"line_number":223,"context_line":"                try:"},{"line_number":224,"context_line":"                    conn.session.session.close()"},{"line_number":225,"context_line":"                except Exception as e:"},{"line_number":226,"context_line":"                    LOG.exception(\u0027Closing user neutron client session failed\u0027)"},{"line_number":227,"context_line":"                conn.close()"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f5937f47_9e6fb3d8","line":225,"updated":"2026-09-03 19:04:38.000000000","message":"pep8: F841 local variable \u0027e\u0027 is assigned to but never used","commit_id":"669cff3608a89d79df35879f856cf7829942a346"}],"releasenotes/notes/fix-api-socket-leak-105e9f007eed797b.yaml":[{"author":{"_account_id":5490,"name":"Kurt Garloff","email":"kurt@garloff.de","username":"kgarloff"},"change_message_id":"9240844bae3edd26b5185f4c12faa6ca2733e323","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed leaks of memory and socket desriptors in the Octavia API service"},{"line_number":5,"context_line":"    that could cause \"Too many open files\" errors or"},{"line_number":6,"context_line":"    \"filedescriptor out of range in select()\" errors in ovn-octavia-provider."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"a95133eb_4c2a0b25","line":6,"range":{"start_line":6,"start_character":0,"end_line":6,"end_character":2},"updated":"2026-09-03 15:21:58.000000000","message":"As it\u0027s not specific to the ovn-octavia-provider (which was my original assumption), we should maybe just use the wording ... errors in the octavia-providers.","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":5490,"name":"Kurt Garloff","email":"kurt@garloff.de","username":"kgarloff"},"change_message_id":"de5c988e2914e937041a6fdcae54e5fc8d34be98","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed leaks of memory and socket desriptors in the Octavia API service"},{"line_number":5,"context_line":"    that could cause \"Too many open files\" errors or"},{"line_number":6,"context_line":"    \"filedescriptor out of range in select()\" errors in ovn-octavia-provider."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3eb7d182_098fab10","line":6,"range":{"start_line":6,"start_character":0,"end_line":6,"end_character":2},"in_reply_to":"7538b0a4_b2301d71","updated":"2026-09-03 16:27:55.000000000","message":"Thanks!","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"5387e2a04e92240cd4239992a59c385f026115c3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed leaks of memory and socket desriptors in the Octavia API service"},{"line_number":5,"context_line":"    that could cause \"Too many open files\" errors or"},{"line_number":6,"context_line":"    \"filedescriptor out of range in select()\" errors in ovn-octavia-provider."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7538b0a4_b2301d71","line":6,"range":{"start_line":6,"start_character":0,"end_line":6,"end_character":2},"in_reply_to":"a95133eb_4c2a0b25","updated":"2026-09-03 15:33:21.000000000","message":"I changed it to not mention the ovn provider","commit_id":"304dfff2e3c01c2377620b522feb37547895e1f5"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"ab44ab102f31bcf838850bd3ee24d540aa9ad657","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed leaks of memory and socket desriptors in the Octavia API service"},{"line_number":5,"context_line":"    that could cause \"Too many open files\" or"},{"line_number":6,"context_line":"    \"filedescriptor out of range in select()\" errors."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"043cb49b_f9e16a1e","line":4,"range":{"start_line":4,"start_character":37,"end_line":4,"end_character":47},"updated":"2026-09-04 07:14:31.000000000","message":"typo","commit_id":"669cff3608a89d79df35879f856cf7829942a346"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"20249256a14af2abff94cfcbfe004f7c9d965fb1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed leaks of memory and socket desriptors in the Octavia API service"},{"line_number":5,"context_line":"    that could cause \"Too many open files\" or"},{"line_number":6,"context_line":"    \"filedescriptor out of range in select()\" errors."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"6017036f_eb99a515","line":4,"range":{"start_line":4,"start_character":37,"end_line":4,"end_character":47},"in_reply_to":"043cb49b_f9e16a1e","updated":"2026-09-04 08:33:59.000000000","message":"fixed","commit_id":"669cff3608a89d79df35879f856cf7829942a346"}]}
