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

公開メンバ関数

 StoreFactoryCacheManager (Cache< String, Revisioned > cache, Cache< String, Long > revisions)
 
void resourceServerUpdated (String id, Set< String > invalidations)
 
void resourceServerRemoval (String id, Set< String > invalidations)
 
void scopeUpdated (String id, String name, String serverId, Set< String > invalidations)
 
void scopeRemoval (String id, String name, String serverId, Set< String > invalidations)
 
void resourceUpdated (String id, String name, String type, Set< String > uris, Set< String > scopes, String serverId, String owner, Set< String > invalidations)
 
void resourceRemoval (String id, String name, String type, Set< String > uris, String owner, Set< String > scopes, String serverId, Set< String > invalidations)
 
void policyUpdated (String id, String name, Set< String > resources, Set< String > resourceTypes, Set< String > scopes, String serverId, Set< String > invalidations)
 
void permissionTicketUpdated (String id, String owner, String requester, String resource, String scope, String serverId, Set< String > invalidations)
 
void policyRemoval (String id, String name, Set< String > resources, Set< String > resourceTypes, Set< String > scopes, String serverId, Set< String > invalidations)
 
void permissionTicketRemoval (String id, String owner, String requester, String resource, String scope, String serverId, 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(StoreFactoryCacheManager.class)
 

詳解

著者
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ StoreFactoryCacheManager()

org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.StoreFactoryCacheManager ( Cache< String, Revisioned cache,
Cache< String, Long >  revisions 
)
inline
40  {
41  super(cache, revisions);
42  }
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.authorization.StoreFactoryCacheManager.addInvalidationsFromEvent ( InvalidationEvent  event,
Set< String >  invalidations 
)
inlineprotected
49  {
50  if (event instanceof AuthorizationCacheInvalidationEvent) {
51  invalidations.add(event.getId());
52 
53  ((AuthorizationCacheInvalidationEvent) event).addInvalidations(this, invalidations);
54  }
55  }

◆ 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

◆ 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.authorization.StoreFactoryCacheManager.getLogger ( )
inlineprotected
44  {
45  return logger;
46  }
static final Logger logger
Definition: StoreFactoryCacheManager.java:38

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

◆ permissionTicketRemoval()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.permissionTicketRemoval ( String  id,
String  owner,
String  requester,
String  resource,
String  scope,
String  serverId,
Set< String >  invalidations 
)
inline
154  {
155  permissionTicketUpdated(id, owner, requester, resource, scope, serverId, invalidations);
156  }
void permissionTicketUpdated(String id, String owner, String requester, String resource, String scope, String serverId, Set< String > invalidations)
Definition: StoreFactoryCacheManager.java:140

◆ permissionTicketUpdated()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.permissionTicketUpdated ( String  id,
String  owner,
String  requester,
String  resource,
String  scope,
String  serverId,
Set< String >  invalidations 
)
inline
140  {
141  invalidations.add(id);
142  invalidations.add(StoreFactoryCacheSession.getPermissionTicketByOwner(owner, serverId));
143  invalidations.add(StoreFactoryCacheSession.getPermissionTicketByResource(resource, serverId));
144  invalidations.add(StoreFactoryCacheSession.getPermissionTicketByGranted(requester, serverId));
145  if (scope != null) {
146  invalidations.add(StoreFactoryCacheSession.getPermissionTicketByScope(scope, serverId));
147  }
148  }

◆ policyRemoval()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.policyRemoval ( String  id,
String  name,
Set< String >  resources,
Set< String >  resourceTypes,
Set< String >  scopes,
String  serverId,
Set< String >  invalidations 
)
inline
150  {
151  policyUpdated(id, name, resources, resourceTypes, scopes, serverId, invalidations);
152  }
void policyUpdated(String id, String name, Set< String > resources, Set< String > resourceTypes, Set< String > scopes, String serverId, Set< String > invalidations)
Definition: StoreFactoryCacheManager.java:111

◆ policyUpdated()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.policyUpdated ( String  id,
String  name,
Set< String >  resources,
Set< String >  resourceTypes,
Set< String >  scopes,
String  serverId,
Set< String >  invalidations 
)
inline
111  {
112  invalidations.add(id);
113  invalidations.add(StoreFactoryCacheSession.getPolicyByNameCacheKey(name, serverId));
114 
115  if (resources != null) {
116  for (String resource : resources) {
117  invalidations.add(StoreFactoryCacheSession.getPolicyByResource(resource, serverId));
118  if (Objects.nonNull(scopes)) {
119  for (String scope : scopes) {
120  invalidations.add(StoreFactoryCacheSession.getPolicyByResourceScope(scope, resource, serverId));
121  }
122  }
123  }
124  }
125 
126  if (resourceTypes != null) {
127  for (String type : resourceTypes) {
128  invalidations.add(StoreFactoryCacheSession.getPolicyByResourceType(type, serverId));
129  }
130  }
131 
132  if (scopes != null) {
133  for (String scope : scopes) {
134  invalidations.add(StoreFactoryCacheSession.getPolicyByScope(scope, serverId));
135  invalidations.add(StoreFactoryCacheSession.getPolicyByResourceScope(scope, null, serverId));
136  }
137  }
138  }

◆ resourceRemoval()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.resourceRemoval ( String  id,
String  name,
String  type,
Set< String >  uris,
String  owner,
Set< String >  scopes,
String  serverId,
Set< String >  invalidations 
)
inline
106  {
107  resourceUpdated(id, name, type, uris, scopes, serverId, owner, invalidations);
108  addInvalidations(InResourcePredicate.create().resource(id), invalidations);
109  }
void resourceUpdated(String id, String name, String type, Set< String > uris, Set< String > scopes, String serverId, String owner, Set< String > invalidations)
Definition: StoreFactoryCacheManager.java:80
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186

◆ resourceServerRemoval()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.resourceServerRemoval ( String  id,
Set< String >  invalidations 
)
inline
62  {
63  resourceServerUpdated(id, invalidations);
64 
65  addInvalidations(InResourceServerPredicate.create().resourceServer(id), invalidations);
66  }
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186
void resourceServerUpdated(String id, Set< String > invalidations)
Definition: StoreFactoryCacheManager.java:57

◆ resourceServerUpdated()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.resourceServerUpdated ( String  id,
Set< String >  invalidations 
)
inline
57  {
58  invalidations.add(id);
59  invalidations.add(StoreFactoryCacheSession.getResourceServerByClientCacheKey(id));
60  }

◆ resourceUpdated()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.resourceUpdated ( String  id,
String  name,
String  type,
Set< String >  uris,
Set< String >  scopes,
String  serverId,
String  owner,
Set< String >  invalidations 
)
inline
80  {
81  invalidations.add(id);
82  invalidations.add(StoreFactoryCacheSession.getResourceByNameCacheKey(name, owner, serverId));
83  invalidations.add(StoreFactoryCacheSession.getResourceByOwnerCacheKey(owner, serverId));
84  invalidations.add(StoreFactoryCacheSession.getResourceByOwnerCacheKey(owner, null));
85  invalidations.add(StoreFactoryCacheSession.getPermissionTicketByResource(id, serverId));
86 
87  if (type != null) {
88  invalidations.add(StoreFactoryCacheSession.getResourceByTypeCacheKey(type, serverId));
89  addInvalidations(InResourcePredicate.create().resource(type), invalidations);
90  }
91 
92  if (uris != null) {
93  for (String uri: uris) {
94  invalidations.add(StoreFactoryCacheSession.getResourceByUriCacheKey(uri, serverId));
95  }
96  }
97 
98  if (scopes != null) {
99  for (String scope : scopes) {
100  invalidations.add(StoreFactoryCacheSession.getResourceByScopeCacheKey(scope, serverId));
101  addInvalidations(InScopePredicate.create().scope(scope), invalidations);
102  }
103  }
104  }
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186

◆ scopeRemoval()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.scopeRemoval ( String  id,
String  name,
String  serverId,
Set< String >  invalidations 
)
inline
75  {
76  scopeUpdated(id, name, serverId, invalidations);
77  addInvalidations(InScopePredicate.create().scope(id), invalidations);
78  }
void addInvalidations(Predicate< Map.Entry< String, Revisioned >> predicate, Set< String > invalidations)
Definition: CacheManager.java:186
void scopeUpdated(String id, String name, String serverId, Set< String > invalidations)
Definition: StoreFactoryCacheManager.java:68

◆ scopeUpdated()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheManager.scopeUpdated ( String  id,
String  name,
String  serverId,
Set< String >  invalidations 
)
inline
68  {
69  invalidations.add(id);
70  invalidations.add(StoreFactoryCacheSession.getScopeByNameCacheKey(name, serverId));
71  invalidations.add(StoreFactoryCacheSession.getResourceByScopeCacheKey(id, serverId));
72  invalidations.add(StoreFactoryCacheSession.getPermissionTicketByScope(id, serverId));
73  }

◆ 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.authorization.StoreFactoryCacheManager.logger = Logger.getLogger(StoreFactoryCacheManager.class)
staticprivate

◆ revisions

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

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