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

クラス

class  ViewChangeListener
 

公開メンバ関数

ClusterProvider create (KeycloakSession session)
 
void init (Config.Scope config)
 
void postInit (KeycloakSessionFactory factory)
 
void close ()
 
String getId ()
 
default int order ()
 

静的公開変数類

static final String PROVIDER_ID = "infinispan"
 

限定公開メンバ関数

int initClusterStartupTime (KeycloakSession session)
 

静的限定公開変数類

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

関数

static< V extends Serializable > V putIfAbsentWithRetries (CrossDCAwareCacheFactory crossDCAwareCacheFactory, String key, V value, int taskTimeoutInSeconds)
 

非公開メンバ関数

void lazyInit (KeycloakSession session)
 

非公開変数類

volatile Cache< String, Serializable > workCache
 
CrossDCAwareCacheFactory crossDCAwareCacheFactory
 
int clusterStartupTime
 
InfinispanNotificationsManager notificationsManager
 
ExecutorService localExecutor = Executors.newCachedThreadPool()
 

詳解

This impl is aware of Cross-Data-Center scenario too

著者
Marek Posolda

関数詳解

◆ close()

void org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.close ( )
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

172  {
173 
174  }

◆ create()

ClusterProvider org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.create ( KeycloakSession  session)
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

79  {
80  lazyInit(session);
81  String myAddress = InfinispanUtil.getTopologyInfo(session).getMyNodeName();
82  return new InfinispanClusterProvider(clusterStartupTime, myAddress, crossDCAwareCacheFactory, notificationsManager, localExecutor);
83  }
InfinispanNotificationsManager notificationsManager
Definition: InfinispanClusterProviderFactory.java:74
int clusterStartupTime
Definition: InfinispanClusterProviderFactory.java:71
ExecutorService localExecutor
Definition: InfinispanClusterProviderFactory.java:76
CrossDCAwareCacheFactory crossDCAwareCacheFactory
Definition: InfinispanClusterProviderFactory.java:69
void lazyInit(KeycloakSession session)
Definition: InfinispanClusterProviderFactory.java:85

◆ getId()

String org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.getId ( )
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

177  {
178  return PROVIDER_ID;
179  }
static final String PROVIDER_ID
Definition: InfinispanClusterProviderFactory.java:61

◆ init()

void org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.init ( Config.Scope  config)
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

163  {
164  }

◆ initClusterStartupTime()

int org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.initClusterStartupTime ( KeycloakSession  session)
inlineprotected
111  {
112  Integer existingClusterStartTime = (Integer) crossDCAwareCacheFactory.getCache().get(InfinispanClusterProvider.CLUSTER_STARTUP_TIME_KEY);
113  if (existingClusterStartTime != null) {
114  logger.debugf("Loaded cluster startup time: %s", Time.toDate(existingClusterStartTime).toString());
115  return existingClusterStartTime;
116  } else {
117  // clusterStartTime not yet initialized. Let's try to put our startupTime
118  int serverStartTime = (int) (session.getKeycloakSessionFactory().getServerStartupTimestamp() / 1000);
119 
120  existingClusterStartTime = putIfAbsentWithRetries(crossDCAwareCacheFactory, InfinispanClusterProvider.CLUSTER_STARTUP_TIME_KEY, serverStartTime, -1);
121  if (existingClusterStartTime == null) {
122  logger.debugf("Initialized cluster startup time to %s", Time.toDate(serverStartTime).toString());
123  return serverStartTime;
124  } else {
125  logger.debugf("Loaded cluster startup time: %s", Time.toDate(existingClusterStartTime).toString());
126  return existingClusterStartTime;
127  }
128  }
129  }
static< V extends Serializable > V putIfAbsentWithRetries(CrossDCAwareCacheFactory crossDCAwareCacheFactory, String key, V value, int taskTimeoutInSeconds)
Definition: InfinispanClusterProviderFactory.java:134
abstract BasicCache< String, Serializable > getCache()
static final Logger logger
Definition: InfinispanClusterProviderFactory.java:63
CrossDCAwareCacheFactory crossDCAwareCacheFactory
Definition: InfinispanClusterProviderFactory.java:69

◆ lazyInit()

