-
Bug
-
Resolution: Done
-
Undefined
-
None
Before reporting an issue
[x] I have read and understood the above terms for submitting issues, and I understand that my issue may be closed without action if I do not follow them.
Area
infinispan
Describe the bug
I run into this issue when my database gets reprovisioned while the Keycloak server is still running.
The DB becomes unreachable for 15-30 seconds, and then it should be fine again. I don't understand why this is happening, and it's making me hesitant to upgrade. I was previously using KC_CACHE_STACK: "kubernetes".
Couldn't this same state occur during normal operation—for example, if the DB is temporarily unreachable, or only one node can reach it, and so on?
If I stop the server and provision the DB, it works every time, and the JGROUPS_PING table appears to get cleaned up.
Maybe this is a very edge-case scenario and shouldn't be handled this way. I just want to confirm if it's 100% due to the moment when the DB connection becomes possible but the schema isn't fully there yet.
Shouldn`t it be self-healing?
2025-11-13 10:54:21,136 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) Error details:: org.keycloak.models.ModelDuplicateException: Duplicate resource error
at org.keycloak.connections.jpa.support.EntityManagerProxy.convert(EntityManagerProxy.java:144)
at org.keycloak.connections.jpa.support.EntityManagerProxy.invoke(EntityManagerProxy.java:112)
at jdk.proxy2/jdk.proxy2.$Proxy57.runWithConnection(Unknown Source)
at org.keycloak.spi.infinispan.impl.embedded.JGroupsConfigurator.prepareJGroupsAddress(JGroupsConfigurator.java:277)
at org.keycloak.spi.infinispan.impl.embedded.JGroupsConfigurator.lambda$configureDiscovery$2(JGroupsConfigurator.java:249)
at org.keycloak.models.utils.KeycloakModelUtils.runJobInTransactionWithResult(KeycloakModelUtils.java:461)
at org.keycloak.models.utils.KeycloakModelUtils.runJobInTransactionWithResult(KeycloakModelUtils.java:439)
at org.keycloak.spi.infinispan.impl.embedded.JGroupsConfigurator.lambda$configureDiscovery$3(JGroupsConfigurator.java:248)
at org.keycloak.common.util.Retry.call(Retry.java:149)
at org.keycloak.spi.infinispan.impl.embedded.JGroupsConfigurator.configureDiscovery(JGroupsConfigurator.java:248)
at org.keycloak.spi.infinispan.impl.embedded.JGroupsConfigurator.configureJGroups(JGroupsConfigurator.java:147)
at org.keycloak.spi.infinispan.impl.embedded.DefaultCacheEmbeddedConfigProviderFactory.lambda$singleSiteConfiguration$2(DefaultCacheEmbeddedConfigProviderFactory.java:229)
at org.keycloak.models.utils.KeycloakModelUtils.lambda$runJobInTransaction$1(KeycloakModelUtils.java:347)
at org.keycloak.models.utils.KeycloakModelUtils.runJobInTransactionWithResult(KeycloakModelUtils.java:461)
at org.keycloak.models.utils.KeycloakModelUtils.runJobInTransaction(KeycloakModelUtils.java:346)
at org.keycloak.models.utils.KeycloakModelUtils.runJobInTransaction(KeycloakModelUtils.java:336)
at org.keycloak.spi.infinispan.impl.embedded.DefaultCacheEmbeddedConfigProviderFactory.singleSiteConfiguration(DefaultCacheEmbeddedConfigProviderFactory.java:229)
at org.keycloak.spi.infinispan.impl.embedded.DefaultCacheEmbeddedConfigProviderFactory.configureSingleSiteWithPersistentSessions(DefaultCacheEmbeddedConfigProviderFactory.java:178)
at org.keycloak.spi.infinispan.impl.embedded.DefaultCacheEmbeddedConfigProviderFactory.createConfiguration(DefaultCacheEmbeddedConfigProviderFactory.java:166)
at org.keycloak.spi.infinispan.impl.embedded.DefaultCacheEmbeddedConfigProviderFactory.lazyInit(DefaultCacheEmbeddedConfigProviderFactory.java:153)
at org.keycloak.spi.infinispan.impl.embedded.DefaultCacheEmbeddedConfigProviderFactory.postInit(DefaultCacheEmbeddedConfigProviderFactory.java:102)
at org.keycloak.services.DefaultKeycloakSessionFactory.initializeProviders(DefaultKeycloakSessionFactory.java:167)
at org.keycloak.services.DefaultKeycloakSessionFactory.initializeProviders(DefaultKeycloakSessionFactory.java:164)
at org.keycloak.services.DefaultKeycloakSessionFactory.initializeProviders(DefaultKeycloakSessionFactory.java:164)
at org.keycloak.services.DefaultKeycloakSessionFactory.initProviderFactories(DefaultKeycloakSessionFactory.java:141)
at org.keycloak.services.DefaultKeycloakSessionFactory.initProviderFactories(DefaultKeycloakSessionFactory.java:125)
at org.keycloak.quarkus.runtime.integration.QuarkusKeycloakSessionFactory.init(QuarkusKeycloakSessionFactory.java:87)
at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication.createSessionFactory(QuarkusKeycloakApplication.java:60)
at org.keycloak.services.resources.KeycloakApplication.startup(KeycloakApplication.java:75)
at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication.onStartupEvent(QuarkusKeycloakApplication.java:50)
at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication_Observer_onStartupEvent_VUhusbW4xizn9A5dimKJUcfvjHs.notify(Unknown Source)
at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:365)
at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:347)
at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:81)
at io.quarkus.arc.runtime.ArcRecorder.fireLifecycleEvent(ArcRecorder.java:163)
at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:114)
at io.quarkus.runner.recorded.LifecycleEventsBuildStep$startupEvent1144526294.deploy_0(Unknown Source)
at io.quarkus.runner.recorded.LifecycleEventsBuildStep$startupEvent1144526294.deploy(Unknown Source)
at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
at io.quarkus.runtime.Application.start(Application.java:101)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:119)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:80)
at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:139)
at org.keycloak.quarkus.runtime.cli.Picocli.start(Picocli.java:913)
at org.keycloak.quarkus.runtime.cli.command.AbstractAutoBuildCommand.runCommand(AbstractAutoBuildCommand.java:134)
at org.keycloak.quarkus.runtime.cli.command.AbstractCommand.lambda$call$1(AbstractCommand.java:73)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at org.keycloak.quarkus.runtime.cli.command.AbstractCommand.call(AbstractCommand.java:72)
at org.keycloak.quarkus.runtime.cli.command.AbstractCommand.call(AbstractCommand.java:37)
at picocli.CommandLine.executeUserObject(CommandLine.java:2031)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2469)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2461)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2423)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2425)
at picocli.CommandLine.execute(CommandLine.java:2174)
at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:118)
at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:109)
at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:83)
at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:69)
at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:37)
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 'uuid://00000000-0000-0000-0000-000000000003' for key 'JGROUPS_PING.PRIMARY'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)
at io.agroal.pool.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:301)
at org.keycloak.spi.infinispan.impl.embedded.JGroupsConfigurator.lambda$prepareJGroupsAddress$5(JGroupsConfigurator.java:285)
at org.hibernate.engine.spi.SessionImplementor.lambda$runWithConnection$0(SessionImplementor.java:93)
at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:37)
at org.hibernate.internal.AbstractSharedSessionContract.lambda$doWork$8(AbstractSharedSessionContract.java:1151)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:314)
at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1162)
at org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1150)
at org.hibernate.engine.spi.SessionImplementor.runWithConnection(SessionImplementor.java:90)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.keycloak.connections.jpa.support.EntityManagerProxy.invoke(EntityManagerProxy.java:100)
... 60 more
Version
26.4.5
Regression
[ ] The issue is a regression
Expected behavior
self recover from any state
Actual behavior
not starting at all and keeps restarting with the error
How to Reproduce?
provision db with a backup while server is running
Anything else?
No response
- links to