Horreum icon indicating copy to clipboard operation
Horreum copied to clipboard

Failing to restart after keycloak migration

Open johnaohara opened this issue 11 months ago • 1 comments

Describe the bug

Occasionally, restarting Horreum in Dev mode with a backup database, horreum fails to start with the following exception:

2024-03-07 13:47:09,124 INFO  [SecurityMigration] (Quarkus Main Thread) Perform roles migration from keycloak...
...
2024-03-07 13:47:09,732 INFO  [SecurityMigration] (Quarkus Main Thread) Migration of user REDACTED with username REDACTED
2024-03-07 13:47:09,824 WARN  [SecurityMigration] (Quarkus Main Thread) Unable to perform migration for user REDACTED due to A different object with the same identifier value was already associated with the session : [io.hyperfoil.tools.horreum.entity.user.TeamMembership#io.hyperfoil.tools.horreum.entity.user.TeamMembership@69a77a6c]
2024-03-07 13:47:09,850 ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application (with profile [dev]): java.lang.RuntimeException: Failed to start quarkus
	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:111)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:124)
	at io.quarkus.runner.GeneratedMain.main(Unknown Source)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:113)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: jakarta.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [io.hyperfoil.tools.horreum.entity.user.TeamMembership#io.hyperfoil.tools.horreum.entity.user.TeamMembership@69a77a6c]
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:123)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
	at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:168)
	at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1416)
	at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1398)
	at org.hibernate.query.sql.internal.NativeQueryImpl.prepareForExecution(NativeQueryImpl.java:599)
	at org.hibernate.query.spi.AbstractSelectionQuery.beforeQuery(AbstractSelectionQuery.java:391)
	at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:364)
	at org.hibernate.query.spi.AbstractSelectionQuery.getSingleResult(AbstractSelectionQuery.java:473)
	at io.hyperfoil.tools.horreum.server.RoleManager.setRoles(RoleManager.java:28)
	at io.hyperfoil.tools.horreum.server.RoleManager_ClientProxy.setRoles(Unknown Source)
	at io.hyperfoil.tools.horreum.server.SecurityMigration.performUserMigration(SecurityMigration.java:85)
	at io.hyperfoil.tools.horreum.server.SecurityMigration_Subclass.performUserMigration$$superforward(Unknown Source)
	at io.hyperfoil.tools.horreum.server.SecurityMigration_Subclass$$function$$1.apply(Unknown Source)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
	at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
	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:30)
	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
	at io.hyperfoil.tools.horreum.server.SecurityMigration_Subclass.performUserMigration(Unknown Source)
	at io.hyperfoil.tools.horreum.server.SecurityMigration.onStart(SecurityMigration.java:37)
	at io.hyperfoil.tools.horreum.server.SecurityMigration_Observer_onStart_KTiARLQ98yl7VaQKMNvfKxawCpE.notify(Unknown Source)
	at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:346)
	at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:328)
	at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:82)
	at io.quarkus.arc.runtime.ArcRecorder.fireLifecycleEvent(ArcRecorder.java:157)
	at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:108)
	at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy_0(Unknown Source)
	at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy(Unknown Source)
	... 13 more

johnaohara avatar Mar 07 '24 13:03 johnaohara

This has only happened once, and I am struggling to recreate the issue

johnaohara avatar Mar 07 '24 17:03 johnaohara