Keycloak 26.2.5 released

21 views
Skip to first unread message

Stian Thorgersen

unread,
May 28, 2025, 5:07:54 AMMay 28
to keycloak-team, Keycloak Dev, Keycloak User

Alexander Schwartz

unread,
Jun 5, 2025, 3:00:21 AMJun 5
to Arif EROL, stho...@redhat.com, keycloak-team, Keycloak Dev, Keycloak User
Hi Arif,

for Keycloak 26.2.5 we fixed a bug that the stack configuration in the cache-ispn.xml file was ignored unless you passed in the stack name on the Keycloak CLI options. 

Keycloak 26.1+ provides jdbc_ping by default. So my recommendation is to remove all stack configurations from your Cache XML file. See https://www.keycloak.org/server/caching on how to pass in external IP addresses if that would be needed.

This would fit your description that it was working with 26.2.4 as you expected.

If you experience problems, and expect that there is a bug, please open a GitHub bug issue.

Best,
Alexander

On Thu, May 29, 2025 at 6:04 AM Arif EROL <arif....@gmail.com> wrote:
Hi,

Version 26.2.4 was working without any issues in my test environment. I tried upgrading to the newly released version 26.2.5, but I started seeing error logs in the console.

Below is the content of my cache-ispn.xml file, which was working fine in version 26.2.4:

<infinispan
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:infinispan:config:15.0 http://www.infinispan.org/schemas/infinispan-config-15.0.xsd"
        xmlns="urn:infinispan:config:15.0">
    <jgroups>
        <stack name="mssql-jdbc-ping-tcp" extends="tcp">
            <TCP external_addr="${env.JGROUPS_DISCOVERY_EXTERNAL_IP:127.0.0.1}" />
            <JDBC_PING2 connection_driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
                        connection_username="${env.KC_DB_USERNAME}" connection_password="${env.KC_DB_PASSWORD}"
                        connection_url="jdbc:sqlserver://${env.KC_DB_URL_HOST}:${env.KC_DB_URL_PORT:1433};databaseName=${env.KC_DB_URL_DATABASE}${env.KC_DB_URL_PROPERTIES:}"
                        initialize_sql="IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = '${env.KC_DB_SCHEMA:dbo}') BEGIN EXEC ('CREATE SCHEMA [${env.KC_DB_SCHEMA:dbo}] AUTHORIZATION [dbo]') END; IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='JGROUPS_PING' AND TABLE_SCHEMA='${env.KC_DB_SCHEMA:dbo}') CREATE TABLE ${env.KC_DB_SCHEMA:dbo}.JGROUPS_PING (address varchar(200) NOT NULL, name varchar(200) NULL, cluster_name varchar(200) NOT NULL, ip varchar(200) NOT NULL, coord bit NULL, constraint PK_JGROUPS_PING PRIMARY KEY (address));"
                        insert_single_sql="INSERT INTO ${env.KC_DB_SCHEMA:dbo}.JGROUPS_PING (address, name, cluster_name, ip, coord) values (?, ?, ?, '${env.JGROUPS_DISCOVERY_EXTERNAL_IP:127.0.0.1}', ?);"
delete_single_sql="DELETE FROM ${env.KC_DB_SCHEMA:dbo}.JGROUPS_PING WHERE address=?;"
                        select_all_pingdata_sql="SELECT address, name, ip, coord FROM ${env.KC_DB_SCHEMA:dbo}.JGROUPS_PING WHERE cluster_name=?;"
                        info_writer_sleep_time="500"
                        remove_all_data_on_view_change="true"
                        stack.combine="REPLACE"
                        stack.position="MPING" />
        </stack>
    </jgroups>

    <cache-container name="keycloak"> ...

In my initial test, the cluster node information was not being inserted into the JGROUPS_PING table.
When I changed the following line:

"insert_single_sql="INSERT INTO ${env.KC_DB_SCHEMA:dbo}.JGROUPS_PING (address, name, cluster_name, ip, coord) values (?, ?, ?, '${env.JGROUPS_DISCOVERY_EXTERNAL_IP:127.0.0.1}', ?);"
to:

"insert_single_sql="INSERT INTO ${env.KC_DB_SCHEMA:dbo}.JGROUPS_PING (address, name, cluster_name, ip, coord) VALUES (?, ?, ?, ?, ?);"
the node information started to appear in the table correctly.

