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

公開メンバ関数

 BaseCacheInitializer (KeycloakSessionFactory sessionFactory, Cache< String, Serializable > workCache, SessionLoader sessionLoader, String stateKeySuffix, int sessionsPerSegment)
 
Cache< String, Serializable > getWorkCache ()
 
void initCache ()
 
void loadSessions ()
 

限定公開メンバ関数

boolean isFinished ()
 
boolean isCoordinator ()
 
InitializerState getStateFromCache ()
 
void saveStateToCache (final InitializerState state)
 
abstract void startLoading ()
 

限定公開変数類

final KeycloakSessionFactory sessionFactory
 
final Cache< String, Serializable > workCache
 
final SessionLoader sessionLoader
 
final int sessionsPerSegment
 
final String stateKey
 

非公開メンバ関数

void retry (int retry, Runnable runnable)
 

静的非公開変数類

static final String STATE_KEY_PREFIX = "distributed::"
 
static final Logger log = Logger.getLogger(BaseCacheInitializer.class)
 

詳解

著者
Marek Posolda

構築子と解体子

◆ BaseCacheInitializer()

org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.BaseCacheInitializer ( KeycloakSessionFactory  sessionFactory,
Cache< String, Serializable >  workCache,
SessionLoader  sessionLoader,
String  stateKeySuffix,
int  sessionsPerSegment 
)
inline
47  {
49  this.workCache = workCache;
52  this.stateKey = STATE_KEY_PREFIX + stateKeySuffix;
53  }
final String stateKey
Definition: BaseCacheInitializer.java:45
final KeycloakSessionFactory sessionFactory
Definition: BaseCacheInitializer.java:41
final Cache< String, Serializable > workCache
Definition: BaseCacheInitializer.java:42
final int sessionsPerSegment
Definition: BaseCacheInitializer.java:44
final SessionLoader sessionLoader
Definition: BaseCacheInitializer.java:43
static final String STATE_KEY_PREFIX
Definition: BaseCacheInitializer.java:37

関数詳解

◆ getStateFromCache()

InitializerState org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.getStateFromCache ( )
inlineprotected
76  {
77  // We ignore cacheStore for now, so that in Cross-DC scenario (with RemoteStore enabled) is the remoteStore ignored.
78  return (InitializerState) workCache.getAdvancedCache()
79  .withFlags(Flag.SKIP_CACHE_STORE, Flag.SKIP_CACHE_LOAD)
80  .get(stateKey);
81  }
final String stateKey
Definition: BaseCacheInitializer.java:45
final Cache< String, Serializable > workCache
Definition: BaseCacheInitializer.java:42

◆ getWorkCache()

Cache<String, Serializable> org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.getWorkCache ( )
inline
124  {
125  return workCache;
126  }
final Cache< String, Serializable > workCache
Definition: BaseCacheInitializer.java:42

◆ initCache()

void org.keycloak.models.sessions.infinispan.initializer.CacheInitializer.initCache ( )
inlineinherited
29  {
30  }

◆ isCoordinator()

boolean org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.isCoordinator ( )
inlineprotected
70  {
71  Transport transport = workCache.getCacheManager().getTransport();
72  return transport == null || transport.isCoordinator();
73  }
final Cache< String, Serializable > workCache
Definition: BaseCacheInitializer.java:42

◆ isFinished()

boolean org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.isFinished ( )
inlineprotected
57  {
58  // Check if we should skipLoadingSessions. This can happen if someone else already did the task (For example in cross-dc environment, it was done by different DC)
59  boolean isFinishedAlready = this.sessionLoader.isFinished(this);
60  if (isFinishedAlready) {
61  return true;
62  }
63 
64  InitializerState state = getStateFromCache();
65  return state != null && state.isFinished();
66  }
InitializerState getStateFromCache()
Definition: BaseCacheInitializer.java:76
final SessionLoader sessionLoader
Definition: BaseCacheInitializer.java:43
boolean isFinished(BaseCacheInitializer initializer)

◆ loadSessions()

void org.keycloak.models.sessions.infinispan.initializer.CacheInitializer.loadSessions ( )
inlineinherited
32  {
33  while (!isFinished()) {
34  if (!isCoordinator()) {
35  try {
36  Thread.sleep(1000);
37  } catch (InterruptedException ie) {
38  log.error("Interrupted", ie);
39  }
40  } else {
41  startLoading();
42  }
43  }
44  }
static final Logger log
Definition: CacheInitializer.java:27

◆ retry()

void org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.retry ( int  retry,
Runnable  runnable 
)
inlineprivate
103  {
104  while (true) {
105  try {
106  runnable.run();
107  return;
108  } catch (RuntimeException e) {
109  ComponentStatus status = workCache.getStatus();
110  if (status.isStopping() || status.isTerminated()) {
111  log.warn("Failed to put initializerState to the cache. Cache is already terminating");
112  log.debug(e.getMessage(), e);
113  return;
114  }
115  retry--;
116  if (retry == 0) {
117  throw e;
118  }
119  }
120  }
121  }
void retry(int retry, Runnable runnable)
Definition: BaseCacheInitializer.java:103
final Cache< String, Serializable > workCache
Definition: BaseCacheInitializer.java:42
static final Logger log
Definition: BaseCacheInitializer.java:39

◆ saveStateToCache()

void org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.saveStateToCache ( final InitializerState  state)
inlineprotected
84  {
85 
86  // 3 attempts to send the message (it may fail if some node fails in the meantime)
87  retry(3, new Runnable() {
88 
89  @Override
90  public void run() {
91 
92  // Save this synchronously to ensure all nodes read correct state
93  // We ignore cacheStore for now, so that in Cross-DC scenario (with RemoteStore enabled) is the remoteStore ignored.
94  BaseCacheInitializer.this.workCache.getAdvancedCache().
95  withFlags(Flag.IGNORE_RETURN_VALUES, Flag.FORCE_SYNCHRONOUS, Flag.SKIP_CACHE_STORE, Flag.SKIP_CACHE_LOAD)
96  .put(stateKey, state);
97  }
98 
99  });
100  }
BaseCacheInitializer(KeycloakSessionFactory sessionFactory, Cache< String, Serializable > workCache, SessionLoader sessionLoader, String stateKeySuffix, int sessionsPerSegment)
Definition: BaseCacheInitializer.java:47
void retry(int retry, Runnable runnable)
Definition: BaseCacheInitializer.java:103
final String stateKey
Definition: BaseCacheInitializer.java:45

◆ startLoading()

abstract void org.keycloak.models.sessions.infinispan.initializer.CacheInitializer.startLoading ( )
abstractprotectedinherited

Just coordinator will run this

メンバ詳解

◆ log

final Logger org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.log = Logger.getLogger(BaseCacheInitializer.class)
staticprivate

◆ sessionFactory

final KeycloakSessionFactory org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.sessionFactory
protected

◆ sessionLoader

final SessionLoader org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.sessionLoader
protected

◆ sessionsPerSegment

final int org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.sessionsPerSegment
protected

◆ STATE_KEY_PREFIX

final String org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.STATE_KEY_PREFIX = "distributed::"
staticprivate

◆ stateKey

final String org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.stateKey
protected

◆ workCache

final Cache<String, Serializable> org.keycloak.models.sessions.infinispan.initializer.BaseCacheInitializer.workCache
protected

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