From bc2343909f72629e9634444501503016dfcb8418 Mon Sep 17 00:00:00 2001 From: Pedro Ruivo Date: Sat, 13 Apr 2024 18:38:33 +0100 Subject: [PATCH] Infinispan 15.0.3.Final Closes #29068 Signed-off-by: Pedro Ruivo --- adapters/saml/wildfly-elytron-jakarta/pom.xml | 6 +-- adapters/saml/wildfly-elytron/pom.xml | 5 --- ...InfinispanSessionCacheIdMapperUpdater.java | 28 ++++++------ .../examples/generated/ispn-single.yaml | 2 +- .../examples/generated/ispn-site-a.yaml | 2 +- .../examples/generated/ispn-site-b.yaml | 2 +- model/infinispan/pom.xml | 6 +-- .../InfinispanClusterProviderFactory.java | 27 +++--------- ...panMultiSiteLoadBalancerCheckProvider.java | 5 +-- .../infinispan/InfinispanUtil.java | 34 +++++++-------- .../connections/infinispan/TopologyInfo.java | 42 ++++++++---------- ...nispanUserLoginFailureProviderFactory.java | 3 -- .../InfinispanUserSessionProviderFactory.java | 3 -- .../initializer/BaseCacheInitializer.java | 25 ++++------- .../InfinispanCacheInitializer.java | 19 ++------ .../ConcurrencyJDGCachePutTest.java | 32 +++++++------- ...encyJDGRemoteCacheClientListenersTest.java | 43 ++++++++----------- .../InfinispanKeyStorageProviderTest.java | 26 ++++++----- operator/src/test/resources/cache-ispn.xml | 4 +- pom.xml | 38 +--------------- quarkus/config-api/pom.xml | 2 +- quarkus/runtime/pom.xml | 14 +----- .../runtime/src/main/resources/cache-ispn.xml | 4 +- .../src/main/resources/cache-local.xml | 4 +- ...b-infinispan-cache-remote-store-config.xml | 38 ++++++++-------- .../services/testsuite-providers/pom.xml | 12 +----- .../infinispan/InfinispanTimeServiceTask.java | 4 +- .../rest/resource/TestCacheResource.java | 33 +++++++------- .../integration-arquillian/tests/base/pom.xml | 2 +- .../integration-arquillian/tests/pom.xml | 2 +- testsuite/model/pom.xml | 2 +- testsuite/utils/pom.xml | 2 +- 32 files changed, 169 insertions(+), 302 deletions(-) diff --git a/adapters/saml/wildfly-elytron-jakarta/pom.xml b/adapters/saml/wildfly-elytron-jakarta/pom.xml index f8dc3b5d5d8..b3a496978ee 100755 --- a/adapters/saml/wildfly-elytron-jakarta/pom.xml +++ b/adapters/saml/wildfly-elytron-jakarta/pom.xml @@ -92,16 +92,12 @@ org.infinispan - infinispan-core-jakarta + infinispan-core org.infinispan infinispan-cachestore-remote - - org.infinispan - infinispan-client-hotrod-jakarta - junit junit diff --git a/adapters/saml/wildfly-elytron/pom.xml b/adapters/saml/wildfly-elytron/pom.xml index cc78c6e482b..5dfaf1bb6e3 100755 --- a/adapters/saml/wildfly-elytron/pom.xml +++ b/adapters/saml/wildfly-elytron/pom.xml @@ -88,11 +88,6 @@ org.infinispan infinispan-cachestore-remote - - - org.infinispan - infinispan-client-hotrod - junit junit diff --git a/adapters/saml/wildfly-elytron/src/main/java/org/keycloak/adapters/saml/elytron/infinispan/InfinispanSessionCacheIdMapperUpdater.java b/adapters/saml/wildfly-elytron/src/main/java/org/keycloak/adapters/saml/elytron/infinispan/InfinispanSessionCacheIdMapperUpdater.java index a6ac4fe6cd1..878b5f46bba 100644 --- a/adapters/saml/wildfly-elytron/src/main/java/org/keycloak/adapters/saml/elytron/infinispan/InfinispanSessionCacheIdMapperUpdater.java +++ b/adapters/saml/wildfly-elytron/src/main/java/org/keycloak/adapters/saml/elytron/infinispan/InfinispanSessionCacheIdMapperUpdater.java @@ -16,21 +16,21 @@ */ package org.keycloak.adapters.saml.elytron.infinispan; -import org.keycloak.adapters.saml.AdapterConstants; -import org.keycloak.adapters.spi.SessionIdMapper; -import org.keycloak.adapters.spi.SessionIdMapperUpdater; - -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.ServletContext; import org.infinispan.Cache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.Configuration; +import org.infinispan.factories.ComponentRegistry; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.persistence.manager.PersistenceManager; import org.infinispan.persistence.remote.RemoteStore; import org.jboss.logging.Logger; +import org.keycloak.adapters.saml.AdapterConstants; +import org.keycloak.adapters.spi.SessionIdMapper; +import org.keycloak.adapters.spi.SessionIdMapperUpdater; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.servlet.ServletContext; import java.util.Set; /** @@ -94,21 +94,19 @@ public static SessionIdMapperUpdater addTokenStoreUpdaters(ServletContext servle } Cache ssoCache = cacheManager.getCache(cacheName, true); - final SsoSessionCacheListener listener = new SsoSessionCacheListener(ssoCache, mapper); + SsoSessionCacheListener listener = new SsoSessionCacheListener(ssoCache, mapper); ssoCache.addListener(listener); addSsoCacheCrossDcListener(ssoCache, listener); LOG.debugv("Added distributed SSO session cache, lookup={0}, cache name={1}", cacheContainerLookup, cacheName); - SsoCacheSessionIdMapperUpdater updater = new SsoCacheSessionIdMapperUpdater(ssoCache, previousIdMapperUpdater) { + return new SsoCacheSessionIdMapperUpdater(ssoCache, previousIdMapperUpdater) { @Override - public void close() throws Exception { + public void close() { ssoCache.stop(); } }; - - return updater; } catch (NamingException ex) { LOG.warnv("Failed to obtain distributed session cache container, lookup={0}", cacheContainerLookup); return previousIdMapperUpdater; @@ -137,7 +135,7 @@ private static void addSsoCacheCrossDcListener(Cache ssoCache, return; } - final Set stores = getRemoteStores(ssoCache); + Set stores = getRemoteStores(ssoCache); if (stores == null || stores.isEmpty()) { return; } @@ -149,7 +147,7 @@ private static void addSsoCacheCrossDcListener(Cache ssoCache, } } - public static Set getRemoteStores(Cache ispnCache) { - return ispnCache.getAdvancedCache().getComponentRegistry().getComponent(PersistenceManager.class).getStores(RemoteStore.class); + public static Set getRemoteStores(Cache ispnCache) { + return ComponentRegistry.componentOf(ispnCache, PersistenceManager.class).getStores(RemoteStore.class); } } diff --git a/docs/guides/high-availability/examples/generated/ispn-single.yaml b/docs/guides/high-availability/examples/generated/ispn-single.yaml index a87e79f8f76..a8efeecdafd 100644 --- a/docs/guides/high-availability/examples/generated/ispn-single.yaml +++ b/docs/guides/high-availability/examples/generated/ispn-single.yaml @@ -224,7 +224,7 @@ spec: expose: type: Route configMapName: "cluster-config" - image: quay.io/infinispan/server:14.0.27.Final + image: quay.io/infinispan/server:15.0.3.Final configListener: enabled: false container: diff --git a/docs/guides/high-availability/examples/generated/ispn-site-a.yaml b/docs/guides/high-availability/examples/generated/ispn-site-a.yaml index b8c66d22635..49025f32ba5 100644 --- a/docs/guides/high-availability/examples/generated/ispn-site-a.yaml +++ b/docs/guides/high-availability/examples/generated/ispn-site-a.yaml @@ -363,7 +363,7 @@ spec: expose: type: Route configMapName: "cluster-config" - image: quay.io/infinispan/server:14.0.27.Final + image: quay.io/infinispan/server:15.0.3.Final configListener: enabled: false container: diff --git a/docs/guides/high-availability/examples/generated/ispn-site-b.yaml b/docs/guides/high-availability/examples/generated/ispn-site-b.yaml index 7320a6ed821..40913fb54be 100644 --- a/docs/guides/high-availability/examples/generated/ispn-site-b.yaml +++ b/docs/guides/high-availability/examples/generated/ispn-site-b.yaml @@ -363,7 +363,7 @@ spec: expose: type: Route configMapName: "cluster-config" - image: quay.io/infinispan/server:14.0.27.Final + image: quay.io/infinispan/server:15.0.3.Final configListener: enabled: false container: diff --git a/model/infinispan/pom.xml b/model/infinispan/pom.xml index 490fbc19dca..1deb2ac0e5b 100755 --- a/model/infinispan/pom.xml +++ b/model/infinispan/pom.xml @@ -59,11 +59,7 @@ org.infinispan - infinispan-core-jakarta - - - org.infinispan - infinispan-client-hotrod-jakarta + infinispan-core org.infinispan diff --git a/model/infinispan/src/main/java/org/keycloak/cluster/infinispan/InfinispanClusterProviderFactory.java b/model/infinispan/src/main/java/org/keycloak/cluster/infinispan/InfinispanClusterProviderFactory.java index b7b2846734a..39433acc5ba 100644 --- a/model/infinispan/src/main/java/org/keycloak/cluster/infinispan/InfinispanClusterProviderFactory.java +++ b/model/infinispan/src/main/java/org/keycloak/cluster/infinispan/InfinispanClusterProviderFactory.java @@ -20,13 +20,11 @@ import org.infinispan.Cache; import org.infinispan.client.hotrod.exceptions.HotRodClientException; import org.infinispan.lifecycle.ComponentStatus; -import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.notifications.Listener; import org.infinispan.notifications.cachemanagerlistener.annotation.ViewChanged; import org.infinispan.notifications.cachemanagerlistener.event.ViewChangedEvent; import org.infinispan.persistence.remote.RemoteStore; import org.infinispan.remoting.transport.Address; -import org.infinispan.remoting.transport.Transport; import org.jboss.logging.Logger; import org.keycloak.Config; import org.keycloak.cluster.ClusterProvider; @@ -35,10 +33,10 @@ import org.keycloak.common.util.Time; import org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory; import org.keycloak.connections.infinispan.InfinispanConnectionProvider; +import org.keycloak.connections.infinispan.InfinispanUtil; import org.keycloak.connections.infinispan.TopologyInfo; import org.keycloak.models.KeycloakSession; import org.keycloak.models.KeycloakSessionFactory; -import org.keycloak.connections.infinispan.InfinispanUtil; import java.io.Serializable; import java.util.Collection; @@ -47,7 +45,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Function; import java.util.stream.Collectors; /** @@ -72,7 +69,7 @@ public class InfinispanClusterProviderFactory implements ClusterProviderFactory // Just to extract notifications related stuff to separate class private InfinispanNotificationsManager notificationsManager; - private ExecutorService localExecutor = Executors.newCachedThreadPool(r -> { + private final ExecutorService localExecutor = Executors.newCachedThreadPool(r -> { Thread thread = Executors.defaultThreadFactory().newThread(r); thread.setName(this.getClass().getName() + "-" + thread.getName()); return thread; @@ -140,7 +137,7 @@ protected int initClusterStartupTime(KeycloakSession session) { static V putIfAbsentWithRetries(CrossDCAwareCacheFactory crossDCAwareCacheFactory, String key, V value, int taskTimeoutInSeconds) { AtomicReference resultRef = new AtomicReference<>(); - Retry.executeWithBackoff((int iteration) -> { + Retry.executeWithBackoff(iteration -> { try { V result; @@ -196,17 +193,14 @@ public class ViewChangeListener { @ViewChanged public void viewChanged(ViewChangedEvent event) { - final Set removedNodesAddresses = convertAddresses(event.getOldMembers()); - final Set newAddresses = convertAddresses(event.getNewMembers()); + Set removedNodesAddresses = convertAddresses(event.getOldMembers()); + Set newAddresses = convertAddresses(event.getNewMembers()); // Use separate thread to avoid potential deadlock localExecutor.execute(() -> { try { - EmbeddedCacheManager cacheManager = workCache.getCacheManager(); - Transport transport = cacheManager.getTransport(); - // Coordinator makes sure that entries for outdated nodes are cleaned up - if (transport != null && transport.isCoordinator()) { + if (workCache.getCacheManager().isCoordinator()) { removedNodesAddresses.removeAll(newAddresses); @@ -230,14 +224,7 @@ public void viewChanged(ViewChangedEvent event) { } private Set convertAddresses(Collection
addresses) { - return addresses.stream().map(new Function() { - - @Override - public String apply(Address address) { - return address.toString(); - } - - }).collect(Collectors.toSet()); + return addresses.stream().map(Object::toString).collect(Collectors.toSet()); } } diff --git a/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanMultiSiteLoadBalancerCheckProvider.java b/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanMultiSiteLoadBalancerCheckProvider.java index 640db84f099..704cefde06d 100644 --- a/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanMultiSiteLoadBalancerCheckProvider.java +++ b/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanMultiSiteLoadBalancerCheckProvider.java @@ -18,6 +18,7 @@ package org.keycloak.connections.infinispan; import org.infinispan.Cache; +import org.infinispan.factories.ComponentRegistry; import org.infinispan.persistence.manager.PersistenceManager; import org.jboss.logging.Logger; import org.keycloak.health.LoadBalancerCheckProvider; @@ -60,9 +61,7 @@ public boolean isDown() { return true; // no need to check other caches } - PersistenceManager persistenceManager = cache.getAdvancedCache() - .getComponentRegistry() - .getComponent(PersistenceManager.class); + var persistenceManager = ComponentRegistry.componentOf(cache, PersistenceManager.class); if (persistenceManager != null && !persistenceManager.isAvailable()) { LOG.debugf("PersistenceManager for cache '%s' is down.", cacheName); diff --git a/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanUtil.java b/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanUtil.java index 5d3c9ec7da7..95e901a330f 100644 --- a/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanUtil.java +++ b/model/infinispan/src/main/java/org/keycloak/connections/infinispan/InfinispanUtil.java @@ -17,11 +17,6 @@ package org.keycloak.connections.infinispan; -import java.time.Instant; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; - import org.infinispan.Cache; import org.infinispan.client.hotrod.ProtocolVersion; import org.infinispan.client.hotrod.RemoteCache; @@ -34,7 +29,7 @@ import org.infinispan.configuration.global.GlobalConfigurationBuilder; import org.infinispan.configuration.global.TransportConfigurationBuilder; import org.infinispan.eviction.EvictionStrategy; -import org.infinispan.eviction.EvictionType; +import org.infinispan.factories.ComponentRegistry; import org.infinispan.factories.GlobalComponentRegistry; import org.infinispan.factories.impl.BasicComponentRegistry; import org.infinispan.factories.impl.ComponentRef; @@ -48,6 +43,11 @@ import org.keycloak.common.util.Time; import org.keycloak.models.KeycloakSession; +import java.time.Instant; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + /** * @author Marek Posolda */ @@ -58,12 +58,12 @@ public class InfinispanUtil { public static final int MAXIMUM_REPLACE_RETRIES = 25; // See if we have RemoteStore (external JDG) configured for cross-Data-Center scenario - public static Set getRemoteStores(Cache ispnCache) { - return ispnCache.getAdvancedCache().getComponentRegistry().getComponent(PersistenceManager.class).getStores(RemoteStore.class); + public static Set getRemoteStores(Cache ispnCache) { + return ComponentRegistry.componentOf(ispnCache, PersistenceManager.class).getStores(RemoteStore.class); } - public static RemoteCache getRemoteCache(Cache ispnCache) { + public static RemoteCache getRemoteCache(Cache ispnCache) { Set remoteStores = getRemoteStores(ispnCache); if (remoteStores.isEmpty()) { return null; @@ -88,10 +88,9 @@ public static TopologyInfo getTopologyInfo(KeycloakSession session) { * @param lifespanOrigMs * @return */ - public static long toHotrodTimeMs(BasicCache ispnCache, long lifespanOrigMs) { - if (ispnCache instanceof RemoteCache && lifespanOrigMs > 2592000000L) { - RemoteCache remoteCache = (RemoteCache) ispnCache; - ProtocolVersion protocolVersion = remoteCache.getRemoteCacheManager().getConfiguration().version(); + public static long toHotrodTimeMs(BasicCache ispnCache, long lifespanOrigMs) { + if (ispnCache instanceof RemoteCache remoteCache && lifespanOrigMs > 2592000000L) { + ProtocolVersion protocolVersion = remoteCache.getRemoteCacheContainer().getConfiguration().version(); if (ProtocolVersion.PROTOCOL_VERSION_30.compareTo(protocolVersion) > 0) { return Time.currentTimeMillis() + lifespanOrigMs; } @@ -103,7 +102,7 @@ public static long toHotrodTimeMs(BasicCache ispnCache, long lifespanOrigMs) { private static final Object CHANNEL_INIT_SYNCHRONIZER = new Object(); public static void configureTransport(GlobalConfigurationBuilder gcb, String nodeName, String siteName, String jgroupsUdpMcastAddr, - String jgroupsConfigPath) { + String jgroupsConfigPath) { if (nodeName == null) { gcb.transport().defaultTransport(); } else { @@ -166,9 +165,8 @@ public static ConfigurationBuilder getActionTokenCacheConfig() { ConfigurationBuilder cb = createCacheConfigurationBuilder(); cb.memory() - .evictionStrategy(EvictionStrategy.NONE) - .evictionType(EvictionType.COUNT) - .size(InfinispanConnectionProvider.ACTION_TOKEN_CACHE_DEFAULT_MAX); + .whenFull(EvictionStrategy.MANUAL) + .maxCount(InfinispanConnectionProvider.ACTION_TOKEN_CACHE_DEFAULT_MAX); cb.expiration() .maxIdle(InfinispanConnectionProvider.ACTION_TOKEN_MAX_IDLE_SECONDS, TimeUnit.SECONDS) .wakeUpInterval(InfinispanConnectionProvider.ACTION_TOKEN_WAKE_UP_INTERVAL_SECONDS, TimeUnit.SECONDS); @@ -209,7 +207,7 @@ public static Runnable setTimeServiceToKeycloakTime(EmbeddedCacheManager cacheMa * @return the original component that was replaced */ private static T replaceComponent(EmbeddedCacheManager cacheMgr, Class componentType, T replacementComponent, boolean rewire) { - GlobalComponentRegistry cr = cacheMgr.getGlobalComponentRegistry(); + GlobalComponentRegistry cr = GlobalComponentRegistry.of(cacheMgr); BasicComponentRegistry bcr = cr.getComponent(BasicComponentRegistry.class); ComponentRef old = bcr.getComponent(componentType); bcr.replaceComponent(componentType.getName(), replacementComponent, true); diff --git a/model/infinispan/src/main/java/org/keycloak/connections/infinispan/TopologyInfo.java b/model/infinispan/src/main/java/org/keycloak/connections/infinispan/TopologyInfo.java index cefe17d3675..7ac528f09ec 100644 --- a/model/infinispan/src/main/java/org/keycloak/connections/infinispan/TopologyInfo.java +++ b/model/infinispan/src/main/java/org/keycloak/connections/infinispan/TopologyInfo.java @@ -17,12 +17,9 @@ package org.keycloak.connections.infinispan; -import java.net.InetSocketAddress; -import java.security.SecureRandom; -import java.util.Objects; - import org.infinispan.Cache; import org.infinispan.distribution.DistributionManager; +import org.infinispan.factories.GlobalComponentRegistry; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.remoting.transport.Address; import org.infinispan.remoting.transport.LocalModeAddress; @@ -30,12 +27,14 @@ import org.infinispan.remoting.transport.jgroups.JGroupsAddress; import org.infinispan.remoting.transport.jgroups.JGroupsTransport; import org.jboss.logging.Logger; -import org.jgroups.Event; -import org.jgroups.JChannel; import org.jgroups.stack.IpAddress; import org.jgroups.util.NameCache; import org.keycloak.Config; +import java.net.InetSocketAddress; +import java.security.SecureRandom; +import java.util.Objects; + /** * @author Marek Posolda */ @@ -66,9 +65,9 @@ public TopologyInfo(EmbeddedCacheManager cacheManager, Config.Scope config, bool } if (!embedded) { - Transport transport = cacheManager.getTransport(); - if (transport != null) { - nodeName = transport.getAddress().toString(); + var addr = cacheManager.getAddress(); + if (addr != null) { + nodeName = addr.toString(); siteName = cacheManager.getCacheManagerConfiguration().transport().siteId(); if (siteName == null) { siteName = config.get("siteName"); @@ -133,7 +132,7 @@ public String toString() { /** * True if I am primary owner of the key in case of distributed caches. In case of local caches, always return true */ - public boolean amIOwner(Cache cache, Object key) { + public boolean amIOwner(Cache cache, Object key) { Address myAddress = cache.getCacheManager().getAddress(); Address objectOwnerAddress = getOwnerAddress(cache, key); @@ -145,7 +144,7 @@ public boolean amIOwner(Cache cache, Object key) { /** * Get route to be used as the identifier for sticky session. Return null if I am not able to find the appropriate route (or in case of local mode) */ - public String getRouteName(Cache cache, Object key) { + public String getRouteName(Cache cache, Object key) { if (cache.getCacheConfiguration().clustering().cacheMode().isClustered() && isGeneratedNodeName) { logger.warn("Clustered configuration used, but node name is not properly set. Make sure to start server with jboss.node.name property identifying cluster node"); } @@ -168,11 +167,11 @@ public String getRouteName(Cache cache, Object key) { // If no logical name exists, create one using physical address if (name == null) { - Transport transport = cache.getCacheManager().getTransport(); - JChannel jgroupsChannel = ((JGroupsTransport) transport).getChannel(); - - IpAddress ipAddress = (IpAddress) jgroupsChannel.down(new Event(Event.GET_PHYSICAL_ADDRESS, jgroupsAddress)); - // Physical address might be null if node is no longer a member of the cluster + var transport = GlobalComponentRegistry.componentOf(cache.getCacheManager(), Transport.class); + var channel = ((JGroupsTransport) transport).getChannel(); + var ipAddress = (IpAddress) channel.getProtocolStack().getTransport().localPhysicalAddress(); + // Physical address might be null if node is no longer a member of the cluster. + // This seems broken, it is returning the IP/PORT for JGroups!? InetSocketAddress socketAddress = (ipAddress != null) ? new InetSocketAddress(ipAddress.getIpAddress(), ipAddress.getPort()) : new InetSocketAddress(0); name = String.format("%s:%s", socketAddress.getHostString(), socketAddress.getPort()); @@ -183,21 +182,16 @@ public String getRouteName(Cache cache, Object key) { } - private Address getOwnerAddress(Cache cache, Object key) { + private Address getOwnerAddress(Cache cache, Object key) { DistributionManager dist = cache.getAdvancedCache().getDistributionManager(); - Address address = (dist != null) && !cache.getCacheConfiguration().clustering().cacheMode().isScattered() ? - dist.getCacheTopology().getDistribution(key).primary() : - cache.getCacheManager().getAddress(); - - return address; + return dist == null ? cache.getCacheManager().getAddress() : dist.getCacheTopology().getDistribution(key).primary(); } // See org.wildfly.clustering.server.group.CacheGroup private static org.jgroups.Address toJGroupsAddress(Address address) { if ((address == null) || (address == LocalModeAddress.INSTANCE)) return null; - if (address instanceof JGroupsAddress) { - JGroupsAddress jgroupsAddress = (JGroupsAddress) address; + if (address instanceof JGroupsAddress jgroupsAddress) { return jgroupsAddress.getJGroupsAddress(); } throw new IllegalArgumentException(address.toString()); diff --git a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserLoginFailureProviderFactory.java b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserLoginFailureProviderFactory.java index 467fc4f9e7f..79b16bb9d02 100644 --- a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserLoginFailureProviderFactory.java +++ b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserLoginFailureProviderFactory.java @@ -202,11 +202,8 @@ public void run(KeycloakSession session) { InfinispanCacheInitializer initializer = new InfinispanCacheInitializer(sessionFactory, workCache, new RemoteCacheSessionsLoader(cacheName, sessionsPerSegment), "remoteCacheLoad::" + cacheName, maxErrors, getStalledTimeoutInSeconds(defaultStateTransferTimeout)); - - initializer.initCache(); initializer.loadSessions(); } - }); log.debugf("Pre-loading login failures from remote cache '%s' finished", cacheName); diff --git a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserSessionProviderFactory.java b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserSessionProviderFactory.java index 745b4ba487d..84fc24256c7 100755 --- a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserSessionProviderFactory.java +++ b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/InfinispanUserSessionProviderFactory.java @@ -399,11 +399,8 @@ public void run(KeycloakSession session) { InfinispanCacheInitializer initializer = new InfinispanCacheInitializer(sessionFactory, workCache, new RemoteCacheSessionsLoader(cacheName, sessionsPerSegment), "remoteCacheLoad::" + cacheName, maxErrors, getStalledTimeoutInSeconds(defaultStateTransferTimeout)); - - initializer.initCache(); initializer.loadSessions(); } - }); log.debugf("Pre-loading sessions from remote cache '%s' finished", cacheName); diff --git a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/BaseCacheInitializer.java b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/BaseCacheInitializer.java index f128da6694d..d18c7d19aaf 100644 --- a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/BaseCacheInitializer.java +++ b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/BaseCacheInitializer.java @@ -17,15 +17,14 @@ package org.keycloak.models.sessions.infinispan.initializer; -import java.io.Serializable; - import org.infinispan.Cache; import org.infinispan.context.Flag; import org.infinispan.lifecycle.ComponentStatus; -import org.infinispan.remoting.transport.Transport; import org.jboss.logging.Logger; import org.keycloak.models.KeycloakSessionFactory; +import java.io.Serializable; + /** * @author Marek Posolda */ @@ -74,21 +73,15 @@ protected InitializerState getStateFromCache() { } - protected void saveStateToCache(final InitializerState state) { + protected void saveStateToCache(InitializerState state) { // 3 attempts to send the message (it may fail if some node fails in the meantime) - retry(3, new Runnable() { - - @Override - public void run() { - - // Save this synchronously to ensure all nodes read correct state - // We ignore cacheStore for now, so that in Cross-DC scenario (with RemoteStore enabled) is the remoteStore ignored. - BaseCacheInitializer.this.workCache.getAdvancedCache(). - withFlags(Flag.IGNORE_RETURN_VALUES, Flag.FORCE_SYNCHRONOUS, Flag.SKIP_CACHE_STORE, Flag.SKIP_CACHE_LOAD) - .put(stateKey, state); - } - + retry(3, () -> { + // Save this synchronously to ensure all nodes read correct state + // We ignore cacheStore for now, so that in Cross-DC scenario (with RemoteStore enabled) is the remoteStore ignored. + BaseCacheInitializer.this.workCache.getAdvancedCache(). + withFlags(Flag.IGNORE_RETURN_VALUES, Flag.FORCE_SYNCHRONOUS, Flag.SKIP_CACHE_STORE, Flag.SKIP_CACHE_LOAD) + .put(stateKey, state); }); } diff --git a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/InfinispanCacheInitializer.java b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/InfinispanCacheInitializer.java index 49bf009c85e..70ba4c2b784 100755 --- a/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/InfinispanCacheInitializer.java +++ b/model/infinispan/src/main/java/org/keycloak/models/sessions/infinispan/initializer/InfinispanCacheInitializer.java @@ -18,7 +18,6 @@ package org.keycloak.models.sessions.infinispan.initializer; import org.infinispan.Cache; -import org.infinispan.factories.ComponentRegistry; import org.jboss.logging.Logger; import org.keycloak.models.KeycloakSession; import org.keycloak.models.KeycloakSessionFactory; @@ -26,9 +25,9 @@ import org.keycloak.models.utils.KeycloakModelUtils; import java.io.Serializable; -import java.util.concurrent.ConcurrentLinkedQueue; import java.util.List; import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; /** * Startup initialization for reading persistent userSessions to be filled into infinispan/memory. @@ -53,18 +52,6 @@ public InfinispanCacheInitializer(KeycloakSessionFactory sessionFactory, Cache results = new ConcurrentLinkedQueue<>(); + Queue results = new ConcurrentLinkedQueue<>(); for (Integer segment : segments) { SessionLoader.WorkerContext workerCtx = sessionLoader.computeWorkerContext(segment); diff --git a/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGCachePutTest.java b/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGCachePutTest.java index 6e537e526c2..eabfdb8ebce 100644 --- a/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGCachePutTest.java +++ b/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGCachePutTest.java @@ -17,11 +17,6 @@ package org.keycloak.cluster.infinispan; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.atomic.AtomicInteger; - import org.infinispan.Cache; import org.infinispan.client.hotrod.Flag; import org.infinispan.client.hotrod.RemoteCache; @@ -31,12 +26,17 @@ import org.infinispan.client.hotrod.event.ClientCacheEntryCreatedEvent; import org.infinispan.client.hotrod.event.ClientCacheEntryModifiedEvent; import org.infinispan.client.hotrod.exceptions.HotRodClientException; +import org.infinispan.factories.ComponentRegistry; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.persistence.manager.PersistenceManager; import org.infinispan.persistence.remote.RemoteStore; import org.infinispan.persistence.remote.configuration.RemoteStoreConfigurationBuilder; import org.keycloak.connections.infinispan.InfinispanConnectionProvider; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + /** * Test concurrency for remoteStore (backed by HotRod RemoteCaches) against external JDG. Especially tests "putIfAbsent" contract. * @@ -46,11 +46,7 @@ */ public class ConcurrencyJDGCachePutTest { - private static Map state = new HashMap<>(); - - private RemoteCache remoteCache1; - private RemoteCache remoteCache2; - + private static final Map state = new HashMap<>(); public static void main(String[] args) throws Exception { // Init map somehow @@ -105,7 +101,8 @@ private static Worker createWorker(int threadId) { System.out.println("Retrieved cache: " + threadId); - RemoteStore remoteStore = cache.getAdvancedCache().getComponentRegistry().getComponent(PersistenceManager.class).getStores(RemoteStore.class).iterator().next(); + RemoteStore remoteStore = ComponentRegistry.componentOf(cache, PersistenceManager.class) + .getStores(RemoteStore.class).iterator().next(); HotRodListener listener = new HotRodListener(); remoteStore.getRemoteCache().addClientListener(listener); @@ -119,14 +116,14 @@ public static class HotRodListener { //private AtomicInteger listenerCount = new AtomicInteger(0); @ClientCacheEntryCreated - public void created(ClientCacheEntryCreatedEvent event) { - String cacheKey = (String) event.getKey(); + public void created(ClientCacheEntryCreatedEvent event) { + String cacheKey = event.getKey(); state.get(cacheKey).successfulListenerWrites.incrementAndGet(); } @ClientCacheEntryModified - public void updated(ClientCacheEntryModifiedEvent event) { - String cacheKey = (String) event.getKey(); + public void updated(ClientCacheEntryModifiedEvent event) { + String cacheKey = event.getKey(); state.get(cacheKey).successfulListenerWrites.incrementAndGet(); } @@ -171,7 +168,10 @@ public static int getClusterStartupTime(Cache cache, String cac //Integer existingClusterStartTime = (Integer) cache.putIfAbsent(cacheKey, startupTime); // Concurrency works fine with this - RemoteCache remoteCache = cache.getAdvancedCache().getComponentRegistry().getComponent(PersistenceManager.class).getStores(RemoteStore.class).iterator().next().getRemoteCache(); + RemoteCache remoteCache = ComponentRegistry.componentOf(cache, PersistenceManager.class) + .getStores(RemoteStore.class) + .iterator().next() + .getRemoteCache(); Integer existingClusterStartTime = null; for (int i=0 ; i<10 ; i++) { diff --git a/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGRemoteCacheClientListenersTest.java b/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGRemoteCacheClientListenersTest.java index 26b14435f25..99c7e8312f6 100644 --- a/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGRemoteCacheClientListenersTest.java +++ b/model/infinispan/src/test/java/org/keycloak/cluster/infinispan/ConcurrencyJDGRemoteCacheClientListenersTest.java @@ -17,12 +17,6 @@ package org.keycloak.cluster.infinispan; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicInteger; - import org.infinispan.Cache; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.VersionedValue; @@ -31,6 +25,7 @@ import org.infinispan.client.hotrod.annotation.ClientListener; import org.infinispan.client.hotrod.event.ClientCacheEntryCreatedEvent; import org.infinispan.client.hotrod.event.ClientCacheEntryModifiedEvent; +import org.infinispan.factories.ComponentRegistry; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.persistence.manager.PersistenceManager; import org.infinispan.persistence.remote.RemoteStore; @@ -39,6 +34,12 @@ import org.keycloak.connections.infinispan.InfinispanConnectionProvider; import org.keycloak.connections.infinispan.InfinispanUtil; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; + /** * Test that hotrod ClientListeners are correctly executed as expected * @@ -68,11 +69,11 @@ public class ConcurrencyJDGRemoteCacheClientListenersTest { // Helper map to track if listeners were executed - private static Map state = new HashMap<>(); + private static final Map state = new HashMap<>(); - private static AtomicInteger totalListenerCalls = new AtomicInteger(0); + private static final AtomicInteger totalListenerCalls = new AtomicInteger(0); - private static AtomicInteger totalErrors = new AtomicInteger(0); + private static final AtomicInteger totalErrors = new AtomicInteger(0); public static void main(String[] args) throws Exception { @@ -134,7 +135,8 @@ private static Worker createWorker(int threadId) { System.out.println("Retrieved cache: " + threadId); - RemoteStore remoteStore = cache.getAdvancedCache().getComponentRegistry().getComponent(PersistenceManager.class).getStores(RemoteStore.class).iterator().next(); + RemoteStore remoteStore = ComponentRegistry.componentOf(cache, PersistenceManager.class) + .getStores(RemoteStore.class).iterator().next(); HotRodListener listener = new HotRodListener(cache, threadId); remoteStore.getRemoteCache().addClientListener(listener); @@ -147,7 +149,7 @@ public static class HotRodListener { private final RemoteCache remoteCache; private final int threadId; - private Executor executor; + private final Executor executor; public HotRodListener(Cache cache, int threadId) { this.remoteCache = InfinispanUtil.getRemoteCache(cache); @@ -158,26 +160,15 @@ public HotRodListener(Cache cache, int threadId) { //private AtomicInteger listenerCount = new AtomicInteger(0); @ClientCacheEntryCreated - public void created(ClientCacheEntryCreatedEvent event) { - String cacheKey = (String) event.getKey(); - - executor.execute(() -> { - - event(cacheKey, event.getVersion(), true); - - }); + public void created(ClientCacheEntryCreatedEvent event) { + executor.execute(() -> event(event.getKey(), event.getVersion(), true)); } @ClientCacheEntryModified - public void updated(ClientCacheEntryModifiedEvent event) { - String cacheKey = (String) event.getKey(); - executor.execute(() -> { - - event(cacheKey, event.getVersion(), false); - - }); + public void updated(ClientCacheEntryModifiedEvent event) { + executor.execute(() -> event(event.getKey(), event.getVersion(), false)); } diff --git a/model/infinispan/src/test/java/org/keycloak/keys/infinispan/InfinispanKeyStorageProviderTest.java b/model/infinispan/src/test/java/org/keycloak/keys/infinispan/InfinispanKeyStorageProviderTest.java index 1dfec03f973..477121863f4 100644 --- a/model/infinispan/src/test/java/org/keycloak/keys/infinispan/InfinispanKeyStorageProviderTest.java +++ b/model/infinispan/src/test/java/org/keycloak/keys/infinispan/InfinispanKeyStorageProviderTest.java @@ -17,19 +17,11 @@ package org.keycloak.keys.infinispan; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.FutureTask; -import java.util.concurrent.atomic.AtomicInteger; - import org.infinispan.Cache; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.global.GlobalConfigurationBuilder; import org.infinispan.eviction.EvictionStrategy; -import org.infinispan.eviction.EvictionType; import org.infinispan.manager.DefaultCacheManager; import org.junit.After; import org.junit.Assert; @@ -40,12 +32,19 @@ import org.keycloak.crypto.PublicKeysWrapper; import org.keycloak.keys.PublicKeyLoader; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.FutureTask; +import java.util.concurrent.atomic.AtomicInteger; + /** * @author Marek Posolda */ public class InfinispanKeyStorageProviderTest { - private Map counters = new ConcurrentHashMap<>(); + private final Map counters = new ConcurrentHashMap<>(); Cache keys = getKeysCache(); Map> tasksInProgress = new ConcurrentHashMap<>(); @@ -157,14 +156,13 @@ public PublicKeysWrapper loadKeys() throws Exception { protected Cache getKeysCache() { GlobalConfigurationBuilder gcb = new GlobalConfigurationBuilder(); gcb.jmx().domain(InfinispanConnectionProvider.JMX_DOMAIN).enable(); - final DefaultCacheManager cacheManager = new DefaultCacheManager(gcb.build()); + DefaultCacheManager cacheManager = new DefaultCacheManager(gcb.build()); ConfigurationBuilder cb = new ConfigurationBuilder(); cb.memory() - .evictionStrategy(EvictionStrategy.REMOVE) - .evictionType(EvictionType.COUNT) - .size(InfinispanConnectionProvider.KEYS_CACHE_DEFAULT_MAX); - cb.jmxStatistics().enabled(true); + .whenFull(EvictionStrategy.REMOVE) + .maxCount(InfinispanConnectionProvider.KEYS_CACHE_DEFAULT_MAX); + cb.statistics().enabled(true); Configuration cfg = cb.build(); cacheManager.defineConfiguration(InfinispanConnectionProvider.KEYS_CACHE_NAME, cfg); diff --git a/operator/src/test/resources/cache-ispn.xml b/operator/src/test/resources/cache-ispn.xml index b50cb347620..672e51fa23f 100644 --- a/operator/src/test/resources/cache-ispn.xml +++ b/operator/src/test/resources/cache-ispn.xml @@ -18,8 +18,8 @@ + xsi:schemaLocation="urn:infinispan:config:15.0 http://www.infinispan.org/schemas/infinispan-config-15.0.xsd" + xmlns="urn:infinispan:config:15.0"> diff --git a/pom.xml b/pom.xml index 98ada6cdba1..f3800e6959b 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,7 @@ 2.2.224 6.2.13.Final 6.2.13.Final - 14.0.27.Final + 15.0.3.Final 2.1.1 @@ -311,42 +311,6 @@ pom import - - org.infinispan - infinispan-jboss-marshalling - ${infinispan.version} - - - - org.infinispan - infinispan-core - - - org.infinispan - infinispan-commons - - - - - org.infinispan - infinispan-cachestore-remote - ${infinispan.version} - - - - org.infinispan - infinispan-core - - - org.infinispan - infinispan-commons - - - org.infinispan - infinispan-client-hotrod - - - io.quarkus.platform quarkus-bom diff --git a/quarkus/config-api/pom.xml b/quarkus/config-api/pom.xml index 8b9737609a1..b7a56a626d9 100755 --- a/quarkus/config-api/pom.xml +++ b/quarkus/config-api/pom.xml @@ -38,7 +38,7 @@ org.infinispan - infinispan-commons-jakarta + infinispan-commons diff --git a/quarkus/runtime/pom.xml b/quarkus/runtime/pom.xml index 8b7448c2e3e..def75eba02d 100644 --- a/quarkus/runtime/pom.xml +++ b/quarkus/runtime/pom.xml @@ -457,19 +457,9 @@ - - org.infinispan - infinispan-client-hotrod-jakarta - org.infinispan infinispan-cachestore-remote - - - * - * - - com.github.ua-parser @@ -558,11 +548,11 @@ org.infinispan - infinispan-commons-jakarta + infinispan-commons org.infinispan - infinispan-core-jakarta + infinispan-core org.infinispan diff --git a/quarkus/runtime/src/main/resources/cache-ispn.xml b/quarkus/runtime/src/main/resources/cache-ispn.xml index b50cb347620..672e51fa23f 100644 --- a/quarkus/runtime/src/main/resources/cache-ispn.xml +++ b/quarkus/runtime/src/main/resources/cache-ispn.xml @@ -18,8 +18,8 @@ + xsi:schemaLocation="urn:infinispan:config:15.0 http://www.infinispan.org/schemas/infinispan-config-15.0.xsd" + xmlns="urn:infinispan:config:15.0"> diff --git a/quarkus/runtime/src/main/resources/cache-local.xml b/quarkus/runtime/src/main/resources/cache-local.xml index b44185402a9..582e9fef87d 100644 --- a/quarkus/runtime/src/main/resources/cache-local.xml +++ b/quarkus/runtime/src/main/resources/cache-local.xml @@ -18,8 +18,8 @@ + xsi:schemaLocation="urn:infinispan:config:15.0 http://www.infinispan.org/schemas/infinispan-config-15.0.xsd" + xmlns="urn:infinispan:config:15.0"> diff --git a/quarkus/tests/integration/src/test/resources/ExternalInfinispan/kcb-infinispan-cache-remote-store-config.xml b/quarkus/tests/integration/src/test/resources/ExternalInfinispan/kcb-infinispan-cache-remote-store-config.xml index e008424f5b3..b69e7d6ee1f 100644 --- a/quarkus/tests/integration/src/test/resources/ExternalInfinispan/kcb-infinispan-cache-remote-store-config.xml +++ b/quarkus/tests/integration/src/test/resources/ExternalInfinispan/kcb-infinispan-cache-remote-store-config.xml @@ -21,9 +21,9 @@ + xsi:schemaLocation="urn:infinispan:config:15.0 https://www.infinispan.org/schemas/infinispan-config-15.0.xsd + urn:infinispan:config:store:remote:15.0 https://www.infinispan.org/schemas/infinispan-cachestore-remote-config-15.0.xsd" + xmlns="urn:infinispan:config:15.0"> @@ -47,8 +47,8 @@ - - + - - + - - + - - + - - + - - + - - + - - + org.infinispan - infinispan-core-jakarta - - - org.infinispan - infinispan-client-hotrod-jakarta + infinispan-core org.infinispan infinispan-tasks-api - - - org.infinispan - infinispan-core - - diff --git a/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/model/infinispan/InfinispanTimeServiceTask.java b/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/model/infinispan/InfinispanTimeServiceTask.java index 30ef9266acb..2f3f3c74592 100644 --- a/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/model/infinispan/InfinispanTimeServiceTask.java +++ b/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/model/infinispan/InfinispanTimeServiceTask.java @@ -48,14 +48,14 @@ public InfinispanTimeServiceTask() { @Override public String call() { EmbeddedCacheManager cacheManager = context.getCacheManager(); - Map params = new HashMap(); + Map params = new HashMap<>(); if (this.context.getParameters().isPresent()) params = this.context.getParameters().get(); if (params.containsKey("timeService")) { offset = (int) params.get("timeService"); // rewire the Time service - GlobalComponentRegistry cr = cacheManager.getGlobalComponentRegistry(); + GlobalComponentRegistry cr = GlobalComponentRegistry.of(cacheManager); BasicComponentRegistry bcr = cr.getComponent(BasicComponentRegistry.class); bcr.replaceComponent(TimeService.class.getName(), KEYCLOAK_TIME_SERVICE, true); cr.rewire(); diff --git a/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/resource/TestCacheResource.java b/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/resource/TestCacheResource.java index d1f042da787..8b907d2dabf 100644 --- a/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/resource/TestCacheResource.java +++ b/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/resource/TestCacheResource.java @@ -17,29 +17,28 @@ package org.keycloak.testsuite.rest.resource; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.stream.Collectors; - import jakarta.ws.rs.Consumes; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; - import org.infinispan.Cache; import org.infinispan.client.hotrod.RemoteCache; +import org.infinispan.stream.CacheCollectors; import org.keycloak.connections.infinispan.InfinispanConnectionProvider; +import org.keycloak.connections.infinispan.InfinispanUtil; import org.keycloak.models.KeycloakSession; import org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper; import org.keycloak.models.sessions.infinispan.entities.UserSessionEntity; -import org.keycloak.connections.infinispan.InfinispanUtil; import org.keycloak.utils.MediaType; -import org.infinispan.stream.CacheCollectors; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; /** * @author Marek Posolda @@ -114,12 +113,10 @@ public void processExpiration() { @Path("/remote-cache-stats") @Produces(MediaType.APPLICATION_JSON) public Map getRemoteCacheStats() { - RemoteCache remoteCache = InfinispanUtil.getRemoteCache(cache); - if (remoteCache == null) { - return new HashMap<>(); - } else { - return remoteCache.stats().getStatsMap(); - } + var remoteCache = InfinispanUtil.getRemoteCache(cache); + return remoteCache == null ? + Collections.emptyMap() : + remoteCache.serverStatistics().getStatsMap(); } @@ -127,11 +124,11 @@ public Map getRemoteCacheStats() { @Path("/remote-cache-last-session-refresh/{user-session-id}") @Produces(MediaType.APPLICATION_JSON) public int getRemoteCacheLastSessionRefresh(@PathParam("user-session-id") String userSessionId) { - RemoteCache remoteCache = InfinispanUtil.getRemoteCache(cache); + RemoteCache> remoteCache = InfinispanUtil.getRemoteCache(cache); if (remoteCache == null) { return -1; } else { - SessionEntityWrapper userSession = (SessionEntityWrapper) remoteCache.get(userSessionId); + SessionEntityWrapper userSession = remoteCache.get(userSessionId); if (userSession == null) { return -1; } else { diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml index 763dafea053..595d24bcb57 100644 --- a/testsuite/integration-arquillian/tests/base/pom.xml +++ b/testsuite/integration-arquillian/tests/base/pom.xml @@ -151,7 +151,7 @@ org.infinispan - infinispan-server-hotrod-jakarta + infinispan-server-hotrod org.keycloak diff --git a/testsuite/integration-arquillian/tests/pom.xml b/testsuite/integration-arquillian/tests/pom.xml index bd63122c7d6..43564e79ed8 100644 --- a/testsuite/integration-arquillian/tests/pom.xml +++ b/testsuite/integration-arquillian/tests/pom.xml @@ -1819,7 +1819,7 @@ org.infinispan - infinispan-core-jakarta + infinispan-core diff --git a/testsuite/model/pom.xml b/testsuite/model/pom.xml index 4dc42c2e605..195c7acfaba 100644 --- a/testsuite/model/pom.xml +++ b/testsuite/model/pom.xml @@ -104,7 +104,7 @@ org.infinispan - infinispan-core-jakarta + infinispan-core org.postgresql diff --git a/testsuite/utils/pom.xml b/testsuite/utils/pom.xml index 9c271b2f811..cdcfa7e1485 100755 --- a/testsuite/utils/pom.xml +++ b/testsuite/utils/pom.xml @@ -232,7 +232,7 @@ org.infinispan - infinispan-core-jakarta + infinispan-core org.infinispan