When adjusting bond parameters, any adjustment is considered sufficient
for triggering a rebalance.  This is a very simplistic config update
scheme that triggers complete rebalancing even if the time adjustment
would move the next expiration out beyond the last calculated expiration.

For the interval parameter only, we can simply recalculate the expiry
deadline and let the next bond_run() event do the rebalance if needed.
Even if the recalculation would cause the deadline to have occurred in
the past, it should execute on the next bond_run() anyway.  This is
still okay, as the rebalance interval timeout may not result in a
full rebalance anyway.

Reported-at: 
https://www.mail-archive.com/ovs-discuss@openvswitch.org/msg10409.html
Signed-off-by: Aaron Conole <acon...@redhat.com>
---
 ofproto/bond.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/ofproto/bond.c b/ofproto/bond.c
index 3859ddca08..86e21607e5 100644
--- a/ofproto/bond.c
+++ b/ofproto/bond.c
@@ -459,8 +459,14 @@ bond_reconfigure(struct bond *bond, const struct 
bond_settings *s)
     }
 
     if (bond->rebalance_interval != s->rebalance_interval) {
+        /* Recompute the next rebalance interval by moving the next_rebalance
+         * to be offset by the new interval.  Then let the rebalance code
+         * trigger a rebalance based on the new details.  In this case, if
+         * all that was updated is the rebalance interval, we can skip
+         * triggering the rest of the port reconfigure mechanism. */
+        int old_start_time = bond->next_rebalance - bond->rebalance_interval;
         bond->rebalance_interval = s->rebalance_interval;
-        revalidate = true;
+        bond->next_rebalance = old_start_time + bond->rebalance_interval;
     }
 
     if (bond->balance != s->balance) {
-- 
2.49.0

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to