From f95e05f979c398ff7b429144107be7f59892f2dc Mon Sep 17 00:00:00 2001 From: congqixia Date: Wed, 12 Jul 2023 10:04:30 +0800 Subject: [PATCH] Fix indexnode memory leakage when update index fails (#25460) (#25478) Signed-off-by: Congqi Xia --- internal/indexnode/task.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/indexnode/task.go b/internal/indexnode/task.go index edc754d0c0..67670cb9b6 100644 --- a/internal/indexnode/task.go +++ b/internal/indexnode/task.go @@ -349,18 +349,23 @@ func (it *indexBuildTask) BuildIndex(ctx context.Context) error { // TODO:: save index params func (it *indexBuildTask) SaveIndexFiles(ctx context.Context) error { + gcIndex := func() { + if err := it.index.Delete(); err != nil { + log.Ctx(ctx).Error("IndexNode indexBuildTask Execute CIndexDelete failed", zap.Error(err)) + } + } indexFileKey2Size, err := it.index.UpLoad() + if err != nil { log.Ctx(ctx).Error("failed to upload index", zap.Error(err)) + gcIndex() return err } encodeIndexFileDur := it.tr.RecordSpan() metrics.IndexNodeEncodeIndexFileLatency.WithLabelValues(strconv.FormatInt(Params.IndexNodeCfg.GetNodeID(), 10)).Observe(float64(encodeIndexFileDur.Milliseconds())) // early release index for gc, and we can ensure that Delete is idempotent. - if err := it.index.Delete(); err != nil { - log.Ctx(ctx).Error("IndexNode indexBuildTask Execute CIndexDelete failed", zap.Error(err)) - } + gcIndex() // use serialized size before encoding it.serializedSize = 0