55 "runtime"
66 "time"
77
8- "go.mongodb.org/mongo-driver/bson"
98 "go.mongodb.org/mongo-driver/bson/primitive"
109 "golang.org/x/sync/errgroup"
1110
@@ -16,7 +15,6 @@ import (
1615 "github.com/percona/percona-backup-mongodb/pbm/lock"
1716 "github.com/percona/percona-backup-mongodb/pbm/log"
1817 "github.com/percona/percona-backup-mongodb/pbm/oplog"
19- "github.com/percona/percona-backup-mongodb/pbm/resync"
2018 "github.com/percona/percona-backup-mongodb/pbm/storage"
2119 "github.com/percona/percona-backup-mongodb/pbm/topo"
2220 "github.com/percona/percona-backup-mongodb/pbm/util"
@@ -95,17 +93,19 @@ func (a *Agent) Delete(ctx context.Context, d *ctrl.DeleteBackupCmd, opid ctrl.O
9593 return
9694 }
9795
98- l .Info ("deleting backups older than %v" , t )
99- err = backup .DeleteBackupBefore (ctx , a .leadConn , t , bcpType , nodeInfo .Me )
96+ stg , err := util .GetProfiledStorage (ctx , a .leadConn , d .Profile , nodeInfo .Me , l )
97+ if err != nil {
98+ l .Error ("get storage: %v" , err )
99+ return
100+ }
101+ l .Info ("deleting backups older than %v %s" , t , util .LogProfileArg (d .Profile ))
102+ err = backup .DeleteBackupBefore (ctx , a .leadConn , stg , d .Profile , bcpType , t )
100103 if err != nil {
101104 l .Error ("deleting: %v" , err )
102105 return
103106 }
104107 case d .Backup != "" :
105- l = logger .NewEvent (string (ctrl .CmdDeleteBackup ), d .Backup , opid .String (), ep .TS ())
106- ctx := log .SetLogEventToContext (ctx , l )
107-
108- l .Info ("deleting backup" )
108+ l .Info ("deleting backup %q" , d .Backup )
109109 err := backup .DeleteBackup (ctx , a .leadConn , d .Backup , nodeInfo .Me )
110110 if err != nil {
111111 l .Error ("deleting: %v" , err )
@@ -254,59 +254,40 @@ func (a *Agent) Cleanup(ctx context.Context, d *ctrl.CleanupCmd, opid ctrl.OPID,
254254 return
255255 }
256256
257- cfg , err := config .GetConfig (ctx , a .leadConn )
257+ cfg , err := config .GetProfiledConfig (ctx , a .leadConn , d . Profile )
258258 if err != nil {
259259 l .Error ("get config: %v" , err )
260+ return
260261 }
261262
262263 stg , err := util .StorageFromConfig (& cfg .Storage , a .brief .Me , l )
263264 if err != nil {
264265 l .Error ("get storage: " + err .Error ())
266+ return
265267 }
266268
267- eg := errgroup.Group {}
268- eg .SetLimit (runtime .NumCPU ())
269-
270- cr , err := backup .MakeCleanupInfo (ctx , a .leadConn , d .OlderThan )
269+ cr , err := backup .MakeCleanupInfo (ctx , a .leadConn , d .OlderThan , d .Profile )
271270 if err != nil {
272271 l .Error ("make cleanup report: " + err .Error ())
273272 return
274273 }
275274
276- for i := range cr . Chunks {
277- name := cr . Chunks [ i ]. FName
275+ eg := & errgroup. Group {}
276+ eg . SetLimit ( runtime . NumCPU ())
278277
279- eg .Go (func () error {
280- err := stg .Delete (name )
281- return errors .Wrapf (err , "delete chunk file %q" , name )
282- })
283- }
284- if err := eg .Wait (); err != nil {
278+ if err := a .deleteChunks (ctx , eg , stg , cr .Chunks ); err != nil {
285279 l .Error (err .Error ())
286280 }
287281
288- for i := range cr .Backups {
289- bcp := & cr .Backups [i ]
290-
291- eg .Go (func () error {
292- err := backup .DeleteBackupFiles (stg , bcp .Name )
293- return errors .Wrapf (err , "delete backup files %q" , bcp .Name )
294- })
295- }
296- if err := eg .Wait (); err != nil {
282+ if err := a .deleteBackups (ctx , eg , stg , cr .Backups ); err != nil {
297283 l .Error (err .Error ())
298284 }
299-
300- err = resync .Resync (ctx , a .leadConn , & cfg .Storage , a .brief .Me , false )
301- if err != nil {
302- l .Error ("storage resync: " + err .Error ())
303- }
304285}
305286
306287func (a * Agent ) deletePITRImpl (ctx context.Context , ts primitive.Timestamp ) error {
307288 l := log .LogEventFromContext (ctx )
308289
309- r , err := backup .MakeCleanupInfo (ctx , a .leadConn , ts )
290+ r , err := backup .MakeCleanupInfo (ctx , a .leadConn , ts , "" )
310291 if err != nil {
311292 return errors .Wrap (err , "get pitr chunks" )
312293 }
@@ -320,32 +301,40 @@ func (a *Agent) deletePITRImpl(ctx context.Context, ts primitive.Timestamp) erro
320301 return errors .Wrap (err , "get storage" )
321302 }
322303
323- return a .deleteChunks (ctx , stg , r .Chunks )
304+ eg := & errgroup.Group {}
305+ eg .SetLimit (runtime .NumCPU ())
306+ return a .deleteChunks (ctx , eg , stg , r .Chunks )
324307}
325308
326- func (a * Agent ) deleteChunks (ctx context.Context , stg storage.Storage , chunks []oplog.OplogChunk ) error {
327- l := log .LogEventFromContext (ctx )
328-
329- for _ , chnk := range chunks {
330- err := stg .Delete (chnk .FName )
331- if err != nil && ! errors .Is (err , storage .ErrNotExist ) {
332- return errors .Wrapf (err , "delete pitr chunk '%s' (%v) from storage" , chnk .FName , chnk )
333- }
309+ func (a * Agent ) deleteChunks (
310+ ctx context.Context ,
311+ eg * errgroup.Group ,
312+ stg storage.Storage ,
313+ chunks []oplog.OplogChunk ,
314+ ) error {
315+ for _ , c := range chunks {
316+ eg .Go (func () error {
317+ err := oplog .DeleteChunkData (ctx , a .leadConn , stg , c )
318+ return errors .Wrapf (err , "delete chunk %q" , c .FName )
319+ })
320+ }
321+ return eg .Wait ()
322+ }
334323
335- _ , err = a .leadConn .PITRChunksCollection ().DeleteOne (
336- ctx ,
337- bson.D {
338- {"rs" , chnk .RS },
339- {"start_ts" , chnk .StartTS },
340- {"end_ts" , chnk .EndTS },
341- },
342- )
343- if err != nil {
344- return errors .Wrap (err , "delete pitr chunk metadata" )
345- }
324+ func (a * Agent ) deleteBackups (
325+ ctx context.Context ,
326+ eg * errgroup.Group ,
327+ stg storage.Storage ,
328+ backups []backup.BackupMeta ,
329+ ) error {
330+ l := log .LogEventFromContext (ctx )
346331
347- l .Debug ("deleted %s" , chnk .FName )
332+ for _ , b := range backups {
333+ eg .Go (func () error {
334+ l .Info ("deleting backup %q %s" , b .Name , util .LogProfileArg (b .Store .Name ))
335+ err := backup .DeleteBackupData (ctx , a .leadConn , stg , b .Name )
336+ return errors .Wrapf (err , "delete backup %q" , b .Name )
337+ })
348338 }
349-
350- return nil
339+ return eg .Wait ()
351340}
0 commit comments