/
err_reconciler.go
47 lines (35 loc) · 1.21 KB
/
err_reconciler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Copyright 2020 VMware, Inc.
// SPDX-License-Identifier: Apache-2.0
package main
import (
"context"
"time"
"github.com/go-logr/logr"
"k8s.io/apimachinery/pkg/util/wait"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
)
type ErrReconciler struct {
delegate reconcile.Reconciler
log logr.Logger
}
var _ reconcile.Reconciler = &ErrReconciler{}
func (r *ErrReconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
log := r.log.WithValues("request", request)
res, err := r.delegate.Reconcile(ctx, request)
switch {
// Check before error check, since error check does not queue immediately
case res.Requeue && res.RequeueAfter == 0:
log.Info("Requeue immediately", "after", 0)
// This indicates general reconciliation error such as
// failing to update status, or fetching necessary k8s resource.
// Note, it does not cover cases such as deploy failing.
case err != nil:
res.RequeueAfter = 3*time.Second + wait.Jitter(5*time.Second, 1.0)
log.Info("Requeue quickly due to err", "after", res.RequeueAfter)
case res.RequeueAfter > 0:
log.Info("Requeue after given time", "after", res.RequeueAfter)
default:
log.Info("Requeue stopped")
}
return res, err
}