)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7ef18c456408117f2c8517dd022de088f0de8ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f1212dfd_ff2a644c","updated":"2025-10-09 22:35:02.000000000","message":"I do not really know the vpnaas code that well, but do have some comments.","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"3ba2009959428b3369748785f288e12216d706f0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1dc9f275_5f59fc45","updated":"2025-11-01 08:43:29.000000000","message":"The ci timeouts dont seem to be related to the patch?\nIs it okay to trigger a recheck?","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"90abe14753602d2d6e3a782381cad5eefdf6ac4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7bbc48f0_18b96e45","updated":"2025-10-13 07:14:32.000000000","message":"is this related to the patch https://review.opendev.org/c/openstack/neutron-vpnaas/+/963490 ?","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"00872841e27e6fadffdb205dc4f58d0a9e4e5508","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"dbd97fdb_5947a659","in_reply_to":"1dc9f275_5f59fc45","updated":"2025-11-04 14:38:10.000000000","message":"yes not related to patch and these jobs are broken, tracked at https://bugs.launchpad.net/neutron/+bug/2130644","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"0c0d30ada2e619f5a8b8e3a85065b01d773b15e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0e147620_dd7b4c1b","in_reply_to":"7bbc48f0_18b96e45","updated":"2025-10-13 08:01:09.000000000","message":"Its indirectly related.\nIndependent bug which we found after we fixed #963490","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"e0c370a9127a11d31ce83aec6dd1b01c8ac4620a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"69f7d689_2ba8756e","in_reply_to":"dbd97fdb_5947a659","updated":"2025-11-15 10:00:12.000000000","message":"Thanks for the info!\nI rebased the patch against master where a fix got merged.","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"b4e5ff4c2731a6b8533e8487cf36f927902ec22c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"756b427d_18e6fe64","updated":"2025-11-19 08:05:45.000000000","message":"current functional job failures are triggered by recent neutron change, being tracked in https://bugs.launchpad.net/neutron/+bug/2131895","commit_id":"c6d82557726218eeed2b7ad445de10d04f9a0362"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b6b4098ca991f4456c6233fd681385830930a745","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"79b03b6b_9f84b25b","updated":"2025-11-21 19:56:05.000000000","message":"recheck neutron patch merged","commit_id":"c6d82557726218eeed2b7ad445de10d04f9a0362"}],"neutron_vpnaas/services/vpn/device_drivers/ipsec.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7ef18c456408117f2c8517dd022de088f0de8ed","unresolved":true,"context_lines":[{"line_number":1092,"context_line":"                isinstance(router, RouterInfo) and"},{"line_number":1093,"context_line":"                router.router[\u0027ha\u0027] and"},{"line_number":1094,"context_line":"                router.ha_state \u003d\u003d \u0027backup\u0027"},{"line_number":1095,"context_line":"                ):"},{"line_number":1096,"context_line":"                LOG.debug(\"%s router in backup state, skipping\", process_id)"},{"line_number":1097,"context_line":"                continue"},{"line_number":1098,"context_line":"            if not self.should_be_reported(context, process):"}],"source_content_type":"text/x-python","patch_set":2,"id":"c5d1fdb5_d4427df5","line":1095,"updated":"2025-10-09 22:35:02.000000000","message":"Is this just working around what might be a real bug? Is the same information here if this a dict? And should we not just continue here directly if we don\u0027t know how to deal with it?","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"72b64be892b8b94c16dd6b89f3533f20a8b9e809","unresolved":true,"context_lines":[{"line_number":1092,"context_line":"                isinstance(router, RouterInfo) and"},{"line_number":1093,"context_line":"                router.router[\u0027ha\u0027] and"},{"line_number":1094,"context_line":"                router.ha_state \u003d\u003d \u0027backup\u0027"},{"line_number":1095,"context_line":"                ):"},{"line_number":1096,"context_line":"                LOG.debug(\"%s router in backup state, skipping\", process_id)"},{"line_number":1097,"context_line":"                continue"},{"line_number":1098,"context_line":"            if not self.should_be_reported(context, process):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f94fa3e2_8e3ed69b","line":1095,"in_reply_to":"65c0fde1_8f00e368","updated":"2025-10-29 18:23:03.000000000","message":"@haleyb.dev@gmail.com how do we want to go about this?\nI think the fix as proposed here would be good enough for what the code is doing currently?\nMaybe for a future patch we need to refactor the whole code so we dont have 2 different ways of representing a router object?","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"7a625a1e757aaf559cedcc66a6807ec0ebda4e1c","unresolved":true,"context_lines":[{"line_number":1092,"context_line":"                isinstance(router, RouterInfo) and"},{"line_number":1093,"context_line":"                router.router[\u0027ha\u0027] and"},{"line_number":1094,"context_line":"                router.ha_state \u003d\u003d \u0027backup\u0027"},{"line_number":1095,"context_line":"                ):"},{"line_number":1096,"context_line":"                LOG.debug(\"%s router in backup state, skipping\", process_id)"},{"line_number":1097,"context_line":"                continue"},{"line_number":1098,"context_line":"            if not self.should_be_reported(context, process):"}],"source_content_type":"text/x-python","patch_set":2,"id":"d2deb86f_33cbdfa4","line":1095,"in_reply_to":"7f7fa3c0_eaed2721","updated":"2025-10-31 14:21:07.000000000","message":"+1 for follow-up cleanup to make maintenance and review easier","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"eec97349f988c5fe7046c9c5d4f4341d4fd72192","unresolved":true,"context_lines":[{"line_number":1092,"context_line":"                isinstance(router, RouterInfo) and"},{"line_number":1093,"context_line":"                router.router[\u0027ha\u0027] and"},{"line_number":1094,"context_line":"                router.ha_state \u003d\u003d \u0027backup\u0027"},{"line_number":1095,"context_line":"                ):"},{"line_number":1096,"context_line":"                LOG.debug(\"%s router in backup state, skipping\", process_id)"},{"line_number":1097,"context_line":"                continue"},{"line_number":1098,"context_line":"            if not self.should_be_reported(context, process):"}],"source_content_type":"text/x-python","patch_set":2,"id":"65c0fde1_8f00e368","line":1095,"in_reply_to":"c5d1fdb5_d4427df5","updated":"2025-10-10 07:41:08.000000000","message":"I am not sure if this would count as a workaround, but in the ovn implementation there are calls to the sync function like [1] where the routers object is just a list of dicts. If that is the case we cant check for ha backup routers.\n\n[1] https://github.com/openstack/neutron-vpnaas/blob/stable/2025.1/neutron_vpnaas/services/vpn/device_drivers/ovn_ipsec.py#L347-L349","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"e0c370a9127a11d31ce83aec6dd1b01c8ac4620a","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"                isinstance(router, RouterInfo) and"},{"line_number":1093,"context_line":"                router.router[\u0027ha\u0027] and"},{"line_number":1094,"context_line":"                router.ha_state \u003d\u003d \u0027backup\u0027"},{"line_number":1095,"context_line":"                ):"},{"line_number":1096,"context_line":"                LOG.debug(\"%s router in backup state, skipping\", process_id)"},{"line_number":1097,"context_line":"                continue"},{"line_number":1098,"context_line":"            if not self.should_be_reported(context, process):"}],"source_content_type":"text/x-python","patch_set":2,"id":"edcac78d_0348dd88","line":1095,"in_reply_to":"d2deb86f_33cbdfa4","updated":"2025-11-15 10:00:12.000000000","message":"I will open a new bug report to document the issue and potentially get a refactor patch.","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a91f012f4f32ab896a461458c980684ab5d18610","unresolved":true,"context_lines":[{"line_number":1092,"context_line":"                isinstance(router, RouterInfo) and"},{"line_number":1093,"context_line":"                router.router[\u0027ha\u0027] and"},{"line_number":1094,"context_line":"                router.ha_state \u003d\u003d \u0027backup\u0027"},{"line_number":1095,"context_line":"                ):"},{"line_number":1096,"context_line":"                LOG.debug(\"%s router in backup state, skipping\", process_id)"},{"line_number":1097,"context_line":"                continue"},{"line_number":1098,"context_line":"            if not self.should_be_reported(context, process):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f7fa3c0_eaed2721","line":1095,"in_reply_to":"f94fa3e2_8e3ed69b","updated":"2025-10-29 20:14:13.000000000","message":"Yeah, I\u0027m fine getting things running, but code could be cleaned-up.","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7ef18c456408117f2c8517dd022de088f0de8ed","unresolved":true,"context_lines":[{"line_number":1119,"context_line":"        \"\"\"Sync status with server side."},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"        :param context: context object for RPC call"},{"line_number":1122,"context_line":"        :param router_information: RouterInfo objects with updated state"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":"        There could be many failure cases should be"},{"line_number":1125,"context_line":"        considered including the followings."}],"source_content_type":"text/x-python","patch_set":2,"id":"2cba298c_fb6355fc","line":1122,"updated":"2025-10-09 22:35:02.000000000","message":"For example, here when things are synced it says they are all RouterInfo objects","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"e0c370a9127a11d31ce83aec6dd1b01c8ac4620a","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"        \"\"\"Sync status with server side."},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"        :param context: context object for RPC call"},{"line_number":1122,"context_line":"        :param router_information: RouterInfo objects with updated state"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":"        There could be many failure cases should be"},{"line_number":1125,"context_line":"        considered including the followings."}],"source_content_type":"text/x-python","patch_set":2,"id":"b8312d35_cc9c5e1c","line":1122,"in_reply_to":"2cba298c_fb6355fc","updated":"2025-11-15 10:00:12.000000000","message":"As discussed in the other replies I will open a new bug report to potentially get a refactor patch to clean the implementation up.","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7ef18c456408117f2c8517dd022de088f0de8ed","unresolved":true,"context_lines":[{"line_number":1141,"context_line":"            if isinstance(ri, RouterInfo):"},{"line_number":1142,"context_line":"                router_id \u003d ri.router_id if ri.router_id else None"},{"line_number":1143,"context_line":"            elif isinstance(ri, dict):"},{"line_number":1144,"context_line":"                router_id \u003d ri.get(\"router_id\")"},{"line_number":1145,"context_line":"            else:"},{"line_number":1146,"context_line":"                router_id \u003d None"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"43a1dcbe_fea4364c","line":1144,"updated":"2025-10-09 22:35:02.000000000","message":"But here it\u0027s treating as a dict. I\u0027m confused.","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"eec97349f988c5fe7046c9c5d4f4341d4fd72192","unresolved":true,"context_lines":[{"line_number":1141,"context_line":"            if isinstance(ri, RouterInfo):"},{"line_number":1142,"context_line":"                router_id \u003d ri.router_id if ri.router_id else None"},{"line_number":1143,"context_line":"            elif isinstance(ri, dict):"},{"line_number":1144,"context_line":"                router_id \u003d ri.get(\"router_id\")"},{"line_number":1145,"context_line":"            else:"},{"line_number":1146,"context_line":"                router_id \u003d None"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da157aaf_f46dce1b","line":1144,"in_reply_to":"43a1dcbe_fea4364c","updated":"2025-10-10 07:41:08.000000000","message":"Yes, we also found this very confusing, but as I wrote in my other comment sometimes this code gets called where router_information is just a list of dicts. See https://github.com/openstack/neutron-vpnaas/blob/stable/2025.1/neutron_vpnaas/services/vpn/device_drivers/ovn_ipsec.py#L347-L349","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"e0c370a9127a11d31ce83aec6dd1b01c8ac4620a","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"            if isinstance(ri, RouterInfo):"},{"line_number":1142,"context_line":"                router_id \u003d ri.router_id if ri.router_id else None"},{"line_number":1143,"context_line":"            elif isinstance(ri, dict):"},{"line_number":1144,"context_line":"                router_id \u003d ri.get(\"router_id\")"},{"line_number":1145,"context_line":"            else:"},{"line_number":1146,"context_line":"                router_id \u003d None"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6f016f2b_aa2a819a","line":1144,"in_reply_to":"da157aaf_f46dce1b","updated":"2025-11-15 10:00:12.000000000","message":"Acknowledged","commit_id":"d6bf60d9a0761bda04e6484a790104dc2a5ff889"}]}
