Keycloak.x 12.0.4 XA transactions with Galera replication

We’re using keycloak on top of a Galera-4 (debian 26.4.7-3) Cluster and are running into this problem when starting it up:

2021-03-24 15:06:10,557 WARN [io.qua.run.ConfigChangeRecorder] (main) Build time property cannot be changed at runtime. quarkus.package.type was fast-jar at build time and is now mutable-jar
2021-03-24 15:06:13,304 INFO [org.key.url.DefaultHostnameProviderFactory] (main) Frontend: https://db1.pool.devel.clustr.cloud/fe, Admin: https://db1.pool.devel.clustr.cloud/admin, Backend:
2021-03-24 15:06:13,480 INFO [org.key.pro.qua.QuarkusCacheManagerProvider] (main) Loading cluster configuration from /var/lib/keycloak/keycloak.x-12.0.4/bin/…/conf/cluster-default.xml
2021-03-24 15:06:14,726 INFO [org.inf.CONTAINER] (main) ISPN000128: Infinispan version: Infinispan ‘Corona Extra’ 11.0.4.Final
2021-03-24 15:06:15,056 INFO [org.inf.CLUSTER] (main) ISPN000078: Starting JGroups channel ISPN
2021-03-24 15:06:15,058 INFO [org.inf.CLUSTER] (main) ISPN000088: Unable to use any JGroups configuration mechanisms provided in properties {}. Using default JGroups configuration!
2021-03-24 15:06:15,274 WARN [org.jgr.pro.UDP] (main) JGRP000015: the send buffer of socket MulticastSocket was set to 1,00MB, but the OS only allocated 212,99KB
2021-03-24 15:06:15,275 WARN [org.jgr.pro.UDP] (main) JGRP000015: the receive buffer of socket MulticastSocket was set to 20,00MB, but the OS only allocated 212,99KB
2021-03-24 15:06:15,275 WARN [org.jgr.pro.UDP] (main) JGRP000015: the send buffer of socket MulticastSocket was set to 1,00MB, but the OS only allocated 212,99KB
2021-03-24 15:06:15,276 WARN [org.jgr.pro.UDP] (main) JGRP000015: the receive buffer of socket MulticastSocket was set to 25,00MB, but the OS only allocated 212,99KB
2021-03-24 15:06:17,318 INFO [org.jgr.pro.pbc.GMS] (main) db1-46176: no members discovered after 2007 ms: creating cluster as coordinator
2021-03-24 15:06:17,375 INFO [org.inf.CLUSTER] (main) ISPN000094: Received new cluster view for channel ISPN: [db1-46176|0] (1) [db1-46176]
2021-03-24 15:06:17,429 INFO [org.inf.CLUSTER] (main) ISPN000079: Channel ISPN local address is db1-46176, physical addresses are [10.32.1.4:41083]
2021-03-24 15:06:18,870 INFO [org.key.con.inf.DefaultInfinispanConnectionProviderFactory] (main) Node name: db1-46176, Site name: null
2021-03-24 15:06:23,176 WARN [com.arj.ats.jta] (main) ARJUNA016061: TransactionImple.enlistResource - XAResource.start returned: ARJUNA016099: Unknown error code:0 for < formatId=131077, gtrid_length=35, bqual_length=36, tx_uid=0:ffff0a200104:9107:605b556e:0, node_name=quarkus, branch_uid=0:ffff0a200104:9107:605b556e:3, subordinatenodename=null, eis_name=0 >: javax.transaction.xa.XAException: Error trying to start xa transaction: (conn=49) This version of MariaDB doesn’t yet support ‘XA transactions with Galera replication’
at io.agroal.narayana.BaseXAResource.start(BaseXAResource.java:151)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:661)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:422)
at io.agroal.narayana.NarayanaTransactionIntegration.associate(NarayanaTransactionIntegration.java:90)
at io.agroal.pool.ConnectionPool.getConnection(ConnectionPool.java:222)
at io.agroal.pool.DataSource.getConnection(DataSource.java:81)
at io.quarkus.hibernate.orm.runtime.customized.QuarkusConnectionProvider.getConnection(QuarkusConnectionProvider.java:23)
at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:38)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:108)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:138)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:50)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:149)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:151)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2104)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2041)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2019)
at org.hibernate.loader.Loader.doQuery(Loader.java:948)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349)
at org.hibernate.loader.Loader.doList(Loader.java:2850)
at org.hibernate.loader.Loader.doList(Loader.java:2832)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2664)
at org.hibernate.loader.Loader.list(Loader.java:2659)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1414)
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1565)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533)
at org.hibernate.query.Query.getResultList(Query.java:165)
at org.keycloak.models.jpa.MigrationModelAdapter.init(MigrationModelAdapter.java:58)
at org.keycloak.models.jpa.MigrationModelAdapter.(MigrationModelAdapter.java:42)
at org.keycloak.models.jpa.JpaRealmProvider.getMigrationModel(JpaRealmProvider.java:79)
at org.keycloak.models.cache.infinispan.RealmCacheSession.getMigrationModel(RealmCacheSession.java:145)
at org.keycloak.migration.MigrationModelManager.migrate(MigrationModelManager.java:99)
at org.keycloak.connections.jpa.QuarkusJpaConnectionProviderFactory.migrateModel(QuarkusJpaConnectionProviderFactory.java:412)
at org.keycloak.connections.jpa.QuarkusJpaConnectionProviderFactory$1.run(QuarkusJpaConnectionProviderFactory.java:241)
at org.keycloak.models.utils.KeycloakModelUtils.runJobInTransaction(KeycloakModelUtils.java:228)
at org.keycloak.connections.jpa.QuarkusJpaConnectionProviderFactory.migration(QuarkusJpaConnectionProviderFactory.java:237)
at org.keycloak.connections.jpa.QuarkusJpaConnectionProviderFactory.lambda$lazyInit$0(QuarkusJpaConnectionProviderFactory.java:334)
at org.keycloak.models.utils.KeycloakModelUtils.suspendJtaTransaction(KeycloakModelUtils.java:654)
at org.keycloak.connections.jpa.QuarkusJpaConnectionProviderFactory.lazyInit(QuarkusJpaConnectionProviderFactory.java:331)
at org.keycloak.connections.jpa.QuarkusJpaConnectionProviderFactory.postInit(QuarkusJpaConnectionProviderFactory.java:142)
at org.keycloak.QuarkusKeycloakSessionFactory.init(QuarkusKeycloakSessionFactory.java:68)
at org.keycloak.QuarkusKeycloakApplication.initializeKeycloakSessionFactory(QuarkusKeycloakApplication.java:60)
at org.keycloak.QuarkusKeycloakApplication.startup(QuarkusKeycloakApplication.java:32)
at org.keycloak.provider.quarkus.QuarkusLifecycleObserver.onStartupEvent(QuarkusLifecycleObserver.java:47)
at org.keycloak.provider.quarkus.QuarkusLifecycleObserver_Observer_onStartupEvent_8292a286c9778cb4a07bc3314fcbfb61e7fe81a0.notify(QuarkusLifecycleObserver_Observer_onStartupEvent_8292a286c9778cb4a07bc3314fcbfb61e7fe81a0.zig:147)
at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:282)
at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:267)
at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:69)
at io.quarkus.arc.runtime.LifecycleEventRunner.fireStartupEvent(LifecycleEventRunner.java:23)
at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:60)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent-858218658.deploy_0(LifecycleEventsBuildStep$startupEvent-858218658.zig:81)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent-858218658.deploy(LifecycleEventsBuildStep$startupEvent-858218658.zig:40)
at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:794)
at io.quarkus.runtime.Application.start(Application.java:90)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:96)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:62)
at org.keycloak.cli.KeycloakMain.start(KeycloakMain.java:66)
at org.keycloak.cli.KeycloakMain.start(KeycloakMain.java:62)
at org.keycloak.cli.MainCommand.start(MainCommand.java:201)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at picocli.CommandLine.executeUserObject(CommandLine.java:1952)
at picocli.CommandLine.access$1200(CommandLine.java:145)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
at picocli.CommandLine.execute(CommandLine.java:2058)
at org.keycloak.cli.KeycloakMain.parseAndRun(KeycloakMain.java:99)
at org.keycloak.cli.KeycloakMain.main(KeycloakMain.java:58)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:43)
at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:24)

What can we do about this?