From 60a526cab70ec049e3991d45e6879690f1e0d21a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jarkko=20P=C3=B6yry?= Date: Tue, 7 Oct 2025 22:30:27 +0300 Subject: [PATCH] fix(compactor): fix fd leak after failed index load --- .../shipper/indexshipper/tsdb/compactor.go | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/pkg/storage/stores/shipper/indexshipper/tsdb/compactor.go b/pkg/storage/stores/shipper/indexshipper/tsdb/compactor.go index ebff69810647c..2534217fa1bc2 100644 --- a/pkg/storage/stores/shipper/indexshipper/tsdb/compactor.go +++ b/pkg/storage/stores/shipper/indexshipper/tsdb/compactor.go @@ -115,22 +115,27 @@ func (t *tableCompactor) CompactTable() error { return nil }) - if err != nil { - return err - } defer func() { for i, idx := range multiTenantIndices { - if err := idx.Close(); err != nil { - level.Error(t.commonIndexSet.GetLogger()).Log("msg", "failed to close multi-tenant source index file", "path", downloadPaths[i], "err", err) + // indices or paths may not be set in case of partially failed download and open + if idx != nil { + if err := idx.Close(); err != nil { + level.Error(t.commonIndexSet.GetLogger()).Log("msg", "failed to close multi-tenant source index file", "path", downloadPaths[i], "err", err) + } } - - if err := os.Remove(downloadPaths[i]); err != nil { - level.Error(t.commonIndexSet.GetLogger()).Log("msg", "failed to remove downloaded index file", "path", downloadPaths[i], "err", err) + if downloadPaths[i] != "" { + if err := os.Remove(downloadPaths[i]); err != nil { + level.Error(t.commonIndexSet.GetLogger()).Log("msg", "failed to remove downloaded index file", "path", downloadPaths[i], "err", err) + } } } }() + if err != nil { + return err + } + var multiTenantIndex Index = NoopIndex{} if len(multiTenantIndices) > 0 { multiTenantIndex = NewMultiIndex(IndexSlice(multiTenantIndices))