Skip to content

Commit 40ec6d1

Browse files
egeguneshors
andauthored
K8SPSMDB-1205: Allow backups in unmanaged clusters (#1715)
* K8SPSMDB-1205: Allow backups in unmanaged clusters * don't allow restores in unmanaged clusters --------- Co-authored-by: Viacheslav Sarzhan <slava.sarzhan@percona.com>
1 parent 5f9860e commit 40ec6d1

File tree

6 files changed

+35
-29
lines changed

6 files changed

+35
-29
lines changed

e2e-tests/cross-site-sharded/run

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,21 @@ replica_cluster="cross-site-sharded-replica"
1616
wait_for_members() {
1717
local endpoint="$1"
1818
local rsName="$2"
19-
local nodes_amount=0
20-
until [[ ${nodes_amount} == 6 ]]; do
21-
nodes_amount=$(run_mongos 'rs.conf().members.length' "clusterAdmin:clusterAdmin123456@$endpoint" "mongodb" ":27017" \
19+
local target_count=$3
20+
21+
local nodes_count=0
22+
until [[ ${nodes_count} == ${target_count} ]]; do
23+
nodes_count=$(run_mongos 'rs.conf().members.length' "clusterAdmin:clusterAdmin123456@$endpoint" "mongodb" ":27017" \
2224
| 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' \
2325
| $sed -re 's/ObjectId\("[0-9a-f]+"\)//; s/-[0-9]+.svc/-xxx.svc/')
2426

25-
echo "waiting for all members to be configured in ${rsName}"
27+
echo -n "waiting for all members to be configured in ${rsName}"
2628
let retry+=1
2729
if [ $retry -ge 15 ]; then
28-
echo "Max retry count $retry reached. something went wrong with mongo cluster. Config for endpoint $endpoint has $nodes_amount but expected 6."
30+
echo "Max retry count ${retry} reached. something went wrong with mongo cluster. Config for endpoint ${endpoint} has ${nodes_count} but expected ${target_count}."
2931
exit 1
3032
fi
31-
echo -n .
33+
echo .
3234
sleep 10
3335
done
3436
}
@@ -164,9 +166,9 @@ kubectl_bin patch psmdb ${main_cluster} --type=merge --patch '{
164166
}
165167
}'
166168

167-
wait_for_members $replica_cfg_0_endpoint cfg
168-
wait_for_members $replica_rs0_0_endpoint rs0
169-
wait_for_members $replica_rs1_0_endpoint rs1
169+
wait_for_members $replica_cfg_0_endpoint cfg 6
170+
wait_for_members $replica_rs0_0_endpoint rs0 6
171+
wait_for_members $replica_rs1_0_endpoint rs1 6
170172

171173
kubectl_bin config set-context $(kubectl_bin config current-context) --namespace="$replica_namespace"
172174

pkg/apis/psmdb/v1/psmdb_defaults.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -589,10 +589,6 @@ func (cr *PerconaServerMongoDB) CheckNSetDefaults(platform version.Platform, log
589589
cr.Spec.ClusterServiceDNSMode = DNSModeInternal
590590
}
591591

592-
if cr.Spec.Unmanaged && cr.Spec.Backup.Enabled {
593-
return errors.New("backup.enabled must be false on unmanaged clusters")
594-
}
595-
596592
if cr.Spec.Unmanaged && cr.Spec.UpdateStrategy == SmartUpdateStatefulSetStrategyType {
597593
return errors.New("SmartUpdate is not allowed on unmanaged clusters, set updateStrategy to RollingUpdate or OnDelete")
598594
}

pkg/apis/psmdb/v1/psmdb_types.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,11 +1158,8 @@ func (cr *PerconaServerMongoDB) MongosNamespacedName() types.NamespacedName {
11581158
}
11591159

11601160
func (cr *PerconaServerMongoDB) CanBackup(ctx context.Context) error {
1161-
logf.FromContext(ctx).V(1).Info("checking if backup is allowed", "backup", cr.Name)
1162-
1163-
if cr.Spec.Unmanaged {
1164-
return errors.Errorf("backups are not allowed on unmanaged clusters")
1165-
}
1161+
log := logf.FromContext(ctx).V(1).WithValues("cluster", cr.Name, "namespace", cr.Namespace)
1162+
log.Info("checking if backup is allowed")
11661163

11671164
if cr.Status.State == AppStateReady {
11681165
return nil
@@ -1185,6 +1182,17 @@ func (cr *PerconaServerMongoDB) CanBackup(ctx context.Context) error {
11851182
return nil
11861183
}
11871184

1185+
func (cr *PerconaServerMongoDB) CanRestore(ctx context.Context) error {
1186+
log := logf.FromContext(ctx).V(1).WithValues("cluster", cr.Name, "namespace", cr.Namespace)
1187+
log.Info("checking if restore is allowed")
1188+
1189+
if cr.Spec.Unmanaged {
1190+
return errors.New("can't run restore in an unmanaged cluster")
1191+
}
1192+
1193+
return nil
1194+
}
1195+
11881196
const maxStatusesQuantity = 20
11891197

11901198
func (s *PerconaServerMongoDBStatus) AddCondition(c ClusterCondition) {

pkg/controller/perconaservermongodbbackup/backup.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,11 +199,7 @@ func (b *Backup) Status(ctx context.Context, cr *api.PerconaServerMongoDBBackup)
199199
func backupPods(replsets []pbmBackup.BackupReplset) map[string]string {
200200
pods := make(map[string]string)
201201
for _, rs := range replsets {
202-
spl := strings.Split(rs.Node, ".")
203-
if len(spl) == 0 {
204-
continue
205-
}
206-
pods[rs.Name] = spl[0]
202+
pods[rs.Name] = rs.Node
207203
}
208204
return pods
209205
}

pkg/controller/perconaservermongodbrestore/perconaservermongodbrestore_controller.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,21 @@ func (r *ReconcilePerconaServerMongoDBRestore) Reconcile(ctx context.Context, re
153153
return reconcile.Result{}, nil
154154
}
155155

156-
bcp, err := r.getBackup(ctx, cr)
157-
if err != nil {
158-
return rr, errors.Wrap(err, "get backup")
159-
}
160-
161156
cluster := new(psmdbv1.PerconaServerMongoDB)
162157
err = r.client.Get(ctx, types.NamespacedName{Name: cr.Spec.ClusterName, Namespace: cr.Namespace}, cluster)
163158
if err != nil {
164159
return rr, errors.Wrapf(err, "get cluster %s/%s", cr.Namespace, cr.Spec.ClusterName)
165160
}
166161

162+
if err = cluster.CanRestore(ctx); err != nil {
163+
return reconcile.Result{}, errors.Wrap(err, "can cluster restore")
164+
}
165+
166+
bcp, err := r.getBackup(ctx, cr)
167+
if err != nil {
168+
return rr, errors.Wrap(err, "get backup")
169+
}
170+
167171
var svr *version.ServerVersion
168172
svr, err = version.Server(r.clientcmd)
169173
if err != nil {

pkg/psmdb/backup/pbm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ func (b *pbmC) Node(ctx context.Context) (string, error) {
639639
return "", err
640640
}
641641

642-
return strings.Split(lock.Node, ".")[0], nil
642+
return lock.Node, nil
643643
}
644644

645645
func (b *pbmC) GetStorage(ctx context.Context, e pbmLog.LogEvent) (storage.Storage, error) {

0 commit comments

Comments
 (0)