@@ -2,109 +2,20 @@ package backup
2
2
3
3
import (
4
4
"context"
5
- "encoding/json"
6
5
"path"
7
6
"runtime"
8
7
"sync"
9
8
10
9
"golang.org/x/sync/errgroup"
11
10
12
11
"github.com/percona/percona-backup-mongodb/pbm/archive"
13
- "github.com/percona/percona-backup-mongodb/pbm/config"
14
12
"github.com/percona/percona-backup-mongodb/pbm/defs"
15
13
"github.com/percona/percona-backup-mongodb/pbm/errors"
16
- "github.com/percona/percona-backup-mongodb/pbm/log"
17
14
"github.com/percona/percona-backup-mongodb/pbm/storage"
18
15
sfs "github.com/percona/percona-backup-mongodb/pbm/storage/fs"
19
- "github.com/percona/percona-backup-mongodb/pbm/util"
20
16
"github.com/percona/percona-backup-mongodb/pbm/version"
21
17
)
22
18
23
- type StorageManager interface {
24
- GetAllBackups (ctx context.Context ) ([]BackupMeta , error )
25
- GetBackupByName (ctx context.Context , name string ) (* BackupMeta , error )
26
- }
27
-
28
- type storageManagerImpl struct {
29
- cfg * config.StorageConf
30
- stg storage.Storage
31
- }
32
-
33
- func NewStorageManager (ctx context.Context , cfg * config.StorageConf ) (* storageManagerImpl , error ) {
34
- stg , err := util .StorageFromConfig (cfg , log .LogEventFromContext (ctx ))
35
- if err != nil {
36
- return nil , errors .Wrap (err , "unable to get backup store" )
37
- }
38
-
39
- _ , err = stg .FileStat (defs .StorInitFile )
40
- if ! errors .Is (err , storage .ErrNotExist ) {
41
- return nil , err
42
- }
43
-
44
- return & storageManagerImpl {cfg : cfg , stg : stg }, nil
45
- }
46
-
47
- func (m * storageManagerImpl ) GetAllBackups (ctx context.Context ) ([]BackupMeta , error ) {
48
- l := log .LogEventFromContext (ctx )
49
-
50
- bcpList , err := m .stg .List ("" , defs .MetadataFileSuffix )
51
- if err != nil {
52
- return nil , errors .Wrap (err , "get a backups list from the storage" )
53
- }
54
- l .Debug ("got backups list: %v" , len (bcpList ))
55
-
56
- var rv []BackupMeta
57
- for _ , b := range bcpList {
58
- l .Debug ("bcp: %v" , b .Name )
59
-
60
- d , err := m .stg .SourceReader (b .Name )
61
- if err != nil {
62
- return nil , errors .Wrapf (err , "read meta for %v" , b .Name )
63
- }
64
-
65
- v := BackupMeta {}
66
- err = json .NewDecoder (d ).Decode (& v )
67
- d .Close ()
68
- if err != nil {
69
- return nil , errors .Wrapf (err , "unmarshal backup meta [%s]" , b .Name )
70
- }
71
-
72
- err = CheckBackupFiles (ctx , & v , m .stg )
73
- if err != nil {
74
- l .Warning ("skip snapshot %s: %v" , v .Name , err )
75
- v .Status = defs .StatusError
76
- v .Err = err .Error ()
77
- }
78
- rv = append (rv , v )
79
- }
80
-
81
- return rv , nil
82
- }
83
-
84
- func (m * storageManagerImpl ) GetBackupByName (ctx context.Context , name string ) (* BackupMeta , error ) {
85
- l := log .LogEventFromContext (ctx )
86
- l .Debug ("get backup by name: %v" , name )
87
-
88
- rdr , err := m .stg .SourceReader (name + defs .MetadataFileSuffix )
89
- if err != nil {
90
- return nil , errors .Wrapf (err , "read meta for %v" , name )
91
- }
92
- defer rdr .Close ()
93
-
94
- v := & BackupMeta {}
95
- if err := json .NewDecoder (rdr ).Decode (& v ); err != nil {
96
- return nil , errors .Wrapf (err , "unmarshal backup meta [%s]" , name )
97
- }
98
-
99
- if err := CheckBackupFiles (ctx , v , m .stg ); err != nil {
100
- l .Warning ("no backup files %s: %v" , v .Name , err )
101
- v .Status = defs .StatusError
102
- v .Err = err .Error ()
103
- }
104
-
105
- return v , nil
106
- }
107
-
108
19
func CheckBackupFiles (ctx context.Context , bcp * BackupMeta , stg storage.Storage ) error {
109
20
// !!! TODO: Check physical files ?
110
21
if bcp .Type != defs .LogicalBackup {
0 commit comments