)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8b9760305f505bd5965a3e613e98244374d9eb6f","unresolved":true,"context_lines":[{"line_number":16,"context_line":"cleaned up after waiting for a reconnection, preventing unnecessary"},{"line_number":17,"context_line":"reconfiguration of physical bridges and flows."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Related-Bug: #1813703"},{"line_number":20,"context_line":"Related-Bug: #1813705"},{"line_number":21,"context_line":"Related-Bug: #1813707"},{"line_number":22,"context_line":"Related-Bug: #1813709"},{"line_number":23,"context_line":"Closes-Bug: #2067588"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I7b43585069d46dbb86c99c4fb48263fba644c8b2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1089d90d_4dfe051d","line":22,"range":{"start_line":19,"start_character":0,"end_line":22,"end_character":21},"updated":"2024-05-31 01:05:27.000000000","message":"Good to see all these old bugs are still in your list. 😊","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"aacba6e9f328c01bd4d44115a9deb499b19ee262","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5757770b_72c6f5ef","updated":"2024-05-31 07:06:59.000000000","message":"Hey LIU Yulong, I have responded to your comment, thank you !","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ab39a50a9b10fed6d439b8a7805bce64e37abf4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b26885cd_80c856d5","updated":"2024-05-30 16:22:01.000000000","message":"Thanks for you comment Lajos.","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"780e231e290cffe30f1b0e5124fd68fb244ce87b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a081cb8b_b6934b25","updated":"2024-06-21 07:57:59.000000000","message":"Please consider the comments and check the pep8 \u0026 unit test (all kind of tests) issues","commit_id":"2bdf8fa3856bb068aa0a33feb29d7799b8f32cb8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ff7f155a49c92d0728f2049208f81f3637cbf505","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"78f7f05e_9a551e8d","updated":"2024-07-02 09:26:08.000000000","message":"Still need to work on it, the current solution is not correct.","commit_id":"2bdf8fa3856bb068aa0a33feb29d7799b8f32cb8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6eb556fd79977985e99f50cee83af49c7c3486de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"112d5a2f_3f05efaf","updated":"2024-06-06 13:29:02.000000000","message":"recheck","commit_id":"2bdf8fa3856bb068aa0a33feb29d7799b8f32cb8"}],"neutron/agent/common/ovsdb_monitor.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d757c15661deb58da8e58a2727fa622303953a2b","unresolved":true,"context_lines":[{"line_number":127,"context_line":"                device \u003d {\u0027name\u0027: name,"},{"line_number":128,"context_line":"                          \u0027ofport\u0027: ofport,"},{"line_number":129,"context_line":"                          \u0027external_ids\u0027: external_ids}"},{"line_number":130,"context_line":"                if action in (OVSDB_ACTION_INITIAL, OVSDB_ACTION_INSERT):"},{"line_number":131,"context_line":"                    devices_added.append(device)"},{"line_number":132,"context_line":"                elif action \u003d\u003d OVSDB_ACTION_DELETE:"},{"line_number":133,"context_line":"                    devices_removed.append(device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"c7ddfd88_a0d5e2a6","side":"PARENT","line":130,"range":{"start_line":130,"start_character":30,"end_line":130,"end_character":50},"updated":"2024-06-04 12:59:07.000000000","message":"I don\u0027t see the rational to have added INITIAL.\n\nThis creates issue has when a connection get dropped and reconnect, this trigger events in devices_added, which means all the ports currently active on host will be rebuilt. This can block the process more than 800s and it\u0027s not required.\n\nWhen we lost flows, it\u0027s when OVS get restarted and we have a different path to rebuild all the flows per ports.\n\n@i@liuyulong.me did I missed something?","commit_id":"06c1972a4866c81d8dbb6131c8ea747588855e01"},{"author":{"_account_id":9642,"name":"Guillaume Espanel","email":"guillaume.espanel@gmail.com","username":"quatre"},"change_message_id":"ffae575b235d713912225b6c98e881cfbfa330c0","unresolved":true,"context_lines":[{"line_number":127,"context_line":"                device \u003d {\u0027name\u0027: name,"},{"line_number":128,"context_line":"                          \u0027ofport\u0027: ofport,"},{"line_number":129,"context_line":"                          \u0027external_ids\u0027: external_ids}"},{"line_number":130,"context_line":"                if action in (OVSDB_ACTION_INSERT):"},{"line_number":131,"context_line":"                    devices_added.append(device)"},{"line_number":132,"context_line":"                elif action \u003d\u003d OVSDB_ACTION_DELETE:"},{"line_number":133,"context_line":"                    devices_removed.append(device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5e88ec68_36cd6537","line":130,"range":{"start_line":130,"start_character":29,"end_line":130,"end_character":50},"updated":"2024-06-19 07:53:32.000000000","message":"(OVSDB_ACTION_INSERT) is not a tuple anymore, so you might want to check for equality here","commit_id":"2bdf8fa3856bb068aa0a33feb29d7799b8f32cb8"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3b348d02159d9cc1c4d6029341dd2ec970e2180c","unresolved":true,"context_lines":[{"line_number":2532,"context_line":"    def check_ovs_status(self):"},{"line_number":2533,"context_line":"        try:"},{"line_number":2534,"context_line":"            # Check for the canary flow"},{"line_number":2535,"context_line":"            status \u003d self.int_br.check_canary_table()"},{"line_number":2536,"context_line":"        except Exception:"},{"line_number":2537,"context_line":"            LOG.exception(\"Failure while checking for the canary flow\")"},{"line_number":2538,"context_line":"            status \u003d ovs_const.OVS_DEAD"},{"line_number":2539,"context_line":"        if status \u003d\u003d ovs_const.OVS_RESTARTED:"},{"line_number":2540,"context_line":"            LOG.warning(\"OVS is restarted. OVSNeutronAgent will reset \""},{"line_number":2541,"context_line":"                        \"bridges and recover ports.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfb92f41_31142bbd","line":2538,"range":{"start_line":2535,"start_character":0,"end_line":2538,"end_character":39},"updated":"2024-05-31 07:39:21.000000000","message":"How to distingush the error is only connection loss, and at the same time the ovs-vswitchd is still alive?","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e3629e0aa30274c1153ee0f052ef16ea7bb6dec6","unresolved":true,"context_lines":[{"line_number":2532,"context_line":"    def check_ovs_status(self):"},{"line_number":2533,"context_line":"        try:"},{"line_number":2534,"context_line":"            # Check for the canary flow"},{"line_number":2535,"context_line":"            status \u003d self.int_br.check_canary_table()"},{"line_number":2536,"context_line":"        except Exception:"},{"line_number":2537,"context_line":"            LOG.exception(\"Failure while checking for the canary flow\")"},{"line_number":2538,"context_line":"            status \u003d ovs_const.OVS_DEAD"},{"line_number":2539,"context_line":"        if status \u003d\u003d ovs_const.OVS_RESTARTED:"},{"line_number":2540,"context_line":"            LOG.warning(\"OVS is restarted. OVSNeutronAgent will reset \""},{"line_number":2541,"context_line":"                        \"bridges and recover ports.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"efd32f25_71753c0f","line":2538,"range":{"start_line":2535,"start_character":0,"end_line":2538,"end_character":39},"in_reply_to":"dfb92f41_31142bbd","updated":"2024-06-04 12:53:28.000000000","message":"I have introduced a prev_ovs_status variable. Not perfect but easy to be backported.","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8b9760305f505bd5965a3e613e98244374d9eb6f","unresolved":true,"context_lines":[{"line_number":2779,"context_line":"                port_stats \u003d self.get_port_stats({}, {})"},{"line_number":2780,"context_line":"                self.loop_count_and_wait(start, port_stats)"},{"line_number":2781,"context_line":""},{"line_number":2782,"context_line":"                # In case the connection gets retrieved, let\u0027s ignore"},{"line_number":2783,"context_line":"                # bridge create events for the physical bridges since"},{"line_number":2784,"context_line":"                # we are sure they are already created. Calling the"},{"line_number":2785,"context_line":"                # attribute will clean the values."},{"line_number":2786,"context_line":"                idl_monitor.bridges_added \u003d []"},{"line_number":2787,"context_line":"                continue"},{"line_number":2788,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"b5db1c4b_58b3eedf","line":2785,"range":{"start_line":2782,"start_character":15,"end_line":2785,"end_character":50},"updated":"2024-05-31 01:05:27.000000000","message":"I don\u0027t think this change can cover all cases. Because how to distinguish whether the connection （between ovs-agent and ovs-switchd) loss is caused by ovs-vswitchd restart? If it is an ovs-vswitchd restart, all flow tables of all bridges need to be reissued in full.","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3b348d02159d9cc1c4d6029341dd2ec970e2180c","unresolved":true,"context_lines":[{"line_number":2779,"context_line":"                port_stats \u003d self.get_port_stats({}, {})"},{"line_number":2780,"context_line":"                self.loop_count_and_wait(start, port_stats)"},{"line_number":2781,"context_line":""},{"line_number":2782,"context_line":"                # In case the connection gets retrieved, let\u0027s ignore"},{"line_number":2783,"context_line":"                # bridge create events for the physical bridges since"},{"line_number":2784,"context_line":"                # we are sure they are already created. Calling the"},{"line_number":2785,"context_line":"                # attribute will clean the values."},{"line_number":2786,"context_line":"                idl_monitor.bridges_added \u003d []"},{"line_number":2787,"context_line":"                continue"},{"line_number":2788,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7eb1296a_9ceb8577","line":2785,"range":{"start_line":2782,"start_character":15,"end_line":2785,"end_character":50},"in_reply_to":"06408b4c_1945e530","updated":"2024-05-31 07:39:21.000000000","message":"check_canary_table of br-int will return OVS_DEAD if meet runtime error. check_ovs_status will return OVS_DEAD if call br_int.check_canary_table meets any exception. So it is hardly to say this OVS_DEAD status is only because of the connection loss. Maybe some error else that can cause flow missing? Or can we try to improve that check_ovs_status/check_canary_table function there?","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"c90d1200002df07cb74b70e0cdc3c6df6efb742e","unresolved":true,"context_lines":[{"line_number":2779,"context_line":"                port_stats \u003d self.get_port_stats({}, {})"},{"line_number":2780,"context_line":"                self.loop_count_and_wait(start, port_stats)"},{"line_number":2781,"context_line":""},{"line_number":2782,"context_line":"                # In case the connection gets retrieved, let\u0027s ignore"},{"line_number":2783,"context_line":"                # bridge create events for the physical bridges since"},{"line_number":2784,"context_line":"                # we are sure they are already created. Calling the"},{"line_number":2785,"context_line":"                # attribute will clean the values."},{"line_number":2786,"context_line":"                idl_monitor.bridges_added \u003d []"},{"line_number":2787,"context_line":"                continue"},{"line_number":2788,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"cf56668b_9ca93d42","line":2785,"range":{"start_line":2782,"start_character":15,"end_line":2785,"end_character":50},"in_reply_to":"7eb1296a_9ceb8577","updated":"2024-05-31 09:20:59.000000000","message":"If flows are missing without restart that means that there are something wrong in our code or somewhere else or in OVS.\n\nThe safe point is that we are able to distinguishing if it is a restart, and in that case do rebuild flows and bridges.","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"aacba6e9f328c01bd4d44115a9deb499b19ee262","unresolved":true,"context_lines":[{"line_number":2779,"context_line":"                port_stats \u003d self.get_port_stats({}, {})"},{"line_number":2780,"context_line":"                self.loop_count_and_wait(start, port_stats)"},{"line_number":2781,"context_line":""},{"line_number":2782,"context_line":"                # In case the connection gets retrieved, let\u0027s ignore"},{"line_number":2783,"context_line":"                # bridge create events for the physical bridges since"},{"line_number":2784,"context_line":"                # we are sure they are already created. Calling the"},{"line_number":2785,"context_line":"                # attribute will clean the values."},{"line_number":2786,"context_line":"                idl_monitor.bridges_added \u003d []"},{"line_number":2787,"context_line":"                continue"},{"line_number":2788,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"06408b4c_1945e530","line":2785,"range":{"start_line":2782,"start_character":15,"end_line":2785,"end_character":50},"in_reply_to":"b5db1c4b_58b3eedf","updated":"2024-05-31 07:06:59.000000000","message":"There is a case for that, see: ovs_const.OVS_RESTARTED. In that case we do recreate and recompute.","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9ef820ab31dd15a9ce7082f1a0dbc7bc7e9cda48","unresolved":true,"context_lines":[{"line_number":2783,"context_line":"                # bridge create events for the physical bridges since"},{"line_number":2784,"context_line":"                # we are sure they are already created. Calling the"},{"line_number":2785,"context_line":"                # attribute will clean the values."},{"line_number":2786,"context_line":"                idl_monitor.bridges_added \u003d []"},{"line_number":2787,"context_line":"                continue"},{"line_number":2788,"context_line":"            else:"},{"line_number":2789,"context_line":"                # Check if any physical bridge wasn\u0027t recreated recently,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae85ee2_a8f3a5b8","line":2786,"updated":"2024-05-30 15:01:16.000000000","message":"bridges_added is just a property of the idl monitor:\nhttps://opendev.org/openstack/neutron/src/branch/master/neutron/agent/ovsdb/native/connection.py#L127\nso you have to add a deleter or similar.\nThe unit test test_rpc_loop_survives_error_in_check_canary_table also failing I suppose some mocking is missing there","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ab39a50a9b10fed6d439b8a7805bce64e37abf4d","unresolved":true,"context_lines":[{"line_number":2783,"context_line":"                # bridge create events for the physical bridges since"},{"line_number":2784,"context_line":"                # we are sure they are already created. Calling the"},{"line_number":2785,"context_line":"                # attribute will clean the values."},{"line_number":2786,"context_line":"                idl_monitor.bridges_added \u003d []"},{"line_number":2787,"context_line":"                continue"},{"line_number":2788,"context_line":"            else:"},{"line_number":2789,"context_line":"                # Check if any physical bridge wasn\u0027t recreated recently,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7b751014_0b121dff","line":2786,"in_reply_to":"bae85ee2_a8f3a5b8","updated":"2024-05-30 16:22:01.000000000","message":"Hum.. I have added \u0027\u003d []\u0027 to make unittests working but it was not a good idea.\n\nnormally just calling this should clean it up. I will revisit that... it\u0027s not easy to provide test for that","commit_id":"b4a8b5faece2d91f7ad635ce4023d2915507bbb4"}]}
