mirror of https://github.com/restic/restic.git
40 lines
1.0 KiB
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
|
|
}
|