restic/internal/repository/warmup.go

40 lines
1.0 KiB
Go

package repository
import (
"context"
"github.com/restic/restic/internal/backend"
"github.com/restic/restic/internal/restic"
)
type WarmupJob struct {
repo *Repository
handlesWarmingUp []backend.Handle
}
// HandleCount returns the number of handles that are currently warming up.
func (job *WarmupJob) HandleCount() int {
return len(job.handlesWarmingUp)
}
// Wait waits for all handles to be warm.
func (job *WarmupJob) Wait(ctx context.Context) error {
return job.repo.be.WarmupWait(ctx, job.handlesWarmingUp)
}
// StartWarmup creates a new warmup job, requesting the backend to warmup the specified packs.
func (repo *Repository) StartWarmup(ctx context.Context, packs restic.IDSet) (restic.WarmupJob, error) {
handles := make([]backend.Handle, 0, len(packs))
for pack := range packs {
handles = append(
handles,
backend.Handle{Type: restic.PackFile, Name: pack.String()},
)
}
handlesWarmingUp, err := repo.be.Warmup(ctx, handles)
return &WarmupJob{
repo: repo,
handlesWarmingUp: handlesWarmingUp,
}, err
}