From 8d39a697a4171da42e11f4c672322c45a1109919 Mon Sep 17 00:00:00 2001 From: lance6716 Date: Tue, 5 Mar 2024 16:13:35 +0800 Subject: [PATCH 1/2] global sort: fix forget to close writer when reader has error Signed-off-by: lance6716 --- br/pkg/lightning/backend/external/merge.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/br/pkg/lightning/backend/external/merge.go b/br/pkg/lightning/backend/external/merge.go index ae23fc599bfae..7ab397a6f8550 100644 --- a/br/pkg/lightning/backend/external/merge.go +++ b/br/pkg/lightning/backend/external/merge.go @@ -124,6 +124,18 @@ func mergeOverlappingFilesInternal( if err != nil { return nil } + defer func() { + err2 := writer.Close(ctx) + if err2 == nil { + return + } + + if err == nil { + err = err2 + } else { + logutil.Logger(ctx).Warn("close writer failed", zap.Error(err2)) + } + }() // currently use same goroutine to do read and write. The main advantage is // there's no KV copy and iter can reuse the buffer. @@ -138,5 +150,5 @@ func mergeOverlappingFilesInternal( return err } - return writer.Close(ctx) + return nil } From 0868d6586e66c28ec13b2aae331974d9bfcb6838 Mon Sep 17 00:00:00 2001 From: lance6716 Date: Tue, 5 Mar 2024 17:01:42 +0800 Subject: [PATCH 2/2] refine code Signed-off-by: lance6716 --- br/pkg/lightning/backend/external/merge.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/br/pkg/lightning/backend/external/merge.go b/br/pkg/lightning/backend/external/merge.go index 7ab397a6f8550..c4cce799d51ba 100644 --- a/br/pkg/lightning/backend/external/merge.go +++ b/br/pkg/lightning/backend/external/merge.go @@ -129,7 +129,7 @@ func mergeOverlappingFilesInternal( if err2 == nil { return } - + if err == nil { err = err2 } else { @@ -145,10 +145,5 @@ func mergeOverlappingFilesInternal( return err } } - err = iter.Error() - if err != nil { - return err - } - - return nil + return iter.Error() }