1
0
Fork 0

Wrap some upgrading in function to trigger defer

This will ensure all file handles are closed before attempting to
rename or remove directories.
master
Philip O'Toole 1 year ago
parent 0aac0c8928
commit 4f076202c0

@ -89,6 +89,8 @@ func Upgrade(old, new string, logger *log.Logger) error {
return fmt.Errorf("failed to write new snapshot meta file: %s", err)
}
// Ensure all file handles are closed before any dircetory is moved or removed.
if err := func() error {
// Write SQLite data into generation directory, as the base SQLite file.
newSqliteBasePath := filepath.Join(newGenerationDir, baseSqliteFile)
newSqliteFd, err := os.Create(newSqliteBasePath)
@ -123,6 +125,10 @@ func Upgrade(old, new string, logger *log.Logger) error {
if !db.IsValidSQLiteFile(newSqliteBasePath) {
return fmt.Errorf("migrated SQLite file %s is not valid", newSqliteBasePath)
}
return nil
}(); err != nil {
return err
}
// Move the upgraded snapshot directory into place.
if err := os.Rename(newTmpDir, new); err != nil {

Loading…
Cancel
Save