From 780abc3b3b30ce38f4939dc507b2a1c3f0f21097 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 13 Apr 2023 22:52:45 -0700 Subject: [PATCH] lib/fs: rename SymlinkRelative to MustSymlinkRelative Callers of this function log the returned error and then exit. Let's log the error with the call stack inside the function itself. This simplifies the code at callers' side, while leaving the same level of debuggability in case of errors. --- lib/fs/fs.go | 10 ++++++---- lib/storage/storage.go | 15 ++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/fs/fs.go b/lib/fs/fs.go index 726a123de7..5c4bb3ed46 100644 --- a/lib/fs/fs.go +++ b/lib/fs/fs.go @@ -288,14 +288,16 @@ func IsDirOrSymlink(de os.DirEntry) bool { return de.IsDir() || (de.Type()&os.ModeSymlink == os.ModeSymlink) } -// SymlinkRelative creates relative symlink for srcPath in dstPath. -func SymlinkRelative(srcPath, dstPath string) error { +// MustSymlinkRelative creates relative symlink for srcPath in dstPath. +func MustSymlinkRelative(srcPath, dstPath string) { baseDir := filepath.Dir(dstPath) srcPathRel, err := filepath.Rel(baseDir, srcPath) if err != nil { - return fmt.Errorf("cannot make relative path for srcPath=%q: %w", srcPath, err) + logger.Panicf("FATAL: cannot make relative path for srcPath=%q: %s", srcPath, err) + } + if err := os.Symlink(srcPathRel, dstPath); err != nil { + logger.Panicf("FATAL: cannot make a symlink: %s", err) } - return os.Symlink(srcPathRel, dstPath) } // CopyDirectory copies all the files in srcPath to dstPath. diff --git a/lib/storage/storage.go b/lib/storage/storage.go index 3c7277ef0c..d7dbcef5fd 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -330,14 +330,13 @@ func (s *Storage) CreateSnapshot(deadline uint64) (string, error) { dstDataDir := filepath.Join(dstDir, dataDirname) fs.MustMkdirFailIfExist(dstDataDir) + dstSmallDir := filepath.Join(dstDataDir, smallDirname) - if err := fs.SymlinkRelative(smallDir, dstSmallDir); err != nil { - return "", fmt.Errorf("cannot create symlink from %q to %q: %w", smallDir, dstSmallDir, err) - } + fs.MustSymlinkRelative(smallDir, dstSmallDir) + dstBigDir := filepath.Join(dstDataDir, bigDirname) - if err := fs.SymlinkRelative(bigDir, dstBigDir); err != nil { - return "", fmt.Errorf("cannot create symlink from %q to %q: %w", bigDir, dstBigDir, err) - } + fs.MustSymlinkRelative(bigDir, dstBigDir) + fs.MustSyncPath(dstDataDir) srcMetadataDir := filepath.Join(srcDir, metadataDirname) @@ -362,9 +361,7 @@ func (s *Storage) CreateSnapshot(deadline uint64) (string, error) { return "", fmt.Errorf("cannot create prev indexDB snapshot: %w", err) } dstIdbDir := filepath.Join(dstDir, indexdbDirname) - if err := fs.SymlinkRelative(idbSnapshot, dstIdbDir); err != nil { - return "", fmt.Errorf("cannot create symlink from %q to %q: %w", idbSnapshot, dstIdbDir, err) - } + fs.MustSymlinkRelative(idbSnapshot, dstIdbDir) fs.MustSyncPath(dstDir)