wal-g

Форк
0
/
storage_folder_reader.go 
43 строки · 1.2 Кб
1
package internal
2

3
import (
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

12
type StorageFolderReader interface {
13
	ReadObject(objectRelativePath string) (io.ReadCloser, error)
14
	SubFolder(subFolderRelativePath string) StorageFolderReader
15
}
16

17
func NewFolderReader(folder storage.Folder) StorageFolderReader {
18
	return &FolderReaderImpl{folder}
19
}
20

21
type FolderReaderImpl struct {
22
	storage.Folder
23
}
24

25
func (fsr *FolderReaderImpl) SubFolder(subFolderRelativePath string) StorageFolderReader {
26
	return NewFolderReader(fsr.GetSubFolder(subFolderRelativePath))
27
}
28

29
func PrepareMultiStorageFolderReader(folder storage.Folder, targetStorage string) (StorageFolderReader, error) {
30
	folder = multistorage.SetPolicies(folder, policies.MergeAllStorages)
31
	var err error
32
	if targetStorage == "" {
33
		folder, err = multistorage.UseAllAliveStorages(folder)
34
	} else {
35
		folder, err = multistorage.UseSpecificStorage(targetStorage, folder)
36
	}
37
	tracelog.InfoLogger.Printf("Files will be read from storages: %v", multistorage.UsedStorages(folder))
38
	if err != nil {
39
		return nil, err
40
	}
41

42
	return NewFolderReader(folder), nil
43
}
44

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.