diff --git a/internal/proxy/task_query.go b/internal/proxy/task_query.go index 52771c79ad..2cfdf3ffa2 100644 --- a/internal/proxy/task_query.go +++ b/internal/proxy/task_query.go @@ -336,6 +336,8 @@ func (t *queryTask) Execute(ctx context.Context) error { if err != nil { log.Warn("invalid shard leaders cache, updating shardleader caches and retry query", zap.Error(err)) + // invalidate cache first, since ctx may be canceled or timeout here + globalMetaCache.ClearShards(t.collectionName) err = executeQuery(WithoutCache) } if err != nil { diff --git a/internal/proxy/task_search.go b/internal/proxy/task_search.go index d2158128fa..111c675205 100644 --- a/internal/proxy/task_search.go +++ b/internal/proxy/task_search.go @@ -410,6 +410,8 @@ func (t *searchTask) Execute(ctx context.Context) error { if err != nil { log.Warn("first search failed, updating shardleader caches and retry search", zap.Error(err)) + // invalidate cache first, since ctx may be canceled or timeout here + globalMetaCache.ClearShards(t.collectionName) err = executeSearch(WithoutCache) } if err != nil { diff --git a/internal/proxy/task_statistic.go b/internal/proxy/task_statistic.go index 02168ba934..dc3c61d056 100644 --- a/internal/proxy/task_statistic.go +++ b/internal/proxy/task_statistic.go @@ -285,6 +285,8 @@ func (g *getStatisticsTask) getStatisticsFromQueryNode(ctx context.Context) erro if errors.Is(err, errInvalidShardLeaders) || funcutil.IsGrpcErr(err) || errors.Is(err, grpcclient.ErrConnect) { log.Warn("first get statistics failed, updating shard leader caches and retry", zap.Error(err)) + // invalidate cache first, since ctx may be canceled or timeout here + globalMetaCache.ClearShards(g.collectionName) err = executeGetStatistics(WithoutCache) } if err != nil {