-
Notifications
You must be signed in to change notification settings - Fork 23
/
common.go
61 lines (50 loc) · 1.35 KB
/
common.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package operations
import (
"context"
"github.com/alcionai/clues"
"github.com/alcionai/corso/src/internal/model"
"github.com/alcionai/corso/src/internal/streamstore"
"github.com/alcionai/corso/src/pkg/backup"
"github.com/alcionai/corso/src/pkg/backup/details"
"github.com/alcionai/corso/src/pkg/fault"
"github.com/alcionai/corso/src/pkg/store"
)
func getBackupAndDetailsFromID(
ctx context.Context,
backupID model.StableID,
ms store.BackupStorer,
detailsStore streamstore.Reader,
errs *fault.Bus,
) (*backup.Backup, *details.Details, error) {
bup, err := ms.GetBackup(ctx, backupID)
if err != nil {
return nil, nil, clues.Stack(err)
}
deets, err := getDetailsFromBackup(ctx, bup, detailsStore, errs)
if err != nil {
return nil, nil, clues.Stack(err)
}
return bup, deets, nil
}
func getDetailsFromBackup(
ctx context.Context,
bup *backup.Backup,
detailsStore streamstore.Reader,
errs *fault.Bus,
) (*details.Details, error) {
var (
deets details.Details
umt = streamstore.DetailsReader(details.UnmarshalTo(&deets))
ssid = bup.StreamStoreID
)
if len(ssid) == 0 {
ssid = bup.DetailsID
}
if len(ssid) == 0 {
return nil, clues.NewWC(ctx, "no details or errors in backup")
}
if err := detailsStore.Read(ctx, ssid, umt, errs); err != nil {
return nil, clues.Wrap(err, "reading backup data from streamstore")
}
return &deets, nil
}