Skip to content

Commit 74ce1fa

Browse files
authored
Merge pull request #152872 from kev-cao/backport25.3-150935
release-25.3: backupsink: fix a resource leak in backupsink
2 parents 14ed85c + 7434ac0 commit 74ce1fa

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

pkg/backup/backupsink/file_sst_sink.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,13 @@ func (s *FileSSTSink) Close() error {
231231
if s.cancel != nil {
232232
s.cancel()
233233
}
234+
235+
var err error
234236
if s.out != nil {
235-
return s.out.Close()
237+
err = s.out.Close()
236238
}
237239
s.sst.Close()
238-
return nil
240+
return err
239241
}
240242

241243
func (s *FileSSTSink) Flush(ctx context.Context) error {

pkg/backup/backupsink/file_sst_sink_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,25 @@ func TestFileSSTSinkWrite(t *testing.T) {
441441
}
442442
}
443443

444+
func TestFileSSTSink_CloseLeakRegression(t *testing.T) {
445+
defer leaktest.AfterTest(t)()
446+
defer log.Scope(t).Close(t)
447+
448+
// This test is a regression unit test for a resource leak in
449+
// FileSSTSink.Close. Previously, if Close was called with an in-complete
450+
// flush, it would leak the SST writer.
451+
452+
ctx := context.Background()
453+
st := cluster.MakeTestingClusterSettings()
454+
sink, _ := fileSSTSinkTestSetup(t, st, execinfrapb.ElidePrefix_None)
455+
456+
// Write a span to initialize s.out and s.sst.
457+
es := newExportedSpanBuilder("a", "b").withKVs([]kvAndTS{{key: "a", timestamp: 1}}).build()
458+
_, err := sink.Write(ctx, es)
459+
require.NoError(t, err)
460+
_ = sink.Close()
461+
}
462+
444463
func s2k(s string) roachpb.Key {
445464
tbl := 1
446465
k := []byte(s)

0 commit comments

Comments
 (0)