Refactor Restore()
This commit refactors out the complexity of downloading ordered WAL files in parallel to a type called `WALDownloader`. This makes it easier to test the restore separately from the download.
This commit is contained in:
@@ -37,6 +37,7 @@ const (
|
||||
var (
|
||||
ErrNoGeneration = errors.New("no generation available")
|
||||
ErrNoSnapshots = errors.New("no snapshots available")
|
||||
ErrNoWALSegments = errors.New("no wal segments available")
|
||||
ErrChecksumMismatch = errors.New("invalid replica, checksum mismatch")
|
||||
)
|
||||
|
||||
@@ -440,6 +441,20 @@ func ParseOffset(s string) (int64, error) {
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// removeDBFiles deletes the database and related files (journal, shm, wal).
|
||||
func removeDBFiles(filename string) error {
|
||||
if err := os.Remove(filename); err != nil && !os.IsNotExist(err) {
|
||||
return fmt.Errorf("cannot delete database %q: %w", filename, err)
|
||||
} else if err := os.Remove(filename + "-journal"); err != nil && !os.IsNotExist(err) {
|
||||
return fmt.Errorf("cannot delete journal for %q: %w", filename, err)
|
||||
} else if err := os.Remove(filename + "-shm"); err != nil && !os.IsNotExist(err) {
|
||||
return fmt.Errorf("cannot delete shared memory for %q: %w", filename, err)
|
||||
} else if err := os.Remove(filename + "-wal"); err != nil && !os.IsNotExist(err) {
|
||||
return fmt.Errorf("cannot delete wal for %q: %w", filename, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// isHexChar returns true if ch is a lowercase hex character.
|
||||
func isHexChar(ch rune) bool {
|
||||
return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f')
|
||||
|
||||
Reference in New Issue
Block a user