On 8/6/25 7:40 PM, Mark Michelson via dev wrote:
> This patch series seeks to refactor how northbound datapath types are
> synced with southbound Datapath_Bindings.
>
> In current OVN, the en-northd node is responsible for creating, updating
> and deleting all southbound Datapath_Bindings. This means that if you
> have a new type of Datapath_Binding that you want to add to OVN, it
> needs to be added to the en-northd node.
>
> An upcoming feature (composable services) will be adding new types of
> southbound Datapath_Bindings. However, it does not fit well into the
> current en_northd environment and would do better separated into its own
> set of engine nodes. In order to allow this, the Datapath_Binding
> syncing code needs to be extracted to separate nodes.
>
> This series does just that. The en_northd node is stripped of its
> previous functionality of creating, updating, and deleting southbound
> Datapath_Bindings. These are now accomplished in dedicated incremental
> engine nodes that are inputs to the en_northd engine node.
>
> Lorenzo Bianconi (3):
> northd: Add IP for new logical switches in en-datapath-logical-switch
> node.
> northd: datapath-sync: Move dp_tnlids map in ovn_synced_datapaths.
> northd: datapath-sync: Add IP for LS and LR inputs.
>
> Mark Michelson (6):
> Datapath_Binding: Separate type and UUID external-ids.
> northd: Refactor datapath syncing.
> northd: Create cachable pointer for datapath bindings.
> en-datapath-logical-router: Incrementally process unsynced routers.
> datapaths: Add incremental processing for synced datapaths.
> northd: Use synced datapaths everywhere.
>
> TODO.rst | 12 +
> controller/local_data.c | 2 +-
> ic/ovn-ic.c | 5 +-
> lib/ovn-util.c | 45 +++
> lib/ovn-util.h | 8 +
> northd/aging.c | 8 +-
> northd/automake.mk | 8 +
> northd/datapath-sync.c | 143 +++++++
> northd/datapath-sync.h | 151 +++++++
> northd/en-advertised-route-sync.c | 10 +-
> northd/en-datapath-logical-router.c | 401 +++++++++++++++++++
> northd/en-datapath-logical-router.h | 68 ++++
> northd/en-datapath-logical-switch.c | 400 +++++++++++++++++++
> northd/en-datapath-logical-switch.h | 65 +++
> northd/en-datapath-sync.c | 589 ++++++++++++++++++++++++++++
> northd/en-datapath-sync.h | 34 ++
> northd/en-global-config.c | 11 +
> northd/en-lb-data.c | 267 ++++++++-----
> northd/en-lb-data.h | 4 +-
> northd/en-multicast.c | 4 +-
> northd/en-northd.c | 12 +-
> northd/en-port-group.c | 2 +-
> northd/inc-proc-northd.c | 51 ++-
> northd/lflow-mgr.c | 4 +-
> northd/northd.c | 454 ++++-----------------
> northd/northd.h | 21 +-
> ovn-sb.ovsschema | 11 +-
> ovn-sb.xml | 21 +-
> tests/ovn-controller.at | 4 +
> tests/ovn-northd.at | 174 +++++++-
> tests/ovn.at | 6 +-
> utilities/ovn-sbctl.c | 4 +-
> utilities/ovn-trace.c | 3 +-
> 33 files changed, 2455 insertions(+), 547 deletions(-)
> create mode 100644 northd/datapath-sync.c
> create mode 100644 northd/datapath-sync.h
> create mode 100644 northd/en-datapath-logical-router.c
> create mode 100644 northd/en-datapath-logical-router.h
> create mode 100644 northd/en-datapath-logical-switch.c
> create mode 100644 northd/en-datapath-logical-switch.h
> create mode 100644 northd/en-datapath-sync.c
> create mode 100644 northd/en-datapath-sync.h
>
FWIW, CI is all red due to many cases of use-after-free in this patch set
and northd crashing.
One example:
=================================================================
==183429==ERROR: AddressSanitizer: heap-use-after-free on address
0x5030000ea208 at pc 0x55c87b3ec480 bp 0x7fffe7fe0e70 sp 0x7fffe7fe0e68
READ of size 8 at 0x5030000ea208 thread T0
#0 0x55c87b3ec47f in en_mac_binding_aging_run
/workspace/ovn-tmp/northd/aging.c:415:22
#1 0x55c87b5e68bc in engine_recompute
/workspace/ovn-tmp/lib/inc-proc-eng.c:443:33
#2 0x55c87b5e4e6c in engine_run_node
/workspace/ovn-tmp/lib/inc-proc-eng.c:532:17
#3 0x55c87b5e4e6c in engine_run /workspace/ovn-tmp/lib/inc-proc-eng.c:571:9
#4 0x55c87b558b54 in inc_proc_northd_run
/workspace/ovn-tmp/northd/inc-proc-northd.c:561:5
#5 0x55c87b4d5042 in main /workspace/ovn-tmp/northd/ovn-northd.c:1079:36
#6 0x7f081d62f1c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId:
282c2c16e7b6600b0b22ea0c99010d2795752b5f)
#7 0x7f081d62f28a in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId:
282c2c16e7b6600b0b22ea0c99010d2795752b5f)
#8 0x55c87b310eb4 in _start (/workspace/ovn-tmp/northd/ovn-northd+0x35aeb4)
(BuildId: 4116368360f5e90c391d4dc2975436fbce4026e6)
0x5030000ea208 is located 24 bytes inside of 32-byte region
[0x5030000ea1f0,0x5030000ea210)
freed by thread T0 here:
#0 0x55c87b3aba6a in free (/workspace/ovn-tmp/northd/ovn-northd+0x3f5a6a)
(BuildId: 4116368360f5e90c391d4dc2975436fbce4026e6)
#1 0x55c87b4e2ff8 in synced_logical_router_map_destroy
/workspace/ovn-tmp/northd/en-datapath-logical-router.c:248:9
#2 0x55c87b4e2805 in en_datapath_synced_logical_router_run
/workspace/ovn-tmp/northd/en-datapath-logical-router.c:285:5
#3 0x55c87b5e68bc in engine_recompute
/workspace/ovn-tmp/lib/inc-proc-eng.c:443:33
#4 0x55c87b5e56f5 in engine_compute
/workspace/ovn-tmp/lib/inc-proc-eng.c:486:17
#5 0x55c87b5e56f5 in engine_run_node
/workspace/ovn-tmp/lib/inc-proc-eng.c:545:14
#6 0x55c87b5e56f5 in engine_run /workspace/ovn-tmp/lib/inc-proc-eng.c:571:9
#7 0x55c87b558b54 in inc_proc_northd_run
/workspace/ovn-tmp/northd/inc-proc-northd.c:561:5
#8 0x55c87b4d5042 in main /workspace/ovn-tmp/northd/ovn-northd.c:1079:36
#9 0x7f081d62f1c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId:
282c2c16e7b6600b0b22ea0c99010d2795752b5f)
#10 0x7f081d62f28a in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId:
282c2c16e7b6600b0b22ea0c99010d2795752b5f)
#11 0x55c87b310eb4 in _start
(/workspace/ovn-tmp/northd/ovn-northd+0x35aeb4) (BuildId:
4116368360f5e90c391d4dc2975436fbce4026e6)
previously allocated by thread T0 here:
#0 0x55c87b3abd03 in malloc (/workspace/ovn-tmp/northd/ovn-northd+0x3f5d03)
(BuildId: 4116368360f5e90c391d4dc2975436fbce4026e6)
#1 0x55c87b8dcd28 in xmalloc__ /workspace/ovn-tmp/ovs/lib/util.c:141:15
#2 0x55c87b8dcd28 in xmalloc /workspace/ovn-tmp/ovs/lib/util.c:176:12
#3 0x55c87b4e312f in synced_logical_router_alloc
/workspace/ovn-tmp/northd/en-datapath-logical-router.c:267:44
#4 0x55c87b4e3898 in
en_datapath_synced_logical_router_datapath_sync_handler
/workspace/ovn-tmp/northd/en-datapath-logical-router.c:341:14
#5 0x55c87b5e5496 in engine_compute
/workspace/ovn-tmp/lib/inc-proc-eng.c:473:23
#6 0x55c87b5e5496 in engine_run_node
/workspace/ovn-tmp/lib/inc-proc-eng.c:545:14
#7 0x55c87b5e5496 in engine_run /workspace/ovn-tmp/lib/inc-proc-eng.c:571:9
#8 0x55c87b558b54 in inc_proc_northd_run
/workspace/ovn-tmp/northd/inc-proc-northd.c:561:5
#9 0x55c87b4d5042 in main /workspace/ovn-tmp/northd/ovn-northd.c:1079:36
#10 0x7f081d62f1c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId:
282c2c16e7b6600b0b22ea0c99010d2795752b5f)
#11 0x7f081d62f28a in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId:
282c2c16e7b6600b0b22ea0c99010d2795752b5f)
#12 0x55c87b310eb4 in _start
(/workspace/ovn-tmp/northd/ovn-northd+0x35aeb4) (BuildId:
4116368360f5e90c391d4dc2975436fbce4026e6)
SUMMARY: AddressSanitizer: heap-use-after-free
/workspace/ovn-tmp/northd/aging.c:415:22 in en_mac_binding_aging_run
Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev