)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"d940e6900262dea42b5c12b813413e7db2315042","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2025-05-12 17:35:32 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Patching Octavia LB pool removal issue and adding updated unit tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The issue is described on the following launchpad:"},{"line_number":10,"context_line":"- https://bugs.launchpad.net/neutron/+bug/2051172"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In short as soon as a pool is being deleted from a Octavia OVN LB the ip_port_mappings field in the OVN DB gets cleared out even if the members are attached to other existing used pools"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"4c90aed8_5718f5ab","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":49},"updated":"2025-06-05 05:20:19.000000000","message":"replace with\n```\nCloses-Bug: #2051172\n```\nAnd move it to line before `Change-Id:...` and follow by a newline","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"e0709a772600aa81888cf177286ecc72a5f15785","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2025-05-12 17:35:32 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Patching Octavia LB pool removal issue and adding updated unit tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The issue is described on the following launchpad:"},{"line_number":10,"context_line":"- https://bugs.launchpad.net/neutron/+bug/2051172"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In short as soon as a pool is being deleted from a Octavia OVN LB the ip_port_mappings field in the OVN DB gets cleared out even if the members are attached to other existing used pools"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3ce6b475_c6d88419","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":49},"in_reply_to":"4c90aed8_5718f5ab","updated":"2025-06-10 10:01:19.000000000","message":"Done","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"d940e6900262dea42b5c12b813413e7db2315042","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"64f2aea5_99e0880d","updated":"2025-06-05 05:20:19.000000000","message":"LGTM, just some small nitpicking here.","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"1f74b2fb6016522317137e2b37f2694991b9159b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"93b5d33d_82d1c972","updated":"2025-07-04 12:05:21.000000000","message":"LGTM","commit_id":"a7db0ecc638bb3e834ab69565859da1d19932c25"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"e0709a772600aa81888cf177286ecc72a5f15785","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"338111e7_5b56049d","updated":"2025-06-10 10:01:19.000000000","message":"Thank you for the suggestions! now all of them should be in place with the last patchset","commit_id":"a7db0ecc638bb3e834ab69565859da1d19932c25"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"abe92eb3f470004b96ae32d7cc2829dd058491af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6a1a99c0_92cf7c6d","updated":"2025-07-04 13:26:41.000000000","message":"Thank you for the review and suggestions!\nNow both have been ported into the change","commit_id":"b3ffc7ee318685892961916d1e812347474044e4"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"a845fef4f6f1c7a0ea5c90f64395d08b879ca232","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"654681f0_95a0f5d7","updated":"2025-07-04 15:19:09.000000000","message":"oh! cover job failing, maybe a rebase over the last patches fix it","commit_id":"b3ffc7ee318685892961916d1e812347474044e4"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"431ee68b871d6c519151bda0127edf295456e7d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"98d998bc_85cce5ca","updated":"2025-07-04 16:02:14.000000000","message":"nop, maybe an additional test to evaluate that when another member the lb_del_ip_port_mapping is not called would help. Meanwhile I could prepare an additional patch to increase a little the coverage to prevent this issue.","commit_id":"71514a14a08c908feded7f0396980ff9bae7abd1"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"a18b8347cd457d03c66a854037568afb3fe2b207","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"02d0ea0c_b14312d6","in_reply_to":"98d998bc_85cce5ca","updated":"2025-07-07 09:36:27.000000000","message":"Now i increased the coverage and the tests is passing fine","commit_id":"71514a14a08c908feded7f0396980ff9bae7abd1"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"7ade6d5734940cac4e4b8172116699abbb4e0083","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6132967f_8f5701fb","updated":"2025-07-07 09:51:14.000000000","message":"+1 worflow as the only change is the new test, thx!","commit_id":"80a65449f195d568149ab7027d72e185c2cd2d4c"}],"ovn_octavia_provider/helper.py":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"d940e6900262dea42b5c12b813413e7db2315042","unresolved":true,"context_lines":[{"line_number":3542,"context_line":"            for k, v in ovn_lb.external_ids.items():"},{"line_number":3543,"context_line":"                if ovn_const.LB_EXT_IDS_POOL_PREFIX in k and k !\u003d pool_key:"},{"line_number":3544,"context_line":"                    other_members.extend(self._extract_member_info("},{"line_number":3545,"context_line":"                        ovn_lb.external_ids[k]))"},{"line_number":3546,"context_line":"            member_statuses \u003d ovn_lb.external_ids.get("},{"line_number":3547,"context_line":"                ovn_const.OVN_MEMBER_STATUS_KEY)"},{"line_number":3548,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"183f21c2_7596e648","line":3545,"range":{"start_line":3545,"start_character":24,"end_line":3545,"end_character":46},"updated":"2025-06-05 05:20:19.000000000","message":"you can directly use `v` here","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"e0709a772600aa81888cf177286ecc72a5f15785","unresolved":false,"context_lines":[{"line_number":3542,"context_line":"            for k, v in ovn_lb.external_ids.items():"},{"line_number":3543,"context_line":"                if ovn_const.LB_EXT_IDS_POOL_PREFIX in k and k !\u003d pool_key:"},{"line_number":3544,"context_line":"                    other_members.extend(self._extract_member_info("},{"line_number":3545,"context_line":"                        ovn_lb.external_ids[k]))"},{"line_number":3546,"context_line":"            member_statuses \u003d ovn_lb.external_ids.get("},{"line_number":3547,"context_line":"                ovn_const.OVN_MEMBER_STATUS_KEY)"},{"line_number":3548,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1fdf75_1f227c56","line":3545,"range":{"start_line":3545,"start_character":24,"end_line":3545,"end_character":46},"in_reply_to":"183f21c2_7596e648","updated":"2025-06-10 10:01:19.000000000","message":"Done","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"d940e6900262dea42b5c12b813413e7db2315042","unresolved":true,"context_lines":[{"line_number":3543,"context_line":"                if ovn_const.LB_EXT_IDS_POOL_PREFIX in k and k !\u003d pool_key:"},{"line_number":3544,"context_line":"                    other_members.extend(self._extract_member_info("},{"line_number":3545,"context_line":"                        ovn_lb.external_ids[k]))"},{"line_number":3546,"context_line":"            member_statuses \u003d ovn_lb.external_ids.get("},{"line_number":3547,"context_line":"                ovn_const.OVN_MEMBER_STATUS_KEY)"},{"line_number":3548,"context_line":"            try:"},{"line_number":3549,"context_line":"                member_statuses \u003d jsonutils.loads(member_statuses)"},{"line_number":3550,"context_line":"            except TypeError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e0ca66b1_bb76ab8f","line":3547,"range":{"start_line":3546,"start_character":12,"end_line":3547,"end_character":48},"updated":"2025-06-05 05:20:19.000000000","message":"the get can change to :\n```\nvn_lb.external_ids.get(ovn_const.OVN_MEMBER_STATUS_KEY, \u0027{}\u0027)\n```\nAnd avoid type error try-catch below,\n\nSo bind these two, we can do \n```\n            member_statuses \u003d jsonutils.loads(\n                ovn_lb.external_ids.get(ovn_const.OVN_MEMBER_STATUS_KEY, \u0027{}\u0027)\n            )\n```","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"e0709a772600aa81888cf177286ecc72a5f15785","unresolved":false,"context_lines":[{"line_number":3543,"context_line":"                if ovn_const.LB_EXT_IDS_POOL_PREFIX in k and k !\u003d pool_key:"},{"line_number":3544,"context_line":"                    other_members.extend(self._extract_member_info("},{"line_number":3545,"context_line":"                        ovn_lb.external_ids[k]))"},{"line_number":3546,"context_line":"            member_statuses \u003d ovn_lb.external_ids.get("},{"line_number":3547,"context_line":"                ovn_const.OVN_MEMBER_STATUS_KEY)"},{"line_number":3548,"context_line":"            try:"},{"line_number":3549,"context_line":"                member_statuses \u003d jsonutils.loads(member_statuses)"},{"line_number":3550,"context_line":"            except TypeError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3d974200_d3a9e3b5","line":3547,"range":{"start_line":3546,"start_character":12,"end_line":3547,"end_character":48},"in_reply_to":"e0ca66b1_bb76ab8f","updated":"2025-06-10 10:01:19.000000000","message":"Thank you for the suggestions! now all of them should be in place with the last patchset","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"d940e6900262dea42b5c12b813413e7db2315042","unresolved":true,"context_lines":[{"line_number":3545,"context_line":"                        ovn_lb.external_ids[k]))"},{"line_number":3546,"context_line":"            member_statuses \u003d ovn_lb.external_ids.get("},{"line_number":3547,"context_line":"                ovn_const.OVN_MEMBER_STATUS_KEY)"},{"line_number":3548,"context_line":"            try:"},{"line_number":3549,"context_line":"                member_statuses \u003d jsonutils.loads(member_statuses)"},{"line_number":3550,"context_line":"            except TypeError:"},{"line_number":3551,"context_line":"                LOG.debug(\"No member status in external_ids: %s\","},{"line_number":3552,"context_line":"                          str(member_statuses))"},{"line_number":3553,"context_line":"                member_statuses \u003d {}"},{"line_number":3554,"context_line":"            execute_delete \u003d True"},{"line_number":3555,"context_line":"            for member_id in [item[3] for item in other_members"},{"line_number":3556,"context_line":"                              if item[0] \u003d\u003d backend_ip]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c09cf3fa_abac9b0b","line":3553,"range":{"start_line":3548,"start_character":0,"end_line":3553,"end_character":36},"updated":"2025-06-05 05:20:19.000000000","message":"we can skip these as above comment :)","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"e0709a772600aa81888cf177286ecc72a5f15785","unresolved":false,"context_lines":[{"line_number":3545,"context_line":"                        ovn_lb.external_ids[k]))"},{"line_number":3546,"context_line":"            member_statuses \u003d ovn_lb.external_ids.get("},{"line_number":3547,"context_line":"                ovn_const.OVN_MEMBER_STATUS_KEY)"},{"line_number":3548,"context_line":"            try:"},{"line_number":3549,"context_line":"                member_statuses \u003d jsonutils.loads(member_statuses)"},{"line_number":3550,"context_line":"            except TypeError:"},{"line_number":3551,"context_line":"                LOG.debug(\"No member status in external_ids: %s\","},{"line_number":3552,"context_line":"                          str(member_statuses))"},{"line_number":3553,"context_line":"                member_statuses \u003d {}"},{"line_number":3554,"context_line":"            execute_delete \u003d True"},{"line_number":3555,"context_line":"            for member_id in [item[3] for item in other_members"},{"line_number":3556,"context_line":"                              if item[0] \u003d\u003d backend_ip]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"989f51e1_8fb1848b","line":3553,"range":{"start_line":3548,"start_character":0,"end_line":3553,"end_character":36},"in_reply_to":"c09cf3fa_abac9b0b","updated":"2025-06-10 10:01:19.000000000","message":"Done","commit_id":"170f3ab3ed2040173395d61279e6b2f64c82d205"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"baa88ad554be97ece8593912c4f0c8f0b2c276a4","unresolved":true,"context_lines":[{"line_number":3555,"context_line":"                if member_statuses.get(member_id, \u0027\u0027) !\u003d constants.NO_MONITOR:"},{"line_number":3556,"context_line":"                    execute_delete \u003d False"},{"line_number":3557,"context_line":"                    LOG.debug(f\"Not removing IP mapping for {backend_ip}: \""},{"line_number":3558,"context_line":"                              f\"still used by member {member_id}\")"},{"line_number":3559,"context_line":"                    break"},{"line_number":3560,"context_line":"            if execute_delete:"},{"line_number":3561,"context_line":"                LOG.debug(f\"Removing ip_port_mapping for {backend_ip}\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"44044c42_1f3cea70","line":3558,"updated":"2025-07-04 12:19:41.000000000","message":"this is nitty nit but I would write something like \"Backend {backend_ip} still in use by the member {member_id} so it won\u0027t be removed\" or something like that.","commit_id":"a7db0ecc638bb3e834ab69565859da1d19932c25"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"abe92eb3f470004b96ae32d7cc2829dd058491af","unresolved":false,"context_lines":[{"line_number":3555,"context_line":"                if member_statuses.get(member_id, \u0027\u0027) !\u003d constants.NO_MONITOR:"},{"line_number":3556,"context_line":"                    execute_delete \u003d False"},{"line_number":3557,"context_line":"                    LOG.debug(f\"Not removing IP mapping for {backend_ip}: \""},{"line_number":3558,"context_line":"                              f\"still used by member {member_id}\")"},{"line_number":3559,"context_line":"                    break"},{"line_number":3560,"context_line":"            if execute_delete:"},{"line_number":3561,"context_line":"                LOG.debug(f\"Removing ip_port_mapping for {backend_ip}\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"2fdb641d_715bd5b2","line":3558,"in_reply_to":"44044c42_1f3cea70","updated":"2025-07-04 13:26:41.000000000","message":"Done","commit_id":"a7db0ecc638bb3e834ab69565859da1d19932c25"}],"ovn_octavia_provider/tests/unit/test_helper.py":[{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"9d733a23f70c224dec68540f1b3cd6e1cfcfcdda","unresolved":true,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"74cf967a_63265b60","line":1,"updated":"2025-07-04 12:06:26.000000000","message":"nit: This line is unnecessary, right?","commit_id":"a7db0ecc638bb3e834ab69565859da1d19932c25"},{"author":{"_account_id":24882,"name":"Sami","email":"sami.yessou@switch.ch","username":"sami","status":"Cloud engineer"},"change_message_id":"abe92eb3f470004b96ae32d7cc2829dd058491af","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"de3d90cf_7ffa6dfe","line":1,"in_reply_to":"3b9e11e7_e66a3fa1","updated":"2025-07-04 13:26:41.000000000","message":"Done","commit_id":"a7db0ecc638bb3e834ab69565859da1d19932c25"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"baa88ad554be97ece8593912c4f0c8f0b2c276a4","unresolved":true,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"3b9e11e7_e66a3fa1","line":1,"in_reply_to":"74cf967a_63265b60","updated":"2025-07-04 12:19:41.000000000","message":"yes, I agree. Please remove it.","commit_id":"a7db0ecc638bb3e834ab69565859da1d19932c25"}]}
