in internal/service/fetchsecret.go [9:49]
func (s *Server) FetchSecret(ctx context.Context, params *model.GetSecretParams) (string, error) {
secretId := params.SecretID
versionId := params.VersionID
versionStage := params.VersionStage
cacheKey := generateCacheKey(secretId, versionId, versionStage)
cacheValue, err := s.cacheStore.Get(ctx, cacheKey)
if err != nil {
s.loggerWrapper.Warn("get secret[%s] from cache err:%v.", params.SecretID, err)
}
var cacheSecret interface{}
var isExpired bool
if cacheValue != nil {
cacheSecret = cacheValue.(*cache.Item).GetValue()
isExpired = cacheValue.(*cache.Item).CheckExpired()
}
if cacheSecret != nil && !isExpired {
s.loggerWrapper.Info("get secret[%s] from cache success.", params.SecretID)
return cacheSecret.(string), nil
}
kmsSecret, err := s.kmsClient.GetSecretInfo(ctx, secretId, versionId, versionStage)
if err != nil {
s.loggerWrapper.Error("get secret[%s] from kms error:%v", params.SecretID, err)
// Ignore transient errors
if s.IgnoreTransientErrors && cacheSecret != nil && isIgnoreTransientErrors(err) {
s.loggerWrapper.Warn("get expired secret[%s] from cache.", params.SecretID)
return cacheSecret.(string), nil
}
return "", err
}
s.loggerWrapper.Info("get secret[%s] from kms.", params.SecretID)
err = s.cacheStore.Put(ctx, cacheKey, kmsSecret)
if err != nil {
s.loggerWrapper.Warn("put secret to cache err:%v", err)
}
return kmsSecret, nil
}