@@ -37,11 +37,6 @@ import (
37
37
"github.com/percona/percona-server-mongodb-operator/pkg/version"
38
38
)
39
39
40
- /**
41
- * USER ACTION REQUIRED: This is a scaffold file intended for the user to modify with their own Controller
42
- * business logic. Delete these comments after modifying this file.*
43
- */
44
-
45
40
// Add creates a new PerconaServerMongoDBBackup Controller and adds it to the Manager. The Manager will set fields on the Controller
46
41
// and Start it when the Manager is Started.
47
42
func Add (mgr manager.Manager ) error {
@@ -61,6 +56,7 @@ func newReconciler(mgr manager.Manager) (reconcile.Reconciler, error) {
61
56
62
57
return & ReconcilePerconaServerMongoDBBackup {
63
58
client : mgr .GetClient (),
59
+ apiReader : mgr .GetAPIReader (),
64
60
scheme : mgr .GetScheme (),
65
61
clientcmd : cli ,
66
62
newPBMFunc : backup .NewPBM ,
@@ -91,6 +87,7 @@ type ReconcilePerconaServerMongoDBBackup struct {
91
87
// This client, initialized using mgr.Client() above, is a split client
92
88
// that reads objects from the cache and writes to the apiserver
93
89
client client.Client
90
+ apiReader client.Reader
94
91
scheme * runtime.Scheme
95
92
clientcmd * clientcmd.Client
96
93
@@ -113,7 +110,14 @@ func (r *ReconcilePerconaServerMongoDBBackup) Reconcile(ctx context.Context, req
113
110
}
114
111
// Fetch the PerconaServerMongoDBBackup instance
115
112
cr := & psmdbv1.PerconaServerMongoDBBackup {}
116
- err := r .client .Get (ctx , request .NamespacedName , cr )
113
+
114
+ // Here we use k8s APIReader to read the k8s object by making the
115
+ // direct call to k8s apiserver instead of using k8sClient.
116
+ // The reason is that k8sClient uses a cache and sometimes k8sClient can
117
+ // return stale copy of object.
118
+ // It is okay to make direct call to k8s apiserver because we are only
119
+ // making single read call for complete reconciler loop.
120
+ err := r .apiReader .Get (ctx , request .NamespacedName , cr )
117
121
if err != nil {
118
122
if k8serrors .IsNotFound (err ) {
119
123
// Request object not found, could have been deleted after reconcile request.
@@ -125,6 +129,8 @@ func (r *ReconcilePerconaServerMongoDBBackup) Reconcile(ctx context.Context, req
125
129
return rr , err
126
130
}
127
131
132
+ log .V (1 ).Info ("Got object from API server" , "state" , cr .Status .State )
133
+
128
134
if (cr .Status .State == psmdbv1 .BackupStateReady || cr .Status .State == psmdbv1 .BackupStateError ) &&
129
135
cr .ObjectMeta .DeletionTimestamp == nil {
130
136
return reconcile.Result {}, nil
0 commit comments