@@ -48,7 +48,7 @@ func (r *Resources) runPodFinalizers(ctx context.Context, p *v1.Pod, memberStatu
4848 switch f {
4949 case constants .FinalizerPodAgencyServing :
5050 log .Debug ().Msg ("Inspecting agency-serving finalizer" )
51- if err := r .inspectFinalizerPodAgencyServing (ctx , log , p , memberStatus ); err == nil {
51+ if err := r .inspectFinalizerPodAgencyServing (ctx , log , p , memberStatus , updateMember ); err == nil {
5252 removalList = append (removalList , f )
5353 } else {
5454 log .Debug ().Err (err ).Str ("finalizer" , f ).Msg ("Cannot remove finalizer yet" )
@@ -80,18 +80,26 @@ func (r *Resources) runPodFinalizers(ctx context.Context, p *v1.Pod, memberStatu
8080
8181// inspectFinalizerPodAgencyServing checks the finalizer condition for agency-serving.
8282// It returns nil if the finalizer can be removed.
83- func (r * Resources ) inspectFinalizerPodAgencyServing (ctx context.Context , log zerolog.Logger , p * v1.Pod , memberStatus api.MemberStatus ) error {
84- if err := r .prepareAgencyPodTermination (ctx , log , p , memberStatus ); err != nil {
83+ func (r * Resources ) inspectFinalizerPodAgencyServing (ctx context.Context , log zerolog.Logger , p * v1.Pod , memberStatus api.MemberStatus , updateMember func (api.MemberStatus ) error ) error {
84+ if err := r .prepareAgencyPodTermination (ctx , log , p , memberStatus , func (update api.MemberStatus ) error {
85+ if err := updateMember (update ); err != nil {
86+ return maskAny (err )
87+ }
88+ memberStatus = update
89+ return nil
90+ }); err != nil {
8591 // Pod cannot be terminated yet
8692 return maskAny (err )
8793 }
8894
89- // Remaining agents are healthy, we can remove this one and trigger a delete of the PVC
90- pvcs := r .context .GetKubeCli ().CoreV1 ().PersistentVolumeClaims (r .context .GetNamespace ())
91- if err := pvcs .Delete (memberStatus .PersistentVolumeClaimName , & metav1.DeleteOptions {}); err != nil && ! k8sutil .IsNotFound (err ) {
92- log .Warn ().Err (err ).Msg ("Failed to delete PVC for member" )
93- return maskAny (err )
94- } else {
95+ // Remaining agents are healthy, if we need to perform complete recovery
96+ // of the agent, also remove the PVC
97+ if memberStatus .Conditions .IsTrue (api .ConditionTypeAgentRecoveryNeeded ) {
98+ pvcs := r .context .GetKubeCli ().CoreV1 ().PersistentVolumeClaims (r .context .GetNamespace ())
99+ if err := pvcs .Delete (memberStatus .PersistentVolumeClaimName , & metav1.DeleteOptions {}); err != nil && ! k8sutil .IsNotFound (err ) {
100+ log .Warn ().Err (err ).Msg ("Failed to delete PVC for member" )
101+ return maskAny (err )
102+ }
95103 log .Debug ().Str ("pvc-name" , memberStatus .PersistentVolumeClaimName ).Msg ("Removed PVC of member so agency can be completely replaced" )
96104 }
97105
@@ -101,17 +109,24 @@ func (r *Resources) inspectFinalizerPodAgencyServing(ctx context.Context, log ze
101109// inspectFinalizerPodDrainDBServer checks the finalizer condition for drain-dbserver.
102110// It returns nil if the finalizer can be removed.
103111func (r * Resources ) inspectFinalizerPodDrainDBServer (ctx context.Context , log zerolog.Logger , p * v1.Pod , memberStatus api.MemberStatus , updateMember func (api.MemberStatus ) error ) error {
104- if err := r .prepareDBServerPodTermination (ctx , log , p , memberStatus , updateMember ); err != nil {
112+ if err := r .prepareDBServerPodTermination (ctx , log , p , memberStatus , func (update api.MemberStatus ) error {
113+ if err := updateMember (update ); err != nil {
114+ return maskAny (err )
115+ }
116+ memberStatus = update
117+ return nil
118+ }); err != nil {
105119 // Pod cannot be terminated yet
106120 return maskAny (err )
107121 }
108122
109- // Remaining agents are healthy, we can remove this one and trigger a delete of the PVC
110- pvcs := r .context .GetKubeCli ().CoreV1 ().PersistentVolumeClaims (r .context .GetNamespace ())
111- if err := pvcs .Delete (memberStatus .PersistentVolumeClaimName , & metav1.DeleteOptions {}); err != nil && ! k8sutil .IsNotFound (err ) {
112- log .Warn ().Err (err ).Msg ("Failed to delete PVC for member" )
113- return maskAny (err )
114- } else {
123+ // If this DBServer is cleaned out, we need to remove the PVC.
124+ if memberStatus .Conditions .IsTrue (api .ConditionTypeCleanedOut ) {
125+ pvcs := r .context .GetKubeCli ().CoreV1 ().PersistentVolumeClaims (r .context .GetNamespace ())
126+ if err := pvcs .Delete (memberStatus .PersistentVolumeClaimName , & metav1.DeleteOptions {}); err != nil && ! k8sutil .IsNotFound (err ) {
127+ log .Warn ().Err (err ).Msg ("Failed to delete PVC for member" )
128+ return maskAny (err )
129+ }
115130 log .Debug ().Str ("pvc-name" , memberStatus .PersistentVolumeClaimName ).Msg ("Removed PVC of member" )
116131 }
117132
0 commit comments