Search in sources :

Example 1 with JBossUserMarshaller

use of org.infinispan.jboss.marshalling.core.JBossUserMarshaller in project keycloak by keycloak.

the class TestCacheManagerFactory method createManager.

<T extends StoreConfigurationBuilder<?, T> & RemoteStoreConfigurationChildBuilder<T>> EmbeddedCacheManager createManager(int threadId, String cacheName, Class<T> builderClass) {
    System.setProperty("java.net.preferIPv4Stack", "true");
    System.setProperty("jgroups.tcp.port", "53715");
    GlobalConfigurationBuilder gcb = new GlobalConfigurationBuilder();
    gcb = gcb.clusteredDefault();
    gcb.transport().clusterName("test-clustering-" + threadId);
    // For Infinispan 10, we go with the JBoss marshalling.
    // TODO: This should be replaced later with the marshalling recommended by infinispan. Probably protostream.
    // See https://infinispan.org/docs/stable/titles/developing/developing.html#marshalling for the details
    gcb.serialization().marshaller(new JBossUserMarshaller());
    gcb.jmx().domain(InfinispanConnectionProvider.JMX_DOMAIN + "-" + threadId).enable();
    EmbeddedCacheManager cacheManager = new DefaultCacheManager(gcb.build());
    Configuration invalidationCacheConfiguration = getCacheBackedByRemoteStore(threadId, cacheName, builderClass);
    cacheManager.defineConfiguration(cacheName, invalidationCacheConfiguration);
    cacheManager.defineConfiguration("local", new ConfigurationBuilder().build());
    return cacheManager;
}
Also used : GlobalConfigurationBuilder(org.infinispan.configuration.global.GlobalConfigurationBuilder) DefaultCacheManager(org.infinispan.manager.DefaultCacheManager) ConfigurationBuilder(org.infinispan.configuration.cache.ConfigurationBuilder) GlobalConfigurationBuilder(org.infinispan.configuration.global.GlobalConfigurationBuilder) StoreConfigurationBuilder(org.infinispan.configuration.cache.StoreConfigurationBuilder) Configuration(org.infinispan.configuration.cache.Configuration) EmbeddedCacheManager(org.infinispan.manager.EmbeddedCacheManager) JBossUserMarshaller(org.infinispan.jboss.marshalling.core.JBossUserMarshaller)

Example 2 with JBossUserMarshaller

use of org.infinispan.jboss.marshalling.core.JBossUserMarshaller in project keycloak by keycloak.

the class CacheManagerFactory method startCacheManager.

private DefaultCacheManager startCacheManager() {
    ConfigurationBuilderHolder builder = new ParserRegistry().parse(config);
    if (builder.getNamedConfigurationBuilders().get("sessions").clustering().cacheMode().isClustered()) {
        configureTransportStack(builder);
    }
    // For Infinispan 10, we go with the JBoss marshalling.
    // TODO: This should be replaced later with the marshalling recommended by infinispan. Probably protostream.
    // See https://infinispan.org/docs/stable/titles/developing/developing.html#marshalling for the details
    builder.getGlobalConfigurationBuilder().serialization().marshaller(new JBossUserMarshaller());
    return new DefaultCacheManager(builder, isStartEagerly());
}
Also used : DefaultCacheManager(org.infinispan.manager.DefaultCacheManager) ConfigurationBuilderHolder(org.infinispan.configuration.parsing.ConfigurationBuilderHolder) ParserRegistry(org.infinispan.configuration.parsing.ParserRegistry) JBossUserMarshaller(org.infinispan.jboss.marshalling.core.JBossUserMarshaller)

Example 3 with JBossUserMarshaller

use of org.infinispan.jboss.marshalling.core.JBossUserMarshaller in project keycloak by keycloak.

the class DefaultInfinispanConnectionProviderFactory method initEmbedded.

