Fix S3 Gateway Read Failover #8076 (#8087)

* fix s3 read failover #8076

- Implement cache invalidation in vidMapClient
- Add retry logic in shared PrepareStreamContentWithThrottler
- Update S3 Gateway to use FilerClient directly for invalidation support
- Remove obsolete simpleMasterClient struct

* improve observability for chunk re-lookup failures

Added a warning log when volume location re-lookup fails after cache invalidation in PrepareStreamContentWithThrottler.

* address code review feedback

- Prevent infinite retry loops by comparing old/new URLs before retry
- Update fileId2Url map after successful re-lookup for subsequent references
- Add comprehensive test coverage for failover logic
- Add tests for InvalidateCache method

* Fix: prevent data duplication in stream retry and improve VidMap robustness

* Cleanup: remove redundant check in InvalidateCache
This commit is contained in:
Chris Lu
2026-01-22 14:07:24 -08:00
committed by GitHub
parent 2e9a7e13e2
commit 066410dbd0
7 changed files with 476 additions and 22 deletions

View File

@@ -257,3 +257,15 @@ func (vc *vidMap) deleteEcLocation(vid uint32, location Location) {
}
}
}
func (vc *vidMap) deleteVid(vid uint32) {
if cachedMap := vc.cache.Load(); cachedMap != nil {
cachedMap.deleteVid(vid)
}
vc.Lock()
defer vc.Unlock()
delete(vc.vid2Locations, vid)
delete(vc.ecVid2Locations, vid)
}