Fix circular dependency for store interface (#4014)
Remove references to the kopia package from `pkg/store` package so that kopia can import that package itself. Do this by using interfaces where needed in `pkg/store` instead of concrete struct types These changes will make cleaning up incomplete backups a little neater since that code will need to lookup both manifests and backup models This PR is just minor renaming and fixups, no logic changes --- #### Does this PR need a docs update or release note? - [ ] ✅ Yes, it's included - [ ] 🕐 Yes, but in a later PR - [x] ⛔ No #### Type of change - [ ] 🌻 Feature - [ ] 🐛 Bugfix - [ ] 🗺️ Documentation - [ ] 🤖 Supportability/Tests - [ ] 💻 CI/Deployment - [x] 🧹 Tech Debt/Cleanup #### Issue(s) * #3217 #### Test Plan - [ ] 💪 Manual - [x] ⚡ Unit test - [x] 💚 E2E
This commit is contained in:
parent
50e84b28a4
commit
893598d8ba
@ -10,11 +10,11 @@ import (
|
|||||||
"golang.org/x/exp/maps"
|
"golang.org/x/exp/maps"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/model"
|
"github.com/alcionai/corso/src/internal/model"
|
||||||
"github.com/alcionai/corso/src/internal/operations/inject"
|
|
||||||
"github.com/alcionai/corso/src/pkg/backup"
|
"github.com/alcionai/corso/src/pkg/backup"
|
||||||
"github.com/alcionai/corso/src/pkg/backup/identity"
|
"github.com/alcionai/corso/src/pkg/backup/identity"
|
||||||
"github.com/alcionai/corso/src/pkg/logger"
|
"github.com/alcionai/corso/src/pkg/logger"
|
||||||
"github.com/alcionai/corso/src/pkg/path"
|
"github.com/alcionai/corso/src/pkg/path"
|
||||||
|
"github.com/alcionai/corso/src/pkg/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -155,19 +155,19 @@ func normalizeTagKVs(tags map[string]string) map[string]string {
|
|||||||
|
|
||||||
type baseFinder struct {
|
type baseFinder struct {
|
||||||
sm snapshotManager
|
sm snapshotManager
|
||||||
bg inject.GetBackuper
|
bg store.BackupGetter
|
||||||
}
|
}
|
||||||
|
|
||||||
func newBaseFinder(
|
func newBaseFinder(
|
||||||
sm snapshotManager,
|
sm snapshotManager,
|
||||||
bg inject.GetBackuper,
|
bg store.BackupGetter,
|
||||||
) (*baseFinder, error) {
|
) (*baseFinder, error) {
|
||||||
if sm == nil {
|
if sm == nil {
|
||||||
return nil, clues.New("nil snapshotManager")
|
return nil, clues.New("nil snapshotManager")
|
||||||
}
|
}
|
||||||
|
|
||||||
if bg == nil {
|
if bg == nil {
|
||||||
return nil, clues.New("nil GetBackuper")
|
return nil, clues.New("nil BackupGetter")
|
||||||
}
|
}
|
||||||
|
|
||||||
return &baseFinder{
|
return &baseFinder{
|
||||||
|
|||||||
@ -13,8 +13,11 @@ import (
|
|||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/data"
|
"github.com/alcionai/corso/src/internal/data"
|
||||||
"github.com/alcionai/corso/src/internal/model"
|
"github.com/alcionai/corso/src/internal/model"
|
||||||
|
"github.com/alcionai/corso/src/pkg/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var _ store.Storer = &ModelStore{}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
stableIDKey = "stableID"
|
stableIDKey = "stableID"
|
||||||
modelVersionKey = "storeVersion"
|
modelVersionKey = "storeVersion"
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import (
|
|||||||
"github.com/alcionai/corso/src/internal/data"
|
"github.com/alcionai/corso/src/internal/data"
|
||||||
"github.com/alcionai/corso/src/internal/diagnostics"
|
"github.com/alcionai/corso/src/internal/diagnostics"
|
||||||
"github.com/alcionai/corso/src/internal/observe"
|
"github.com/alcionai/corso/src/internal/observe"
|
||||||
"github.com/alcionai/corso/src/internal/operations/inject"
|
|
||||||
"github.com/alcionai/corso/src/internal/stats"
|
"github.com/alcionai/corso/src/internal/stats"
|
||||||
"github.com/alcionai/corso/src/pkg/backup/details"
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
||||||
"github.com/alcionai/corso/src/pkg/backup/identity"
|
"github.com/alcionai/corso/src/pkg/backup/identity"
|
||||||
@ -28,6 +27,7 @@ import (
|
|||||||
"github.com/alcionai/corso/src/pkg/fault"
|
"github.com/alcionai/corso/src/pkg/fault"
|
||||||
"github.com/alcionai/corso/src/pkg/logger"
|
"github.com/alcionai/corso/src/pkg/logger"
|
||||||
"github.com/alcionai/corso/src/pkg/path"
|
"github.com/alcionai/corso/src/pkg/path"
|
||||||
|
"github.com/alcionai/corso/src/pkg/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -590,7 +590,7 @@ func (w Wrapper) DeleteSnapshot(
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w Wrapper) NewBaseFinder(bg inject.GetBackuper) (*baseFinder, error) {
|
func (w Wrapper) NewBaseFinder(bg store.BackupGetter) (*baseFinder, error) {
|
||||||
return newBaseFinder(w.c, bg)
|
return newBaseFinder(w.c, bg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -75,7 +75,7 @@ func NewBackupOperation(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
opts control.Options,
|
opts control.Options,
|
||||||
kw *kopia.Wrapper,
|
kw *kopia.Wrapper,
|
||||||
sw *store.Wrapper,
|
sw store.BackupStorer,
|
||||||
bp inject.BackupProducer,
|
bp inject.BackupProducer,
|
||||||
acct account.Account,
|
acct account.Account,
|
||||||
selector selectors.Selector,
|
selector selectors.Selector,
|
||||||
|
|||||||
@ -364,7 +364,7 @@ func TestBackupOpUnitSuite(t *testing.T) {
|
|||||||
func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() {
|
func (suite *BackupOpUnitSuite) TestBackupOperation_PersistResults() {
|
||||||
var (
|
var (
|
||||||
kw = &kopia.Wrapper{}
|
kw = &kopia.Wrapper{}
|
||||||
sw = &store.Wrapper{}
|
sw = store.NewWrapper(&kopia.ModelStore{})
|
||||||
ctrl = &mock.Controller{}
|
ctrl = &mock.Controller{}
|
||||||
acct = account.Account{}
|
acct = account.Account{}
|
||||||
now = time.Now()
|
now = time.Now()
|
||||||
@ -1398,7 +1398,7 @@ func (suite *BackupOpIntegrationSuite) SetupSuite() {
|
|||||||
func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() {
|
func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() {
|
||||||
var (
|
var (
|
||||||
kw = &kopia.Wrapper{}
|
kw = &kopia.Wrapper{}
|
||||||
sw = &store.Wrapper{}
|
sw = store.NewWrapper(&kopia.ModelStore{})
|
||||||
ctrl = &mock.Controller{}
|
ctrl = &mock.Controller{}
|
||||||
acct = tconfig.NewM365Account(suite.T())
|
acct = tconfig.NewM365Account(suite.T())
|
||||||
opts = control.DefaultOptions()
|
opts = control.DefaultOptions()
|
||||||
@ -1407,7 +1407,7 @@ func (suite *BackupOpIntegrationSuite) TestNewBackupOperation() {
|
|||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
kw *kopia.Wrapper
|
kw *kopia.Wrapper
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
bp inject.BackupProducer
|
bp inject.BackupProducer
|
||||||
acct account.Account
|
acct account.Account
|
||||||
targets []string
|
targets []string
|
||||||
@ -1447,7 +1447,7 @@ type AssistBackupIntegrationSuite struct {
|
|||||||
kopiaCloser func(ctx context.Context)
|
kopiaCloser func(ctx context.Context)
|
||||||
acct account.Account
|
acct account.Account
|
||||||
kw *kopia.Wrapper
|
kw *kopia.Wrapper
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
ms *kopia.ModelStore
|
ms *kopia.ModelStore
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1489,7 +1489,7 @@ func (suite *AssistBackupIntegrationSuite) SetupSuite() {
|
|||||||
|
|
||||||
suite.ms = ms
|
suite.ms = ms
|
||||||
|
|
||||||
sw := store.NewKopiaStore(ms)
|
sw := store.NewWrapper(ms)
|
||||||
suite.sw = sw
|
suite.sw = sw
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ import (
|
|||||||
func getBackupAndDetailsFromID(
|
func getBackupAndDetailsFromID(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
backupID model.StableID,
|
backupID model.StableID,
|
||||||
ms *store.Wrapper,
|
ms store.BackupStorer,
|
||||||
detailsStore streamstore.Reader,
|
detailsStore streamstore.Reader,
|
||||||
errs *fault.Bus,
|
errs *fault.Bus,
|
||||||
) (*backup.Backup, *details.Details, error) {
|
) (*backup.Backup, *details.Details, error) {
|
||||||
|
|||||||
@ -57,7 +57,7 @@ func NewExportOperation(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
opts control.Options,
|
opts control.Options,
|
||||||
kw *kopia.Wrapper,
|
kw *kopia.Wrapper,
|
||||||
sw *store.Wrapper,
|
sw store.BackupStorer,
|
||||||
ec inject.ExportConsumer,
|
ec inject.ExportConsumer,
|
||||||
acct account.Account,
|
acct account.Account,
|
||||||
backupID model.StableID,
|
backupID model.StableID,
|
||||||
|
|||||||
@ -40,7 +40,7 @@ func TestExportOpSuite(t *testing.T) {
|
|||||||
func (suite *ExportOpSuite) TestExportOperation_PersistResults() {
|
func (suite *ExportOpSuite) TestExportOperation_PersistResults() {
|
||||||
var (
|
var (
|
||||||
kw = &kopia.Wrapper{}
|
kw = &kopia.Wrapper{}
|
||||||
sw = &store.Wrapper{}
|
sw = store.NewWrapper(&kopia.ModelStore{})
|
||||||
ctrl = &mock.Controller{}
|
ctrl = &mock.Controller{}
|
||||||
now = time.Now()
|
now = time.Now()
|
||||||
exportCfg = control.DefaultExportConfig()
|
exportCfg = control.DefaultExportConfig()
|
||||||
|
|||||||
@ -6,8 +6,6 @@ import (
|
|||||||
"github.com/alcionai/corso/src/internal/common/idname"
|
"github.com/alcionai/corso/src/internal/common/idname"
|
||||||
"github.com/alcionai/corso/src/internal/common/prefixmatcher"
|
"github.com/alcionai/corso/src/internal/common/prefixmatcher"
|
||||||
"github.com/alcionai/corso/src/internal/data"
|
"github.com/alcionai/corso/src/internal/data"
|
||||||
"github.com/alcionai/corso/src/internal/model"
|
|
||||||
"github.com/alcionai/corso/src/pkg/backup"
|
|
||||||
"github.com/alcionai/corso/src/pkg/backup/details"
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
||||||
"github.com/alcionai/corso/src/pkg/control"
|
"github.com/alcionai/corso/src/pkg/control"
|
||||||
"github.com/alcionai/corso/src/pkg/control/repository"
|
"github.com/alcionai/corso/src/pkg/control/repository"
|
||||||
@ -92,11 +90,4 @@ type (
|
|||||||
RepoMaintenancer interface {
|
RepoMaintenancer interface {
|
||||||
RepoMaintenance(ctx context.Context, opts repository.Maintenance) error
|
RepoMaintenance(ctx context.Context, opts repository.Maintenance) error
|
||||||
}
|
}
|
||||||
|
|
||||||
GetBackuper interface {
|
|
||||||
GetBackup(
|
|
||||||
ctx context.Context,
|
|
||||||
backupID model.StableID,
|
|
||||||
) (*backup.Backup, error)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|||||||
@ -57,7 +57,7 @@ type operation struct {
|
|||||||
|
|
||||||
bus events.Eventer
|
bus events.Eventer
|
||||||
kopia *kopia.Wrapper
|
kopia *kopia.Wrapper
|
||||||
store *store.Wrapper
|
store store.BackupStorer
|
||||||
}
|
}
|
||||||
|
|
||||||
func newOperation(
|
func newOperation(
|
||||||
@ -65,7 +65,7 @@ func newOperation(
|
|||||||
bus events.Eventer,
|
bus events.Eventer,
|
||||||
ctr *count.Bus,
|
ctr *count.Bus,
|
||||||
kw *kopia.Wrapper,
|
kw *kopia.Wrapper,
|
||||||
sw *store.Wrapper,
|
sw store.BackupStorer,
|
||||||
) operation {
|
) operation {
|
||||||
return operation{
|
return operation{
|
||||||
CreatedAt: time.Now(),
|
CreatedAt: time.Now(),
|
||||||
|
|||||||
@ -32,12 +32,12 @@ func (suite *OperationSuite) TestNewOperation() {
|
|||||||
|
|
||||||
func (suite *OperationSuite) TestOperation_Validate() {
|
func (suite *OperationSuite) TestOperation_Validate() {
|
||||||
kwStub := &kopia.Wrapper{}
|
kwStub := &kopia.Wrapper{}
|
||||||
swStub := &store.Wrapper{}
|
swStub := store.NewWrapper(&kopia.ModelStore{})
|
||||||
|
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
kw *kopia.Wrapper
|
kw *kopia.Wrapper
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
errCheck assert.ErrorAssertionFunc
|
errCheck assert.ErrorAssertionFunc
|
||||||
}{
|
}{
|
||||||
{"good", kwStub, swStub, assert.NoError},
|
{"good", kwStub, swStub, assert.NoError},
|
||||||
|
|||||||
@ -59,7 +59,7 @@ func NewRestoreOperation(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
opts control.Options,
|
opts control.Options,
|
||||||
kw *kopia.Wrapper,
|
kw *kopia.Wrapper,
|
||||||
sw *store.Wrapper,
|
sw store.BackupStorer,
|
||||||
rc inject.RestoreConsumer,
|
rc inject.RestoreConsumer,
|
||||||
acct account.Account,
|
acct account.Account,
|
||||||
backupID model.StableID,
|
backupID model.StableID,
|
||||||
|
|||||||
@ -50,7 +50,7 @@ func TestRestoreOpUnitSuite(t *testing.T) {
|
|||||||
func (suite *RestoreOpUnitSuite) TestRestoreOperation_PersistResults() {
|
func (suite *RestoreOpUnitSuite) TestRestoreOperation_PersistResults() {
|
||||||
var (
|
var (
|
||||||
kw = &kopia.Wrapper{}
|
kw = &kopia.Wrapper{}
|
||||||
sw = &store.Wrapper{}
|
sw = store.NewWrapper(&kopia.ModelStore{})
|
||||||
ctrl = &mock.Controller{}
|
ctrl = &mock.Controller{}
|
||||||
now = time.Now()
|
now = time.Now()
|
||||||
restoreCfg = testdata.DefaultRestoreConfig("")
|
restoreCfg = testdata.DefaultRestoreConfig("")
|
||||||
@ -216,7 +216,7 @@ type RestoreOpIntegrationSuite struct {
|
|||||||
kopiaCloser func(ctx context.Context)
|
kopiaCloser func(ctx context.Context)
|
||||||
acct account.Account
|
acct account.Account
|
||||||
kw *kopia.Wrapper
|
kw *kopia.Wrapper
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
ms *kopia.ModelStore
|
ms *kopia.ModelStore
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ func (suite *RestoreOpIntegrationSuite) SetupSuite() {
|
|||||||
|
|
||||||
suite.ms = ms
|
suite.ms = ms
|
||||||
|
|
||||||
sw := store.NewKopiaStore(ms)
|
sw := store.NewWrapper(ms)
|
||||||
suite.sw = sw
|
suite.sw = sw
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ func (suite *RestoreOpIntegrationSuite) TearDownSuite() {
|
|||||||
func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() {
|
func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() {
|
||||||
var (
|
var (
|
||||||
kw = &kopia.Wrapper{}
|
kw = &kopia.Wrapper{}
|
||||||
sw = &store.Wrapper{}
|
sw = store.NewWrapper(&kopia.ModelStore{})
|
||||||
ctrl = &mock.Controller{}
|
ctrl = &mock.Controller{}
|
||||||
restoreCfg = testdata.DefaultRestoreConfig("")
|
restoreCfg = testdata.DefaultRestoreConfig("")
|
||||||
opts = control.DefaultOptions()
|
opts = control.DefaultOptions()
|
||||||
@ -293,7 +293,7 @@ func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() {
|
|||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
kw *kopia.Wrapper
|
kw *kopia.Wrapper
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
rc inject.RestoreConsumer
|
rc inject.RestoreConsumer
|
||||||
targets []string
|
targets []string
|
||||||
errCheck assert.ErrorAssertionFunc
|
errCheck assert.ErrorAssertionFunc
|
||||||
|
|||||||
@ -60,7 +60,7 @@ type backupOpDependencies struct {
|
|||||||
sel selectors.Selector
|
sel selectors.Selector
|
||||||
sss streamstore.Streamer
|
sss streamstore.Streamer
|
||||||
st storage.Storage
|
st storage.Storage
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
|
|
||||||
closer func()
|
closer func()
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ func prepNewTestBackupOp(
|
|||||||
return operations.BackupOperation{}, nil
|
return operations.BackupOperation{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
bod.sw = store.NewKopiaStore(bod.kms)
|
bod.sw = store.NewWrapper(bod.kms)
|
||||||
|
|
||||||
connectorResource := resource.Users
|
connectorResource := resource.Users
|
||||||
if sel.Service == selectors.ServiceSharePoint {
|
if sel.Service == selectors.ServiceSharePoint {
|
||||||
@ -235,7 +235,7 @@ func checkBackupIsInManifests(
|
|||||||
t *testing.T,
|
t *testing.T,
|
||||||
ctx context.Context, //revive:disable-line:context-as-argument
|
ctx context.Context, //revive:disable-line:context-as-argument
|
||||||
kw *kopia.Wrapper,
|
kw *kopia.Wrapper,
|
||||||
sw *store.Wrapper,
|
sw store.BackupStorer,
|
||||||
bo *operations.BackupOperation,
|
bo *operations.BackupOperation,
|
||||||
sel selectors.Selector,
|
sel selectors.Selector,
|
||||||
resourceOwner string,
|
resourceOwner string,
|
||||||
|
|||||||
@ -36,7 +36,7 @@ type restoreOpDependencies struct {
|
|||||||
sel selectors.Selector
|
sel selectors.Selector
|
||||||
sss streamstore.Streamer
|
sss streamstore.Streamer
|
||||||
st storage.Storage
|
st storage.Storage
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
|
|
||||||
closer func()
|
closer func()
|
||||||
}
|
}
|
||||||
@ -105,7 +105,7 @@ func prepNewTestRestoreOp(
|
|||||||
return operations.RestoreOperation{}, rod
|
return operations.RestoreOperation{}, rod
|
||||||
}
|
}
|
||||||
|
|
||||||
rod.sw = store.NewKopiaStore(rod.kms)
|
rod.sw = store.NewWrapper(rod.kms)
|
||||||
|
|
||||||
connectorResource := resource.Users
|
connectorResource := resource.Users
|
||||||
if sel.Service == selectors.ServiceSharePoint {
|
if sel.Service == selectors.ServiceSharePoint {
|
||||||
|
|||||||
@ -347,7 +347,7 @@ func (r repository) NewBackupWithLookup(
|
|||||||
ctx,
|
ctx,
|
||||||
r.Opts,
|
r.Opts,
|
||||||
r.dataLayer,
|
r.dataLayer,
|
||||||
store.NewKopiaStore(r.modelStore),
|
store.NewWrapper(r.modelStore),
|
||||||
ctrl,
|
ctrl,
|
||||||
r.Account,
|
r.Account,
|
||||||
sel,
|
sel,
|
||||||
@ -371,7 +371,7 @@ func (r repository) NewExport(
|
|||||||
ctx,
|
ctx,
|
||||||
r.Opts,
|
r.Opts,
|
||||||
r.dataLayer,
|
r.dataLayer,
|
||||||
store.NewKopiaStore(r.modelStore),
|
store.NewWrapper(r.modelStore),
|
||||||
ctrl,
|
ctrl,
|
||||||
r.Account,
|
r.Account,
|
||||||
model.StableID(backupID),
|
model.StableID(backupID),
|
||||||
@ -396,7 +396,7 @@ func (r repository) NewRestore(
|
|||||||
ctx,
|
ctx,
|
||||||
r.Opts,
|
r.Opts,
|
||||||
r.dataLayer,
|
r.dataLayer,
|
||||||
store.NewKopiaStore(r.modelStore),
|
store.NewWrapper(r.modelStore),
|
||||||
ctrl,
|
ctrl,
|
||||||
r.Account,
|
r.Account,
|
||||||
model.StableID(backupID),
|
model.StableID(backupID),
|
||||||
@ -432,7 +432,7 @@ func (r repository) NewRetentionConfig(
|
|||||||
|
|
||||||
// Backup retrieves a backup by id.
|
// Backup retrieves a backup by id.
|
||||||
func (r repository) Backup(ctx context.Context, id string) (*backup.Backup, error) {
|
func (r repository) Backup(ctx context.Context, id string) (*backup.Backup, error) {
|
||||||
return getBackup(ctx, id, store.NewKopiaStore(r.modelStore))
|
return getBackup(ctx, id, store.NewWrapper(r.modelStore))
|
||||||
}
|
}
|
||||||
|
|
||||||
// getBackup handles the processing for Backup.
|
// getBackup handles the processing for Backup.
|
||||||
@ -455,7 +455,7 @@ func (r repository) Backups(ctx context.Context, ids []string) ([]*backup.Backup
|
|||||||
var (
|
var (
|
||||||
bups []*backup.Backup
|
bups []*backup.Backup
|
||||||
errs = fault.New(false)
|
errs = fault.New(false)
|
||||||
sw = store.NewKopiaStore(r.modelStore)
|
sw = store.NewWrapper(r.modelStore)
|
||||||
)
|
)
|
||||||
|
|
||||||
for _, id := range ids {
|
for _, id := range ids {
|
||||||
@ -475,7 +475,7 @@ func (r repository) Backups(ctx context.Context, ids []string) ([]*backup.Backup
|
|||||||
// BackupsByTag lists all backups in a repository that contain all the tags
|
// BackupsByTag lists all backups in a repository that contain all the tags
|
||||||
// specified.
|
// specified.
|
||||||
func (r repository) BackupsByTag(ctx context.Context, fs ...store.FilterOption) ([]*backup.Backup, error) {
|
func (r repository) BackupsByTag(ctx context.Context, fs ...store.FilterOption) ([]*backup.Backup, error) {
|
||||||
sw := store.NewKopiaStore(r.modelStore)
|
sw := store.NewWrapper(r.modelStore)
|
||||||
return backupsByTag(ctx, sw, fs)
|
return backupsByTag(ctx, sw, fs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -518,7 +518,7 @@ func (r repository) GetBackupDetails(
|
|||||||
backupID,
|
backupID,
|
||||||
r.Account.ID(),
|
r.Account.ID(),
|
||||||
r.dataLayer,
|
r.dataLayer,
|
||||||
store.NewKopiaStore(r.modelStore),
|
store.NewWrapper(r.modelStore),
|
||||||
errs)
|
errs)
|
||||||
|
|
||||||
return deets, bup, errs.Fail(err)
|
return deets, bup, errs.Fail(err)
|
||||||
@ -588,7 +588,7 @@ func (r repository) GetBackupErrors(
|
|||||||
backupID,
|
backupID,
|
||||||
r.Account.ID(),
|
r.Account.ID(),
|
||||||
r.dataLayer,
|
r.dataLayer,
|
||||||
store.NewKopiaStore(r.modelStore),
|
store.NewWrapper(r.modelStore),
|
||||||
errs)
|
errs)
|
||||||
|
|
||||||
return fe, bup, errs.Fail(err)
|
return fe, bup, errs.Fail(err)
|
||||||
@ -635,7 +635,7 @@ type snapshotDeleter interface {
|
|||||||
|
|
||||||
// DeleteBackup removes the backup from both the model store and the backup storage.
|
// DeleteBackup removes the backup from both the model store and the backup storage.
|
||||||
func (r repository) DeleteBackup(ctx context.Context, id string) error {
|
func (r repository) DeleteBackup(ctx context.Context, id string) error {
|
||||||
return deleteBackup(ctx, id, r.dataLayer, store.NewKopiaStore(r.modelStore))
|
return deleteBackup(ctx, id, r.dataLayer, store.NewWrapper(r.modelStore))
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleteBackup handles the processing for Backup.
|
// deleteBackup handles the processing for Backup.
|
||||||
|
|||||||
@ -434,7 +434,7 @@ type RepositoryModelIntgSuite struct {
|
|||||||
tester.Suite
|
tester.Suite
|
||||||
kw *kopia.Wrapper
|
kw *kopia.Wrapper
|
||||||
ms *kopia.ModelStore
|
ms *kopia.ModelStore
|
||||||
sw *store.Wrapper
|
sw store.BackupStorer
|
||||||
kopiaCloser func(ctx context.Context)
|
kopiaCloser func(ctx context.Context)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,7 +476,7 @@ func (suite *RepositoryModelIntgSuite) SetupSuite() {
|
|||||||
suite.ms, err = kopia.NewModelStore(k)
|
suite.ms, err = kopia.NewModelStore(k)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
suite.sw = store.NewKopiaStore(suite.ms)
|
suite.sw = store.NewWrapper(suite.ms)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *RepositoryModelIntgSuite) TearDownSuite() {
|
func (suite *RepositoryModelIntgSuite) TearDownSuite() {
|
||||||
@ -537,7 +537,7 @@ func writeBackup(
|
|||||||
t *testing.T,
|
t *testing.T,
|
||||||
ctx context.Context, //revive:disable-line:context-as-argument
|
ctx context.Context, //revive:disable-line:context-as-argument
|
||||||
kw *kopia.Wrapper,
|
kw *kopia.Wrapper,
|
||||||
sw *store.Wrapper,
|
sw store.BackupStorer,
|
||||||
tID, snapID, backupID string,
|
tID, snapID, backupID string,
|
||||||
sel selectors.Selector,
|
sel selectors.Selector,
|
||||||
ownerID, ownerName string,
|
ownerID, ownerName string,
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/alcionai/clues"
|
"github.com/alcionai/clues"
|
||||||
|
"github.com/kopia/kopia/repo/manifest"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/model"
|
"github.com/alcionai/corso/src/internal/model"
|
||||||
"github.com/alcionai/corso/src/pkg/backup"
|
"github.com/alcionai/corso/src/pkg/backup"
|
||||||
@ -28,6 +29,14 @@ func (q *queryFilters) populate(qf ...FilterOption) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Service ensures the retrieved backups only match
|
||||||
|
// the specified service.
|
||||||
|
func Service(pst path.ServiceType) FilterOption {
|
||||||
|
return func(qf *queryFilters) {
|
||||||
|
qf.tags[model.ServiceTag] = pst.String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
BackupWrapper interface {
|
BackupWrapper interface {
|
||||||
BackupGetterDeleter
|
BackupGetterDeleter
|
||||||
@ -49,18 +58,33 @@ type (
|
|||||||
BackupDeleter interface {
|
BackupDeleter interface {
|
||||||
DeleteBackup(ctx context.Context, backupID model.StableID) error
|
DeleteBackup(ctx context.Context, backupID model.StableID) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Storer interface {
|
||||||
|
Delete(ctx context.Context, s model.Schema, id model.StableID) error
|
||||||
|
DeleteWithModelStoreID(ctx context.Context, id manifest.ID) error
|
||||||
|
Get(ctx context.Context, s model.Schema, id model.StableID, data model.Model) error
|
||||||
|
GetIDsForType(ctx context.Context, s model.Schema, tags map[string]string) ([]*model.BaseModel, error)
|
||||||
|
GetWithModelStoreID(ctx context.Context, s model.Schema, id manifest.ID, data model.Model) error
|
||||||
|
Put(ctx context.Context, s model.Schema, m model.Model) error
|
||||||
|
Update(ctx context.Context, s model.Schema, m model.Model) error
|
||||||
|
}
|
||||||
|
|
||||||
|
BackupStorer interface {
|
||||||
|
Storer
|
||||||
|
BackupWrapper
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// Service ensures the retrieved backups only match
|
type wrapper struct {
|
||||||
// the specified service.
|
Storer
|
||||||
func Service(pst path.ServiceType) FilterOption {
|
|
||||||
return func(qf *queryFilters) {
|
|
||||||
qf.tags[model.ServiceTag] = pst.String()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewWrapper(s Storer) *wrapper {
|
||||||
|
return &wrapper{Storer: s}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBackup gets a single backup by id.
|
// GetBackup gets a single backup by id.
|
||||||
func (w Wrapper) GetBackup(ctx context.Context, backupID model.StableID) (*backup.Backup, error) {
|
func (w wrapper) GetBackup(ctx context.Context, backupID model.StableID) (*backup.Backup, error) {
|
||||||
b := backup.Backup{}
|
b := backup.Backup{}
|
||||||
|
|
||||||
err := w.Get(ctx, model.BackupSchema, backupID, &b)
|
err := w.Get(ctx, model.BackupSchema, backupID, &b)
|
||||||
@ -72,7 +96,7 @@ func (w Wrapper) GetBackup(ctx context.Context, backupID model.StableID) (*backu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetDetailsFromBackupID retrieves all backups in the model store.
|
// GetDetailsFromBackupID retrieves all backups in the model store.
|
||||||
func (w Wrapper) GetBackups(
|
func (w wrapper) GetBackups(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
filters ...FilterOption,
|
filters ...FilterOption,
|
||||||
) ([]*backup.Backup, error) {
|
) ([]*backup.Backup, error) {
|
||||||
@ -101,6 +125,6 @@ func (w Wrapper) GetBackups(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteBackup deletes the backup and its details entry from the model store.
|
// DeleteBackup deletes the backup and its details entry from the model store.
|
||||||
func (w Wrapper) DeleteBackup(ctx context.Context, backupID model.StableID) error {
|
func (w wrapper) DeleteBackup(ctx context.Context, backupID model.StableID) error {
|
||||||
return w.Delete(ctx, model.BackupSchema, backupID)
|
return w.Delete(ctx, model.BackupSchema, backupID)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,7 +66,7 @@ func (suite *StoreBackupUnitSuite) TestGetBackup() {
|
|||||||
ctx, flush := tester.NewContext(t)
|
ctx, flush := tester.NewContext(t)
|
||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
sm := &store.Wrapper{Storer: test.mock}
|
sm := store.NewWrapper(test.mock)
|
||||||
|
|
||||||
result, err := sm.GetBackup(ctx, model.StableID(uuid.NewString()))
|
result, err := sm.GetBackup(ctx, model.StableID(uuid.NewString()))
|
||||||
test.expect(t, err, clues.ToCore(err))
|
test.expect(t, err, clues.ToCore(err))
|
||||||
@ -104,7 +104,7 @@ func (suite *StoreBackupUnitSuite) TestGetBackups() {
|
|||||||
ctx, flush := tester.NewContext(t)
|
ctx, flush := tester.NewContext(t)
|
||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
sm := &store.Wrapper{Storer: test.mock}
|
sm := store.NewWrapper(test.mock)
|
||||||
|
|
||||||
result, err := sm.GetBackups(ctx)
|
result, err := sm.GetBackups(ctx)
|
||||||
test.expect(t, err, clues.ToCore(err))
|
test.expect(t, err, clues.ToCore(err))
|
||||||
@ -143,7 +143,7 @@ func (suite *StoreBackupUnitSuite) TestDeleteBackup() {
|
|||||||
ctx, flush := tester.NewContext(t)
|
ctx, flush := tester.NewContext(t)
|
||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
sm := &store.Wrapper{Storer: test.mock}
|
sm := store.NewWrapper(test.mock)
|
||||||
|
|
||||||
err := sm.DeleteBackup(ctx, model.StableID(uuid.NewString()))
|
err := sm.DeleteBackup(ctx, model.StableID(uuid.NewString()))
|
||||||
test.expect(t, err, clues.ToCore(err))
|
test.expect(t, err, clues.ToCore(err))
|
||||||
|
|||||||
@ -1,32 +0,0 @@
|
|||||||
package store
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/kopia/kopia/repo/manifest"
|
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/kopia"
|
|
||||||
"github.com/alcionai/corso/src/internal/model"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ Storer = &kopia.ModelStore{}
|
|
||||||
|
|
||||||
type (
|
|
||||||
Storer interface {
|
|
||||||
Delete(ctx context.Context, s model.Schema, id model.StableID) error
|
|
||||||
DeleteWithModelStoreID(ctx context.Context, id manifest.ID) error
|
|
||||||
Get(ctx context.Context, s model.Schema, id model.StableID, data model.Model) error
|
|
||||||
GetIDsForType(ctx context.Context, s model.Schema, tags map[string]string) ([]*model.BaseModel, error)
|
|
||||||
GetWithModelStoreID(ctx context.Context, s model.Schema, id manifest.ID, data model.Model) error
|
|
||||||
Put(ctx context.Context, s model.Schema, m model.Model) error
|
|
||||||
Update(ctx context.Context, s model.Schema, m model.Model) error
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
type Wrapper struct {
|
|
||||||
Storer
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewKopiaStore(kms *kopia.ModelStore) *Wrapper {
|
|
||||||
return &Wrapper{kms}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user