@@ -37,8 +37,13 @@ import (
3737"github.com/arangodb/kube-arangodb/pkg/util/k8sutil" 
3838)
3939
40+ const  (
41+ recheckPodFinalizerInterval  =  time .Second  *  10 
42+ )
43+ 
4044// runPodFinalizers goes through the list of pod finalizers to see if they can be removed. 
41- func  (r  * Resources ) runPodFinalizers (ctx  context.Context , p  * v1.Pod , memberStatus  api.MemberStatus , updateMember  func (api.MemberStatus ) error ) error  {
45+ // Returns: Interval_till_next_inspection, error 
46+ func  (r  * Resources ) runPodFinalizers (ctx  context.Context , p  * v1.Pod , memberStatus  api.MemberStatus , updateMember  func (api.MemberStatus ) error ) (time.Duration , error ) {
4247log  :=  r .log .With ().Str ("pod-name" , p .GetName ()).Logger ()
4348var  removalList  []string 
4449for  _ , f  :=  range  p .ObjectMeta .GetFinalizers () {
@@ -55,7 +60,7 @@ func (r *Resources) runPodFinalizers(ctx context.Context, p *v1.Pod, memberStatu
5560if  err  :=  r .inspectFinalizerPodDrainDBServer (ctx , log , p , memberStatus , updateMember ); err  ==  nil  {
5661removalList  =  append (removalList , f )
5762} else  {
58- log .Debug ().Err (err ).Str ("finalizer" , f ).Msg ("Cannot remove finalizer yet" )
63+ log .Debug ().Err (err ).Str ("finalizer" , f ).Msg ("Cannot remove Pod  finalizer yet" )
5964}
6065}
6166}
@@ -65,10 +70,15 @@ func (r *Resources) runPodFinalizers(ctx context.Context, p *v1.Pod, memberStatu
6570ignoreNotFound  :=  false 
6671if  err  :=  k8sutil .RemovePodFinalizers (log , kubecli , p , removalList , ignoreNotFound ); err  !=  nil  {
6772log .Debug ().Err (err ).Msg ("Failed to update pod (to remove finalizers)" )
68- return  maskAny (err )
73+ return  0 , maskAny (err )
74+ } else  {
75+ log .Debug ().Strs ("finalizers" , removalList ).Msg ("Removed finalizer(s) from Pod" )
6976}
77+ } else  {
78+ // Check again at given interval 
79+ return  recheckPodFinalizerInterval , nil 
7080}
71- return  nil 
81+ return  maxPodInspectorInterval ,  nil 
7282}
7383
7484// inspectFinalizerPodAgencyServing checks the finalizer condition for agency-serving. 
@@ -131,14 +141,16 @@ func (r *Resources) inspectFinalizerPodAgencyServing(ctx context.Context, log ze
131141return  maskAny (fmt .Errorf ("No more remaining agents" ))
132142}
133143if  err  :=  agency .AreAgentsHealthy (ctx , agencyConns ); err  !=  nil  {
134- log .Debug ().Err (err ).Msg ("Remaining agents are not health " )
144+ log .Debug ().Err (err ).Msg ("Remaining agents are not healthy " )
135145return  maskAny (err )
136146}
137147
138148// Remaining agents are healthy, we can remove this one and trigger a delete of the PVC 
139- if  err  :=  pvcs .Delete (memberStatus .PersistentVolumeClaimName , & metav1.DeleteOptions {}); err  !=  nil  {
149+ if  err  :=  pvcs .Delete (memberStatus .PersistentVolumeClaimName , & metav1.DeleteOptions {}); err  !=  nil  &&   ! k8sutil . IsNotFound ( err )  {
140150log .Warn ().Err (err ).Msg ("Failed to delete PVC for member" )
141151return  maskAny (err )
152+ } else  {
153+ log .Debug ().Str ("pvc-name" , memberStatus .PersistentVolumeClaimName ).Msg ("Removed PVC of member so agency can be completely replaced" )
142154}
143155
144156return  nil 
0 commit comments