From 4b216e9d9b4ef6914c2b9f62a51c43139e6188ba Mon Sep 17 00:00:00 2001 From: SilverBut Date: Sat, 2 Oct 2021 23:04:24 +0800 Subject: [PATCH] dhcp ipam: add fast retry Almost every first retry of DHCP will fail due to interface is not up. Add a fast retry to reduce unnecessary latency. Signed-off-by: SilverBut --- plugins/ipam/dhcp/lease.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/ipam/dhcp/lease.go b/plugins/ipam/dhcp/lease.go index 9a7e5e48..0e9e72d2 100644 --- a/plugins/ipam/dhcp/lease.go +++ b/plugins/ipam/dhcp/lease.go @@ -423,6 +423,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 for { pkt, err := f() @@ -432,7 +433,12 @@ func backoffRetry(resendMax time.Duration, f func() (*dhcp4.Packet, error)) (*dh log.Print(err) - sleepTime = baseDelay + jitter(time.Second) + if fastRetryLimit == 0 { + sleepTime = baseDelay + jitter(time.Second) + } else { + sleepTime = jitter(time.Second) + fastRetryLimit-- + } log.Printf("retrying in %f seconds", sleepTime.Seconds())