keycloak
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 関数 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.models.cache.infinispan.UserCacheManager クラス
org.keycloak.models.cache.infinispan.UserCacheManager の継承関係図
Inheritance graph
org.keycloak.models.cache.infinispan.UserCacheManager 連携図
Collaboration graph

公開メンバ関数

 UserCacheManager (Cache< String, Revisioned > cache, Cache< String, Long > revisions)
 
void clear ()
 
void userUpdatedInvalidations (String userId, String username, String email, String realmId, Set< String > invalidations)
 
void fullUserInvalidation (String userId, String username, String email, String realmId, boolean identityFederationEnabled, Map< String, String > federatedIdentities, Set< String > invalidations)
 
void federatedIdentityLinkUpdatedInvalidation (String userId, Set< String > invalidations)
 
void federatedIdentityLinkRemovedInvalidation (String userId, String realmId, String identityProviderId, String socialUserId, Set< String > invalidations)
 
void consentInvalidation (String userId, Set< String > invalidations)
 
void invalidateRealmUsers (String realm, Set< String > invalidations)
 
Cache< String, RevisionedgetCache ()
 
long getCurrentCounter ()
 
Long getCurrentRevision (String id)
 
void endRevisionBatch ()
 
Object invalidateObject (String id)
 
void addRevisioned (Revisioned object, long startupRevision)
 
void addRevisioned (Revisioned object, long startupRevision, long lifespan)
 
