diff --git a/e2e-tests/cross-site-sharded/run b/e2e-tests/cross-site-sharded/run index f19d19941c..14a3c99765 100755 --- a/e2e-tests/cross-site-sharded/run +++ b/e2e-tests/cross-site-sharded/run @@ -16,19 +16,21 @@ replica_cluster="cross-site-sharded-replica" wait_for_members() { local endpoint="$1" local rsName="$2" - local nodes_amount=0 - until [[ ${nodes_amount} == 6 ]]; do - nodes_amount=$(run_mongos 'rs.conf().members.length' "clusterAdmin:clusterAdmin123456@$endpoint" "mongodb" ":27017" \ + local target_count=$3 + + local nodes_count=0 + until [[ ${nodes_count} == ${target_count} ]]; do + nodes_count=$(run_mongos 'rs.conf().members.length' "clusterAdmin:clusterAdmin123456@$endpoint" "mongodb" ":27017" \ | egrep -v 'I NETWORK|W NETWORK|Error saving history file|Percona Server for MongoDB|connecting to:|Unable to reach primary for set|Implicit session:|versions do not match|Error saving history file:|bye' \ | $sed -re 's/ObjectId\("[0-9a-f]+"\)//; s/-[0-9]+.svc/-xxx.svc/') - echo "waiting for all members to be configured in ${rsName}" + echo -n "waiting for all members to be configured in ${rsName}" let retry+=1 if [ $retry -ge 15 ]; then - echo "Max retry count $retry reached. something went wrong with mongo cluster. Config for endpoint $endpoint has $nodes_amount but expected 6." + echo "Max retry count ${retry} reached. something went wrong with mongo cluster. Config for endpoint ${endpoint} has ${nodes_count} but expected ${target_count}." exit 1 fi - echo -n . + echo . sleep 10 done } @@ -164,9 +166,9 @@ kubectl_bin patch psmdb ${main_cluster} --type=merge --patch '{ } }' -wait_for_members $replica_cfg_0_endpoint cfg -wait_for_members $replica_rs0_0_endpoint rs0 -wait_for_members $replica_rs1_0_endpoint rs1 +wait_for_members $replica_cfg_0_endpoint cfg 6 +wait_for_members $replica_rs0_0_endpoint rs0 6 +wait_for_members $replica_rs1_0_endpoint rs1 6 kubectl_bin config set-context $(kubectl_bin config current-context) --namespace="$replica_namespace" diff --git a/pkg/apis/psmdb/v1/psmdb_defaults.go b/pkg/apis/psmdb/v1/psmdb_defaults.go index 98b6d720a1..41282840d2 100644 --- a/pkg/apis/psmdb/v1/psmdb_defaults.go +++ b/pkg/apis/psmdb/v1/psmdb_defaults.go @@ -589,10 +589,6 @@ func (cr *PerconaServerMongoDB) CheckNSetDefaults(platform version.Platform, log cr.Spec.ClusterServiceDNSMode = DNSModeInternal } - if cr.Spec.Unmanaged && cr.Spec.Backup.Enabled { - return errors.New("backup.enabled must be false on unmanaged clusters") - } - if cr.Spec.Unmanaged && cr.Spec.UpdateStrategy == SmartUpdateStatefulSetStrategyType { return errors.New("SmartUpdate is not allowed on unmanaged clusters, set updateStrategy to RollingUpdate or OnDelete") } diff --git a/pkg/apis/psmdb/v1/psmdb_types.go b/pkg/apis/psmdb/v1/psmdb_types.go index dec9e0ed6a..fca8a3eef8 100644 --- a/pkg/apis/psmdb/v1/psmdb_types.go +++ b/pkg/apis/psmdb/v1/psmdb_types.go @@ -1158,11 +1158,8 @@ func (cr *PerconaServerMongoDB) MongosNamespacedName() types.NamespacedName { } func (cr *PerconaServerMongoDB) CanBackup(ctx context.Context) error { - logf.FromContext(ctx).V(1).Info("checking if backup is allowed", "backup", cr.Name) - - if cr.Spec.Unmanaged { - return errors.Errorf("backups are not allowed on unmanaged clusters") - } + log := logf.FromContext(ctx).V(1).WithValues("cluster", cr.Name, "namespace", cr.Namespace) + log.Info("checking if backup is allowed") if cr.Status.State == AppStateReady { return nil @@ -1185,6 +1182,17 @@ func (cr *PerconaServerMongoDB) CanBackup(ctx context.Context) error { return nil } +func (cr *PerconaServerMongoDB) CanRestore(ctx context.Context) error { + log := logf.FromContext(ctx).V(1).WithValues("cluster", cr.Name, "namespace", cr.Namespace) + log.Info("checking if restore is allowed") + + if cr.Spec.Unmanaged { + return errors.New("can't run restore in an unmanaged cluster") + } + + return nil +} + const maxStatusesQuantity = 20 func (s *PerconaServerMongoDBStatus) AddCondition(c ClusterCondition) { diff --git a/pkg/controller/perconaservermongodbbackup/backup.go b/pkg/controller/perconaservermongodbbackup/backup.go index 77b5047057..935b9337ab 100644 --- a/pkg/controller/perconaservermongodbbackup/backup.go +++ b/pkg/controller/perconaservermongodbbackup/backup.go @@ -199,11 +199,7 @@ func (b *Backup) Status(ctx context.Context, cr *api.PerconaServerMongoDBBackup) func backupPods(replsets []pbmBackup.BackupReplset) map[string]string { pods := make(map[string]string) for _, rs := range replsets { - spl := strings.Split(rs.Node, ".") - if len(spl) == 0 { - continue - } - pods[rs.Name] = spl[0] + pods[rs.Name] = rs.Node } return pods } diff --git a/pkg/controller/perconaservermongodbrestore/perconaservermongodbrestore_controller.go b/pkg/controller/perconaservermongodbrestore/perconaservermongodbrestore_controller.go index dcebd62106..ac2d8c784b 100644 --- a/pkg/controller/perconaservermongodbrestore/perconaservermongodbrestore_controller.go +++ b/pkg/controller/perconaservermongodbrestore/perconaservermongodbrestore_controller.go @@ -153,17 +153,21 @@ func (r *ReconcilePerconaServerMongoDBRestore) Reconcile(ctx context.Context, re return reconcile.Result{}, nil } - bcp, err := r.getBackup(ctx, cr) - if err != nil { - return rr, errors.Wrap(err, "get backup") - } - cluster := new(psmdbv1.PerconaServerMongoDB) err = r.client.Get(ctx, types.NamespacedName{Name: cr.Spec.ClusterName, Namespace: cr.Namespace}, cluster) if err != nil { return rr, errors.Wrapf(err, "get cluster %s/%s", cr.Namespace, cr.Spec.ClusterName) } + if err = cluster.CanRestore(ctx); err != nil { + return reconcile.Result{}, errors.Wrap(err, "can cluster restore") + } + + bcp, err := r.getBackup(ctx, cr) + if err != nil { + return rr, errors.Wrap(err, "get backup") + } + var svr *version.ServerVersion svr, err = version.Server(r.clientcmd) if err != nil { diff --git a/pkg/psmdb/backup/pbm.go b/pkg/psmdb/backup/pbm.go index 88d01c80a2..46f3b63d86 100644 --- a/pkg/psmdb/backup/pbm.go +++ b/pkg/psmdb/backup/pbm.go @@ -639,7 +639,7 @@ func (b *pbmC) Node(ctx context.Context) (string, error) { return "", err } - return strings.Split(lock.Node, ".")[0], nil + return lock.Node, nil } func (b *pbmC) GetStorage(ctx context.Context, e pbmLog.LogEvent) (storage.Storage, error) {