Uploaded image for project: 'Red Hat build of Keycloak'
  1. Red Hat build of Keycloak
  2. RHBK-3922

[jdbc-ping] SQLIntegrityConstraintViolationException: Duplicate entry [GHI#44189]

XMLWordPrintable

    • False
    • Hide

      None

      Show
      None
    • False

      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

              Unassigned Unassigned
              pvlha Pavel Vlha
              Keycloak SRE
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: