From 1f0a1dbfc3089a8bf37ef8ce67136eb5ae1fd42e Mon Sep 17 00:00:00 2001 From: chihe Date: Thu, 24 Jul 2025 23:49:01 +0800 Subject: [PATCH] fix(flashNode):evict stream when file is warmed close:#1000150848 Signed-off-by: chihe --- remotecache/flashnode/cachengine/engine.go | 6 +++++- remotecache/flashnode/client.go | 1 + remotecache/flashnode/client_test.go | 4 ++++ remotecache/flashnode/manual_scanner.go | 4 ++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/remotecache/flashnode/cachengine/engine.go b/remotecache/flashnode/cachengine/engine.go index 75ea4f90a..57ee7c44b 100644 --- a/remotecache/flashnode/cachengine/engine.go +++ b/remotecache/flashnode/cachengine/engine.go @@ -766,8 +766,12 @@ func (c *CacheEngine) StartCachePrepareWorkers(flw *util.IoLimiter, prepareWorke for _, source := range r.Sources { reqSize += int(source.Size_) } - bg := stat.BeginStat() var err error + bg := stat.BeginStat() + _, err3 := c.PeekCacheBlock(GenCacheBlockKey(r.Volume, r.Inode, r.FixedFileOffset, r.Version)) + if err3 == nil { + continue + } err1 := flw.Run(reqSize, true, func() { bk := GenCacheBlockKey(r.Volume, r.Inode, r.FixedFileOffset, r.Version) if log.EnableDebug() { diff --git a/remotecache/flashnode/client.go b/remotecache/flashnode/client.go index 4fef26754..34737000b 100644 --- a/remotecache/flashnode/client.go +++ b/remotecache/flashnode/client.go @@ -13,6 +13,7 @@ type MetaWrapper interface { type ExtentApi interface { OpenStream(inode uint64, openForWrite, isCache bool, fullPath string) error CloseStream(inode uint64) error + EvictStream(inode uint64) error Read(inode uint64, data []byte, offset int, size int, storageClass uint32, isMigration bool) (read int, err error) Flush(inode uint64) error Close() error diff --git a/remotecache/flashnode/client_test.go b/remotecache/flashnode/client_test.go index c5e41f28b..4eabb20f7 100644 --- a/remotecache/flashnode/client_test.go +++ b/remotecache/flashnode/client_test.go @@ -117,6 +117,10 @@ func (m *MockExtentClient) CloseStream(inode uint64) error { return nil } +func (m *MockExtentClient) EvictStream(inode uint64) error { + return nil +} + func (m *MockExtentClient) Read(inode uint64, data []byte, offset int, size int, storageClass uint32, isMigration bool) (read int, err error) { if isMigration { for i := 0; i < size; i++ { diff --git a/remotecache/flashnode/manual_scanner.go b/remotecache/flashnode/manual_scanner.go index dc9e1fbfa..e2ae62c25 100644 --- a/remotecache/flashnode/manual_scanner.go +++ b/remotecache/flashnode/manual_scanner.go @@ -321,6 +321,10 @@ func (s *ManualScanner) warmUp(i *proto.ScanItem) error { log.LogWarnf("warmUp: ec OpenStream fail, inode(%v) err: %v", i.Inode, err) return err } + defer func() { + s.ec.CloseStream(i.Inode) + s.ec.EvictStream(i.Inode) + }() if err = s.ec.ForceRefreshExtentsCache(i.Inode); err != nil { log.LogWarnf("warmUp: ec ForceRefreshExtentsCache fail, inode(%v) err: %v", i.Inode, err) return err