)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"3f5649570751cec30dbb1f438f013a77b5e71de8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fae24c78_d4b52a22","updated":"2023-02-22 13:35:32.000000000","message":"Looks good, just one comment/concern","commit_id":"613295926aef55937cb6ac58ac317acc6e089045"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"8051958291e908de8c29c7925467cccbb9c1bf45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f9a343bc_cd3ff478","updated":"2023-04-11 10:14:57.000000000","message":"After talking with froyo, I see it is actually being used, so only the nits if there is a need to respin","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"16ce77f99ac45193ec5e7021be0ad9444c82d77d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"fd48e90e_d9b7be50","updated":"2023-04-11 10:03:44.000000000","message":"one nit, and one question, why are we adding member_id on the extract_information, it seems it is not being used, right?","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"db5cb4154c0dbe1f35adc77b3e874cfcf79cf543","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"df1914bb_8d0fb0b5","updated":"2023-04-10 15:19:47.000000000","message":"recheck after fix gates","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"bec9163fe661990c3453792b34c4286b4ea862b0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d6178aaa_1064fc5c","in_reply_to":"fd48e90e_d9b7be50","updated":"2023-04-11 13:07:25.000000000","message":"it is used in the searching  to prevent the accidentally removing of a member that is used by another HM, when we are searching based into the member_id : STATUS here https://review.opendev.org/c/openstack/ovn-octavia-provider/+/874384/7/ovn_octavia_provider/helper.py#2552","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"}],"ovn_octavia_provider/helper.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"7ae81836919a81a1a27ddb0beb5219fecf8919a0","unresolved":true,"context_lines":[{"line_number":1974,"context_line":"            pool \u003d {constants.ID: member[constants.POOL_ID],"},{"line_number":1975,"context_line":"                    constants.PROVISIONING_STATUS: constants.ACTIVE,"},{"line_number":1976,"context_line":"                    constants.OPERATING_STATUS: pool_status}"},{"line_number":1977,"context_line":"            if ovn_lb.health_check and pool_status \u003d\u003d constants.OFFLINE:"},{"line_number":1978,"context_line":"                # NOTE(froyo): if the pool status is OFFLINE there are no more"},{"line_number":1979,"context_line":"                # members. So we should ensure the hm-port is deleted if no"},{"line_number":1980,"context_line":"                # more LB are using it. We need to do this call after the"}],"source_content_type":"text/x-python","patch_set":2,"id":"55df7675_0caf482f","line":1977,"range":{"start_line":1977,"start_character":7,"end_line":1977,"end_character":72},"updated":"2023-02-22 07:36:50.000000000","message":"don\u0027t we need to update the hm_members here? to remove the ip_port_mappings for instance?","commit_id":"60d5f8e5bdb6eacabb3b373301b63cbdeb3b55c8"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"8889d4c2be5cfa7c40ef9af2a479ad78882a351a","unresolved":false,"context_lines":[{"line_number":1974,"context_line":"            pool \u003d {constants.ID: member[constants.POOL_ID],"},{"line_number":1975,"context_line":"                    constants.PROVISIONING_STATUS: constants.ACTIVE,"},{"line_number":1976,"context_line":"                    constants.OPERATING_STATUS: pool_status}"},{"line_number":1977,"context_line":"            if ovn_lb.health_check and pool_status \u003d\u003d constants.OFFLINE:"},{"line_number":1978,"context_line":"                # NOTE(froyo): if the pool status is OFFLINE there are no more"},{"line_number":1979,"context_line":"                # members. So we should ensure the hm-port is deleted if no"},{"line_number":1980,"context_line":"                # more LB are using it. We need to do this call after the"}],"source_content_type":"text/x-python","patch_set":2,"id":"d41e39f8_6bb96733","line":1977,"range":{"start_line":1977,"start_character":7,"end_line":1977,"end_character":72},"in_reply_to":"55df7675_0caf482f","updated":"2023-02-22 09:03:53.000000000","message":"sure, it is done in L1937 by the _remove_member method.","commit_id":"60d5f8e5bdb6eacabb3b373301b63cbdeb3b55c8"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"7ae81836919a81a1a27ddb0beb5219fecf8919a0","unresolved":true,"context_lines":[{"line_number":2553,"context_line":"        if hm_status[constants.PROVISIONING_STATUS] \u003d\u003d constants.ACTIVE:"},{"line_number":2554,"context_line":"            for (mb_ip, mb_port, mb_subnet) in self._extract_member_info("},{"line_number":2555,"context_line":"                    existing_members):"},{"line_number":2556,"context_line":"                if not self._update_hm_member(ovn_lb, pool_key, mb_ip):"},{"line_number":2557,"context_line":"                    hm_status[constants.PROVISIONING_STATUS] \u003d constants.ERROR"},{"line_number":2558,"context_line":"                    hm_status[constants.OPERATING_STATUS] \u003d constants.ERROR"},{"line_number":2559,"context_line":"        status[constants.HEALTHMONITORS] \u003d [hm_status]"},{"line_number":2560,"context_line":"        return status"},{"line_number":2561,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"66b7af2f_b2ed351c","line":2558,"range":{"start_line":2556,"start_character":0,"end_line":2558,"end_character":75},"updated":"2023-02-22 07:36:50.000000000","message":"just one question as I don\u0027t know it for sure, do we need to stop the iteration once we hit the error updating the hm or it is worth to continue and update the rest?","commit_id":"60d5f8e5bdb6eacabb3b373301b63cbdeb3b55c8"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"8889d4c2be5cfa7c40ef9af2a479ad78882a351a","unresolved":true,"context_lines":[{"line_number":2553,"context_line":"        if hm_status[constants.PROVISIONING_STATUS] \u003d\u003d constants.ACTIVE:"},{"line_number":2554,"context_line":"            for (mb_ip, mb_port, mb_subnet) in self._extract_member_info("},{"line_number":2555,"context_line":"                    existing_members):"},{"line_number":2556,"context_line":"                if not self._update_hm_member(ovn_lb, pool_key, mb_ip):"},{"line_number":2557,"context_line":"                    hm_status[constants.PROVISIONING_STATUS] \u003d constants.ERROR"},{"line_number":2558,"context_line":"                    hm_status[constants.OPERATING_STATUS] \u003d constants.ERROR"},{"line_number":2559,"context_line":"        status[constants.HEALTHMONITORS] \u003d [hm_status]"},{"line_number":2560,"context_line":"        return status"},{"line_number":2561,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d23afd44_49a557c3","line":2558,"range":{"start_line":2556,"start_character":0,"end_line":2558,"end_character":75},"in_reply_to":"66b7af2f_b2ed351c","updated":"2023-02-22 09:03:53.000000000","message":"In order to maintain the same behavior, the HM status is set to ERROR in case the \"hm_port\" cannot be located or if it is located without an address. Comparing it to the previous behavior, the HM status remains the same. However, when it comes to \"ip_port_mappings\", there will now be members where \"_update_hm_member\" was successful until an error was triggered. So for some situations the HM status will shows as ERROR and the ip_port_mappings will have the old values.","commit_id":"60d5f8e5bdb6eacabb3b373301b63cbdeb3b55c8"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"3132cc4fbf8af762619536e03121623eb08ca504","unresolved":false,"context_lines":[{"line_number":2553,"context_line":"        if hm_status[constants.PROVISIONING_STATUS] \u003d\u003d constants.ACTIVE:"},{"line_number":2554,"context_line":"            for (mb_ip, mb_port, mb_subnet) in self._extract_member_info("},{"line_number":2555,"context_line":"                    existing_members):"},{"line_number":2556,"context_line":"                if not self._update_hm_member(ovn_lb, pool_key, mb_ip):"},{"line_number":2557,"context_line":"                    hm_status[constants.PROVISIONING_STATUS] \u003d constants.ERROR"},{"line_number":2558,"context_line":"                    hm_status[constants.OPERATING_STATUS] \u003d constants.ERROR"},{"line_number":2559,"context_line":"        status[constants.HEALTHMONITORS] \u003d [hm_status]"},{"line_number":2560,"context_line":"        return status"},{"line_number":2561,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1254e955_3c67d2ef","line":2558,"range":{"start_line":2556,"start_character":0,"end_line":2558,"end_character":75},"in_reply_to":"d23afd44_49a557c3","updated":"2023-02-22 09:55:43.000000000","message":"Finally I add a call to clean the ip_port_mapping and a break to stop the iteration. Make more sense to have ip_port_mapping clean if the hm status is in ERROR. Thx","commit_id":"60d5f8e5bdb6eacabb3b373301b63cbdeb3b55c8"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"3f5649570751cec30dbb1f438f013a77b5e71de8","unresolved":true,"context_lines":[{"line_number":2411,"context_line":"                                                     port_name,"},{"line_number":2412,"context_line":"                                                     src_ip).execute()"},{"line_number":2413,"context_line":""},{"line_number":2414,"context_line":"    def _clean_ip_port_mappings(self, ovn_lb):"},{"line_number":2415,"context_line":"        self.ovn_nbdb_api.db_clear(\u0027Load_Balancer\u0027, ovn_lb.uuid,"},{"line_number":2416,"context_line":"                                   \u0027ip_port_mappings\u0027).execute()"},{"line_number":2417,"context_line":""},{"line_number":2418,"context_line":"    def _update_hm_member(self, ovn_lb, pool_key, backend_ip, delete\u003dFalse):"},{"line_number":2419,"context_line":"        # Update just the backend_ip member"}],"source_content_type":"text/x-python","patch_set":3,"id":"22016929_8dc3c5f1","line":2416,"range":{"start_line":2414,"start_character":0,"end_line":2416,"end_character":64},"updated":"2023-02-22 13:35:32.000000000","message":"could we have the situation where we have 2 load_balancer health checks associated to the loadbalancer as it has different pools (each one with different members and with a different HM), therefore we need to somehow differentiate between the port_mappings to remove (instead of clean them all)?","commit_id":"613295926aef55937cb6ac58ac317acc6e089045"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"bec9163fe661990c3453792b34c4286b4ea862b0","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"                                                     port_name,"},{"line_number":2412,"context_line":"                                                     src_ip).execute()"},{"line_number":2413,"context_line":""},{"line_number":2414,"context_line":"    def _clean_ip_port_mappings(self, ovn_lb):"},{"line_number":2415,"context_line":"        self.ovn_nbdb_api.db_clear(\u0027Load_Balancer\u0027, ovn_lb.uuid,"},{"line_number":2416,"context_line":"                                   \u0027ip_port_mappings\u0027).execute()"},{"line_number":2417,"context_line":""},{"line_number":2418,"context_line":"    def _update_hm_member(self, ovn_lb, pool_key, backend_ip, delete\u003dFalse):"},{"line_number":2419,"context_line":"        # Update just the backend_ip member"}],"source_content_type":"text/x-python","patch_set":3,"id":"cc15d0f0_859bf7e9","line":2416,"range":{"start_line":2414,"start_character":0,"end_line":2416,"end_character":64},"in_reply_to":"22016929_8dc3c5f1","updated":"2023-04-11 13:07:25.000000000","message":"Done","commit_id":"613295926aef55937cb6ac58ac317acc6e089045"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"16ce77f99ac45193ec5e7021be0ad9444c82d77d","unresolved":true,"context_lines":[{"line_number":923,"context_line":"                continue"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"            ips \u003d []"},{"line_number":926,"context_line":"            for mb_ip, mb_port, mb_subnet, mb_id in self._extract_member_info("},{"line_number":927,"context_line":"                    lb_external_ids[pool_id]):"},{"line_number":928,"context_line":"                if netaddr.IPNetwork(mb_ip).version \u003d\u003d 6:"},{"line_number":929,"context_line":"                    ips.append(f\u0027[{mb_ip}]:{mb_port}\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ec2aee3a_a83ca465","line":926,"range":{"start_line":926,"start_character":32,"end_line":926,"end_character":49},"updated":"2023-04-11 10:03:44.000000000","message":"nit: these 2 are not used, right? perhaps you can do \"for mb_ip, mb_port, _, _ in xxx\"","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"bec9163fe661990c3453792b34c4286b4ea862b0","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                continue"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"            ips \u003d []"},{"line_number":926,"context_line":"            for mb_ip, mb_port, mb_subnet, mb_id in self._extract_member_info("},{"line_number":927,"context_line":"                    lb_external_ids[pool_id]):"},{"line_number":928,"context_line":"                if netaddr.IPNetwork(mb_ip).version \u003d\u003d 6:"},{"line_number":929,"context_line":"                    ips.append(f\u0027[{mb_ip}]:{mb_port}\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"189bda3d_771cca14","line":926,"range":{"start_line":926,"start_character":32,"end_line":926,"end_character":49},"in_reply_to":"ec2aee3a_a83ca465","updated":"2023-04-11 13:07:25.000000000","message":"After run pep8 locally I remember why I did as this way:\n\n./ovn_octavia_provider/helper.py:926:33: F402 import \u0027_\u0027 from line 43 shadowed by loop variable","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"16ce77f99ac45193ec5e7021be0ad9444c82d77d","unresolved":true,"context_lines":[{"line_number":1942,"context_line":"        operating_status \u003d constants.NO_MONITOR"},{"line_number":1943,"context_line":"        if new_member and ovn_lb.health_check:"},{"line_number":1944,"context_line":"            operating_status \u003d constants.ONLINE"},{"line_number":1945,"context_line":"            mb_ip, mb_port, mb_subnet, mb_id \u003d self._extract_member_info("},{"line_number":1946,"context_line":"                new_member)[0]"},{"line_number":1947,"context_line":"            if not self._update_hm_member(ovn_lb, pool_key, mb_ip):"},{"line_number":1948,"context_line":"                operating_status \u003d constants.ERROR"}],"source_content_type":"text/x-python","patch_set":7,"id":"8b53e869_4bbaf98d","line":1945,"range":{"start_line":1945,"start_character":12,"end_line":1945,"end_character":44},"updated":"2023-04-11 10:03:44.000000000","message":"ditto","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"2c702f14b2f4df5ffd14447eafc6969756f9e919","unresolved":false,"context_lines":[{"line_number":1942,"context_line":"        operating_status \u003d constants.NO_MONITOR"},{"line_number":1943,"context_line":"        if new_member and ovn_lb.health_check:"},{"line_number":1944,"context_line":"            operating_status \u003d constants.ONLINE"},{"line_number":1945,"context_line":"            mb_ip, mb_port, mb_subnet, mb_id \u003d self._extract_member_info("},{"line_number":1946,"context_line":"                new_member)[0]"},{"line_number":1947,"context_line":"            if not self._update_hm_member(ovn_lb, pool_key, mb_ip):"},{"line_number":1948,"context_line":"                operating_status \u003d constants.ERROR"}],"source_content_type":"text/x-python","patch_set":7,"id":"63a07171_94f9f351","line":1945,"range":{"start_line":1945,"start_character":12,"end_line":1945,"end_character":44},"in_reply_to":"8b53e869_4bbaf98d","updated":"2023-04-11 13:07:47.000000000","message":"Done","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"16ce77f99ac45193ec5e7021be0ad9444c82d77d","unresolved":true,"context_lines":[{"line_number":2695,"context_line":"        # from info object passed-in"},{"line_number":2696,"context_line":"        hm_status \u003d self._add_lbhc(ovn_lb, pool_key, info)"},{"line_number":2697,"context_line":"        if hm_status[constants.PROVISIONING_STATUS] \u003d\u003d constants.ACTIVE:"},{"line_number":2698,"context_line":"            for mb_ip, mb_port, mb_subnet, mb_id in self._extract_member_info("},{"line_number":2699,"context_line":"                    ovn_lb.external_ids[pool_key]):"},{"line_number":2700,"context_line":"                if not self._update_hm_member(ovn_lb, pool_key, mb_ip):"},{"line_number":2701,"context_line":"                    hm_status[constants.PROVISIONING_STATUS] \u003d constants.ERROR"}],"source_content_type":"text/x-python","patch_set":7,"id":"18c13a10_6d4388ff","line":2698,"range":{"start_line":2698,"start_character":0,"end_line":2698,"end_character":48},"updated":"2023-04-11 10:03:44.000000000","message":"ditto","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"bec9163fe661990c3453792b34c4286b4ea862b0","unresolved":false,"context_lines":[{"line_number":2695,"context_line":"        # from info object passed-in"},{"line_number":2696,"context_line":"        hm_status \u003d self._add_lbhc(ovn_lb, pool_key, info)"},{"line_number":2697,"context_line":"        if hm_status[constants.PROVISIONING_STATUS] \u003d\u003d constants.ACTIVE:"},{"line_number":2698,"context_line":"            for mb_ip, mb_port, mb_subnet, mb_id in self._extract_member_info("},{"line_number":2699,"context_line":"                    ovn_lb.external_ids[pool_key]):"},{"line_number":2700,"context_line":"                if not self._update_hm_member(ovn_lb, pool_key, mb_ip):"},{"line_number":2701,"context_line":"                    hm_status[constants.PROVISIONING_STATUS] \u003d constants.ERROR"}],"source_content_type":"text/x-python","patch_set":7,"id":"ab9f2918_8c3893f3","line":2698,"range":{"start_line":2698,"start_character":0,"end_line":2698,"end_character":48},"in_reply_to":"18c13a10_6d4388ff","updated":"2023-04-11 13:07:25.000000000","message":"Done","commit_id":"e40e0d62ac089afd14c03102d80990e792211af3"}],"requirements.txt":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14e3366bbda641f4f6901c70c2b0ccd5bfad96f9","unresolved":true,"context_lines":[{"line_number":15,"context_line":"oslo.serialization\u003e\u003d2.28.1 # Apache-2.0"},{"line_number":16,"context_line":"oslo.utils\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":17,"context_line":"ovs\u003e\u003d2.10.0 # Apache-2.0"},{"line_number":18,"context_line":"ovsdbapp\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":19,"context_line":"pbr\u003e\u003d4.0.0 # Apache-2.0"},{"line_number":20,"context_line":"SQLAlchemy\u003e\u003d1.4.23 # MIT"},{"line_number":21,"context_line":"tenacity\u003e\u003d6.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"33de0514_e44756f4","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":8},"updated":"2023-03-13 09:14:50.000000000","message":"this should be at least 2.1.0: https://github.com/openstack/ovsdbapp/commit/f3c5da5402ea2d1c129684a84c91dbc72556f14f","commit_id":"690f879226a20a1c34db481e03835b1c20acea1f"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"2c702f14b2f4df5ffd14447eafc6969756f9e919","unresolved":false,"context_lines":[{"line_number":15,"context_line":"oslo.serialization\u003e\u003d2.28.1 # Apache-2.0"},{"line_number":16,"context_line":"oslo.utils\u003e\u003d4.5.0 # Apache-2.0"},{"line_number":17,"context_line":"ovs\u003e\u003d2.10.0 # Apache-2.0"},{"line_number":18,"context_line":"ovsdbapp\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":19,"context_line":"pbr\u003e\u003d4.0.0 # Apache-2.0"},{"line_number":20,"context_line":"SQLAlchemy\u003e\u003d1.4.23 # MIT"},{"line_number":21,"context_line":"tenacity\u003e\u003d6.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"627d731b_b68841b2","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":8},"in_reply_to":"33de0514_e44756f4","updated":"2023-04-11 13:07:47.000000000","message":"Done","commit_id":"690f879226a20a1c34db481e03835b1c20acea1f"}]}
