)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"ad3bf604973837d90159e557363291165422ffb9","unresolved":true,"context_lines":[{"line_number":11,"context_line":"from the DB models to the API model by providing an ORM-based"},{"line_number":12,"context_line":"alternative processing path."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"On the same DevStack with the same data, a loadbalancer show on a large"},{"line_number":15,"context_line":"loadbalancer was observed to be up to 99% faster with this patch over"},{"line_number":16,"context_line":"master."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Includes a re-alignment of Quotas API controller and types."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"cad6ca1d_62b03ee2","line":16,"range":{"start_line":14,"start_character":0,"end_line":16,"end_character":7},"updated":"2026-01-23 10:27:35.000000000","message":"can you share how many children resources you had in this LB? that would help us to measure the improvements too","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"8de6ec47dca81c11866763fd95f3abfef0acee34","unresolved":false,"context_lines":[{"line_number":11,"context_line":"from the DB models to the API model by providing an ORM-based"},{"line_number":12,"context_line":"alternative processing path."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"On the same DevStack with the same data, a loadbalancer show on a large"},{"line_number":15,"context_line":"loadbalancer was observed to be up to 99% faster with this patch over"},{"line_number":16,"context_line":"master."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Includes a re-alignment of Quotas API controller and types."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"39b4cb93_182df48f","line":16,"range":{"start_line":14,"start_character":0,"end_line":16,"end_character":7},"in_reply_to":"cad6ca1d_62b03ee2","updated":"2026-01-27 08:42:04.000000000","message":"Hi, for benchmarking I went with a loadbalancer of 250 listeners and 250 pools of 10 members each. Improvements also measure on \"normal\" and \"reasonable\" LBs to different degrees.\nI had attached a script on the bug so as to generate a big LB: https://bugs.launchpad.net/octavia/+bug/2134543","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"ec79e588ddb74d789e193006af0b72fe950cdffa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"4d97e446_9d24311e","updated":"2026-01-12 16:34:23.000000000","message":"@johnsomor@gmail.com hello, please look this MR.","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4a7b8a107aadb8745281849c7fd43080ef8a778e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"63caef0c_f46912ac","updated":"2026-01-16 12:59:25.000000000","message":"Still working on testing, but I\u0027ve a few comments and suggestions","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"d6eaeb3e4a68839775b6c0829136408c125404a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8920f523_c1a3236c","updated":"2026-01-19 10:38:28.000000000","message":"Thank you for your time and input, Richard","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"3a78a90ac0f0f5ea05d7ad1bcf73c1cf24dccdb6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8d2bdfa5_2f9c9ee2","updated":"2026-01-19 12:30:38.000000000","message":"Thanks for clarifying, I\u0027ve resolved most of my remarks now. I still have some open concerns about removing the context managers\n\nWhile your solution should be functionally correct, I\u0027m not sure it\u0027s the best approach from a readability and maintainability point of view\n\nI do concede that there\u0027s a lot of sessions being opened and closed outside of context managers. This doesn\u0027t seem ideal and is very inconsistent, but is a separate issue to address another time","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"011f1d74df4248e2842a210cc972c2529429bb6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c0e71cb3_8afad4fc","updated":"2026-03-23 21:12:16.000000000","message":"@gthiemon@redhat.com Hello, I think we can start new cycle from this MR, really good improvements.","commit_id":"62a8fe5e1e0db92a8acbbf030613463d65210de5"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"8de6ec47dca81c11866763fd95f3abfef0acee34","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1ff7d702_b008a60e","updated":"2026-01-27 08:42:04.000000000","message":"New patchset update includes the last \"get\"s that were not included in scope before, includes ORM test equivalents to test_get\u0027s and test_get_all\u0027s and includes a removal of the to_dict and _to_dict copy-paste in favour of a Mixin","commit_id":"62a8fe5e1e0db92a8acbbf030613463d65210de5"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"a8569422fd6355e67c025e3ae6163ea076a04221","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"14f23a6d_ef1ce40f","updated":"2026-02-25 12:59:10.000000000","message":"Took a few rounds to test it on my local devstack, but it seems to be working without any issues and based on other testing the performance increase seems worthwhile","commit_id":"62a8fe5e1e0db92a8acbbf030613463d65210de5"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"b31e558b2e95631f566d2683cd3ab8d70645e3cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4536bc0e_926542e1","updated":"2026-03-24 07:34:12.000000000","message":"almost LGTM\n\nCan you add a release note? i think it would be nice to see these improvements mentioned there","commit_id":"62a8fe5e1e0db92a8acbbf030613463d65210de5"},{"author":{"_account_id":37632,"name":"Dmitriy Chubinidze","email":"dcu995@gmail.com","username":"chubinidzedr"},"change_message_id":"83279510a834b4ce95abfd993540dcc800489494","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"eb2b1aba_3a5ce199","in_reply_to":"4536bc0e_926542e1","updated":"2026-03-26 19:37:29.000000000","message":"I\u0027ve added release note on behalf of Theo to push change forward.","commit_id":"62a8fe5e1e0db92a8acbbf030613463d65210de5"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"8ef94b2de7ba3f36b3e5e97af939f28e468835ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"66532c36_f6fabc77","in_reply_to":"eb2b1aba_3a5ce199","updated":"2026-03-27 15:50:55.000000000","message":"Perfect! Thank you @dcu995@gmail.com :)","commit_id":"62a8fe5e1e0db92a8acbbf030613463d65210de5"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"83c1723ee3f98dc1a5fdc7f84cdc49366dfe775f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"831a1940_76102309","updated":"2026-03-26 20:00:49.000000000","message":"LGTM, time to optimization performance 😊","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"f90c6b40bf0de7a92d2423c1a10ab15939f0bb19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"628d7bd2_f214732b","updated":"2026-03-30 08:14:59.000000000","message":"Thanks for adding the rel note, once the comments are resolved it should be good to go","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"921050b25b46981784971ce785c9a8bddaed6070","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1990158b_89fcb31f","updated":"2026-04-27 13:55:37.000000000","message":"LGTM, great stuff!","commit_id":"1ec112ce1eb5b160f33068c0f6476b665c13417e"}],"octavia/api/v2/controllers/availability_zone_profiles.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4a7b8a107aadb8745281849c7fd43080ef8a778e","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":162,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        with context.session.begin():"},{"line_number":165,"context_line":"            self._validate_update_azp(context, id, availability_zone_profile)"},{"line_number":166,"context_line":"        if id \u003d\u003d constants.NIL_UUID:"},{"line_number":167,"context_line":"            raise exceptions.NotFound(resource\u003d\u0027Availability Zone Profile\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3d6003fe_85559931","side":"PARENT","line":164,"updated":"2026-01-16 12:59:25.000000000","message":"I\u0027m not sure losing the context manager block here is a good idea. Perhaps a better approach would be to wrap the try/except block below in a context manager?","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"d6eaeb3e4a68839775b6c0829136408c125404a6","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":162,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        with context.session.begin():"},{"line_number":165,"context_line":"            self._validate_update_azp(context, id, availability_zone_profile)"},{"line_number":166,"context_line":"        if id \u003d\u003d constants.NIL_UUID:"},{"line_number":167,"context_line":"            raise exceptions.NotFound(resource\u003d\u0027Availability Zone Profile\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ed144e9_ed7ca31b","side":"PARENT","line":164,"in_reply_to":"3d6003fe_85559931","updated":"2026-01-19 10:38:28.000000000","message":"The general session management refacto is based on a few things:\n- \"with context.session.begin()\" essentially corresponds to a try-except, if everything ok then \"commit\", if not then \"rollback\"; so when there are no desired additional actions to be taken in the event of an except, using \"with\" is simpler, otherwise an explicit try-except allows for finer control\n- The session management needed adjustment because where sessions stopped in a \"to_db_obj\" before (ORM object processed thus never accessed again), they do not anymore as we keep the ORM object open longer and a session commit or rollback (including ones ordered by the \"with\" method) automatically expires the object which in turn results in an implicit session begin if the object is accessed again\n\nIn this very case, the \"with\" was removed and code that was in that \"with\" has been merged into the try-except a couple lines below; so session management isn\u0027t really lost\nThis goes for all modifications like this one: \"with\"s are merged with existing try-catch\u0027s which technically all retain the same session management (commit/rollback) but also retain existing except-related behaviour","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"8de6ec47dca81c11866763fd95f3abfef0acee34","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":162,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        with context.session.begin():"},{"line_number":165,"context_line":"            self._validate_update_azp(context, id, availability_zone_profile)"},{"line_number":166,"context_line":"        if id \u003d\u003d constants.NIL_UUID:"},{"line_number":167,"context_line":"            raise exceptions.NotFound(resource\u003d\u0027Availability Zone Profile\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"c5397fd3_a85ade16","side":"PARENT","line":164,"in_reply_to":"51403759_842a8d27","updated":"2026-01-27 08:42:04.000000000","message":"Setting as resolved","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"dfffe34635c7466970864cf9f47b16f29fac43d3","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":162,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        with context.session.begin():"},{"line_number":165,"context_line":"            self._validate_update_azp(context, id, availability_zone_profile)"},{"line_number":166,"context_line":"        if id \u003d\u003d constants.NIL_UUID:"},{"line_number":167,"context_line":"            raise exceptions.NotFound(resource\u003d\u0027Availability Zone Profile\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"51403759_842a8d27","side":"PARENT","line":164,"in_reply_to":"7feb4f0b_b8a37120","updated":"2026-01-19 13:50:37.000000000","message":"I had conducted an investigation on possible side-effects of moving statements from the \"with\" blocks to the try-excepts and had concluded that things would not be affected negatively and the same outcome would be reached for the session (whether it is a commit or a rollback; the session closes)\n\nI personally do not see the added value to keeping the context manager here; if anything, it forces future contributors to be more mindful of how they would be modifying session management as it makes functional tests extremely prone to breaking if sessions aren\u0027t handled correctly (fun times). I cannot think of or find benefits to explicitly closing on top of a commit or rollback that do it implicitly\n\nWhile I am also inclined to think there is a better solution and standard to establish down the road for session management throughout the API controllers so as to limit discrepancies and mitigate danger, \"merging\" is a quick way to get this patch out the door and get the ball rolling on removing the data_model layer (at least from the API)","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"3a78a90ac0f0f5ea05d7ad1bcf73c1cf24dccdb6","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":162,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        with context.session.begin():"},{"line_number":165,"context_line":"            self._validate_update_azp(context, id, availability_zone_profile)"},{"line_number":166,"context_line":"        if id \u003d\u003d constants.NIL_UUID:"},{"line_number":167,"context_line":"            raise exceptions.NotFound(resource\u003d\u0027Availability Zone Profile\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7feb4f0b_b8a37120","side":"PARENT","line":164,"in_reply_to":"9ed144e9_ed7ca31b","updated":"2026-01-19 12:30:38.000000000","message":"I see your point, but I\u0027m still not 100% convinced this is a better approach. In general the recommended way to use SQL Alchemy sessions is within a context manager or to explicitly call the close method outside the try/except block\n\nNow, they\u0027re probably being needlessly pedantic, but the context manager does give a very nice definition of the scope of the session. \n\nAnother consideration is that a future contributor may come along and break the exception handling in such a way that a session can be left open. In this case a context manager would save us from that situation\n\nHowever if you\u0027re confident that the try/except will catch all the situations then it\u0027s probably fine","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4a7b8a107aadb8745281849c7fd43080ef8a778e","unresolved":true,"context_lines":[{"line_number":221,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":222,"context_line":"                context.session.rollback()"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # Force SQL alchemy to query the DB, otherwise we get inconsistent"},{"line_number":225,"context_line":"        # results"},{"line_number":226,"context_line":"        context.session.expire_all()"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"50ae4641_7c78f85f","line":224,"updated":"2026-01-16 12:59:25.000000000","message":"An alternative to my above comment would be to put this statement into a finally block at the end of the try/except above. It doesn\u0027t really change the order of execution that I can see but might make the code a bit easier to read","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"d6eaeb3e4a68839775b6c0829136408c125404a6","unresolved":true,"context_lines":[{"line_number":221,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":222,"context_line":"                context.session.rollback()"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # Force SQL alchemy to query the DB, otherwise we get inconsistent"},{"line_number":225,"context_line":"        # results"},{"line_number":226,"context_line":"        context.session.expire_all()"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"73c4e62a_c330fb9c","line":224,"in_reply_to":"50ae4641_7c78f85f","updated":"2026-01-19 10:38:28.000000000","message":"I\u0027m afraid I do not understand what statement you would be putting in the \"finally\"","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"3a78a90ac0f0f5ea05d7ad1bcf73c1cf24dccdb6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":222,"context_line":"                context.session.rollback()"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # Force SQL alchemy to query the DB, otherwise we get inconsistent"},{"line_number":225,"context_line":"        # results"},{"line_number":226,"context_line":"        context.session.expire_all()"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"31963cae_c367c7ed","line":224,"in_reply_to":"73c4e62a_c330fb9c","updated":"2026-01-19 12:30:38.000000000","message":"Sorry, I was referring to the context.session.expire_all() statement\n\nLooking into this further, I\u0027m not actually convinced we need to expire the session anymore since the commit or rollback should refresh the data. As far as I can tell we are expiring an already closed connection here\n\nHowever, I would recommend leaving it as is for now as it isn\u0027t causing problems and is beyond the scope of the changes","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"}],"octavia/api/v2/controllers/health_monitor.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4a7b8a107aadb8745281849c7fd43080ef8a778e","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        context \u003d pecan_request.context.get(\u0027octavia_context\u0027)"},{"line_number":206,"context_line":"        health_monitor \u003d health_monitor_.healthmonitor"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        with context.session.begin():"},{"line_number":209,"context_line":"            pool \u003d self._get_db_pool(context.session, health_monitor.pool_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            health_monitor.project_id, provider \u003d ("}],"source_content_type":"text/x-python","patch_set":8,"id":"7158c517_c0507fe1","side":"PARENT","line":208,"updated":"2026-01-16 12:59:25.000000000","message":"Again, I don\u0027t think removing the context manager here is a good idea. We don\u0027t seem to have the session expiry below in this case to catch it","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"d6eaeb3e4a68839775b6c0829136408c125404a6","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        context \u003d pecan_request.context.get(\u0027octavia_context\u0027)"},{"line_number":206,"context_line":"        health_monitor \u003d health_monitor_.healthmonitor"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        with context.session.begin():"},{"line_number":209,"context_line":"            pool \u003d self._get_db_pool(context.session, health_monitor.pool_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            health_monitor.project_id, provider \u003d ("}],"source_content_type":"text/x-python","patch_set":8,"id":"7b716ff5_9abc0f6c","side":"PARENT","line":208,"in_reply_to":"7158c517_c0507fe1","updated":"2026-01-19 10:38:28.000000000","message":"Don\u0027t think of it as being removed but as two separate sessions being merged into one","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"3a78a90ac0f0f5ea05d7ad1bcf73c1cf24dccdb6","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        context \u003d pecan_request.context.get(\u0027octavia_context\u0027)"},{"line_number":206,"context_line":"        health_monitor \u003d health_monitor_.healthmonitor"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        with context.session.begin():"},{"line_number":209,"context_line":"            pool \u003d self._get_db_pool(context.session, health_monitor.pool_id)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            health_monitor.project_id, provider \u003d ("}],"source_content_type":"text/x-python","patch_set":8,"id":"0d2e13d5_2dd6111d","side":"PARENT","line":208,"in_reply_to":"7b716ff5_9abc0f6c","updated":"2026-01-19 12:30:38.000000000","message":"I spoke to keeping or removing the context manager earlier, and I do agree with merging session where it makes sense so I\u0027ll mark this resolved","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"}],"octavia/api/v2/controllers/listener.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4a7b8a107aadb8745281849c7fd43080ef8a778e","unresolved":true,"context_lines":[{"line_number":471,"context_line":"                l7p[\u0027redirect_pool_id\u0027] \u003d pool_id"},{"line_number":472,"context_line":"            new_l7ps.append(l7policy.L7PolicyController()._graph_create("},{"line_number":473,"context_line":"                lock_session, l7p))"},{"line_number":474,"context_line":"        db_listener.l7policies \u003d new_l7ps"},{"line_number":475,"context_line":"        return db_listener"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def _validate_listener_PUT(self, listener, db_listener):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1fff41_1eab0f34","side":"PARENT","line":474,"updated":"2026-01-16 12:59:25.000000000","message":"We don\u0027t seem to be attaching the l7policies to the db_listener as an attribute anymore, is this the correct behaviour?","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"3a78a90ac0f0f5ea05d7ad1bcf73c1cf24dccdb6","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                l7p[\u0027redirect_pool_id\u0027] \u003d pool_id"},{"line_number":472,"context_line":"            new_l7ps.append(l7policy.L7PolicyController()._graph_create("},{"line_number":473,"context_line":"                lock_session, l7p))"},{"line_number":474,"context_line":"        db_listener.l7policies \u003d new_l7ps"},{"line_number":475,"context_line":"        return db_listener"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def _validate_listener_PUT(self, listener, db_listener):"}],"source_content_type":"text/x-python","patch_set":8,"id":"889b0964_ce5a7b91","side":"PARENT","line":474,"in_reply_to":"19917efd_d032fe57","updated":"2026-01-19 12:30:38.000000000","message":"Makes sense, thanks for clarifying","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"d6eaeb3e4a68839775b6c0829136408c125404a6","unresolved":true,"context_lines":[{"line_number":471,"context_line":"                l7p[\u0027redirect_pool_id\u0027] \u003d pool_id"},{"line_number":472,"context_line":"            new_l7ps.append(l7policy.L7PolicyController()._graph_create("},{"line_number":473,"context_line":"                lock_session, l7p))"},{"line_number":474,"context_line":"        db_listener.l7policies \u003d new_l7ps"},{"line_number":475,"context_line":"        return db_listener"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def _validate_listener_PUT(self, listener, db_listener):"}],"source_content_type":"text/x-python","patch_set":8,"id":"19917efd_d032fe57","side":"PARENT","line":474,"in_reply_to":"3f1fff41_1eab0f34","updated":"2026-01-19 10:38:28.000000000","message":"Removed that code because db_listener has been made into an ORM object, thus you cannot assign to it anymore\nAssigning is unnecessary anyways as, implicitly, l7policies are not loaded at this point so accessing db_listener.l7policies triggers a DB pull (implicit, handled by SQLalchemy) which produces the same result: up-to-date l7policies","commit_id":"f42860a7302b521dd2895a22535dbd1de1f912f0"}],"octavia/api/v2/controllers/pool.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5dc36543b8320835c6792368708c09d9170c5eeb","unresolved":true,"context_lines":[{"line_number":566,"context_line":"        if pool_id and remainder and remainder[0] \u003d\u003d \u0027members\u0027:"},{"line_number":567,"context_line":"            remainder \u003d remainder[1:]"},{"line_number":568,"context_line":"            with context.session.begin():"},{"line_number":569,"context_line":"                db_pool \u003d self.repositories.pool.get(context.session,"},{"line_number":570,"context_line":"                                                     id\u003dpool_id)"},{"line_number":571,"context_line":"                if not db_pool:"},{"line_number":572,"context_line":"                    LOG.info(\"Pool %s not found.\", pool_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"b35f9c3f_3e52a49f","line":569,"range":{"start_line":569,"start_character":26,"end_line":569,"end_character":52},"updated":"2026-01-23 13:51:59.000000000","message":"I think get_orm is missing here, we only need the id of the object","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5fdb83e850a52067cb171ce1c464ba4d41d2ff9c","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        if pool_id and remainder and remainder[0] \u003d\u003d \u0027members\u0027:"},{"line_number":567,"context_line":"            remainder \u003d remainder[1:]"},{"line_number":568,"context_line":"            with context.session.begin():"},{"line_number":569,"context_line":"                db_pool \u003d self.repositories.pool.get(context.session,"},{"line_number":570,"context_line":"                                                     id\u003dpool_id)"},{"line_number":571,"context_line":"                if not db_pool:"},{"line_number":572,"context_line":"                    LOG.info(\"Pool %s not found.\", pool_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"0cf9abd2_87e31107","line":569,"range":{"start_line":569,"start_character":26,"end_line":569,"end_character":52},"in_reply_to":"772179e4_493323f0","updated":"2026-01-29 08:58:47.000000000","message":"Yeah I think it\u0027s important to improve those calls too. I did some measurements in the functional tests, the number of requests when calling \"GET /member\" drops from 57 (on master) to 4 (on your branch)","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"8de6ec47dca81c11866763fd95f3abfef0acee34","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        if pool_id and remainder and remainder[0] \u003d\u003d \u0027members\u0027:"},{"line_number":567,"context_line":"            remainder \u003d remainder[1:]"},{"line_number":568,"context_line":"            with context.session.begin():"},{"line_number":569,"context_line":"                db_pool \u003d self.repositories.pool.get(context.session,"},{"line_number":570,"context_line":"                                                     id\u003dpool_id)"},{"line_number":571,"context_line":"                if not db_pool:"},{"line_number":572,"context_line":"                    LOG.info(\"Pool %s not found.\", pool_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"772179e4_493323f0","line":569,"range":{"start_line":569,"start_character":26,"end_line":569,"end_character":52},"in_reply_to":"b35f9c3f_3e52a49f","updated":"2026-01-27 08:42:04.000000000","message":"I had not included a few \"get\"s in scope; they have been included; see diff","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"}],"octavia/api/v2/controllers/quotas.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4a7b8a107aadb8745281849c7fd43080ef8a778e","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        with context.session.begin():"},{"line_number":111,"context_line":"            self.repositories.quotas.delete(context.session, project_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        with context.session.begin():"},{"line_number":114,"context_line":"            quotas \u003d self._get_db_quotas(context.session, project_id)"},{"line_number":115,"context_line":"            result \u003d quota_types.QuotaResponse.from_db_obj(quotas)"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"12a7a6ce_366b8a24","line":113,"updated":"2026-01-16 12:59:25.000000000","message":"Could this be combined into the context manager above?","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"d6eaeb3e4a68839775b6c0829136408c125404a6","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        with context.session.begin():"},{"line_number":111,"context_line":"            self.repositories.quotas.delete(context.session, project_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        with context.session.begin():"},{"line_number":114,"context_line":"            quotas \u003d self._get_db_quotas(context.session, project_id)"},{"line_number":115,"context_line":"            result \u003d quota_types.QuotaResponse.from_db_obj(quotas)"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"18a56e95_f4125f09","line":113,"in_reply_to":"12a7a6ce_366b8a24","updated":"2026-01-19 10:38:28.000000000","message":"Probably could; I had kept it separate because the delete writes and the get reads and that is how most of the API controllers seem to be written currently; one session for taking actions and then another session for getting and building the API response out of. I guess it slightly reduces the time the session that actually modifies data is open","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"3a78a90ac0f0f5ea05d7ad1bcf73c1cf24dccdb6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        with context.session.begin():"},{"line_number":111,"context_line":"            self.repositories.quotas.delete(context.session, project_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        with context.session.begin():"},{"line_number":114,"context_line":"            quotas \u003d self._get_db_quotas(context.session, project_id)"},{"line_number":115,"context_line":"            result \u003d quota_types.QuotaResponse.from_db_obj(quotas)"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"17ec4341_b40ec63b","line":113,"in_reply_to":"18a56e95_f4125f09","updated":"2026-01-19 12:30:38.000000000","message":"No I agree with your reasoning, let\u0027s keep the consistent behaviour for now and not increase the scope of the change","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"}],"octavia/db/base_models.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"ad3c6d3fe82e9be5736ac4bb7cfe2d7d9606911f","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        # Split the class name up by capitalized words"},{"line_number":74,"context_line":"        return \u0027 \u0027.join(re.findall(\u0027[A-Z][^A-Z]*\u0027, cls.__name__))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _to_dict(self, value, calling_classes\u003dNone, recurse\u003dFalse):"},{"line_number":77,"context_line":"        calling_classes \u003d calling_classes or []"},{"line_number":78,"context_line":"        # We need to have json convertible data for storing it in"},{"line_number":79,"context_line":"        # persistence jobboard backend."}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6cc625_29087f7e","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":16},"updated":"2026-01-23 10:25:27.000000000","message":"looks like copypaste from octavia/common/data_models.py\ncan we put that code in a common mixin/class?","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"8de6ec47dca81c11866763fd95f3abfef0acee34","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        # Split the class name up by capitalized words"},{"line_number":74,"context_line":"        return \u0027 \u0027.join(re.findall(\u0027[A-Z][^A-Z]*\u0027, cls.__name__))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _to_dict(self, value, calling_classes\u003dNone, recurse\u003dFalse):"},{"line_number":77,"context_line":"        calling_classes \u003d calling_classes or []"},{"line_number":78,"context_line":"        # We need to have json convertible data for storing it in"},{"line_number":79,"context_line":"        # persistence jobboard backend."}],"source_content_type":"text/x-python","patch_set":8,"id":"1bbc717e_6cea9895","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":16},"in_reply_to":"9f6cc625_29087f7e","updated":"2026-01-27 08:42:04.000000000","message":"Turned into a ToDictMixin, see diff","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"}],"octavia/db/repositories.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4a7b8a107aadb8745281849c7fd43080ef8a778e","unresolved":true,"context_lines":[{"line_number":2064,"context_line":"        data_model_list \u003d [model.to_data_model() for model in model_list]"},{"line_number":2065,"context_line":"        return data_model_list, links"},{"line_number":2066,"context_line":""},{"line_number":2067,"context_line":"    def get_all_orm(self, session, pagination_helper\u003dNone,"},{"line_number":2068,"context_line":"                    query_options\u003dNone, **filters):"},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":"        \"\"\"Retrieves a list of entities from the database. ORM-based."}],"source_content_type":"text/x-python","patch_set":8,"id":"6c762a11_efb6e263","line":2067,"updated":"2026-01-16 12:59:25.000000000","message":"This is 90% the same code from get_all_orm from BaseRepository. Is there a way to just call that with the corrct filter and not repeat code?","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"d6eaeb3e4a68839775b6c0829136408c125404a6","unresolved":true,"context_lines":[{"line_number":2064,"context_line":"        data_model_list \u003d [model.to_data_model() for model in model_list]"},{"line_number":2065,"context_line":"        return data_model_list, links"},{"line_number":2066,"context_line":""},{"line_number":2067,"context_line":"    def get_all_orm(self, session, pagination_helper\u003dNone,"},{"line_number":2068,"context_line":"                    query_options\u003dNone, **filters):"},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":"        \"\"\"Retrieves a list of entities from the database. ORM-based."}],"source_content_type":"text/x-python","patch_set":8,"id":"e5dea028_1bd264fc","line":2067,"in_reply_to":"6c762a11_efb6e263","updated":"2026-01-19 10:38:28.000000000","message":"That\u0027s the way it is done in the existing code so I kept it that way so as to limit patch size (it is already quite large). \"De-duplicating\" the code would incur a few more edits whereas here \"_orm\" functions are just a copy-paste of the non-orm original methods (which remain intact for now) with the data_model layer stripped out (only 2 lines difference).","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"3a78a90ac0f0f5ea05d7ad1bcf73c1cf24dccdb6","unresolved":false,"context_lines":[{"line_number":2064,"context_line":"        data_model_list \u003d [model.to_data_model() for model in model_list]"},{"line_number":2065,"context_line":"        return data_model_list, links"},{"line_number":2066,"context_line":""},{"line_number":2067,"context_line":"    def get_all_orm(self, session, pagination_helper\u003dNone,"},{"line_number":2068,"context_line":"                    query_options\u003dNone, **filters):"},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":"        \"\"\"Retrieves a list of entities from the database. ORM-based."}],"source_content_type":"text/x-python","patch_set":8,"id":"d10f49c5_608c8974","line":2067,"in_reply_to":"e5dea028_1bd264fc","updated":"2026-01-19 12:30:38.000000000","message":"Fair enough, thanks for clearing that up","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"}],"octavia/tests/functional/db/test_repositories.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"ad3c6d3fe82e9be5736ac4bb7cfe2d7d9606911f","unresolved":true,"context_lines":[{"line_number":2189,"context_line":"        self.session.commit()"},{"line_number":2190,"context_line":"        return pool"},{"line_number":2191,"context_line":""},{"line_number":2192,"context_line":"    def test_get(self):"},{"line_number":2193,"context_line":"        pool \u003d self.create_pool(pool_id\u003dself.FAKE_UUID_1,"},{"line_number":2194,"context_line":"                                project_id\u003dself.FAKE_UUID_2)"},{"line_number":2195,"context_line":"        new_pool \u003d self.pool_repo.get(self.session, id\u003dpool.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"4f54b736_92bcb501","line":2192,"range":{"start_line":2192,"start_character":8,"end_line":2192,"end_character":16},"updated":"2026-01-23 10:25:27.000000000","message":"I would like to see functional tests for get_orm for all the classes that implement it (ideally, for each test_get we should have a test_get_orm)\nSame remark for get_all_orm","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"},{"author":{"_account_id":38376,"name":"Théo Van Gyzel","display_name":"Théo VG","email":"theo.van-gyzel@ovhcloud.com","username":"theovg"},"change_message_id":"8de6ec47dca81c11866763fd95f3abfef0acee34","unresolved":false,"context_lines":[{"line_number":2189,"context_line":"        self.session.commit()"},{"line_number":2190,"context_line":"        return pool"},{"line_number":2191,"context_line":""},{"line_number":2192,"context_line":"    def test_get(self):"},{"line_number":2193,"context_line":"        pool \u003d self.create_pool(pool_id\u003dself.FAKE_UUID_1,"},{"line_number":2194,"context_line":"                                project_id\u003dself.FAKE_UUID_2)"},{"line_number":2195,"context_line":"        new_pool \u003d self.pool_repo.get(self.session, id\u003dpool.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"4f88d797_e7f66fd3","line":2192,"range":{"start_line":2192,"start_character":8,"end_line":2192,"end_character":16},"in_reply_to":"4f54b736_92bcb501","updated":"2026-01-27 08:42:04.000000000","message":"I had overlooked those; test_get and test_get_all methods now have ORM counterparts; see diff","commit_id":"733e6848dcae0018f6e3cde461e084aa1beeb269"}],"releasenotes/notes/api-orm-mapping-performance-optimization-9f3a2c7b8d.yaml":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"f90c6b40bf0de7a92d2423c1a10ab15939f0bb19","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Introduced an ORM-based API data mapping path that bypasses the"},{"line_number":5,"context_line":"    data_model layer for API responses. This significantly improves"},{"line_number":6,"context_line":"    performance by mapping directly from database models to API models."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"fc64d77b_1b09f603","line":4,"updated":"2026-03-30 08:14:59.000000000","message":"@Dmitriy Chubinidze this reads a bit like it was written by an AI?\n\nIt\u0027s not a problem if it is, but it must be included in the commit message per the OpenInfra AI policy: https://openinfra.org/legal/ai-policy\n\nIf it wasn\u0027t AI assisted then ignore this comment\n\nYou should also add your name to the description as a co-author since you helped out :-)","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"4eabce55d9887c430043bedd1d8928c960b3df2b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Introduced an ORM-based API data mapping path that bypasses the"},{"line_number":5,"context_line":"    data_model layer for API responses. This significantly improves"},{"line_number":6,"context_line":"    performance by mapping directly from database models to API models."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"8c7ebc14_65723085","line":4,"in_reply_to":"28182250_a361661c","updated":"2026-03-30 09:01:16.000000000","message":"No problem, I use AI assistants myself so in general I think it\u0027s best to ensure their usage is documented to avoid falling afoul of any contribution rules\n\nRegarding whether a release note is enough to include yourself, in my view if you contributed then you should get the credit 😊","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":37632,"name":"Dmitriy Chubinidze","email":"dcu995@gmail.com","username":"chubinidzedr"},"change_message_id":"2fa563f5839c63b94288f131e78cf1565375d003","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Introduced an ORM-based API data mapping path that bypasses the"},{"line_number":5,"context_line":"    data_model layer for API responses. This significantly improves"},{"line_number":6,"context_line":"    performance by mapping directly from database models to API models."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"28182250_a361661c","line":4,"in_reply_to":"fc64d77b_1b09f603","updated":"2026-03-30 08:51:22.000000000","message":"@rcruise@redhat.com Hello, thanks for pointing:)\nI\u0027ve indeed used it initially for some parts in release note to correctly sum up all the changes, for the second I\u0027ve got rid of ai generated parts, but I\u0027ll surely take into attention for future ai using\n\nIs creating release note is enough to include myself in such changes?😊","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c469c19d07a24249b31496ac1b4641b13eff8f5f","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    data_model layer for API responses. This significantly improves"},{"line_number":6,"context_line":"    performance by mapping directly from database models to API models."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The Quotas API controller and related types have been realigned"},{"line_number":11,"context_line":"    to support the new ORM-based processing path."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"986f1d85_28a715db","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":7},"updated":"2026-03-30 08:04:15.000000000","message":"it should not be \"upgrade\", it\u0027s either a bugfix or it should be merged with the previous feature note","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"889c6034b19fa35e997baf2daceb3429502011f4","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    data_model layer for API responses. This significantly improves"},{"line_number":6,"context_line":"    performance by mapping directly from database models to API models."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The Quotas API controller and related types have been realigned"},{"line_number":11,"context_line":"    to support the new ORM-based processing path."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"a316a071_98eb4635","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":7},"in_reply_to":"986f1d85_28a715db","updated":"2026-03-30 08:53:09.000000000","message":"Done","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c469c19d07a24249b31496ac1b4641b13eff8f5f","unresolved":true,"context_lines":[{"line_number":10,"context_line":"    The Quotas API controller and related types have been realigned"},{"line_number":11,"context_line":"    to support the new ORM-based processing path."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"deprecations:"},{"line_number":14,"context_line":"  - |"},{"line_number":15,"context_line":"    The recursion_depth-based processing path has been removed as it is"},{"line_number":16,"context_line":"    now obsolete due to the introduction of the ORM-based mapping approach."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"d120f272_043d61d9","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":12},"updated":"2026-03-30 08:04:15.000000000","message":"it\u0027s not a deprecation and IMHO this text related to recursion_depth should not be included in the release note","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"889c6034b19fa35e997baf2daceb3429502011f4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    The Quotas API controller and related types have been realigned"},{"line_number":11,"context_line":"    to support the new ORM-based processing path."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"deprecations:"},{"line_number":14,"context_line":"  - |"},{"line_number":15,"context_line":"    The recursion_depth-based processing path has been removed as it is"},{"line_number":16,"context_line":"    now obsolete due to the introduction of the ORM-based mapping approach."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"b095b6f5_6198f8a2","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":12},"in_reply_to":"d120f272_043d61d9","updated":"2026-03-30 08:53:09.000000000","message":"Done","commit_id":"61b89d0911aacab601bce9f00446a97833de873f"}]}
