ftp: fix multi-thread copy
Before this change multi-thread copies using the FTP backend used to error with 551 Error reading file This was caused by a spurious error being reported which this code silences. Fixes #7532 See #3942
This commit is contained in:
parent
bb679a9def
commit
d977fa25fa
2 changed files with 15 additions and 5 deletions
|
@ -298,10 +298,6 @@ backends:
|
||||||
fastlist: false
|
fastlist: false
|
||||||
- backend: "ftp"
|
- backend: "ftp"
|
||||||
remote: "TestFTPRclone:"
|
remote: "TestFTPRclone:"
|
||||||
ignore:
|
|
||||||
- "TestMultithreadCopy/{size:131071_streams:2}"
|
|
||||||
- "TestMultithreadCopy/{size:131072_streams:2}"
|
|
||||||
- "TestMultithreadCopy/{size:131073_streams:2}"
|
|
||||||
fastlist: false
|
fastlist: false
|
||||||
- backend: "box"
|
- backend: "box"
|
||||||
remote: "TestBox:"
|
remote: "TestBox:"
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package readers
|
package readers
|
||||||
|
|
||||||
import "io"
|
import (
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/rclone/rclone/fs"
|
||||||
|
)
|
||||||
|
|
||||||
// LimitedReadCloser adds io.Closer to io.LimitedReader. Create one with NewLimitedReadCloser
|
// LimitedReadCloser adds io.Closer to io.LimitedReader. Create one with NewLimitedReadCloser
|
||||||
type LimitedReadCloser struct {
|
type LimitedReadCloser struct {
|
||||||
|
@ -8,6 +12,16 @@ type LimitedReadCloser struct {
|
||||||
io.Closer
|
io.Closer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close closes the underlying io.Closer. The error, if any, will be ignored if data is read completely
|
||||||
|
func (lrc *LimitedReadCloser) Close() error {
|
||||||
|
err := lrc.Closer.Close()
|
||||||
|
if err != nil && lrc.N == 0 {
|
||||||
|
fs.Debugf(nil, "ignoring close error because we already got all the data")
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// NewLimitedReadCloser returns a LimitedReadCloser wrapping rc to
|
// NewLimitedReadCloser returns a LimitedReadCloser wrapping rc to
|
||||||
// limit it to reading limit bytes. If limit < 0 then it does not
|
// limit it to reading limit bytes. If limit < 0 then it does not
|
||||||
// wrap rc, it just returns it.
|
// wrap rc, it just returns it.
|
||||||
|
|
Loading…
Reference in a new issue