wal-g
1package internal2
3import (4"io"5
6"github.com/wal-g/tracelog"7"github.com/wal-g/wal-g/internal/multistorage"8"github.com/wal-g/wal-g/internal/multistorage/policies"9"github.com/wal-g/wal-g/pkg/storages/storage"10)
11
12type StorageFolderReader interface {13ReadObject(objectRelativePath string) (io.ReadCloser, error)14SubFolder(subFolderRelativePath string) StorageFolderReader15}
16
17func NewFolderReader(folder storage.Folder) StorageFolderReader {18return &FolderReaderImpl{folder}19}
20
21type FolderReaderImpl struct {22storage.Folder23}
24
25func (fsr *FolderReaderImpl) SubFolder(subFolderRelativePath string) StorageFolderReader {26return NewFolderReader(fsr.GetSubFolder(subFolderRelativePath))27}
28
29func PrepareMultiStorageFolderReader(folder storage.Folder, targetStorage string) (StorageFolderReader, error) {30folder = multistorage.SetPolicies(folder, policies.MergeAllStorages)31var err error32if targetStorage == "" {33folder, err = multistorage.UseAllAliveStorages(folder)34} else {35folder, err = multistorage.UseSpecificStorage(targetStorage, folder)36}37tracelog.InfoLogger.Printf("Files will be read from storages: %v", multistorage.UsedStorages(folder))38if err != nil {39return nil, err40}41
42return NewFolderReader(folder), nil43}
44