keycloak
公開メンバ関数 | 限定公開メンバ関数 | 静的限定公開変数類 | 関数 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore クラス
org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore 連携図
Collaboration graph

公開メンバ関数

void putLastSessionRefresh (KeycloakSession kcSession, String sessionId, String realmId, int lastSessionRefresh)
 

限定公開メンバ関数

 LastSessionRefreshStore (int maxIntervalBetweenMessagesSeconds, int maxCount, String eventKey)
 
void sendMessage (KeycloakSession kcSession, Map< String, SessionData > refreshesToSend)
 

静的限定公開変数類

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

関数

void checkSendingMessage (KeycloakSession kcSession, int currentTime)
 

非公開メンバ関数

synchronized Map< String, SessionDataprepareSendingMessage (int currentTime)
 

非公開変数類

final int maxIntervalBetweenMessagesSeconds
 
final int maxCount
 
final String eventKey
 
volatile Map< String, SessionDatalastSessionRefreshes = new ConcurrentHashMap<>()
 
volatile int lastRun = Time.currentTime()
 

詳解

Tracks the queue of lastSessionRefreshes, which were updated on this host. Those will be sent to the second DC in bulk, so second DC can update lastSessionRefreshes on it's side. Message is sent either periodically or if there are lots of stored lastSessionRefreshes.

著者
Marek Posolda

構築子と解体子

◆ LastSessionRefreshStore()

org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.LastSessionRefreshStore ( int  maxIntervalBetweenMessagesSeconds,
int  maxCount,
String  eventKey 
)
inlineprotected
47  {
49  this.maxCount = maxCount;
50  this.eventKey = eventKey;
51  }
final int maxIntervalBetweenMessagesSeconds
Definition: LastSessionRefreshStore.java:38
final int maxCount
Definition: LastSessionRefreshStore.java:39
final String eventKey
Definition: LastSessionRefreshStore.java:40

関数詳解

◆ checkSendingMessage()

void org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.checkSendingMessage ( KeycloakSession  kcSession,
int  currentTime 
)
inlinepackage
62  {
63  if (lastSessionRefreshes.size() >= maxCount || lastRun + maxIntervalBetweenMessagesSeconds <= currentTime) {
64  Map<String, SessionData> refreshesToSend = prepareSendingMessage(currentTime);
65 
66  // Sending message doesn't need to be synchronized
67  if (refreshesToSend != null) {
68  sendMessage(kcSession, refreshesToSend);
69  }
70  }
71  }
final int maxIntervalBetweenMessagesSeconds
Definition: LastSessionRefreshStore.java:38
void sendMessage(KeycloakSession kcSession, Map< String, SessionData > refreshesToSend)
Definition: LastSessionRefreshStore.java:89
volatile Map< String, SessionData > lastSessionRefreshes
Definition: LastSessionRefreshStore.java:42
final int maxCount
Definition: LastSessionRefreshStore.java:39
synchronized Map< String, SessionData > prepareSendingMessage(int currentTime)
Definition: LastSessionRefreshStore.java:75
volatile int lastRun
Definition: LastSessionRefreshStore.java:44

◆ prepareSendingMessage()

synchronized Map<String, SessionData> org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.prepareSendingMessage ( int  currentTime)
inlineprivate
75  {
76  if (lastSessionRefreshes.size() >= maxCount || lastRun + maxIntervalBetweenMessagesSeconds <= currentTime) {
77  // Create new map instance, so that new writers will use that one
78  Map<String, SessionData> copiedRefreshesToSend = lastSessionRefreshes;
79  lastSessionRefreshes = new ConcurrentHashMap<>();
80  lastRun = currentTime;
81 
82  return copiedRefreshesToSend;
83  } else {
84  return null;
85  }
86  }
final int maxIntervalBetweenMessagesSeconds
Definition: LastSessionRefreshStore.java:38
volatile Map< String, SessionData > lastSessionRefreshes
Definition: LastSessionRefreshStore.java:42
final int maxCount
Definition: LastSessionRefreshStore.java:39
volatile int lastRun
Definition: LastSessionRefreshStore.java:44

◆ putLastSessionRefresh()

void org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.putLastSessionRefresh ( KeycloakSession  kcSession,
String  sessionId,
String  realmId,
int  lastSessionRefresh 
)
inline
54  {
55  lastSessionRefreshes.put(sessionId, new SessionData(realmId, lastSessionRefresh));
56 
57  // Assume that lastSessionRefresh is same or close to current time
58  checkSendingMessage(kcSession, lastSessionRefresh);
59  }
void checkSendingMessage(KeycloakSession kcSession, int currentTime)
Definition: LastSessionRefreshStore.java:62
volatile Map< String, SessionData > lastSessionRefreshes
Definition: LastSessionRefreshStore.java:42

◆ sendMessage()

void org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.sendMessage ( KeycloakSession  kcSession,
Map< String, SessionData refreshesToSend 
)
inlineprotected
89  {
90  LastSessionRefreshEvent event = new LastSessionRefreshEvent(refreshesToSend);
91 
92  if (logger.isDebugEnabled()) {
93  logger.debugf("Sending lastSessionRefreshes for key '%s'. Refreshes: %s", eventKey, event.getLastSessionRefreshes().toString());
94  }
95 
96  // Don't notify local DC about the lastSessionRefreshes. They were processed here already
97  ClusterProvider cluster = kcSession.getProvider(ClusterProvider.class);
98  cluster.notify(eventKey, event, true, ClusterProvider.DCNotify.ALL_BUT_LOCAL_DC);
99  }
final String eventKey
Definition: LastSessionRefreshStore.java:40
static final Logger logger
Definition: LastSessionRefreshStore.java:36

メンバ詳解

◆ eventKey

final String org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.eventKey
private

◆ lastRun

volatile int org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.lastRun = Time.currentTime()
private

◆ lastSessionRefreshes

volatile Map<String, SessionData> org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.lastSessionRefreshes = new ConcurrentHashMap<>()
private

◆ logger

final Logger org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.logger = Logger.getLogger(LastSessionRefreshStore.class)
staticprotected

◆ maxCount

final int org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.maxCount
private

◆ maxIntervalBetweenMessagesSeconds

final int org.keycloak.models.sessions.infinispan.changes.sessions.LastSessionRefreshStore.maxIntervalBetweenMessagesSeconds
private

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