rgw::keystone::TokenEnvelope& token)
{
std::lock_guard l{lock};
- return find_locked(token_id, token);
+ return find_locked(token_id, token, tokens, tokens_lru);
}
-bool TokenCache::find_locked(const std::string& token_id,
- rgw::keystone::TokenEnvelope& token)
+bool TokenCache::find_service(const std::string& token_id,
+ rgw::keystone::TokenEnvelope& token)
+{
+ std::lock_guard l{lock};
+ return find_locked(token_id, token, service_tokens, service_tokens_lru);
+}
+
+bool TokenCache::find_locked(const std::string& token_id, rgw::keystone::TokenEnvelope& token,
+ std::map<std::string, token_entry>& tokens, std::list<std::string>& tokens_lru)
{
ceph_assert(ceph_mutex_is_locked_by_me(lock));
map<string, token_entry>::iterator iter = tokens.find(token_id);
{
std::lock_guard l{lock};
- return find_locked(admin_token_id, token);
+ return find_locked(admin_token_id, token, tokens, tokens_lru);
}
bool TokenCache::find_barbican(rgw::keystone::TokenEnvelope& token)
{
std::lock_guard l{lock};
- return find_locked(barbican_token_id, token);
+ return find_locked(barbican_token_id, token, tokens, tokens_lru);
}
void TokenCache::add(const std::string& token_id,
const rgw::keystone::TokenEnvelope& token)
{
std::lock_guard l{lock};
- add_locked(token_id, token);
+ add_locked(token_id, token, tokens, tokens_lru);
+}
+
+void TokenCache::add_service(const std::string& token_id,
+ const rgw::keystone::TokenEnvelope& token)
+{
+ std::lock_guard l{lock};
+ add_locked(token_id, token, service_tokens, service_tokens_lru);
}
-void TokenCache::add_locked(const std::string& token_id,
- const rgw::keystone::TokenEnvelope& token)
+void TokenCache::add_locked(const std::string& token_id, const rgw::keystone::TokenEnvelope& token,
+ std::map<std::string, token_entry>& tokens, std::list<std::string>& tokens_lru)
{
ceph_assert(ceph_mutex_is_locked_by_me(lock));
map<string, token_entry>::iterator iter = tokens.find(token_id);
std::lock_guard l{lock};
rgw_get_token_id(token.token.id, admin_token_id);
- add_locked(admin_token_id, token);
+ add_locked(admin_token_id, token, tokens, tokens_lru);
}
void TokenCache::add_barbican(const rgw::keystone::TokenEnvelope& token)
std::lock_guard l{lock};
rgw_get_token_id(token.token.id, barbican_token_id);
- add_locked(barbican_token_id, token);
+ add_locked(barbican_token_id, token, tokens, tokens_lru);
}
void TokenCache::invalidate(const DoutPrefixProvider *dpp, const std::string& token_id)
std::string admin_token_id;
std::string barbican_token_id;
std::map<std::string, token_entry> tokens;
+ std::map<std::string, token_entry> service_tokens;
std::list<std::string> tokens_lru;
+ std::list<std::string> service_tokens_lru;
ceph::mutex lock = ceph::make_mutex("rgw::keystone::TokenCache");
}
bool find(const std::string& token_id, TokenEnvelope& token);
+ bool find_service(const std::string& token_id, TokenEnvelope& token);
boost::optional<TokenEnvelope> find(const std::string& token_id) {
TokenEnvelope token_envlp;
if (find(token_id, token_envlp)) {
}
return boost::none;
}
+ boost::optional<TokenEnvelope> find_service(const std::string& token_id) {
+ TokenEnvelope token_envlp;
+ if (find_service(token_id, token_envlp)) {
+ return token_envlp;
+ }
+ return boost::none;
+ }
bool find_admin(TokenEnvelope& token);
bool find_barbican(TokenEnvelope& token);
void add(const std::string& token_id, const TokenEnvelope& token);
+ void add_service(const std::string& token_id, const TokenEnvelope& token);
void add_admin(const TokenEnvelope& token);
void add_barbican(const TokenEnvelope& token);
void invalidate(const DoutPrefixProvider *dpp, const std::string& token_id);
bool going_down() const;
private:
- void add_locked(const std::string& token_id, const TokenEnvelope& token);
- bool find_locked(const std::string& token_id, TokenEnvelope& token);
-
+ void add_locked(const std::string& token_id, const TokenEnvelope& token,
+ std::map<std::string, token_entry>& tokens, std::list<std::string>& tokens_lru);
+ bool find_locked(const std::string& token_id, TokenEnvelope& token,
+ std::map<std::string, token_entry>& tokens, std::list<std::string>& tokens_lru);
};