@@ -959,16 +959,51 @@ func (r *PerconaServerMySQLReconciler) cleanupMysql(ctx context.Context, cr *api
959
959
}
960
960
961
961
func (r * PerconaServerMySQLReconciler ) cleanupOrchestrator (ctx context.Context , cr * apiv1alpha1.PerconaServerMySQL ) error {
962
+ orcExposer := orchestrator .Exposer (* cr )
963
+
962
964
if ! cr .OrchestratorEnabled () {
963
965
if err := r .Delete (ctx , orchestrator .StatefulSet (cr , "" , "" )); err != nil && ! k8serrors .IsNotFound (err ) {
964
966
return errors .Wrap (err , "failed to delete orchestrator statefulset" )
965
967
}
966
968
967
- orcExposer := orchestrator .Exposer (* cr )
968
969
if err := r .cleanupOutdatedServices (ctx , & orcExposer , cr .Namespace ); err != nil {
969
970
return errors .Wrap (err , "cleanup Orchestrator services" )
970
971
}
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
+ }
971
1005
}
1006
+
972
1007
return nil
973
1008
}
974
1009
0 commit comments