@Override public void onEvent(ProviderEvent event) { if (event instanceof PostMigrationEvent) { loadPersistentSessions(factory, maxErrors, sessionsPerSegment); } } });
private void loadSessionsFromRemoteCaches(KeycloakSession session) { for (String cacheName : remoteCacheInvoker.getRemoteCacheNames()) { loadSessionsFromRemoteCache(session.getKeycloakSessionFactory(), cacheName, getSessionsPerSegment(), getMaxErrors()); } }
@Override public void onEvent(ProviderEvent event) { if (event instanceof PostMigrationEvent) { int preloadTransactionTimeout = getTimeoutForPreloadingSessionsSeconds(); log.debugf("Will preload sessions with transaction timeout %d seconds", preloadTransactionTimeout); KeycloakModelUtils.runJobInTransactionWithTimeout(factory, (KeycloakSession session) -> { keyGenerator = new InfinispanKeyGenerator(); checkRemoteCaches(session); loadPersistentSessions(factory, getMaxErrors(), getSessionsPerSegment()); registerClusterListeners(session); loadSessionsFromRemoteCaches(session); }, preloadTransactionTimeout); } else if (event instanceof UserModel.UserRemovedEvent) { UserModel.UserRemovedEvent userRemovedEvent = (UserModel.UserRemovedEvent) event; InfinispanUserSessionProvider provider = (InfinispanUserSessionProvider) userRemovedEvent.getKeycloakSession().getProvider(UserSessionProvider.class, getId()); provider.onUserRemoved(userRemovedEvent.getRealm(), userRemovedEvent.getUser()); } } });
boolean sessionsRemoteCache = checkRemoteCache(session, sessionsCache, (RealmModel realm) -> { checkRemoteCache(session, clientSessionsCache, (RealmModel realm) -> { boolean offlineSessionsRemoteCache = checkRemoteCache(session, offlineSessionsCache, (RealmModel realm) -> { return realm.getOfflineSessionIdleTimeout() * 1000; }); checkRemoteCache(session, offlineClientSessionsCache, (RealmModel realm) -> { return realm.getOfflineSessionIdleTimeout() * 1000; }); checkRemoteCache(session, loginFailuresCache, (RealmModel realm) -> { return realm.getMaxDeltaTimeSeconds() * 1000; });
@Override public UserSessionProvider create(KeycloakSession session) { if (!compatMode) { InfinispanConnectionProvider connections = session.getProvider(InfinispanConnectionProvider.class); Cache<String, SessionEntity> cache = connections.getCache(InfinispanConnectionProvider.SESSION_CACHE_NAME); Cache<String, SessionEntity> offlineSessionsCache = connections.getCache(InfinispanConnectionProvider.OFFLINE_SESSION_CACHE_NAME); Cache<LoginFailureKey, LoginFailureEntity> loginFailures = connections.getCache(InfinispanConnectionProvider.LOGIN_FAILURE_CACHE_NAME); return isStreamMode() ? new InfinispanUserSessionProvider(session, cache, offlineSessionsCache, loginFailures) : new CompatInfinispanUserSessionProvider(session, cache, offlineSessionsCache, loginFailures); } else { return compatProviderFactory.create(session); } }