func RetryExBackoffOperation(timeoutSeconds int, taskName string, callback func() error) (err error) {
	var (
		usedSeconds  = 0
		sleepSeconds = 1
	)
	for usedSeconds < timeoutSeconds {
		err = callback()
		if err == nil {
			return nil
		}
		sleepSeconds = sleepSeconds * 2
		if usedSeconds+sleepSeconds > timeoutSeconds {
			sleepSeconds = timeoutSeconds - usedSeconds
		}
		d := time.Duration(sleepSeconds * 1000 * 1000 * 1000)
		time.Sleep(d)
		usedSeconds = usedSeconds + sleepSeconds
	}
	return fmt.Errorf("after %d seconds, last error: %s", timeoutSeconds, err)
}
RetryExBackoffOperation re-runs provided callback function with multiple attempts until either
the Operation is successful or the timeout specified with timeoutSeconds has reached.
The sleep between two successive retry increases by 2 times
package utils
import (
	"fmt"
	"time"
)