Adds collision policy handling to onedrive item posts. This allows us to override the default "replace" behavior that currently returns a 409 for the creation endpoint, in case we want to use skip (ie: fail) or copy handling. --- #### Does this PR need a docs update or release note? - [x] ⛔ No #### Type of change - [x] 🌻 Feature #### Issue(s) * #3562 #### Test Plan - [x] 💪 Manual - [x] ⚡ Unit test - [x] 💚 E2E
77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package m365
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/alcionai/clues"
|
|
|
|
"github.com/alcionai/corso/src/internal/data"
|
|
"github.com/alcionai/corso/src/internal/diagnostics"
|
|
"github.com/alcionai/corso/src/internal/m365/exchange"
|
|
"github.com/alcionai/corso/src/internal/m365/graph"
|
|
"github.com/alcionai/corso/src/internal/m365/onedrive"
|
|
"github.com/alcionai/corso/src/internal/m365/sharepoint"
|
|
"github.com/alcionai/corso/src/internal/m365/support"
|
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
|
"github.com/alcionai/corso/src/pkg/control"
|
|
"github.com/alcionai/corso/src/pkg/fault"
|
|
"github.com/alcionai/corso/src/pkg/selectors"
|
|
)
|
|
|
|
// ConsumeRestoreCollections restores data from the specified collections
|
|
// into M365 using the GraphAPI.
|
|
// SideEffect: status is updated at the completion of operation
|
|
func (ctrl *Controller) ConsumeRestoreCollections(
|
|
ctx context.Context,
|
|
backupVersion int,
|
|
sels selectors.Selector,
|
|
restoreCfg control.RestoreConfig,
|
|
opts control.Options,
|
|
dcs []data.RestoreCollection,
|
|
errs *fault.Bus,
|
|
) (*details.Details, error) {
|
|
ctx, end := diagnostics.Span(ctx, "m365:restore")
|
|
defer end()
|
|
|
|
ctx = graph.BindRateLimiterConfig(ctx, graph.LimiterCfg{Service: sels.PathService()})
|
|
ctx = clues.Add(ctx, "restore_config", restoreCfg) // TODO(rkeepers): needs PII control
|
|
|
|
var (
|
|
status *support.ControllerOperationStatus
|
|
deets = &details.Builder{}
|
|
err error
|
|
)
|
|
|
|
switch sels.Service {
|
|
case selectors.ServiceExchange:
|
|
status, err = exchange.ConsumeRestoreCollections(ctx, ctrl.AC, restoreCfg, dcs, deets, errs)
|
|
case selectors.ServiceOneDrive:
|
|
status, err = onedrive.ConsumeRestoreCollections(
|
|
ctx,
|
|
onedrive.NewRestoreHandler(ctrl.AC),
|
|
backupVersion,
|
|
restoreCfg,
|
|
opts,
|
|
dcs,
|
|
deets,
|
|
errs)
|
|
case selectors.ServiceSharePoint:
|
|
status, err = sharepoint.ConsumeRestoreCollections(
|
|
ctx,
|
|
backupVersion,
|
|
ctrl.AC,
|
|
restoreCfg,
|
|
opts,
|
|
dcs,
|
|
deets,
|
|
errs)
|
|
default:
|
|
err = clues.Wrap(clues.New(sels.Service.String()), "service not supported")
|
|
}
|
|
|
|
ctrl.incrementAwaitingMessages()
|
|
ctrl.UpdateStatus(status)
|
|
|
|
return deets.Details(), err
|
|
}
|