From a7547b999001536902d70c226384b505be12431d Mon Sep 17 00:00:00 2001 From: Maycon Santos Date: Wed, 7 Feb 2024 16:14:30 +0100 Subject: [PATCH] Get cache from external cache when refresh fails (#1537) In some cases, when the refresh cache fails, we should try to get the cache from the external cache obj. This may happen if the IDP is not responsive between storing metadata and refreshing the cache --- management/server/account.go | 15 +++++++++++++++ management/server/user.go | 12 ------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/management/server/account.go b/management/server/account.go index e1a739229..6af0a39d6 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -1223,6 +1223,21 @@ func (am *DefaultAccountManager) lookupUserInCache(userID string, account *Accou } } + user, err := account.FindUser(userID) + if err != nil { + log.Errorf("failed finding user %s in account %s", userID, account.Id) + return nil, err + } + + key := user.IntegrationReference.CacheKey(account.Id, userID) + ud, err := am.externalCacheManager.Get(am.ctx, key) + if err == nil { + log.Errorf("failed to get externalCache for key: %s, error: %s", key, err) + return ud, status.Errorf(status.NotFound, "user %s not found in the IdP", userID) + } + + log.Infof("user %s not found in any cache", userID) + return nil, nil //nolint:nilnil } diff --git a/management/server/user.go b/management/server/user.go index b2e273d9a..651488f2b 100644 --- a/management/server/user.go +++ b/management/server/user.go @@ -890,18 +890,6 @@ func (am *DefaultAccountManager) SaveOrAddUser(accountID, initiatorUserID string if err != nil { return nil, err } - if userData == nil { - // lets check external cache - key := newUser.IntegrationReference.CacheKey(account.Id, newUser.Id) - log.Debugf("looking up user %s of account %s in external cache", key, account.Id) - info, err := am.externalCacheManager.Get(am.ctx, key) - if err != nil { - log.Infof("Get ExternalCache for key: %s, error: %s", key, err) - return nil, status.Errorf(status.NotFound, "user %s not found in the IdP", newUser.Id) - } - - return newUser.ToUserInfo(info) - } return newUser.ToUserInfo(userData) } return newUser.ToUserInfo(nil)