Compare commits

...

1 commit

Author SHA1 Message Date
2282032c9b [#XX] patcher: Add closer
Signed-off-by: Airat Arifullin <a.arifullin@yadro.com>
2024-11-27 13:22:13 +03:00
2 changed files with 13 additions and 4 deletions

View file

@ -47,7 +47,7 @@ type RangeProvider interface {
// GetRange reads an original object payload by the given range.
// The method returns io.Reader over the data range only. This means if the data is read out,
// then GetRange has to be invoked to provide reader over the next range.
GetRange(ctx context.Context, rng *objectSDK.Range) io.Reader
GetRange(ctx context.Context, rng *objectSDK.Range) io.ReadCloser
}
type patcher struct {
@ -170,6 +170,7 @@ func (p *patcher) Close(ctx context.Context) (PatchRes, error) {
func (p *patcher) copyRange(ctx context.Context, rng *objectSDK.Range) error {
rdr := p.rangeProvider.GetRange(ctx, rng)
defer func() { _ = rdr.Close() }()
for {
buffOrigPayload := make([]byte, p.readerBuffSize)
n, readErr := rdr.Read(buffOrigPayload)

View file

@ -41,14 +41,22 @@ type mockRangeProvider struct {
var _ RangeProvider = (*mockRangeProvider)(nil)
func (m *mockRangeProvider) GetRange(_ context.Context, rng *objectSDK.Range) io.Reader {
func (m *mockRangeProvider) GetRange(_ context.Context, rng *objectSDK.Range) io.ReadCloser {
offset := rng.GetOffset()
length := rng.GetLength()
if length == 0 {
return bytes.NewReader(m.originalObjectPayload[offset:])
return &readCloserImpl{bytes.NewReader(m.originalObjectPayload[offset:])}
}
return bytes.NewReader(m.originalObjectPayload[offset : offset+length])
return &readCloserImpl{bytes.NewReader(m.originalObjectPayload[offset : offset+length])}
}
type readCloserImpl struct {
*bytes.Reader
}
func (*readCloserImpl) Close() error {
return nil
}
func newTestObject() (*objectSDK.Object, oid.Address) {