From c9d04230234f29a4011287adc4ea93ba57cfb65d Mon Sep 17 00:00:00 2001 From: SilverBut Date: Sun, 28 Nov 2021 06:41:53 +0800 Subject: [PATCH] dhcp ipam: adjust retry mechanism Signed-off-by: SilverBut --- plugins/ipam/dhcp/lease.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plugins/ipam/dhcp/lease.go b/plugins/ipam/dhcp/lease.go index a2989c6b..943e6e2c 100644 --- a/plugins/ipam/dhcp/lease.go +++ b/plugins/ipam/dhcp/lease.go @@ -37,6 +37,11 @@ import ( const resendDelay0 = 4 * time.Second const resendDelayMax = 62 * time.Second +// To speed up the retry for first few failures, we retry without +// backoff for a few times +const resendFastDelay = 2 * time.Second +const resendFastMax = 4 + const ( leaseStateBound = iota leaseStateRenewing @@ -427,8 +432,7 @@ func jitter(span time.Duration) time.Duration { func backoffRetry(resendMax time.Duration, f func() (*dhcp4.Packet, error)) (*dhcp4.Packet, error) { var baseDelay time.Duration = resendDelay0 var sleepTime time.Duration - var fastRetryLimit = 3 // fast retry for 3 times to speed up - + var fastRetryLimit = resendFastMax for { pkt, err := f() if err == nil { @@ -440,7 +444,7 @@ func backoffRetry(resendMax time.Duration, f func() (*dhcp4.Packet, error)) (*dh if fastRetryLimit == 0 { sleepTime = baseDelay + jitter(time.Second) } else { - sleepTime = jitter(time.Second) + sleepTime = resendFastDelay + jitter(time.Second) fastRetryLimit-- } @@ -448,7 +452,8 @@ func backoffRetry(resendMax time.Duration, f func() (*dhcp4.Packet, error)) (*dh time.Sleep(sleepTime) - if baseDelay < resendMax { + // only adjust delay time if we are in normal backoff stage + if baseDelay < resendMax && fastRetryLimit == 0 { baseDelay *= 2 } else { break