#### Does this PR need a docs update or release note? - [x] ⛔ No #### Type of change - [x] 🌻 Feature #### Test Plan - [x] 💪 Manual
87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/alcionai/clues"
|
|
"github.com/kopia/kopia/repo/manifest"
|
|
|
|
"github.com/alcionai/corso/src/pkg/backup/identity"
|
|
"github.com/alcionai/corso/src/pkg/fault"
|
|
"github.com/alcionai/corso/src/pkg/selectors"
|
|
"github.com/alcionai/corso/src/pkg/store"
|
|
)
|
|
|
|
type base struct {
|
|
snapshotID manifest.ID
|
|
reasons []identity.Reasoner
|
|
}
|
|
|
|
func (b base) GetReasons() []identity.Reasoner {
|
|
return b.reasons
|
|
}
|
|
|
|
func (b base) GetSnapshotID() manifest.ID {
|
|
return b.snapshotID
|
|
}
|
|
|
|
// should probably turn into a NewDebug interface like we're
|
|
// doing with the other interfaces
|
|
type Debugger interface {
|
|
GetBackupMetadata(
|
|
ctx context.Context,
|
|
sel selectors.Selector,
|
|
backupID string,
|
|
errs *fault.Bus,
|
|
) ([]store.MetadataFile, error)
|
|
}
|
|
|
|
// Backups lists backups by ID. Returns as many backups as possible with
|
|
// errors for the backups it was unable to retrieve.
|
|
func (r repository) GetBackupMetadata(
|
|
ctx context.Context,
|
|
sel selectors.Selector,
|
|
backupID string,
|
|
errs *fault.Bus,
|
|
) ([]store.MetadataFile, error) {
|
|
bup, err := r.Backup(ctx, backupID)
|
|
if err != nil {
|
|
return nil, clues.Wrap(err, "looking up backup")
|
|
}
|
|
|
|
sel = sel.SetDiscreteOwnerIDName(bup.ResourceOwnerID, bup.ResourceOwnerName)
|
|
|
|
reasons, err := sel.Reasons(r.Account.ID(), false)
|
|
if err != nil {
|
|
return nil, clues.Wrap(err, "constructing lookup parameters")
|
|
}
|
|
|
|
var (
|
|
rp = r.dataLayer
|
|
dp = r.DataProvider()
|
|
)
|
|
|
|
paths, err := dp.GetMetadataPaths(
|
|
ctx,
|
|
rp,
|
|
&base{manifest.ID(bup.SnapshotID), reasons},
|
|
fault.New(true))
|
|
if err != nil {
|
|
return nil, clues.Wrap(err, "retrieving metadata files")
|
|
}
|
|
|
|
colls, err := rp.ProduceRestoreCollections(
|
|
ctx,
|
|
bup.SnapshotID,
|
|
paths,
|
|
nil,
|
|
fault.New(true))
|
|
if err != nil {
|
|
return nil, clues.Wrap(err, "looking up metadata file content")
|
|
}
|
|
|
|
files, err := dp.DeserializeMetadataFiles(ctx, colls)
|
|
|
|
return files, clues.Wrap(err, "deserializing metadata file content").OrNil()
|
|
}
|