@@ -1213,7 +1213,7 @@ func (r *walReader) decodeDeletes(flag byte, b []byte, res *[]Stone) error {
12131213}
12141214
12151215// MigrateWAL rewrites the deprecated write ahead log into the new format.
1216- func MigrateWAL (logger log.Logger , dir string ) error {
1216+ func MigrateWAL (logger log.Logger , dir string ) ( err error ) {
12171217 // Detect whether we still have the old WAL.
12181218 fns , err := sequenceFiles (dir )
12191219 if err != nil && ! os .IsNotExist (err ) {
@@ -1227,6 +1227,8 @@ func MigrateWAL(logger log.Logger, dir string) error {
12271227 if err != nil {
12281228 return errors .Wrap (err , "check first existing segment" )
12291229 }
1230+ defer f .Close ()
1231+
12301232 var hdr [4 ]byte
12311233 if n , err := f .Read (hdr [:]); err != nil {
12321234 return errors .Wrap (err , "read header from first segment" )
@@ -1247,10 +1249,20 @@ func MigrateWAL(logger log.Logger, dir string) error {
12471249 if err != nil {
12481250 return errors .Wrap (err , "open new WAL" )
12491251 }
1252+ // We close it once already before as part of finalization.
1253+ // Do it once again in case of prior errors.
1254+ defer func () {
1255+ if err != nil {
1256+ repl .Close ()
1257+ }
1258+ }()
1259+
12501260 w , err := OpenSegmentWAL (dir , logger , time .Minute , nil )
12511261 if err != nil {
12521262 return errors .Wrap (err , "open old WAL" )
12531263 }
1264+ defer w .Close ()
1265+
12541266 rdr := w .Reader ()
12551267
12561268 var (
@@ -1283,9 +1295,6 @@ func MigrateWAL(logger log.Logger, dir string) error {
12831295 if err != nil {
12841296 return errors .Wrap (err , "write new entries" )
12851297 }
1286- if err := w .Close (); err != nil {
1287- return errors .Wrap (err , "close old WAL" )
1288- }
12891298 if err := repl .Close (); err != nil {
12901299 return errors .Wrap (err , "close new WAL" )
12911300 }
0 commit comments