Create new operation type to update retention parameters for immutable backups --- #### 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 - [x] 🌻 Feature - [ ] 🐛 Bugfix - [ ] 🗺️ Documentation - [ ] 🤖 Supportability/Tests - [ ] 💻 CI/Deployment - [ ] 🧹 Tech Debt/Cleanup #### Test Plan - [ ] 💪 Manual - [x] ⚡ Unit test - [ ] 💚 E2E
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package operations
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/alcionai/clues"
|
|
|
|
"github.com/alcionai/corso/src/internal/common/crash"
|
|
"github.com/alcionai/corso/src/internal/events"
|
|
"github.com/alcionai/corso/src/internal/kopia"
|
|
"github.com/alcionai/corso/src/internal/stats"
|
|
"github.com/alcionai/corso/src/pkg/control"
|
|
"github.com/alcionai/corso/src/pkg/control/repository"
|
|
"github.com/alcionai/corso/src/pkg/count"
|
|
)
|
|
|
|
// RetentionConfigOperation wraps an operation with restore-specific props.
|
|
type RetentionConfigOperation struct {
|
|
operation
|
|
Results RetentionConfigResults
|
|
rcOpts repository.Retention
|
|
}
|
|
|
|
// RetentionConfigResults aggregate the details of the results of the operation.
|
|
type RetentionConfigResults struct {
|
|
stats.StartAndEndTime
|
|
}
|
|
|
|
// NewRetentionConfigOperation constructs and validates an operation to change
|
|
// retention parameters.
|
|
func NewRetentionConfigOperation(
|
|
ctx context.Context,
|
|
opts control.Options,
|
|
kw *kopia.Wrapper,
|
|
rcOpts repository.Retention,
|
|
bus events.Eventer,
|
|
) (RetentionConfigOperation, error) {
|
|
op := RetentionConfigOperation{
|
|
operation: newOperation(opts, bus, count.New(), kw, nil),
|
|
rcOpts: rcOpts,
|
|
}
|
|
|
|
// Don't run validation because we don't populate the model store.
|
|
|
|
return op, nil
|
|
}
|
|
|
|
func (op *RetentionConfigOperation) Run(ctx context.Context) (err error) {
|
|
defer func() {
|
|
if crErr := crash.Recovery(ctx, recover(), "retention_config"); crErr != nil {
|
|
err = crErr
|
|
}
|
|
}()
|
|
|
|
op.Results.StartedAt = time.Now()
|
|
|
|
// TODO(ashmrtn): Send telemetry?
|
|
|
|
return op.do(ctx)
|
|
}
|
|
|
|
func (op *RetentionConfigOperation) do(ctx context.Context) error {
|
|
defer func() {
|
|
op.Results.CompletedAt = time.Now()
|
|
}()
|
|
|
|
err := op.operation.kopia.SetRetentionParameters(ctx, op.rcOpts)
|
|
if err != nil {
|
|
op.Status = Failed
|
|
return clues.Wrap(err, "running retention config operation")
|
|
}
|
|
|
|
op.Status = Completed
|
|
|
|
return nil
|
|
}
|