Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[jdbc-ping] SQLIntegrityConstraintViolationException: Duplicate entry #44189

@Tim-Schwalbe

Description

@Tim-Schwalbe

Before reporting an issue

  • 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

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions