add prefetch options for repo interface

Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
This commit is contained in:
Lyndon-Li
2026-08-11 12:56:23 +08:00
parent e354e7aec4
commit a41cb11902
4 changed files with 10 additions and 5 deletions
+2 -2
View File
@@ -338,7 +338,7 @@ func (km *kopiaMaintenance) maintainProgress(uploaded int64) {
}
}
func (kr *kopiaRepository) OpenObject(ctx context.Context, id udmrepo.ID) (udmrepo.ObjectReader, error) {
func (kr *kopiaRepository) OpenObject(ctx context.Context, id udmrepo.ID, opt udmrepo.ObjectReadOptions) (udmrepo.ObjectReader, error) {
if kr.rawRepo == nil {
return nil, errors.New("repo is closed or not open")
}
@@ -550,7 +550,7 @@ func (kr *kopiaRepository) WriteMetadata(ctx context.Context, meta *udmrepo.Meta
}
func (kr *kopiaRepository) ReadMetadata(ctx context.Context, id udmrepo.ID) (*udmrepo.Metadata, error) {
reader, err := kr.OpenObject(ctx, id)
reader, err := kr.OpenObject(ctx, id, udmrepo.ObjectReadOptions{})
if err != nil {
return nil, errors.Wrapf(err, "error to open metadata object %v", id)
}
+6 -1
View File
@@ -72,6 +72,11 @@ type ObjectWriteOptions struct {
ParentObject ID // The object in the previous snapshot, for incremental backup
}
type ObjectReadOptions struct {
Prefetch bool
PrefetchBudgetMB int
}
type AdvancedFeatureInfo struct {
MultiPartBackup bool // if set to true, it means the repo supports multiple-part backup
}
@@ -136,7 +141,7 @@ type BackupRepoService interface {
type BackupRepo interface {
// OpenObject opens an existing object for read.
// id: the object's unified identifier.
OpenObject(ctx context.Context, id ID) (ObjectReader, error)
OpenObject(ctx context.Context, id ID, opt ObjectReadOptions) (ObjectReader, error)
// GetManifest gets a manifest data from the backup repository.
GetManifest(ctx context.Context, id ID, mani *RepoManifest) error
+1 -1
View File
@@ -176,7 +176,7 @@ func (blkup *blockUploader) Restore(snapshot udmrepo.Snapshot, dest destInfo, bi
return 0, errors.Errorf("dest dev(%s) size is too small (%v vs. %v)", dest.path, dest.size, sourceSize)
}
reader, err := blkup.repoWriter.OpenObject(blkup.ctx, meta.SubObjects[0].ID)
reader, err := blkup.repoWriter.OpenObject(blkup.ctx, meta.SubObjects[0].ID, udmrepo.ObjectReadOptions{})
if err != nil {
return 0, errors.Wrapf(err, "error opening bdev object %v", meta.SubObjects[0].Name)
}
+1 -1
View File
@@ -56,7 +56,7 @@ func NewShimRepo(repo udmrepo.BackupRepo) repo.RepositoryWriter {
// OpenObject open specific object
func (sr *shimRepository) OpenObject(ctx context.Context, id object.ID) (object.Reader, error) {
reader, err := sr.udmRepo.OpenObject(ctx, udmrepo.ID(id.String()))
reader, err := sr.udmRepo.OpenObject(ctx, udmrepo.ID(id.String()), udmrepo.ObjectReadOptions{})
if err != nil {
return nil, errors.Wrapf(err, "failed to open object with id %v", id)
}