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

公開メンバ関数

 RealmCacheManager (Cache< String, Revisioned > cache, Cache< String, Long > revisions)
 
void realmUpdated (String id, String name, Set< String > invalidations)
 
void realmRemoval (String id, String name, Set< String > invalidations)
 
void roleAdded (String roleContainerId, Set< String > invalidations)
 
void roleUpdated (String roleContainerId, String roleName, Set< String > invalidations)
 
void roleRemoval (String id, String roleName, String roleContainerId, Set< String > invalidations)
 
void groupQueriesInvalidations (String realmId, Set< String > invalidations)
 
void clientAdded (String realmId, String clientUUID, String clientId, Set< String > invalidations)
 
void clientUpdated (String realmId, String clientUuid, String clientId, Set< String > invalidations)
 
void clientRemoval (String realmId, String clientUUID, String clientId, 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 clear ()
 
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)
 

限定公開変数類

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)
 

静的非公開変数類

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

詳解

著者
Stian Thorgersen

構築子と解体子

◆ RealmCacheManager()

org.keycloak.models.cache.infinispan.RealmCacheManager.RealmCacheManager ( Cache< String, Revisioned cache,
Cache< String, Long >  revisions 
)
inline
44  {
45  super(cache, revisions);
46  }
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.RealmCacheManager.addInvalidationsFromEvent ( InvalidationEvent  event,
Set< String >  invalidations 
)
inlineprotected
99  {
100  invalidations.add(event.getId());
101 
102  ((RealmCacheInvalidationEvent) event).addInvalidations(this, invalidations);
103  }

◆ 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.CacheManager.clear ( )
inlineinherited
181  {
182  cache.clear();
183  revisions.clear();
184  }
final Cache< String, Revisioned > cache
Definition: CacheManager.java:59
final Cache< String, Long > revisions
Definition: CacheManager.java:58

◆ clientAdded()

void org.keycloak.models.cache.infinispan.RealmCacheManager.clientAdded ( String  realmId,
String  clientUUID,
String  clientId,
Set< String >  invalidations 
)
inline
81  {
82  invalidations.add(RealmCacheSession.getRealmClientsQueryCacheKey(realmId));
83  }

◆ clientRemoval()

void org.keycloak.models.cache.infinispan.RealmCacheManager.clientRemoval ( String  realmId,
String  clientUUID,
String  clientId,
Set< String >  invalidations 
)
inline
90  {
91  invalidations.add(RealmCacheSession.getRealmClientsQueryCacheKey(realmId));
92  invalidations.add(RealmCacheSession.getClientByClientIdCacheKey(clientId, realmId));
93 
94  addInvalidations(InClientPredicate.create().client(clientUUID), invalidations);
95  }
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186

◆ clientUpdated()

void org.keycloak.models.cache.infinispan.RealmCacheManager.clientUpdated ( String  realmId,
String  clientUuid,
String  clientId,
Set< String >  invalidations 
)
inline
85  {
86  invalidations.add(RealmCacheSession.getClientByClientIdCacheKey(clientId, realmId));
87  }

◆ 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

◆ 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

◆ getLogger()

Logger org.keycloak.models.cache.infinispan.RealmCacheManager.getLogger ( )
inlineprotected
40  {
41  return logger;
42  }
static final Logger logger
Definition: RealmCacheManager.java:37

◆ groupQueriesInvalidations()

void org.keycloak.models.cache.infinispan.RealmCacheManager.groupQueriesInvalidations ( String  realmId,
Set< String >  invalidations 
)
inline
75  {
76  invalidations.add(RealmCacheSession.getGroupsQueryCacheKey(realmId));
77  invalidations.add(RealmCacheSession.getTopGroupsQueryCacheKey(realmId));
78  addInvalidations(GroupListPredicate.create().realm(realmId), invalidations);
79  }
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186

◆ 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

◆ 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)

◆ realmRemoval()

void org.keycloak.models.cache.infinispan.RealmCacheManager.realmRemoval ( String  id,
String  name,
Set< String >  invalidations 
)
inline
54  {
55  realmUpdated(id, name, invalidations);
56 
57  addInvalidations(InRealmPredicate.create().realm(id), invalidations);
58  }
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186
void realmUpdated(String id, String name, Set< String > invalidations)
Definition: RealmCacheManager.java:49

◆ realmUpdated()

void org.keycloak.models.cache.infinispan.RealmCacheManager.realmUpdated ( String  id,
String  name,
Set< String >  invalidations 
)
inline
49  {
50  invalidations.add(id);
51  invalidations.add(RealmCacheSession.getRealmByNameCacheKey(name));
52  }

◆ roleAdded()

void org.keycloak.models.cache.infinispan.RealmCacheManager.roleAdded ( String  roleContainerId,
Set< String >  invalidations 
)
inline
60  {
61  invalidations.add(RealmCacheSession.getRolesCacheKey(roleContainerId));
62  }

◆ roleRemoval()

void org.keycloak.models.cache.infinispan.RealmCacheManager.roleRemoval ( String  id,
String  roleName,
String  roleContainerId,
Set< String >  invalidations 
)
inline
68  {
69  invalidations.add(RealmCacheSession.getRolesCacheKey(roleContainerId));
70  invalidations.add(RealmCacheSession.getRoleByNameCacheKey(roleContainerId, roleName));
71 
72  addInvalidations(HasRolePredicate.create().role(id), invalidations);
73  }
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186

◆ roleUpdated()

void org.keycloak.models.cache.infinispan.RealmCacheManager.roleUpdated ( String  roleContainerId,
String  roleName,
Set< String >  invalidations 
)
inline
64  {
65  invalidations.add(RealmCacheSession.getRoleByNameCacheKey(roleContainerId, roleName));
66  }

◆ 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  }

メンバ詳解

◆ 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

◆ logger

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

◆ revisions

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

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