From 11191053fd65cd74e998706402a8e310c84fea5c Mon Sep 17 00:00:00 2001 From: carlchen2 Date: Wed, 13 May 2026 10:11:23 +0800 Subject: [PATCH 1/2] feat: add bypass cache fallback for cluster validation in factory --- .../internal/actions/namespace/factory.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bcs-services/bcs-project-manager/internal/actions/namespace/factory.go b/bcs-services/bcs-project-manager/internal/actions/namespace/factory.go index 4d39b3499e..23e1f7ad12 100644 --- a/bcs-services/bcs-project-manager/internal/actions/namespace/factory.go +++ b/bcs-services/bcs-project-manager/internal/actions/namespace/factory.go @@ -58,6 +58,13 @@ func (f *NamespaceFactory) Action(ctx context.Context, clusterID, projectIDOrCod logging.Error("get project from db failed, err: %s", err.Error()) return nil, err } + // 若缓存信息校验失败,则绕过缓存重新拉取一次,防止集群状态刚切换时产生误判 + if cluster.GetProjectID() != project.ProjectID && !cluster.GetIsShared() { + if freshCluster, err := clustermanager.GetCluster(ctx, clusterID, false); err == nil && freshCluster != nil { + cluster = freshCluster + } + } + if cluster.GetProjectID() != project.ProjectID { if cluster.GetIsShared() { return shared.NewSharedNamespaceAction(f.model), nil From 1b58e41c07a86f7515c7600bfd0d3900bd3762bf Mon Sep 17 00:00:00 2001 From: carlchen2 Date: Wed, 13 May 2026 16:45:47 +0800 Subject: [PATCH 2/2] fix(cluster): update cache with Set instead of Add to ensure refresh --- .../internal/component/clustermanager/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bcs-services/bcs-project-manager/internal/component/clustermanager/client.go b/bcs-services/bcs-project-manager/internal/component/clustermanager/client.go index af765b42be..e6c08270a3 100644 --- a/bcs-services/bcs-project-manager/internal/component/clustermanager/client.go +++ b/bcs-services/bcs-project-manager/internal/component/clustermanager/client.go @@ -66,7 +66,7 @@ func GetCluster(ctx context.Context, clusterID string, isCache bool) (*clusterma logging.Error("get cluster from cluster manager failed, msg: %s", resp.GetMessage()) return nil, errors.New(resp.GetMessage()) } - _ = c.Add(fmt.Sprintf(CacheKeyClusterPrefix, clusterID), resp.GetData(), 5*time.Minute) + c.Set(fmt.Sprintf(CacheKeyClusterPrefix, clusterID), resp.GetData(), 5*time.Minute) return resp.GetData(), nil }