mirror of
https://github.com/restic/restic.git
synced 2025-03-26 20:31:08 +00:00
Merge pull request #5306 from MichaelEischer/sftp-better-errors
sftp: improve error messages
This commit is contained in:
commit
0b22d8dc64
@ -184,7 +184,7 @@ func (r *SFTP) mkdirAllDataSubdirs(ctx context.Context, nconn uint) error {
|
||||
if err := r.c.Mkdir(d); err == nil {
|
||||
return nil
|
||||
}
|
||||
return r.c.MkdirAll(d)
|
||||
return errors.Wrapf(r.c.MkdirAll(d), "MkdirAll %v", d)
|
||||
})
|
||||
}
|
||||
|
||||
@ -311,13 +311,17 @@ func (r *SFTP) Save(_ context.Context, h backend.Handle, rd backend.RewindReader
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "OpenFile %v", tmpFilename)
|
||||
}
|
||||
|
||||
// pkg/sftp doesn't allow creating with a mode.
|
||||
// Chmod while the file is still empty.
|
||||
if err == nil {
|
||||
err = f.Chmod(r.Modes.File)
|
||||
}
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "OpenFile")
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Chmod %v", tmpFilename)
|
||||
}
|
||||
}
|
||||
|
||||
defer func() {
|
||||
@ -338,18 +342,18 @@ func (r *SFTP) Save(_ context.Context, h backend.Handle, rd backend.RewindReader
|
||||
if err != nil {
|
||||
_ = f.Close()
|
||||
err = r.checkNoSpace(dirname, rd.Length(), err)
|
||||
return errors.Wrap(err, "Write")
|
||||
return errors.Wrapf(err, "Write %v", tmpFilename)
|
||||
}
|
||||
|
||||
// sanity check
|
||||
if wbytes != rd.Length() {
|
||||
_ = f.Close()
|
||||
return errors.Errorf("wrote %d bytes instead of the expected %d bytes", wbytes, rd.Length())
|
||||
return errors.Errorf("Write %v: wrote %d bytes instead of the expected %d bytes", tmpFilename, wbytes, rd.Length())
|
||||
}
|
||||
|
||||
err = f.Close()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Close")
|
||||
return errors.Wrapf(err, "Close %v", tmpFilename)
|
||||
}
|
||||
|
||||
// Prefer POSIX atomic rename if available.
|
||||
@ -358,7 +362,7 @@ func (r *SFTP) Save(_ context.Context, h backend.Handle, rd backend.RewindReader
|
||||
} else {
|
||||
err = r.c.Rename(tmpFilename, filename)
|
||||
}
|
||||
return errors.Wrap(err, "Rename")
|
||||
return errors.Wrapf(err, "Rename %v", tmpFilename)
|
||||
}
|
||||
|
||||
// checkNoSpace checks if err was likely caused by lack of available space
|
||||
@ -416,14 +420,14 @@ func (r *SFTP) Load(ctx context.Context, h backend.Handle, length int, offset in
|
||||
func (r *SFTP) openReader(_ context.Context, h backend.Handle, length int, offset int64) (io.ReadCloser, error) {
|
||||
f, err := r.c.Open(r.Filename(h))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrapf(err, "Open %v", r.Filename(h))
|
||||
}
|
||||
|
||||
if offset > 0 {
|
||||
_, err = f.Seek(offset, 0)
|
||||
if err != nil {
|
||||
_ = f.Close()
|
||||
return nil, err
|
||||
return nil, errors.Wrapf(err, "Seek %v", r.Filename(h))
|
||||
}
|
||||
}
|
||||
|
||||
@ -444,7 +448,7 @@ func (r *SFTP) Stat(_ context.Context, h backend.Handle) (backend.FileInfo, erro
|
||||
|
||||
fi, err := r.c.Lstat(r.Filename(h))
|
||||
if err != nil {
|
||||
return backend.FileInfo{}, errors.Wrap(err, "Lstat")
|
||||
return backend.FileInfo{}, errors.Wrapf(err, "Lstat %v", r.Filename(h))
|
||||
}
|
||||
|
||||
return backend.FileInfo{Size: fi.Size(), Name: h.Name}, nil
|
||||
@ -456,7 +460,7 @@ func (r *SFTP) Remove(_ context.Context, h backend.Handle) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return r.c.Remove(r.Filename(h))
|
||||
return errors.Wrapf(r.c.Remove(r.Filename(h)), "Remove %v", r.Filename(h))
|
||||
}
|
||||
|
||||
// List runs fn for each file in the backend which has the type t. When an
|
||||
@ -479,7 +483,7 @@ func (r *SFTP) List(ctx context.Context, t backend.FileType, fn func(backend.Fil
|
||||
debug.Log("ignoring non-existing directory")
|
||||
return nil
|
||||
}
|
||||
return walker.Err()
|
||||
return errors.Wrapf(walker.Err(), "Walk %v", basedir)
|
||||
}
|
||||
|
||||
if walker.Path() == basedir {
|
||||
@ -528,7 +532,7 @@ func (r *SFTP) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
err := r.c.Close()
|
||||
err := errors.Wrap(r.c.Close(), "Close")
|
||||
debug.Log("Close returned error %v", err)
|
||||
|
||||
// wait for closeTimeout before killing the process
|
||||
@ -550,7 +554,7 @@ func (r *SFTP) Close() error {
|
||||
func (r *SFTP) deleteRecursive(ctx context.Context, name string) error {
|
||||
entries, err := r.c.ReadDir(name)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "ReadDir(%v)", name)
|
||||
return errors.Wrapf(err, "ReadDir %v", name)
|
||||
}
|
||||
|
||||
for _, fi := range entries {
|
||||
@ -562,12 +566,12 @@ func (r *SFTP) deleteRecursive(ctx context.Context, name string) error {
|
||||
if fi.IsDir() {
|
||||
err := r.deleteRecursive(ctx, itemName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "ReadDir")
|
||||
return err
|
||||
}
|
||||
|
||||
err = r.c.RemoveDirectory(itemName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "RemoveDirectory")
|
||||
return errors.Wrapf(err, "RemoveDirectory %v", itemName)
|
||||
}
|
||||
|
||||
continue
|
||||
@ -575,7 +579,7 @@ func (r *SFTP) deleteRecursive(ctx context.Context, name string) error {
|
||||
|
||||
err := r.c.Remove(itemName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "ReadDir")
|
||||
return errors.Wrapf(err, "Remove %v", itemName)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user