Skip to content

Commit 0701543

Browse files
addressed review comments. used named error and joined error to return final error
1 parent 849fb88 commit 0701543

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

migration.go

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package migrate
22

33
import (
44
"bufio"
5+
"errors"
56
"fmt"
67
"io"
78
"time"
@@ -118,7 +119,7 @@ func (m *Migration) LogString() string {
118119

119120
// Buffer buffers Body up to BufferSize.
120121
// Calling this function blocks. Call with goroutine.
121-
func (m *Migration) Buffer() error {
122+
func (m *Migration) Buffer() (err error) {
122123
if m.Body == nil {
123124
return nil
124125
}
@@ -127,41 +128,41 @@ func (m *Migration) Buffer() error {
127128

128129
b := bufio.NewReaderSize(m.Body, int(m.BufferSize))
129130

130-
var bufferWriterCloseErr error
131-
// Always close bufferWriter, even on error, to prevent deadlocks.
132-
// This lets Buffer know that there is no more data coming.
131+
// defer closing buffer writer and body.
132+
// defer blocks run in reverse order
133+
134+
// close the Body.
135+
defer func() {
136+
if cerr := m.Body.Close(); cerr != nil {
137+
err = errors.Join(err, cerr)
138+
}
139+
}()
140+
141+
// always close bufferWriter, even on error, to prevent deadlocks.
142+
// this lets Buffer know that there is no more data coming.
133143
defer func() {
134-
if err := m.bufferWriter.Close(); err != nil && bufferWriterCloseErr == nil {
135-
bufferWriterCloseErr = err
144+
if cerr := m.bufferWriter.Close(); cerr != nil {
145+
err = errors.Join(err, cerr)
136146
}
137147
}()
138148

139149
// start reading from body, peek won't move the read pointer though
140150
// poor man's solution?
141-
if _, err := b.Peek(int(m.BufferSize)); err != nil && err != io.EOF {
142-
return err
151+
if _, perr := b.Peek(int(m.BufferSize)); perr != nil && perr != io.EOF {
152+
return perr
143153
}
144154

145155
m.FinishedBuffering = time.Now()
146156

147157
// write to bufferWriter, this will block until
148158
// something starts reading from m.Buffer
149-
n, err := b.WriteTo(m.bufferWriter)
150-
if err != nil {
151-
return err
159+
n, werr := b.WriteTo(m.bufferWriter)
160+
if werr != nil {
161+
return werr
152162
}
153163

154164
m.FinishedReading = time.Now()
155165
m.BytesRead = n
156166

157-
// it's safe to close the Body too
158-
if err := m.Body.Close(); err != nil {
159-
return err
160-
}
161-
162-
if bufferWriterCloseErr != nil {
163-
return bufferWriterCloseErr
164-
}
165-
166167
return nil
167168
}

0 commit comments

Comments
 (0)