@@ -959,16 +959,51 @@ func (r *PerconaServerMySQLReconciler) cleanupMysql(ctx context.Context, cr *api
959959}
960960
961961func (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