void addInvalidations (Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
 
void sendInvalidationEvents (KeycloakSession session, Collection< InvalidationEvent > invalidationEvents, String eventKey)
 
void invalidationEventReceived (InvalidationEvent event)
 

限定公開メンバ関数

Logger getLogger ()
 
void addInvalidationsFromEvent (InvalidationEvent event, Set< String > invalidations)
 
void bumpVersion (String id)
 

限定公開変数類

volatile boolean enabled = true
 
final Cache< String, Long > revisions
 
final Cache< String, Revisionedcache
 
final UpdateCounter counter = new UpdateCounter()
 

関数

public< T extends Revisioned > T get (String id, Class< T > type)
 

非公開メンバ関数

InRealmPredicate getInRealmPredicate (String realmId)
 

静的非公開変数類

static final Logger logger = Logger.getLogger(UserCacheManager.class)
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ UserCacheManager()

org.keycloak.models.cache.infinispan.UserCacheManager.UserCacheManager ( Cache< String, Revisioned cache,
Cache< String, Long >  revisions 
)
inline
39  {
40  super(cache, revisions);
41  }
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59
final Cache< String, Long > revisions
Definition: CacheManager.java:58

関数詳解

◆ addInvalidations()

void org.keycloak.models.cache.infinispan.CacheManager.addInvalidations ( Predicate< Map.Entry< String, Revisioned >>  predicate,
Set< String >  invalidations 
)
inlineinherited
186  {
187  Iterator<Map.Entry<String, Revisioned>> it = getEntryIterator(predicate);
188  while (it.hasNext()) {
189  invalidations.add(it.next().getKey());
190  }
191  }
Iterator< Map.Entry< String, Revisioned > > getEntryIterator(Predicate< Map.Entry< String, Revisioned >> predicate)
Definition: CacheManager.java:193

◆ addInvalidationsFromEvent()

void org.keycloak.models.cache.infinispan.UserCacheManager.addInvalidationsFromEvent ( InvalidationEvent  event,
Set< String >  invalidations 
)
inlineprotected
97  {
98  ((UserCacheInvalidationEvent) event).addInvalidations(this, invalidations);
99  }

◆ addRevisioned() [1/2]

void org.keycloak.models.cache.infinispan.CacheManager.addRevisioned ( Revisioned  object,
long  startupRevision 
)
inlineinherited
132  {
133  addRevisioned(object, startupRevision, -1);
134  }
void addRevisioned(Revisioned object, long startupRevision)
Definition: CacheManager.java:132

◆ addRevisioned() [2/2]

void org.keycloak.models.cache.infinispan.CacheManager.addRevisioned ( Revisioned  object,
long  startupRevision,
long  lifespan 
)
inlineinherited
136  {
137  //startRevisionBatch();
138  String id = object.getId();
139  try {
140  //revisions.getAdvancedCache().lock(id);
141  Long rev = revisions.get(id);
142  if (rev == null) {
143  rev = counter.current();
144  revisions.put(id, rev);
145  }
146  revisions.startBatch();
147  if (!revisions.getAdvancedCache().lock(id)) {
148  if (getLogger().isTraceEnabled()) {
149  getLogger().tracev("Could not obtain version lock: {0}", id);
150  }
151  return;
152  }
153  rev = revisions.get(id);
154  if (rev == null) {
155  return;
156  }
157  if (rev > startupRevision) { // revision is ahead transaction start. Other transaction updated in the meantime. Don't cache
158  if (getLogger().isTraceEnabled()) {
159  getLogger().tracev("Skipped cache. Current revision {0}, Transaction start revision {1}", object.getRevision(), startupRevision);
160  }
161  return;
162  }
163  if (rev.equals(object.getRevision())) {
164  cache.putForExternalRead(id, object);
165  return;
166  }
167  if (rev > object.getRevision()) { // revision is ahead, don't cache
168  if (getLogger().isTraceEnabled()) getLogger().tracev("Skipped cache. Object revision {0}, Cache revision {1}", object.getRevision(), rev);
169  return;
170  }
171  // revisions cache has a lower value than the object.revision, so update revision and add it to cache
172  revisions.put(id, object.getRevision());
173  if (lifespan < 0) cache.putForExternalRead(id, object);
174  else cache.putForExternalRead(id, object, lifespan, TimeUnit.MILLISECONDS);
175  } finally {
177  }
178 
179  }
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59
long current()
Definition: UpdateCounter.java:14
final Cache< String, Long > revisions
Definition: CacheManager.java:58
void endRevisionBatch()
Definition: CacheManager.java:86
final UpdateCounter counter
Definition: CacheManager.java:60

◆ bumpVersion()

void org.keycloak.models.cache.infinispan.CacheManager.bumpVersion ( String  id)
inlineprotectedinherited
127  {
128  long next = counter.next();
129  Object rev = revisions.put(id, next);
130  }
final Cache< String, Long > revisions
Definition: CacheManager.java:58
long next()
Definition: UpdateCounter.java:18
final UpdateCounter counter
Definition: CacheManager.java:60

◆ clear()

void org.keycloak.models.cache.infinispan.UserCacheManager.clear ( )
inline
49  {
50  cache.clear();
51  revisions.clear();
52  }
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59
final Cache< String, Long > revisions
Definition: CacheManager.java:58

◆ consentInvalidation()

void org.keycloak.models.cache.infinispan.UserCacheManager.consentInvalidation ( String  userId,
Set< String >  invalidations 
)
inline
91  {
92  invalidations.add(UserCacheSession.getConsentCacheKey(userId));
93  }

◆ endRevisionBatch()

void org.keycloak.models.cache.infinispan.CacheManager.endRevisionBatch ( )
inlineinherited
86  {
87  try {
88  revisions.endBatch(true);
89  } catch (Exception e) {
90  }
91 
92  }
final Cache< String, Long > revisions
Definition: CacheManager.java:58

◆ federatedIdentityLinkRemovedInvalidation()

void org.keycloak.models.cache.infinispan.UserCacheManager.federatedIdentityLinkRemovedInvalidation ( String  userId,
String  realmId,
String  identityProviderId,
String  socialUserId,
Set< String >  invalidations 
)
inline
84  {
85  invalidations.add(UserCacheSession.getFederatedIdentityLinksCacheKey(userId));
86  if (identityProviderId != null) {
87  invalidations.add(UserCacheSession.getUserByFederatedIdentityCacheKey(realmId, identityProviderId, socialUserId));
88  }
89  }

◆ federatedIdentityLinkUpdatedInvalidation()

void org.keycloak.models.cache.infinispan.UserCacheManager.federatedIdentityLinkUpdatedInvalidation ( String  userId,
Set< String >  invalidations 
)
inline
80  {
81  invalidations.add(UserCacheSession.getFederatedIdentityLinksCacheKey(userId));
82  }

◆ fullUserInvalidation()

void org.keycloak.models.cache.infinispan.UserCacheManager.fullUserInvalidation ( String  userId,
String  username,
String  email,
String  realmId,
boolean  identityFederationEnabled,
Map< String, String >  federatedIdentities,
Set< String >  invalidations 
)
inline
62  {
63  userUpdatedInvalidations(userId, username, email, realmId, invalidations);
64 
65  if (identityFederationEnabled) {
66  // Invalidate all keys for lookup this user by any identityProvider link
67  for (Map.Entry<String, String> socialLink : federatedIdentities.entrySet()) {
68  String fedIdentityCacheKey = UserCacheSession.getUserByFederatedIdentityCacheKey(realmId, socialLink.getKey(), socialLink.getValue());
69  invalidations.add(fedIdentityCacheKey);
70  }
71 
72  // Invalidate federationLinks of user
73  invalidations.add(UserCacheSession.getFederatedIdentityLinksCacheKey(userId));
74  }
75 
76  // Consents
77  invalidations.add(UserCacheSession.getConsentCacheKey(userId));
78  }
void userUpdatedInvalidations(String userId, String username, String email, String realmId, Set< String > invalidations)
Definition: UserCacheManager.java:55

◆ get()

public<T extends Revisioned> T org.keycloak.models.cache.infinispan.CacheManager.get ( String  id,
Class< T >  type 
)
inlinepackageinherited
94  {
95  Revisioned o = (Revisioned)cache.get(id);
96  if (o == null) {
97  return null;
98  }
99  Long rev = revisions.get(id);
100  if (rev == null) {
101  if (getLogger().isTraceEnabled()) {
102  getLogger().tracev("get() missing rev {0}", id);
103  }
104  return null;
105  }
106  long oRev = o.getRevision() == null ? -1L : o.getRevision().longValue();
107  if (rev > oRev) {
108  if (getLogger().isTraceEnabled()) {
109  getLogger().tracev("get() rev: {0} o.rev: {1}", rev.longValue(), oRev);
110  }
111  return null;
112  }
113  return o != null && type.isInstance(o) ? type.cast(o) : null;
114  }
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59
final Cache< String, Long > revisions
Definition: CacheManager.java:58

◆ getCache()

Cache<String, Revisioned> org.keycloak.models.cache.infinispan.CacheManager.getCache ( )
inlineinherited
69  {
70  return cache;
71  }
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59

◆ getCurrentCounter()

long org.keycloak.models.cache.infinispan.CacheManager.getCurrentCounter ( )
inlineinherited
73  {
74  return counter.current();
75  }
long current()
Definition: UpdateCounter.java:14
final UpdateCounter counter
Definition: CacheManager.java:60

◆ getCurrentRevision()

Long org.keycloak.models.cache.infinispan.CacheManager.getCurrentRevision ( String  id)
inlineinherited
77  {
78  Long revision = revisions.get(id);
79  if (revision == null) {
80  revision = counter.current();
81  }
82 
83  return revision;
84  }
long current()
Definition: UpdateCounter.java:14
final Cache< String, Long > revisions
Definition: CacheManager.java:58
final UpdateCounter counter
Definition: CacheManager.java:60

◆ getInRealmPredicate()

InRealmPredicate org.keycloak.models.cache.infinispan.UserCacheManager.getInRealmPredicate ( String  realmId)
inlineprivate
106  {
107  return InRealmPredicate.create().realm(realmId);
108  }

◆ getLogger()

Logger org.keycloak.models.cache.infinispan.UserCacheManager.getLogger ( )
inlineprotected
44  {
45  return logger;
46  }
static final Logger logger
Definition: UserCacheManager.java:35

◆ invalidateObject()

Object org.keycloak.models.cache.infinispan.CacheManager.invalidateObject ( String  id)
inlineinherited
116  {
117  Revisioned removed = (Revisioned)cache.remove(id);
118 
119  if (getLogger().isTraceEnabled()) {
120  getLogger().tracef("Removed key='%s', value='%s' from cache", id, removed);
121  }
122 
123  bumpVersion(id);
124  return removed;
125  }
void bumpVersion(String id)
Definition: CacheManager.java:127
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59

◆ invalidateRealmUsers()

void org.keycloak.models.cache.infinispan.UserCacheManager.invalidateRealmUsers ( String  realm,
Set< String >  invalidations 
)
inline
101  {
102  InRealmPredicate inRealmPredicate = getInRealmPredicate(realm);
103  addInvalidations(inRealmPredicate, invalidations);
104  }
InRealmPredicate getInRealmPredicate(String realmId)
Definition: UserCacheManager.java:106
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186

◆ invalidationEventReceived()

void org.keycloak.models.cache.infinispan.CacheManager.invalidationEventReceived ( InvalidationEvent  event)
inlineinherited
211  {
212  Set<String> invalidations = new HashSet<>();
213 
214  addInvalidationsFromEvent(event, invalidations);
215 
216  getLogger().debugf("[%s] Invalidating %d cache items after received event %s", cache.getCacheManager().getAddress(), invalidations.size(), event);
217 
218  for (String invalidation : invalidations) {
219  invalidateObject(invalidation);
220  }
221  }
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59
Object invalidateObject(String id)
Definition: CacheManager.java:116
abstract void addInvalidationsFromEvent(InvalidationEvent event, Set< String > invalidations)

◆ sendInvalidationEvents()

void org.keycloak.models.cache.infinispan.CacheManager.sendInvalidationEvents ( KeycloakSession  session,
Collection< InvalidationEvent invalidationEvents,
String  eventKey 
)
inlineinherited
201  {
202  ClusterProvider clusterProvider = session.getProvider(ClusterProvider.class);
203 
204  // Maybe add InvalidationEvent, which will be collection of all invalidationEvents? That will reduce cluster traffic even more.
205  for (InvalidationEvent event : invalidationEvents) {
206  clusterProvider.notify(eventKey, event, true, ClusterProvider.DCNotify.ALL_DCS);
207  }
208  }

◆ userUpdatedInvalidations()

void org.keycloak.models.cache.infinispan.UserCacheManager.userUpdatedInvalidations ( String  userId,
String  username,
String  email,
String  realmId,
Set< String >  invalidations 
)
inline
55  {
56  invalidations.add(userId);
57  if (email != null) invalidations.add(UserCacheSession.getUserByEmailCacheKey(realmId, email));
58  invalidations.add(UserCacheSession.getUserByUsernameCacheKey(realmId, username));
59  }

メンバ詳解

◆ cache

final Cache<String, Revisioned> org.keycloak.models.cache.infinispan.CacheManager.cache
protectedinherited

◆ counter

final UpdateCounter org.keycloak.models.cache.infinispan.CacheManager.counter = new UpdateCounter()
protectedinherited

◆ enabled

volatile boolean org.keycloak.models.cache.infinispan.UserCacheManager.enabled = true
protected

◆ logger

final Logger org.keycloak.models.cache.infinispan.UserCacheManager.logger = Logger.getLogger(UserCacheManager.class)
staticprivate

◆ revisions

final Cache<String, Long> org.keycloak.models.cache.infinispan.CacheManager.revisions
protectedinherited

このクラス詳解は次のファイルから抽出されました: