Skip to content

Commit 1f2f443

Browse files
author
jmccormick2001
committed
add rmdata logic to pgo delete backup command, update docs to better describe this command
1 parent a98f05b commit 1f2f443

File tree

5 files changed

+80
-23
lines changed

5 files changed

+80
-23
lines changed

apiserver/backupservice/backupimpl.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,30 @@ func DeleteBackup(backupName string) msgs.DeleteBackupResponse {
6666
var err error
6767

6868
if backupName == "all" {
69-
err = kubeapi.DeleteAllpgbackup(apiserver.RESTClient, apiserver.Namespace)
70-
resp.Results = append(resp.Results, "all")
71-
} else {
72-
err = kubeapi.Deletepgbackup(apiserver.RESTClient, backupName, apiserver.Namespace)
73-
resp.Results = append(resp.Results, backupName)
69+
resp.Status.Code = msgs.Error
70+
resp.Status.Msg = "all not a valid cluster name"
71+
return resp
7472
}
7573

74+
err = kubeapi.Deletepgbackup(apiserver.RESTClient, backupName, apiserver.Namespace)
75+
76+
if err != nil {
77+
resp.Status.Code = msgs.Error
78+
resp.Status.Msg = err.Error()
79+
return resp
80+
}
81+
resp.Results = append(resp.Results, backupName)
82+
83+
//create a pgtask to remove the PVC and its data
84+
pvcName := backupName + "-backup"
85+
dataRoots := []string{backupName + "-backups"}
86+
87+
storageSpec := crv1.PgStorageSpec{}
88+
err = apiserver.CreateRMDataTask(storageSpec, backupName, pvcName, dataRoots)
7689
if err != nil {
7790
resp.Status.Code = msgs.Error
7891
resp.Status.Msg = err.Error()
92+
return resp
7993
}
8094

8195
return resp

apiserver/clusterservice/clusterimpl.go

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
log "github.com/Sirupsen/logrus"
2424
crv1 "github.com/crunchydata/postgres-operator/apis/cr/v1"
2525
"github.com/crunchydata/postgres-operator/apiserver"
26-
//"github.com/crunchydata/postgres-operator/apiserver/pvcservice"
2726
"strconv"
2827
"strings"
2928
"time"
@@ -894,20 +893,6 @@ func createDeleteDataTasks(clusterName string, storageSpec crv1.PgStorageSpec, d
894893

895894
var err error
896895

897-
log.Info("inside createDeleteDataTasks")
898-
899-
//get the pods for this cluster
900-
/**
901-
spec := crv1.PgclusterSpec{}
902-
cluster := &crv1.Pgcluster{
903-
ObjectMeta: meta_v1.ObjectMeta{
904-
Name: clusterName,
905-
},
906-
Spec: spec,
907-
}
908-
cluster.Spec.Name = clusterName
909-
*/
910-
911896
selector := util.LABEL_PG_CLUSTER + "=" + clusterName + "," + util.LABEL_PGBACKUP + "!=true"
912897
log.Debugf("selector for delete is %s", selector)
913898
pods, err := kubeapi.GetPods(apiserver.Clientset, selector, apiserver.Namespace)
@@ -940,7 +925,10 @@ func createDeleteDataTasks(clusterName string, storageSpec crv1.PgStorageSpec, d
940925

941926
if v.VolumeSource.PersistentVolumeClaim != nil {
942927
log.Debugf("volume [%s] pvc [%s] dataroots [%v]\n", v.Name, v.VolumeSource.PersistentVolumeClaim.ClaimName, dataRoots)
943-
createTask(storageSpec, clusterName, v.VolumeSource.PersistentVolumeClaim.ClaimName, dataRoots)
928+
err := apiserver.CreateRMDataTask(storageSpec, clusterName, v.VolumeSource.PersistentVolumeClaim.ClaimName, dataRoots)
929+
if err != nil {
930+
return err
931+
}
944932
}
945933
}
946934
}
@@ -970,14 +958,19 @@ func createDeleteDataTasks(clusterName string, storageSpec crv1.PgStorageSpec, d
970958
//by convention, the root directory name
971959
//created by the backup job is depName-backups
972960
dataRoots := []string{dep.Name + "-backups"}
973-
createTask(storageSpec, clusterName, pvcName, dataRoots)
961+
err = apiserver.CreateRMDataTask(storageSpec, clusterName, pvcName, dataRoots)
962+
if err != nil {
963+
log.Error(err)
964+
return err
965+
}
974966
}
975967

976968
}
977969
}
978970
return err
979971
}
980972

973+
/**
981974
func createTask(storageSpec crv1.PgStorageSpec, clusterName, pvcName string, dataRoots []string) {
982975
//create a pgtask for each root at this volume/pvc
983976
for i := 0; i < len(dataRoots); i++ {
@@ -1012,6 +1005,7 @@ func createTask(storageSpec crv1.PgStorageSpec, clusterName, pvcName string, dat
10121005
}
10131006
10141007
}
1008+
*/
10151009

10161010
func getType(pod *v1.Pod) string {
10171011

apiserver/clusterservice/scaleimpl.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,10 @@ func createDeleteDataTasksForReplica(replicaName string, storageSpec crv1.PgStor
401401

402402
if v.VolumeSource.PersistentVolumeClaim != nil {
403403
log.Debugf("volume [%s] pvc [%s] dataroots [%v]\n", v.Name, v.VolumeSource.PersistentVolumeClaim.ClaimName, dataRoots)
404-
createTask(storageSpec, replicaName, v.VolumeSource.PersistentVolumeClaim.ClaimName, dataRoots)
404+
err = apiserver.CreateRMDataTask(storageSpec, replicaName, v.VolumeSource.PersistentVolumeClaim.ClaimName, dataRoots)
405+
if err != nil {
406+
return err
407+
}
405408
}
406409
}
407410
}

apiserver/common.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
crv1 "github.com/crunchydata/postgres-operator/apis/cr/v1"
2121
msgs "github.com/crunchydata/postgres-operator/apiservermsgs"
2222
"github.com/crunchydata/postgres-operator/kubeapi"
23+
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
2325
"github.com/crunchydata/postgres-operator/util"
2426
"k8s.io/api/core/v1"
2527
)
@@ -86,3 +88,42 @@ func GetPVCName(pod *v1.Pod) map[string]string {
8688
return pvcList
8789

8890
}
91+
92+
func CreateRMDataTask(storageSpec crv1.PgStorageSpec, clusterName, pvcName string, dataRoots []string) error {
93+
var err error
94+
95+
//create a pgtask for each root at this volume/pvc
96+
for i := 0; i < len(dataRoots); i++ {
97+
98+
//create pgtask CRD
99+
spec := crv1.PgtaskSpec{}
100+
spec.Name = pvcName
101+
spec.TaskType = crv1.PgtaskDeleteData
102+
spec.StorageSpec = storageSpec
103+
104+
spec.Parameters = make(map[string]string)
105+
spec.Parameters[util.LABEL_PVC_NAME] = pvcName
106+
spec.Parameters[util.LABEL_DATA_ROOT] = dataRoots[i]
107+
spec.Parameters[util.LABEL_PG_CLUSTER] = clusterName
108+
109+
newInstance := &crv1.Pgtask{
110+
ObjectMeta: meta_v1.ObjectMeta{
111+
Name: pvcName,
112+
},
113+
Spec: spec,
114+
}
115+
newInstance.ObjectMeta.Labels = make(map[string]string)
116+
newInstance.ObjectMeta.Labels[util.LABEL_PG_CLUSTER] = clusterName
117+
//newInstance.ObjectMeta.Labels[util.LABEL_DATA_ROOT] = dataRoots[i]
118+
newInstance.ObjectMeta.Labels[util.LABEL_RMDATA] = "true"
119+
120+
err := kubeapi.Createpgtask(RESTClient,
121+
newInstance, Namespace)
122+
if err != nil {
123+
log.Error(err)
124+
return err
125+
}
126+
}
127+
return err
128+
129+
}

hugo/content/getting-started/_index.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,11 @@ To delete a backup enter the following:
607607
pgo delete backup mycluster
608608
....
609609

610+
When run, this command removes the PVC used for the backups, and
611+
runs the *rmdata* Job to physically perform data removal of that PVC's
612+
contents. It also removes the pgbackup CRD for this cluster that holds
613+
the last pg_basebackup results.
614+
610615
=== Scheduling
611616

612617
The `schedule` command will generate schedule configuration maps that are utitlized by the

0 commit comments

Comments
 (0)