protected void initEmbedded() {
    GlobalConfigurationBuilder gcb = new GlobalConfigurationBuilder();
    boolean clustered = config.getBoolean("clustered", false);
    boolean async = config.getBoolean("async", false);
    boolean useKeycloakTimeService = config.getBoolean("useKeycloakTimeService", false);
    this.topologyInfo = new TopologyInfo(cacheManager, config, true);
    if (clustered) {
        String jgroupsUdpMcastAddr = config.get("jgroupsUdpMcastAddr", System.getProperty(InfinispanConnectionProvider.JGROUPS_UDP_MCAST_ADDR));
        configureTransport(gcb, topologyInfo.getMyNodeName(), topologyInfo.getMySiteName(), jgroupsUdpMcastAddr, "default-configs/default-keycloak-jgroups-udp.xml");
        gcb.jmx().domain(InfinispanConnectionProvider.JMX_DOMAIN + "-" + topologyInfo.getMyNodeName()).enable();
    } else {
        gcb.jmx().domain(InfinispanConnectionProvider.JMX_DOMAIN).enable();
    }
    // For Infinispan 10, we go with the JBoss marshalling.
    // TODO: This should be replaced later with the marshalling recommended by infinispan. Probably protostream.
    // See https://infinispan.org/docs/stable/titles/developing/developing.html#marshalling for the details
    gcb.serialization().marshaller(new JBossUserMarshaller());
    cacheManager = new DefaultCacheManager(gcb.build());
    if (useKeycloakTimeService) {
        setTimeServiceToKeycloakTime(cacheManager);
    }
    containerManaged = false;
    logger.debug("Started embedded Infinispan cache container");
    ConfigurationBuilder modelCacheConfigBuilder = createCacheConfigurationBuilder();
    Configuration modelCacheConfiguration = modelCacheConfigBuilder.build();
    cacheManager.defineConfiguration(InfinispanConnectionProvider.REALM_CACHE_NAME, modelCacheConfiguration);
    cacheManager.defineConfiguration(InfinispanConnectionProvider.AUTHORIZATION_CACHE_NAME, modelCacheConfiguration);
    cacheManager.defineConfiguration(InfinispanConnectionProvider.USER_CACHE_NAME, modelCacheConfiguration);
    ConfigurationBuilder sessionConfigBuilder = createCacheConfigurationBuilder();
    if (clustered) {
        String sessionsMode = config.get("sessionsMode", "distributed");
        if (sessionsMode.equalsIgnoreCase("replicated")) {
            sessionConfigBuilder.clustering().cacheMode(async ? CacheMode.REPL_ASYNC : CacheMode.REPL_SYNC);
        } else if (sessionsMode.equalsIgnoreCase("distributed")) {
            sessionConfigBuilder.clustering().cacheMode(async ? CacheMode.DIST_ASYNC : CacheMode.DIST_SYNC);
        } else {
            throw new RuntimeException("Invalid value for sessionsMode");
        }
        int owners = config.getInt("sessionsOwners", 2);
        logger.debugf("Session owners: %d", owners);
        int l1Lifespan = config.getInt("l1Lifespan", 600000);
        boolean l1Enabled = l1Lifespan > 0;
        sessionConfigBuilder.clustering().hash().numOwners(owners).numSegments(config.getInt("sessionsSegments", 60)).l1().enabled(l1Enabled).lifespan(l1Lifespan).build();
    }
    // Base configuration doesn't contain any remote stores
    Configuration sessionCacheConfigurationBase = sessionConfigBuilder.build();
    boolean jdgEnabled = config.getBoolean("remoteStoreEnabled", false);
    if (jdgEnabled) {
        sessionConfigBuilder = createCacheConfigurationBuilder();
        sessionConfigBuilder.read(sessionCacheConfigurationBase);
        configureRemoteCacheStore(sessionConfigBuilder, async, InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
    }
    Configuration sessionCacheConfiguration = sessionConfigBuilder.build();
    cacheManager.defineConfiguration(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME, sessionCacheConfiguration);
    if (jdgEnabled) {
        sessionConfigBuilder = createCacheConfigurationBuilder();
        sessionConfigBuilder.read(sessionCacheConfigurationBase);
        configureRemoteCacheStore(sessionConfigBuilder, async, InfinispanConnectionProvider.OFFLINE_USER_SESSION_CACHE_NAME);
    }
    sessionCacheConfiguration = sessionConfigBuilder.build();
    cacheManager.defineConfiguration(InfinispanConnectionProvider.OFFLINE_USER_SESSION_CACHE_NAME, sessionCacheConfiguration);
    if (jdgEnabled) {
        sessionConfigBuilder = createCacheConfigurationBuilder();
        sessionConfigBuilder.read(sessionCacheConfigurationBase);
        configureRemoteCacheStore(sessionConfigBuilder, async, InfinispanConnectionProvider.CLIENT_SESSION_CACHE_NAME);
    }
    sessionCacheConfiguration = sessionConfigBuilder.build();
    cacheManager.defineConfiguration(InfinispanConnectionProvider.CLIENT_SESSION_CACHE_NAME, sessionCacheConfiguration);
    if (jdgEnabled) {
        sessionConfigBuilder = createCacheConfigurationBuilder();
        sessionConfigBuilder.read(sessionCacheConfigurationBase);
        configureRemoteCacheStore(sessionConfigBuilder, async, InfinispanConnectionProvider.OFFLINE_CLIENT_SESSION_CACHE_NAME);
    }
    sessionCacheConfiguration = sessionConfigBuilder.build();
    cacheManager.defineConfiguration(InfinispanConnectionProvider.OFFLINE_CLIENT_SESSION_CACHE_NAME, sessionCacheConfiguration);
    if (jdgEnabled) {
        sessionConfigBuilder = createCacheConfigurationBuilder();
        sessionConfigBuilder.read(sessionCacheConfigurationBase);
        configureRemoteCacheStore(sessionConfigBuilder, async, InfinispanConnectionProvider.LOGIN_FAILURE_CACHE_NAME);
    }
    sessionCacheConfiguration = sessionConfigBuilder.build();
    cacheManager.defineConfiguration(InfinispanConnectionProvider.LOGIN_FAILURE_CACHE_NAME, sessionCacheConfiguration);
    cacheManager.defineConfiguration(InfinispanConnectionProvider.AUTHENTICATION_SESSIONS_CACHE_NAME, sessionCacheConfigurationBase);
    // Retrieve caches to enforce rebalance
    cacheManager.getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME, true);
    cacheManager.getCache(InfinispanConnectionProvider.OFFLINE_USER_SESSION_CACHE_NAME, true);
    cacheManager.getCache(InfinispanConnectionProvider.CLIENT_SESSION_CACHE_NAME, true);
    cacheManager.getCache(InfinispanConnectionProvider.OFFLINE_CLIENT_SESSION_CACHE_NAME, true);
    cacheManager.getCache(InfinispanConnectionProvider.LOGIN_FAILURE_CACHE_NAME, true);
    cacheManager.getCache(InfinispanConnectionProvider.AUTHENTICATION_SESSIONS_CACHE_NAME, true);
    ConfigurationBuilder replicationConfigBuilder = createCacheConfigurationBuilder();
    if (clustered) {
        replicationConfigBuilder.clustering().cacheMode(async ? CacheMode.REPL_ASYNC : CacheMode.REPL_SYNC);
    }
    if (jdgEnabled) {
        configureRemoteCacheStore(replicationConfigBuilder, async, InfinispanConnectionProvider.WORK_CACHE_NAME);
    }
    Configuration replicationEvictionCacheConfiguration = replicationConfigBuilder.expiration().enableReaper().wakeUpInterval(15, TimeUnit.SECONDS).build();
    cacheManager.defineConfiguration(InfinispanConnectionProvider.WORK_CACHE_NAME, replicationEvictionCacheConfiguration);
    cacheManager.getCache(InfinispanConnectionProvider.WORK_CACHE_NAME, true);
    long realmRevisionsMaxEntries = cacheManager.getCache(InfinispanConnectionProvider.REALM_CACHE_NAME).getCacheConfiguration().memory().size();
    realmRevisionsMaxEntries = realmRevisionsMaxEntries > 0 ? 2 * realmRevisionsMaxEntries : InfinispanConnectionProvider.REALM_REVISIONS_CACHE_DEFAULT_MAX;
    cacheManager.defineConfiguration(InfinispanConnectionProvider.REALM_REVISIONS_CACHE_NAME, getRevisionCacheConfig(realmRevisionsMaxEntries));
    cacheManager.getCache(InfinispanConnectionProvider.REALM_REVISIONS_CACHE_NAME, true);
    long userRevisionsMaxEntries = cacheManager.getCache(InfinispanConnectionProvider.USER_CACHE_NAME).getCacheConfiguration().memory().size();
    userRevisionsMaxEntries = userRevisionsMaxEntries > 0 ? 2 * userRevisionsMaxEntries : InfinispanConnectionProvider.USER_REVISIONS_CACHE_DEFAULT_MAX;
    cacheManager.defineConfiguration(InfinispanConnectionProvider.USER_REVISIONS_CACHE_NAME, getRevisionCacheConfig(userRevisionsMaxEntries));
    cacheManager.getCache(InfinispanConnectionProvider.USER_REVISIONS_CACHE_NAME, true);
    cacheManager.defineConfiguration(InfinispanConnectionProvider.KEYS_CACHE_NAME, getKeysCacheConfig());
    cacheManager.getCache(InfinispanConnectionProvider.KEYS_CACHE_NAME, true);
    final ConfigurationBuilder actionTokenCacheConfigBuilder = getActionTokenCacheConfig();
    if (clustered) {
        actionTokenCacheConfigBuilder.clustering().cacheMode(async ? CacheMode.REPL_ASYNC : CacheMode.REPL_SYNC);
    }
    if (jdgEnabled) {
        configureRemoteActionTokenCacheStore(actionTokenCacheConfigBuilder, async);
    }
    cacheManager.defineConfiguration(InfinispanConnectionProvider.ACTION_TOKEN_CACHE, actionTokenCacheConfigBuilder.build());
    cacheManager.getCache(InfinispanConnectionProvider.ACTION_TOKEN_CACHE, true);
    long authzRevisionsMaxEntries = cacheManager.getCache(InfinispanConnectionProvider.AUTHORIZATION_CACHE_NAME).getCacheConfiguration().memory().size();
    authzRevisionsMaxEntries = authzRevisionsMaxEntries > 0 ? 2 * authzRevisionsMaxEntries : InfinispanConnectionProvider.AUTHORIZATION_REVISIONS_CACHE_DEFAULT_MAX;
    cacheManager.defineConfiguration(InfinispanConnectionProvider.AUTHORIZATION_REVISIONS_CACHE_NAME, getRevisionCacheConfig(authzRevisionsMaxEntries));
    cacheManager.getCache(InfinispanConnectionProvider.AUTHORIZATION_REVISIONS_CACHE_NAME, true);
}
Also used : GlobalConfigurationBuilder(org.infinispan.configuration.global.GlobalConfigurationBuilder) DefaultCacheManager(org.infinispan.manager.DefaultCacheManager) ConfigurationBuilder(org.infinispan.configuration.cache.ConfigurationBuilder) GlobalConfigurationBuilder(org.infinispan.configuration.global.GlobalConfigurationBuilder) RemoteStoreConfigurationBuilder(org.infinispan.persistence.remote.configuration.RemoteStoreConfigurationBuilder) InfinispanUtil.createCacheConfigurationBuilder(org.keycloak.connections.infinispan.InfinispanUtil.createCacheConfigurationBuilder) Configuration(org.infinispan.configuration.cache.Configuration) JBossUserMarshaller(org.infinispan.jboss.marshalling.core.JBossUserMarshaller)

Aggregations

JBossUserMarshaller (org.infinispan.jboss.marshalling.core.JBossUserMarshaller)3 DefaultCacheManager (org.infinispan.manager.DefaultCacheManager)3 Configuration (org.infinispan.configuration.cache.Configuration)2 ConfigurationBuilder (org.infinispan.configuration.cache.ConfigurationBuilder)2 GlobalConfigurationBuilder (org.infinispan.configuration.global.GlobalConfigurationBuilder)2 StoreConfigurationBuilder (org.infinispan.configuration.cache.StoreConfigurationBuilder)1 ConfigurationBuilderHolder (org.infinispan.configuration.parsing.ConfigurationBuilderHolder)1 ParserRegistry (org.infinispan.configuration.parsing.ParserRegistry)1 EmbeddedCacheManager (org.infinispan.manager.EmbeddedCacheManager)1 RemoteStoreConfigurationBuilder (org.infinispan.persistence.remote.configuration.RemoteStoreConfigurationBuilder)1 InfinispanUtil.createCacheConfigurationBuilder (org.keycloak.connections.infinispan.InfinispanUtil.createCacheConfigurationBuilder)1