Parameterize startup CRD wait retries

Change-Id: I870a3d294b4d30abea3f6ecad951d68cfd5c9ceb
This commit is contained in:
Matthew Cary
2022-11-03 13:50:33 -07:00
parent ba73208e90
commit 0cd8f738c7
2 changed files with 20 additions and 4 deletions

View File

@@ -174,6 +174,8 @@ Other than this, the NODE_NAME environment variable must be set where the CSI sn
* `--retry-interval-max`: Maximum retry interval of failed volume snapshot creation or deletion. Default value is 5 minutes.
* `--retry-crd-interval-max`: Maximum retry interval for detecting the snapshot CRDs on controller startup. Default is 5 seconds.
* `--enable-distributed-snapshotting` : Enables each node to handle snapshots for the volumes local to that node. Off by default. It should be set to true only if `--node-deployment` parameter for the csi external snapshotter sidecar is set to true. See https://github.com/kubernetes-csi/external-snapshotter/blob/master/README.md#distributed-snapshotting for details.
* `--prevent-volume-mode-conversion`: Boolean that prevents an unauthorised user from modifying the volume mode when creating a PVC from an existing VolumeSnapshot. Only present as an alpha feature in `v6.0.0` and above.

View File

@@ -20,6 +20,7 @@ import (
"context"
"flag"
"fmt"
"math"
"net"
"net/http"
"os"
@@ -71,6 +72,8 @@ var (
retryIntervalMax = flag.Duration("retry-interval-max", 5*time.Minute, "Maximum retry interval of failed volume snapshot creation or deletion. Default is 5 minutes.")
enableDistributedSnapshotting = flag.Bool("enable-distributed-snapshotting", false, "Enables each node to handle snapshotting for the local volumes created on that node")
preventVolumeModeConversion = flag.Bool("prevent-volume-mode-conversion", false, "Prevents an unauthorised user from modifying the volume mode when creating a PVC from an existing VolumeSnapshot.")
retryCRDIntervalMax = flag.Duration("retry-crd-interval-max", 5*time.Second, "Maximum retry interval to wait for CRDs to appear. The default is 5 seconds.")
)
var version = "unknown"
@@ -100,11 +103,22 @@ func ensureCustomResourceDefinitionsExist(client *clientset.Clientset) error {
return true, nil
}
// with a Factor of 1.5 we wait up to 7.5 seconds (the 10th attempt)
// The maximum retry duration = initial duration * retry factor ^ # steps. Rearranging, this gives
// # steps = log(maximum retry / initial duration) / log(retry factor).
const retryFactor = 1.5
const initialDurationMs = 100
maxMs := retryCRDIntervalMax.Milliseconds()
if maxMs < initialDurationMs {
maxMs = initialDurationMs
}
steps := int(math.Ceil(math.Log(float64(maxMs)/initialDurationMs) / math.Log(retryFactor)))
if steps < 1 {
steps = 1
}
backoff := wait.Backoff{
Duration: 100 * time.Millisecond,
Factor: 1.5,
Steps: 10,
Duration: initialDurationMs * time.Millisecond,
Factor: retryFactor,
Steps: steps,
}
if err := wait.ExponentialBackoff(backoff, condition); err != nil {
return err