Skip to content

Commit e399329

Browse files
inelpandzichors
andauthored
K8SPS-360: Orc downscale outdated services (#714)
* Remove outdated orc services on downscale. * Refactor and log. * Check if cluster is paused. --------- Co-authored-by: Viacheslav Sarzhan <slava.sarzhan@percona.com>
1 parent b0d2403 commit e399329

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

pkg/controller/ps/controller.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -959,16 +959,51 @@ func (r *PerconaServerMySQLReconciler) cleanupMysql(ctx context.Context, cr *api
959959
}
960960

961961
func (r *PerconaServerMySQLReconciler) cleanupOrchestrator(ctx context.Context, cr *apiv1alpha1.PerconaServerMySQL) error {
962+
orcExposer := orchestrator.Exposer(*cr)
963+
962964
if !cr.OrchestratorEnabled() {
963965
if err := r.Delete(ctx, orchestrator.StatefulSet(cr, "", "")); err != nil && !k8serrors.IsNotFound(err) {
964966
return errors.Wrap(err, "failed to delete orchestrator statefulset")
965967
}
966968

967-
orcExposer := orchestrator.Exposer(*cr)
968969
if err := r.cleanupOutdatedServices(ctx, &orcExposer, cr.Namespace); err != nil {
969970
return errors.Wrap(err, "cleanup Orchestrator services")
970971
}
972+
973+
return nil
974+
}
975+
976+
if cr.Spec.Pause {
977+
return nil
978+
}
979+
980+
svcLabels := orcExposer.Labels()
981+
svcLabels[naming.LabelExposed] = "true"
982+
services, err := k8s.ServicesByLabels(ctx, r.Client, svcLabels, cr.Namespace)
983+
if err != nil {
984+
return errors.Wrap(err, "get exposed services")
985+
}
986+
987+
if len(services) == int(orcExposer.Size()) {
988+
return nil
989+
}
990+
991+
outdatedSvcs := make(map[string]struct{}, len(services))
992+
for i := len(services) - 1; i >= int(orcExposer.Size()); i-- {
993+
outdatedSvcs[orchestrator.PodName(cr, i)] = struct{}{}
994+
}
995+
996+
for _, svc := range services {
997+
if _, ok := outdatedSvcs[svc.Name]; !ok {
998+
continue
999+
}
1000+
1001+
logf.FromContext(ctx).Info("Deleting outdated orchestrator service", "service", svc.Name)
1002+
if err := r.Client.Delete(ctx, &svc); err != nil && !k8serrors.IsNotFound(err) {
1003+
return errors.Wrapf(err, "delete Service/%s", svc.Name)
1004+
}
9711005
}
1006+
9721007
return nil
9731008
}
9741009

0 commit comments

Comments
 (0)