)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1c1854264d24da045ebffe34bea332d98a456a50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9eb120b6_a034c067","updated":"2021-12-15 14:21:41.000000000","message":"I can\u0027t give you definite answer how to contiune, but perhaps my idea can help.\nLet\u0027s see if otheres with deeper knowledge in l3 ha has other opinion","commit_id":"49473049f1cd176c25b0cdfb26171f8eeeb21466"}],"neutron/agent/l3/keepalived_state_change.py":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"ba6e93ec98bb0454e4e40e3194a28d5915e110b2","unresolved":true,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def send_garp(self, event):"},{"line_number":167,"context_line":"        \"\"\"Send delayed gratuitous ARP for given event.\"\"\""},{"line_number":168,"context_line":"        sleep(10)"},{"line_number":169,"context_line":"        ip_address \u003d str(netaddr.IPNetwork(event[\u0027cidr\u0027]).ip)"},{"line_number":170,"context_line":"        ip_lib.send_ip_addr_adv_notif("},{"line_number":171,"context_line":"            self.namespace,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a7b99e24_24ab4664","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":17},"updated":"2021-12-15 10:23:12.000000000","message":"waiting regardless is fishy... I believe we\u0027re waiting for some specific event to happen? Like interfaces become reachable? Why not to check for it?","commit_id":"49473049f1cd176c25b0cdfb26171f8eeeb21466"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"67b670f4a837037c2f83eb05ce9ad75f034b3e9f","unresolved":true,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def send_garp(self, event):"},{"line_number":167,"context_line":"        \"\"\"Send delayed gratuitous ARP for given event.\"\"\""},{"line_number":168,"context_line":"        sleep(10)"},{"line_number":169,"context_line":"        ip_address \u003d str(netaddr.IPNetwork(event[\u0027cidr\u0027]).ip)"},{"line_number":170,"context_line":"        ip_lib.send_ip_addr_adv_notif("},{"line_number":171,"context_line":"            self.namespace,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1d71d1af_b6b04ba5","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":17},"in_reply_to":"4d915aa9_b2ee5f5f","updated":"2022-03-11 16:32:22.000000000","message":"The last time we used sleeps to solve this kind of problem is caused a very painful regression - see https://bugs.launchpad.net/ubuntu/+source/neutron/+bug/1927868/comments/68. Please lets not fall into the same trap again.","commit_id":"49473049f1cd176c25b0cdfb26171f8eeeb21466"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1c1854264d24da045ebffe34bea332d98a456a50","unresolved":true,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def send_garp(self, event):"},{"line_number":167,"context_line":"        \"\"\"Send delayed gratuitous ARP for given event.\"\"\""},{"line_number":168,"context_line":"        sleep(10)"},{"line_number":169,"context_line":"        ip_address \u003d str(netaddr.IPNetwork(event[\u0027cidr\u0027]).ip)"},{"line_number":170,"context_line":"        ip_lib.send_ip_addr_adv_notif("},{"line_number":171,"context_line":"            self.namespace,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c2edb797_34693e12","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":17},"in_reply_to":"a7b99e24_24ab4664","updated":"2021-12-15 14:21:41.000000000","message":"If I understand well MonitorDaemon sends notifications to the agent, another option could be to check keepalived if it is ready or not.\nBut checking interfaces like ip_lib.ensure_device_is_ready(...) can help, but as this Daemon anyway is a loop, perhaps adding some logic to cache that we already received the event but the device was down, let is send when the device is up.","commit_id":"49473049f1cd176c25b0cdfb26171f8eeeb21466"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"b33029367355bb095d7323d940f64a721782d225","unresolved":true,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def send_garp(self, event):"},{"line_number":167,"context_line":"        \"\"\"Send delayed gratuitous ARP for given event.\"\"\""},{"line_number":168,"context_line":"        sleep(10)"},{"line_number":169,"context_line":"        ip_address \u003d str(netaddr.IPNetwork(event[\u0027cidr\u0027]).ip)"},{"line_number":170,"context_line":"        ip_lib.send_ip_addr_adv_notif("},{"line_number":171,"context_line":"            self.namespace,"}],"source_content_type":"text/x-python","patch_set":2,"id":"4d915aa9_b2ee5f5f","line":168,"range":{"start_line":168,"start_character":0,"end_line":168,"end_character":17},"in_reply_to":"c2edb797_34693e12","updated":"2021-12-22 12:04:28.000000000","message":"sorry guys, I missed Your comments.\n\nThat\u0027s right, waiting 10s is fishy, we\u0027re waiting for interface to become up so we can probably implement some method to wait for this(unfortunately ensure_device_is_ready only puts interface up, but if I understand correctly, it does not wait for it).\n\nI just proposed few ways of fixing this bug, and instead making all of them \"perfect\", I would really appreciate someone to make a decision how we should fix it, then we can focus only on one of my proposed fixes.","commit_id":"49473049f1cd176c25b0cdfb26171f8eeeb21466"}]}
