7
"github.com/wal-g/wal-g/utility"
9
"github.com/wal-g/wal-g/pkg/storages/storage"
12
func NewUnexpectedEOFLimitReader(readCloser io.ReadCloser, maxRead int64) io.ReadCloser {
13
return &UnexpectedEOFLimitReader{
19
type UnexpectedEOFLimitReader struct {
24
func (u *UnexpectedEOFLimitReader) Read(p []byte) (n int, err error) {
26
return 0, io.ErrUnexpectedEOF
28
unexpectedEOF := false
29
if int64(len(p)) > u.left {
33
n, err = u.source.Read(p)
35
if unexpectedEOF && err == nil {
36
err = io.ErrUnexpectedEOF
41
func (u *UnexpectedEOFLimitReader) Close() error {
42
return u.source.Close()
45
func NewNetworkErrorFolder(sourceFolder storage.Folder, networkErrorAfterByteSize int) storage.Folder {
48
maxReadSize: int64(networkErrorAfterByteSize),
49
readFromFile: make(map[string]*int64),
53
type TestFolder struct {
56
readFromFile map[string]*int64
60
func (tf *TestFolder) ReadObject(path string) (io.ReadCloser, error) {
61
reader, err := tf.Folder.ReadObject(path)
62
if tf.maxReadSize != 0 {
64
defer tf.mutex.Unlock()
65
if _, ok := tf.readFromFile[path]; !ok {
66
tf.readFromFile[path] = new(int64)
68
reader = utility.NewWithSizeReadCloser(reader, tf.readFromFile[path])
69
reader = NewUnexpectedEOFLimitReader(reader, *tf.readFromFile[path]+tf.maxReadSize)