Red Hat Build of Apicurio CrashLoopBackOff using KafkaSQL Storage Backend

Solution Verified - Updated -

Issue

  • ApicurioRegistry is not starting.
  • There are events in its namespace like:
service-registry                   0m18s       Warning   BackOff                            pod/service-registry-deployment-pod                               Back-off restarting failed container registry in pod service-registry-deployment-pod 
  • The condition of CrashLoopBackOff is reached.
  • The logs of the RHBA container show errors like:
2024-05-09 14:23:16 INFO <_> [io.smallrye.health.SmallRyeHealthReporter] (executor-thread-0) SRHCK01001: Reporting health down status: {"status":"DOWN","checks":[{"name":"Database connections health check","status":"UP","data":{"<default>":"UP"}},{"name":"Database connections health check","status":"UP","data":{"<default>":"UP"}},{"name":"PersistenceSimpleReadinessCheck","status":"DOWN"},{"name":"PersistenceSimpleReadinessCheck","status":"DOWN"},{"name":"ResponseTimeoutReadinessCheck","status":"UP","data":{"errorCount":0}},{"name":"ResponseTimeoutReadinessCheck","status":"UP","data":{"errorCount":0}}]}
2024-05-09 14:23:16 WARN <_> [com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord] (KSQL Kafka Consumer Thread) ARJUNA016045: attempted rollback of < formatId=131077, gtrid_length=35, bqual_length=36, tx_uid=0:ffff0ffff000:ffff:0000ffff:00000, node_name=quarkus, branch_uid=0:ffffffffffff:0000:ffff0000:fffff, subordinatenodename=null, eis_name=0 > (io.agroal.narayana.LocalXAResource@ffffffff) failed with exception code XAException.XAER_RMERR: javax.transaction.xa.XAException: Error trying to transactionRollback local transaction: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-214]
    at io.agroal.narayana.LocalXAResource.xaException(LocalXAResource.java:140)
    at io.agroal.narayana.LocalXAResource.xaException(LocalXAResource.java:134)
    at io.agroal.narayana.LocalXAResource.rollback(LocalXAResource.java:88)
    at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelAbort(XAResourceRecord.java:362)
    at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:3037)
    at com.arjuna.ats.arjuna.coordinator.BasicAction.doAbort(BasicAction.java:3016)
    at com.arjuna.ats.arjuna.coordinator.BasicAction.Abort(BasicAction.java:1679)
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.cancel(TwoPhaseCoordinator.java:124)
    at com.arjuna.ats.arjuna.AtomicAction.abort(AtomicAction.java:186)
    at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.rollbackAndDisassociate(TransactionImple.java:1377)
    at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.rollback(BaseTransaction.java:145)
    at io.quarkus.narayana.jta.runtime.CDIDelegatingTransactionManager.rollback(CDIDelegatingTransactionManager.java:133)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.endTransaction(TransactionalInterceptorBase.java:372)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:170)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:104)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:58)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
    at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
    at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
    at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41)
    at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:33)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlStore_Subclass.updateArtifactWithMetadata(Unknown Source)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlStore_ClientProxy.updateArtifactWithMetadata(Unknown Source)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlSink.processArtifactMessage(KafkaSqlSink.java:323)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlSink.doProcessMessage(KafkaSqlSink.java:166)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlSink.processMessage(KafkaSqlSink.java:117)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlSink_Subclass.processMessage$$superforward1(Unknown Source)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlSink_Subclass$$function$$20.apply(Unknown Source)
    at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:54)
    at io.apicurio.common.apps.logging.LoggingInterceptor.logMethodEntry(LoggingInterceptor.java:53)
    at io.apicurio.common.apps.logging.LoggingInterceptor_Bean.intercept(Unknown Source)
    at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
    at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:50)
    at io.quarkus.arc.impl.ActivateRequestContextInterceptor.invoke(ActivateRequestContextInterceptor.java:129)
    at io.quarkus.arc.impl.ActivateRequestContextInterceptor.aroundInvoke(ActivateRequestContextInterceptor.java:33)
    at io.quarkus.arc.impl.ActivateRequestContextInterceptor_Bean.intercept(Unknown Source)
    at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
    at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41)
    at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:33)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlSink_Subclass.processMessage(Unknown Source)
    at io.apicurio.registry.storage.impl.kafkasql.sql.KafkaSqlSink_ClientProxy.processMessage(Unknown Source)
    at io.apicurio.registry.storage.impl.kafkasql.KafkaSqlRegistryStorage.lambda$startConsumerThread$1(KafkaSqlRegistryStorage.java:311)
    at java.base/java.lang.Iterable.forEach(Iterable.java:75)
    at io.apicurio.registry.storage.impl.kafkasql.KafkaSqlRegistryStorage.lambda$startConsumerThread$2(KafkaSqlRegistryStorage.java:281)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-214]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:678)
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
    at org.h2.message.DbException.get(DbException.java:223)
    at org.h2.message.DbException.get(DbException.java:199)
    at org.h2.message.DbException.get(DbException.java:188)
    at org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1375)
    at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:463)
    at io.agroal.pool.ConnectionHandler.transactionRollback(ConnectionHandler.java:368)
    at io.agroal.narayana.LocalXAResource.rollback(LocalXAResource.java:85)
    ... 43 more

Environment

  • Red Hat Build of Apicurio (RHBA)
    • v2.4.4

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content