Improve restorer debug log information

This commit is contained in:
kitone 2020-08-29 23:27:20 +02:00 committed by Michael Eischer
parent 295ddb9e57
commit 9d7f616190
1 changed files with 18 additions and 9 deletions

View File

@ -90,7 +90,7 @@ func (res *Restorer) traverseTree(ctx context.Context, target, location string,
} }
selectedForRestore, childMayBeSelected := res.SelectFilter(nodeLocation, nodeTarget, node) selectedForRestore, childMayBeSelected := res.SelectFilter(nodeLocation, nodeTarget, node)
debug.Log("SelectFilter returned %v %v", selectedForRestore, childMayBeSelected) debug.Log("SelectFilter returned %v %v for %q", selectedForRestore, childMayBeSelected, nodeLocation)
sanitizeError := func(err error) error { sanitizeError := func(err error) error {
if err != nil { if err != nil {
@ -198,24 +198,23 @@ func (res *Restorer) RestoreTo(ctx context.Context, dst string) error {
} }
} }
restoreNodeMetadata := func(node *restic.Node, target, location string) error {
return res.restoreNodeMetadataTo(node, target, location)
}
noop := func(node *restic.Node, target, location string) error { return nil }
idx := restic.NewHardlinkIndex() idx := restic.NewHardlinkIndex()
filerestorer := newFileRestorer(dst, res.repo.Backend().Load, res.repo.Key(), res.repo.Index().Lookup) filerestorer := newFileRestorer(dst, res.repo.Backend().Load, res.repo.Key(), res.repo.Index().Lookup)
debug.Log("first pass for %q", dst)
// first tree pass: create directories and collect all files to restore // first tree pass: create directories and collect all files to restore
err = res.traverseTree(ctx, dst, string(filepath.Separator), *res.sn.Tree, treeVisitor{ err = res.traverseTree(ctx, dst, string(filepath.Separator), *res.sn.Tree, treeVisitor{
enterDir: func(node *restic.Node, target, location string) error { enterDir: func(node *restic.Node, target, location string) error {
debug.Log("first pass, enterDir: mkdir %q, leaveDir should restore metadata", location)
// create dir with default permissions // create dir with default permissions
// #leaveDir restores dir metadata after visiting all children // #leaveDir restores dir metadata after visiting all children
return fs.MkdirAll(target, 0700) return fs.MkdirAll(target, 0700)
}, },
visitNode: func(node *restic.Node, target, location string) error { visitNode: func(node *restic.Node, target, location string) error {
debug.Log("first pass, visitNode: mkdir %q, leaveDir on second pass should restore metadata", location)
// create parent dir with default permissions // create parent dir with default permissions
// second pass #leaveDir restores dir metadata after visiting/restoring all children // second pass #leaveDir restores dir metadata after visiting/restoring all children
err := fs.MkdirAll(filepath.Dir(target), 0700) err := fs.MkdirAll(filepath.Dir(target), 0700)
@ -242,7 +241,9 @@ func (res *Restorer) RestoreTo(ctx context.Context, dst string) error {
return nil return nil
}, },
leaveDir: noop, leaveDir: func(node *restic.Node, target, location string) error {
return nil
},
}) })
if err != nil { if err != nil {
return err return err
@ -253,10 +254,15 @@ func (res *Restorer) RestoreTo(ctx context.Context, dst string) error {
return err return err
} }
debug.Log("second pass for %q", dst)
// second tree pass: restore special files and filesystem metadata // second tree pass: restore special files and filesystem metadata
return res.traverseTree(ctx, dst, string(filepath.Separator), *res.sn.Tree, treeVisitor{ return res.traverseTree(ctx, dst, string(filepath.Separator), *res.sn.Tree, treeVisitor{
enterDir: noop, enterDir: func(node *restic.Node, target, location string) error {
return nil
},
visitNode: func(node *restic.Node, target, location string) error { visitNode: func(node *restic.Node, target, location string) error {
debug.Log("second pass, visitNode: restore node %q", location)
if node.Type != "file" { if node.Type != "file" {
return res.restoreNodeTo(ctx, node, target, location) return res.restoreNodeTo(ctx, node, target, location)
} }
@ -275,7 +281,10 @@ func (res *Restorer) RestoreTo(ctx context.Context, dst string) error {
return res.restoreNodeMetadataTo(node, target, location) return res.restoreNodeMetadataTo(node, target, location)
}, },
leaveDir: restoreNodeMetadata, leaveDir: func(node *restic.Node, target, location string) error {
debug.Log("second pass, leaveDir restore metadata %q", location)
return res.restoreNodeMetadataTo(node, target, location)
},
}) })
} }