We shouldn't run the MAC binding aging if the waker did not expire. This wouldn't cause any issue if the bulk removal limit is not configured. When the limit is configured and hit there will be some MAC bindings expired, just waiting for the bulk removal delay. If something wakes up the aging run earlier it could remove those rows without respecting the delay. Add check if we are past the next wake to prevent that.
Signed-off-by: Ales Musil <amu...@redhat.com> Signed-off-by: Han Zhou <hz...@ovn.org> --- northd/mac-binding-aging.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/northd/mac-binding-aging.c b/northd/mac-binding-aging.c index 0196a116b..f65353a69 100644 --- a/northd/mac-binding-aging.c +++ b/northd/mac-binding-aging.c @@ -91,9 +91,12 @@ en_mac_binding_aging_run(struct engine_node *node, void *data OVS_UNUSED) { const struct engine_context *eng_ctx = engine_get_context(); struct northd_data *northd_data = engine_get_input_data("northd", node); + struct mac_binding_waker *waker = + engine_get_input_data("mac_binding_aging_waker", node); if (!eng_ctx->ovnsb_idl_txn || - !northd_data->features.mac_binding_timestamp) { + !northd_data->features.mac_binding_timestamp || + time_msec() < waker->next_wake_msec) { return; } @@ -101,8 +104,6 @@ en_mac_binding_aging_run(struct engine_node *node, void *data OVS_UNUSED) int64_t now = time_wall_msec(); uint32_t removal_limit = get_removal_limit(node); uint32_t removed_n = 0; - struct mac_binding_waker *waker = - engine_get_input_data("mac_binding_aging_waker", node); struct ovsdb_idl_index *sbrec_mac_binding_by_datapath = engine_ovsdb_node_get_index(engine_get_input("SB_mac_binding", node), "sbrec_mac_binding_by_datapath"); -- 2.37.3 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev