From 10e03e595db5b5e48426dd3c624ccfd8981f7e54 Mon Sep 17 00:00:00 2001 From: frankyang Date: Tue, 21 Nov 2023 17:50:18 +0800 Subject: [PATCH] fix bug that gen layer tar contains duplicated files Signed-off-by: frankyang --- cache/blobs_linux.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cache/blobs_linux.go b/cache/blobs_linux.go index 07c5bcffc..1ea5cbbf0 100644 --- a/cache/blobs_linux.go +++ b/cache/blobs_linux.go @@ -43,14 +43,27 @@ func (sr *immutableRef) tryComputeOverlayBlob(ctx context.Context, lower, upper if err != nil { return emptyDesc, false, errors.Wrap(err, "failed to open writer") } + defer func() { if cw != nil { + // after commit success cw will be set to nil, if cw isn't nil, error + // happened before commit, we should abort this ingest, and because the + // error may incured by ctx cancel, use a new context here. And since + // cm.Close will unlock this ref in the content store, we invoke abort + // to remove the ingest root in advance. + if aerr := sr.cm.ContentStore.Abort(context.Background(), ref); aerr != nil { + bklog.G(ctx).WithError(aerr).Warnf("failed to abort writer %q", ref) + } if cerr := cw.Close(); cerr != nil { bklog.G(ctx).WithError(cerr).Warnf("failed to close writer %q", ref) } } }() + if err = cw.Truncate(0); err != nil { + return emptyDesc, false, errors.Wrap(err, "failed to truncate writer") + } + bufW := bufio.NewWriterSize(cw, 128*1024) var labels map[string]string if compressorFunc != nil {