void org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.lazyInit ( KeycloakSession  session)
inlineprivate
85  {
86  if (workCache == null) {
87  synchronized (this) {
88  if (workCache == null) {
89  InfinispanConnectionProvider ispnConnections = session.getProvider(InfinispanConnectionProvider.class);
90  workCache = ispnConnections.getCache(InfinispanConnectionProvider.WORK_CACHE_NAME);
91 
92  workCache.getCacheManager().addListener(new ViewChangeListener());
93 
94  // See if we have RemoteStore (external JDG) configured for cross-Data-Center scenario
95  Set<RemoteStore> remoteStores = InfinispanUtil.getRemoteStores(workCache);
96  crossDCAwareCacheFactory = CrossDCAwareCacheFactory.getFactory(workCache, remoteStores);
97 
99 
100  TopologyInfo topologyInfo = InfinispanUtil.getTopologyInfo(session);
101  String myAddress = topologyInfo.getMyNodeName();
102  String mySite = topologyInfo.getMySiteName();
103 
104  notificationsManager = InfinispanNotificationsManager.create(session, workCache, myAddress, mySite, remoteStores);
105  }
106  }
107  }
108  }
InfinispanNotificationsManager notificationsManager
Definition: InfinispanClusterProviderFactory.java:74
int clusterStartupTime
Definition: InfinispanClusterProviderFactory.java:71
static InfinispanNotificationsManager create(KeycloakSession session, Cache< String, Serializable > workCache, String myAddress, String mySite, Set< RemoteStore > remoteStores)
Definition: InfinispanNotificationsManager.java:92
volatile Cache< String, Serializable > workCache
Definition: InfinispanClusterProviderFactory.java:66
int initClusterStartupTime(KeycloakSession session)
Definition: InfinispanClusterProviderFactory.java:111
static CrossDCAwareCacheFactory getFactory(Cache< String, Serializable > workCache, Set< RemoteStore > remoteStores)
Definition: CrossDCAwareCacheFactory.java:41
CrossDCAwareCacheFactory crossDCAwareCacheFactory
Definition: InfinispanClusterProviderFactory.java:69

◆ order()

default int org.keycloak.provider.ProviderFactory< T extends Provider >.order ( )
inlineinherited

◆ postInit()

void org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.postInit ( KeycloakSessionFactory  factory)
inline

org.keycloak.provider.ProviderFactory< T extends Provider >を実装しています。

167  {
168  }

◆ putIfAbsentWithRetries()

static<V extends Serializable> V org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.putIfAbsentWithRetries ( CrossDCAwareCacheFactory  crossDCAwareCacheFactory,
String  key,
value,
int  taskTimeoutInSeconds 
)
inlinepackage
134  {
135  AtomicReference<V> resultRef = new AtomicReference<>();
136 
137  Retry.executeWithBackoff((int iteration) -> {
138 
139  try {
140  V result;
141  if (taskTimeoutInSeconds > 0) {
142  result = (V) crossDCAwareCacheFactory.getCache().putIfAbsent(key, value);
143  } else {
144  result = (V) crossDCAwareCacheFactory.getCache().putIfAbsent(key, value, taskTimeoutInSeconds, TimeUnit.SECONDS);
145  }
146  resultRef.set(result);
147 
148  } catch (HotRodClientException re) {
149  logger.warnf(re, "Failed to write key '%s' and value '%s' in iteration '%d' . Retrying", key, value, iteration);
150 
151  // Rethrow the exception. Retry will take care of handle the exception and eventually retry the operation.
152  throw re;
153  }
154 
155  }, 10, 10);
156 
157  return resultRef.get();
158  }
abstract BasicCache< String, Serializable > getCache()
static final Logger logger
Definition: InfinispanClusterProviderFactory.java:63
CrossDCAwareCacheFactory crossDCAwareCacheFactory
Definition: InfinispanClusterProviderFactory.java:69

メンバ詳解

◆ clusterStartupTime

int org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.clusterStartupTime
private

◆ crossDCAwareCacheFactory

CrossDCAwareCacheFactory org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.crossDCAwareCacheFactory
private

◆ localExecutor

ExecutorService org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.localExecutor = Executors.newCachedThreadPool()
private

◆ logger

final Logger org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.logger = Logger.getLogger(InfinispanClusterProviderFactory.class)
staticprotected

◆ notificationsManager

InfinispanNotificationsManager org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.notificationsManager
private

◆ PROVIDER_ID

final String org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.PROVIDER_ID = "infinispan"
static

◆ workCache

volatile Cache<String, Serializable> org.keycloak.cluster.infinispan.InfinispanClusterProviderFactory.workCache
private

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