Skip to content

Commit b068b88

Browse files
authored
[Bugfix] Adjust pod finalizers (#749)
1 parent 51299ac commit b068b88

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Switch K8S CRD API to V1
55
- Deprecate Alpine image usage
66
- Use persistent name and namespace in ArangoDeployment reconcilation loop
7+
- Remove finalizers when Server container is already terminated and reduce initial reconciliation delay
78

89
## [1.1.9](https://github.com/arangodb/kube-arangodb/tree/1.1.9) (2021-05-28)
910
- Add IP, DNS, ShortDNS, HeadlessService (Default) communication methods

pkg/deployment/deployment.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,11 @@ func (d *Deployment) run() {
253253

254254
d.lookForServiceMonitorCRD()
255255

256-
inspectionInterval := maxInspectionInterval
256+
// Execute inspection for first time without delay of 10s
257+
log.Debug().Msg("Initially inspect deployment...")
258+
inspectionInterval := d.inspectDeployment(minInspectionInterval)
259+
log.Debug().Str("interval", inspectionInterval.String()).Msg("...deployment inspect started")
260+
257261
for {
258262
select {
259263
case <-d.stopCh:

pkg/deployment/resources/pod_finalizers.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,23 +49,42 @@ const (
4949
func (r *Resources) runPodFinalizers(ctx context.Context, p *v1.Pod, memberStatus api.MemberStatus, updateMember func(api.MemberStatus) error) (util.Interval, error) {
5050
log := r.log.With().Str("pod-name", p.GetName()).Logger()
5151
var removalList []string
52+
53+
isServerContainerDead := !k8sutil.IsPodServerContainerRunning(p)
54+
5255
for _, f := range p.ObjectMeta.GetFinalizers() {
5356
switch f {
5457
case constants.FinalizerPodAgencyServing:
5558
log.Debug().Msg("Inspecting agency-serving finalizer")
59+
if isServerContainerDead {
60+
log.Debug().Msg("Server Container is dead, removing finalizer")
61+
removalList = append(removalList, f)
62+
break
63+
}
5664
if err := r.inspectFinalizerPodAgencyServing(ctx, log, p, memberStatus, updateMember); err == nil {
5765
removalList = append(removalList, f)
5866
} else {
5967
log.Debug().Err(err).Str("finalizer", f).Msg("Cannot remove finalizer yet")
6068
}
6169
case constants.FinalizerPodDrainDBServer:
6270
log.Debug().Msg("Inspecting drain dbserver finalizer")
71+
if isServerContainerDead {
72+
log.Debug().Msg("Server Container is dead, removing finalizer")
73+
removalList = append(removalList, f)
74+
break
75+
}
6376
if err := r.inspectFinalizerPodDrainDBServer(ctx, log, p, memberStatus, updateMember); err == nil {
6477
removalList = append(removalList, f)
6578
} else {
6679
log.Debug().Err(err).Str("finalizer", f).Msg("Cannot remove Pod finalizer yet")
6780
}
6881
case constants.FinalizerDelayPodTermination:
82+
if isServerContainerDead {
83+
log.Debug().Msg("Server Container is dead, removing finalizer")
84+
removalList = append(removalList, f)
85+
break
86+
}
87+
6988
s, _ := r.context.GetStatus()
7089
_, group, ok := s.Members.ElementByID(memberStatus.ID)
7190
if !ok {

pkg/util/k8sutil/pods.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,22 @@ func GetPodByName(pods []core.Pod, podName string) (core.Pod, bool) {
8282
return core.Pod{}, false
8383
}
8484

85+
// IsPodServerContainerRunning returns true if the arangodb container of the pod is still running
86+
func IsPodServerContainerRunning(pod *core.Pod) bool {
87+
for _, c := range pod.Status.ContainerStatuses {
88+
if c.Name != ServerContainerName {
89+
continue
90+
}
91+
92+
if c.State.Terminated != nil {
93+
return false
94+
} else {
95+
return true
96+
}
97+
}
98+
return false
99+
}
100+
85101
// IsPodSucceeded returns true if the arangodb container of the pod
86102
// has terminated with exit code 0.
87103
func IsPodSucceeded(pod *core.Pod) bool {

0 commit comments

Comments
 (0)