mirror of
https://github.com/arangodb/kube-arangodb.git
synced 2024-12-14 11:57:37 +00:00
[Bugfix] Adjust pod finalizers (#749)
This commit is contained in:
parent
51299ac3a5
commit
b068b884c1
4 changed files with 41 additions and 1 deletions
|
@ -4,6 +4,7 @@
|
|||
- Switch K8S CRD API to V1
|
||||
- Deprecate Alpine image usage
|
||||
- Use persistent name and namespace in ArangoDeployment reconcilation loop
|
||||
- Remove finalizers when Server container is already terminated and reduce initial reconciliation delay
|
||||
|
||||
## [1.1.9](https://github.com/arangodb/kube-arangodb/tree/1.1.9) (2021-05-28)
|
||||
- Add IP, DNS, ShortDNS, HeadlessService (Default) communication methods
|
||||
|
|
|
@ -253,7 +253,11 @@ func (d *Deployment) run() {
|
|||
|
||||
d.lookForServiceMonitorCRD()
|
||||
|
||||
inspectionInterval := maxInspectionInterval
|
||||
// Execute inspection for first time without delay of 10s
|
||||
log.Debug().Msg("Initially inspect deployment...")
|
||||
inspectionInterval := d.inspectDeployment(minInspectionInterval)
|
||||
log.Debug().Str("interval", inspectionInterval.String()).Msg("...deployment inspect started")
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-d.stopCh:
|
||||
|
|
|
@ -49,10 +49,18 @@ const (
|
|||
func (r *Resources) runPodFinalizers(ctx context.Context, p *v1.Pod, memberStatus api.MemberStatus, updateMember func(api.MemberStatus) error) (util.Interval, error) {
|
||||
log := r.log.With().Str("pod-name", p.GetName()).Logger()
|
||||
var removalList []string
|
||||
|
||||
isServerContainerDead := !k8sutil.IsPodServerContainerRunning(p)
|
||||
|
||||
for _, f := range p.ObjectMeta.GetFinalizers() {
|
||||
switch f {
|
||||
case constants.FinalizerPodAgencyServing:
|
||||
log.Debug().Msg("Inspecting agency-serving finalizer")
|
||||
if isServerContainerDead {
|
||||
log.Debug().Msg("Server Container is dead, removing finalizer")
|
||||
removalList = append(removalList, f)
|
||||
break
|
||||
}
|
||||
if err := r.inspectFinalizerPodAgencyServing(ctx, log, p, memberStatus, updateMember); err == nil {
|
||||
removalList = append(removalList, f)
|
||||
} else {
|
||||
|
@ -60,12 +68,23 @@ func (r *Resources) runPodFinalizers(ctx context.Context, p *v1.Pod, memberStatu
|
|||
}
|
||||
case constants.FinalizerPodDrainDBServer:
|
||||
log.Debug().Msg("Inspecting drain dbserver finalizer")
|
||||
if isServerContainerDead {
|
||||
log.Debug().Msg("Server Container is dead, removing finalizer")
|
||||
removalList = append(removalList, f)
|
||||
break
|
||||
}
|
||||
if err := r.inspectFinalizerPodDrainDBServer(ctx, log, p, memberStatus, updateMember); err == nil {
|
||||
removalList = append(removalList, f)
|
||||
} else {
|
||||
log.Debug().Err(err).Str("finalizer", f).Msg("Cannot remove Pod finalizer yet")
|
||||
}
|
||||
case constants.FinalizerDelayPodTermination:
|
||||
if isServerContainerDead {
|
||||
log.Debug().Msg("Server Container is dead, removing finalizer")
|
||||
removalList = append(removalList, f)
|
||||
break
|
||||
}
|
||||
|
||||
s, _ := r.context.GetStatus()
|
||||
_, group, ok := s.Members.ElementByID(memberStatus.ID)
|
||||
if !ok {
|
||||
|
|
|
@ -82,6 +82,22 @@ func GetPodByName(pods []core.Pod, podName string) (core.Pod, bool) {
|
|||
return core.Pod{}, false
|
||||
}
|
||||
|
||||
// IsPodServerContainerRunning returns true if the arangodb container of the pod is still running
|
||||
func IsPodServerContainerRunning(pod *core.Pod) bool {
|
||||
for _, c := range pod.Status.ContainerStatuses {
|
||||
if c.Name != ServerContainerName {
|
||||
continue
|
||||
}
|
||||
|
||||
if c.State.Terminated != nil {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// IsPodSucceeded returns true if the arangodb container of the pod
|
||||
// has terminated with exit code 0.
|
||||
func IsPodSucceeded(pod *core.Pod) bool {
|
||||
|
|
Loading…
Reference in a new issue