However, at this point, I am seeing the following error log in the console:
"2025-05-29 02:22:44,595 ERROR [org.jgroups.protocols.JDBC_PING2] (main) a0f8ca45903c-14147: failed clearing the table for cluster ISPN: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'jgroups'.
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:270)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1735)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:675)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:594)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7745)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:4391)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:276)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:246)
keycloak-1  |   at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(SQLServerPreparedStatement.java:571)
keycloak-1  |   at org.jgroups.protocols.JDBC_PING2.clearTable(JDBC_PING2.java:389)
keycloak-1  |   at org.jgroups.protocols.JDBC_PING2.removeAll(JDBC_PING2.java:200)
keycloak-1  |   at org.jgroups.protocols.FILE_PING.handleView(FILE_PING.java:204)
keycloak-1  |   at org.jgroups.protocols.FILE_PING.down(FILE_PING.java:138)
keycloak-1  |   at org.jgroups.protocols.MERGE3.down(MERGE3.java:249)
keycloak-1  |   at org.jgroups.protocols.FD_SOCK2.down(FD_SOCK2.java:228)
keycloak-1  |   at org.jgroups.protocols.FailureDetection.down(FailureDetection.java:149)
keycloak-1  |   at org.jgroups.protocols.VERIFY_SUSPECT2.down(VERIFY_SUSPECT2.java:84)
keycloak-1  |   at org.jgroups.protocols.pbcast.NAKACK2.down(NAKACK2.java:632)
keycloak-1  |   at org.jgroups.protocols.UNICAST3.down(UNICAST3.java:661)
keycloak-1  |   at org.jgroups.protocols.pbcast.STABLE.down(STABLE.java:269)
keycloak-1  |   at org.jgroups.protocols.pbcast.GMS.installView(GMS.java:694)
keycloak-1  |   at org.jgroups.protocols.pbcast.ClientGmsImpl.becomeSingletonMember(ClientGmsImpl.java:251)
keycloak-1  |   at org.jgroups.protocols.pbcast.ClientGmsImpl.joinInternal(ClientGmsImpl.java:86)
keycloak-1  |   at org.jgroups.protocols.pbcast.ClientGmsImpl.join(ClientGmsImpl.java:37)
keycloak-1  |   at org.jgroups.protocols.pbcast.GMS.down(GMS.java:902)
keycloak-1  |   at org.jgroups.protocols.FlowControl.down(FlowControl.java:201)
keycloak-1  |   at org.jgroups.protocols.FlowControl.down(FlowControl.java:201)
keycloak-1  |   at org.jgroups.stack.Protocol.down(Protocol.java:308)
keycloak-1  |   at org.jgroups.protocols.FRAG2.down(FRAG2.java:103)
keycloak-1  |   at org.jgroups.stack.ProtocolStack.down(ProtocolStack.java:948)
keycloak-1  |   at org.jgroups.JChannel.down(JChannel.java:612)
keycloak-1  |   at org.jgroups.JChannel._connect(JChannel.java:825)
keycloak-1  |   at org.jgroups.JChannel.connect(JChannel.java:331)
keycloak-1  |   at org.jgroups.JChannel.connect(JChannel.java:321)
keycloak-1  |   at org.infinispan.remoting.transport.jgroups.JGroupsTransport.startJGroupsChannelIfNeeded(JGroupsTransport.java:581)
keycloak-1  |   at org.infinispan.remoting.transport.jgroups.JGroupsTransport.start(JGroupsTransport.java:456)
keycloak-1  |   at org.infinispan.remoting.transport.jgroups.CorePackageImpl$2.start(CorePackageImpl.java:65)
keycloak-1  |   at org.infinispan.remoting.transport.jgroups.CorePackageImpl$2.start(CorePackageImpl.java:50)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeStart(BasicComponentRegistryImpl.java:616)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:607)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl.startDependencies(BasicComponentRegistryImpl.java:634)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:598)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576)
keycloak-1  |   at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807)
keycloak-1  |   at org.infinispan.factories.GlobalComponentRegistry.preStart(GlobalComponentRegistry.java:307)
keycloak-1  |   at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:241)
keycloak-1  |   at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:778)
keycloak-1  |   at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:746)
keycloak-1  |   at org.infinispan.manager.DefaultCacheManager.<init>(DefaultCacheManager.java:412)
keycloak-1  |   at org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory.startEmbeddedCacheManager(CacheManagerFactory.java:339)
keycloak-1  |   at org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory.getOrCreateEmbeddedCacheManager(CacheManagerFactory.java:134)
keycloak-1  |   at org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory_Uq0wIYR2uOCznFEYZOJeeAi-Obg_Synthetic_ClientProxy.getOrCreateEmbeddedCacheManager(Unknown Source)
keycloak-1  |   at org.keycloak.quarkus.runtime.storage.infinispan.QuarkusCacheManagerProvider.getEmbeddedCacheManager(QuarkusCacheManagerProvider.java:33)
keycloak-1  |   at org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory.lazyInit(DefaultInfinispanConnectionProviderFactory.java:211)
keycloak-1  |   at org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory.create(DefaultInfinispanConnectionProviderFactory.java:119)
keycloak-1  |   at org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory.create(DefaultInfinispanConnectionProviderFactory.java:100)
keycloak-1  |   at org.keycloak.services.DefaultKeycloakSession.getOrCreateProvider(DefaultKeycloakSession.java:184)
keycloak-1  |   at org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:173)
keycloak-1  |   at org.keycloak.models.sessions.infinispan.InfinispanSingleUseObjectProviderFactory.getSingleUseObjectCache(InfinispanSingleUseObjectProviderFactory.java:82)
keycloak-1  |   at org.keycloak.models.sessions.infinispan.InfinispanSingleUseObjectProviderFactory.postInit(InfinispanSingleUseObjectProviderFactory.java:129)
keycloak-1  |   at org.keycloak.services.DefaultKeycloakSessionFactory.initializeProviders(DefaultKeycloakSessionFactory.java:168)
keycloak-1  |   at org.keycloak.services.DefaultKeycloakSessionFactory.initProviderFactories(DefaultKeycloakSessionFactory.java:145)
keycloak-1  |   at org.keycloak.services.DefaultKeycloakSessionFactory.initProviderFactories(DefaultKeycloakSessionFactory.java:126)
keycloak-1  |   at org.keycloak.quarkus.runtime.integration.QuarkusKeycloakSessionFactory.init(QuarkusKeycloakSessionFactory.java:87)
keycloak-1  |   at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication.createSessionFactory(QuarkusKeycloakApplication.java:67)
keycloak-1  |   at org.keycloak.services.resources.KeycloakApplication.startup(KeycloakApplication.java:90)
keycloak-1  |   at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication.onStartupEvent(QuarkusKeycloakApplication.java:52)
keycloak-1  |   at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication_Observer_onStartupEvent_GNZ8m5QenZ9h9VNelo7awjUZFDE.notify(Unknown Source)
keycloak-1  |   at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:365)
keycloak-1  |   at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:347)
keycloak-1  |   at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:81)
keycloak-1  |   at io.quarkus.arc.runtime.ArcRecorder.fireLifecycleEvent(ArcRecorder.java:163)
keycloak-1  |   at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:114)
keycloak-1  |   at io.quarkus.runner.recorded.LifecycleEventsBuildStep$startupEvent1144526294.deploy_0(Unknown Source)
keycloak-1  |   at io.quarkus.runner.recorded.LifecycleEventsBuildStep$startupEvent1144526294.deploy(Unknown Source)
keycloak-1  |   at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
keycloak-1  |   at io.quarkus.runtime.Application.start(Application.java:101)
keycloak-1  |   at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:121)
keycloak-1  |   at io.quarkus.runtime.Quarkus.run(Quarkus.java:77)
keycloak-1  |   at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:145)
keycloak-1  |   at org.keycloak.quarkus.runtime.cli.Picocli.start(Picocli.java:1002)
keycloak-1  |   at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:49)
keycloak-1  |   at org.keycloak.quarkus.runtime.cli.command.Start.fastStart(Start.java:79)
keycloak-1  |   at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:111)
keycloak-1  |   at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:71)
keycloak-1  |   at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:68)
keycloak-1  |   at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:36)
keycloak-1  |
keycloak-1  | 2025-05-29 02:22:44,631 DEBUG [org.jgroups.protocols.JDBC_PING2] (main) a0f8ca45903c-14147: removed a0f8ca45903c-14147 for cluster ISPN from database
keycloak-1  | 2025-05-29 02:22:44,634 DEBUG [org.jgroups.protocols.JDBC_PING2] (main) a0f8ca45903c-14147: inserted a0f8ca45903c-14147 for cluster ISPN
keycloak-1  | 2025-05-29 02:22:44,646 INFO  [org.infinispan.CLUSTER] (main) ISPN000094: Received new cluster view for channel ISPN: [a0f8ca45903c-14147|0] (1) [a0f8ca45903c-14147]
keycloak-1  | 2025-05-29 02:22:44,647 DEBUG [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (main) Joined: [a0f8ca45903c-14147], Left: []
keycloak-1  | 2025-05-29 02:22:44,649 INFO  [org.keycloak.infinispan.module.certificates.CertificateReloadManager] (main) Reloading JGroups Certificate
keycloak-1  | 2025-05-29 02:22:44,662 DEBUG [org.jgroups.protocols.pbcast.GMS] (main) a0f8ca45903c-14147: created cluster (first member). My view is [a0f8ca45903c-14147|0], impl is CoordGmsImpl
"

Just for your information. 

'Stian Thorgersen' via Keycloak User <keyclo...@googlegroups.com>, 28 May 2025 Çar, 12:07 tarihinde şunu yazdı:

--
You received this message because you are subscribed to the Google Groups "Keycloak User" group.
To unsubscribe from this group and stop receiving emails from it, send an email to keycloak-use...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/keycloak-user/CAJgngAeUWyuAGssJL%2BPQ6ECso5a4VJA6_D-kRey_QV6MZ5r2NQ%40mail.gmail.com.

--
You received this message because you are subscribed to the Google Groups "Keycloak User" group.
To unsubscribe from this group and stop receiving emails from it, send an email to keycloak-use...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/keycloak-user/CAFzQ4TC21wN6zBz5AvWB%3DJQG_rqHe30ckS2tEC_TY6Xq6VX1Vg%40mail.gmail.com.


--

Alexander Schwartz, RHCE

He/Him

Principal Software Engineer, Keycloak Maintainer

Red Hat - Germany remote

asch...@redhat.com   

Red Hat GmbH, Registered seat: Werner von Siemens Ring 12, D-85630 Grasbrunn, Germany 
Commercial register: Amtsgericht Muenchen/Munich, HRB 153243,
Managing Directors: Ryan Barnhart, Charles Cachera, Michael O'Neill, Amy Ross
Reply all
Reply to author
Forward
0 new messages