Compare commits
1 commit
master
...
fix/patch/
Author | SHA1 | Date | |
---|---|---|---|
2282032c9b |
2 changed files with 13 additions and 4 deletions
|
@ -47,7 +47,7 @@ type RangeProvider interface {
|
||||||
// GetRange reads an original object payload by the given range.
|
// 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,
|
// 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.
|
// 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 {
|
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 {
|
func (p *patcher) copyRange(ctx context.Context, rng *objectSDK.Range) error {
|
||||||
rdr := p.rangeProvider.GetRange(ctx, rng)
|
rdr := p.rangeProvider.GetRange(ctx, rng)
|
||||||
|
defer func() { _ = rdr.Close() }()
|
||||||
for {
|
for {
|
||||||
buffOrigPayload := make([]byte, p.readerBuffSize)
|
buffOrigPayload := make([]byte, p.readerBuffSize)
|
||||||
n, readErr := rdr.Read(buffOrigPayload)
|
n, readErr := rdr.Read(buffOrigPayload)
|
||||||
|
|
|
@ -41,14 +41,22 @@ type mockRangeProvider struct {
|
||||||
|
|
||||||
var _ RangeProvider = (*mockRangeProvider)(nil)
|
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()
|
offset := rng.GetOffset()
|
||||||
length := rng.GetLength()
|
length := rng.GetLength()
|
||||||
|
|
||||||
if length == 0 {
|
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) {
|
func newTestObject() (*objectSDK.Object, oid.Address) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue