@@ -24,25 +24,29 @@ package resources
2424
2525import (
2626 "context"
27+ "time"
2728
2829 api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1alpha"
2930 "github.com/arangodb/kube-arangodb/pkg/metrics"
31+ "github.com/arangodb/kube-arangodb/pkg/util"
3032 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
3133)
3234
3335var (
34- inspectedPVCCounter = metrics .MustRegisterCounter ("deployment" , "inspected_ppvcs" , "Number of PVCs inspections" )
36+ inspectedPVCCounter = metrics .MustRegisterCounter ("deployment" , "inspected_ppvcs" , "Number of PVCs inspections" )
37+ maxPVCInspectorInterval = time .Hour // Maximum time between PVC inspection (if nothing else happens)
3538)
3639
3740// InspectPVCs lists all PVCs that belong to the given deployment and updates
3841// the member status of the deployment accordingly.
39- func (r * Resources ) InspectPVCs (ctx context.Context ) error {
42+ func (r * Resources ) InspectPVCs (ctx context.Context ) (time. Duration , error ) {
4043 log := r .log
44+ nextInterval := maxPVCInspectorInterval
4145
4246 pvcs , err := r .context .GetOwnedPVCs ()
4347 if err != nil {
4448 log .Debug ().Err (err ).Msg ("Failed to get owned PVCs" )
45- return maskAny (err )
49+ return 0 , maskAny (err )
4650 }
4751
4852 // Update member status from all pods found
@@ -63,7 +67,7 @@ func (r *Resources) InspectPVCs(ctx context.Context) error {
6367 ignoreNotFound := false
6468 if err := k8sutil .RemovePVCFinalizers (log , kubecli , & p , p .GetFinalizers (), ignoreNotFound ); err != nil {
6569 log .Debug ().Err (err ).Msg ("Failed to update PVC (to remove all finalizers)" )
66- return maskAny (err )
70+ return 0 , maskAny (err )
6771 }
6872 }
6973 continue
@@ -72,21 +76,23 @@ func (r *Resources) InspectPVCs(ctx context.Context) error {
7276 updateMemberStatusNeeded := false
7377 if k8sutil .IsPersistentVolumeClaimMarkedForDeletion (& p ) {
7478 // Process finalizers
75- if err := r .runPVCFinalizers (ctx , & p , group , memberStatus , func (m api.MemberStatus ) error {
79+ if x , err := r .runPVCFinalizers (ctx , & p , group , memberStatus , func (m api.MemberStatus ) error {
7680 updateMemberStatusNeeded = true
7781 memberStatus = m
7882 return nil
7983 }); err != nil {
8084 // Only log here, since we'll be called to try again.
8185 log .Warn ().Err (err ).Msg ("Failed to run PVC finalizers" )
86+ } else {
87+ nextInterval = util .MinDuration (nextInterval , x )
8288 }
8389 }
8490 if updateMemberStatusNeeded {
8591 if err := status .Members .Update (memberStatus , group ); err != nil {
86- return maskAny (err )
92+ return 0 , maskAny (err )
8793 }
8894 }
8995 }
9096
91- return nil
97+ return nextInterval , nil
9298}
0 commit comments