-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proxies are not created in GraalVM #661
Comments
Hi @juliuskrah, I encountered this issue too and didn't find a way to fix it, but you can disable proxying beans, then it will work : https://docs.mongock.io/v4/custom-injections/index.html#advance-configuration%3A-prevent-proxing-my-beans I will continue to search for a proper solution. |
It seems GraalVM supports dynamic proxies implemented by Ultimately, there is a way to collect classes created dynamically, but it works only with the native image agent : https://www.graalvm.org/latest/reference-manual/native-image/metadata/ExperimentalAgentOptions/#support-for-predefined-classes On my side, I totally disabled the lock guard while building the |
Sorry it has taken me this long to get back to you; I was on vacation. I disabled the lock guard and got the following exception. Apparently the connection is getting closed before the migration is completed: mongock:
enabled: true
lock-guard-enabled: false 2024-04-09T10:28:42.254+02:00 INFO 81888 --- [ Thread-3] i.m.driver.core.lock.LockManagerDefault : Starting mongock lock daemon...
2024-04-09T10:28:42.267+02:00 INFO 81888 --- [ main] i.m.r.c.e.o.migrate.MigrateExecutorBase : Mongock starting the data migration sequence id[2024-04-09T10:28:42.171415-373]...
2024-04-09T10:28:42.267+02:00 INFO 81888 --- [ main] i.m.r.c.executor.ChangeLogRuntimeImpl : method[com.example.graph.migration.CreateProductCollectionChangeUnit202401151530] with arguments: [com.mongodb.reactivestreams.client.internal.MongoDatabaseImpl, com.mongodb.reactivestreams.client.internal.ClientSessionPublisherImpl, com.fasterxml.jackson.databind.ObjectMapper]
2024-04-09T10:28:42.267+02:00 INFO 81888 --- [ main] i.m.r.c.executor.ChangeLogRuntimeImpl : method[createProductCollection] with arguments: []
2024-04-09T10:28:42.268+02:00 INFO 81888 --- [ main] i.m.r.core.executor.ChangeExecutorBase : APPLIED - {"id"="create-product-collection-202401151530_before", "type"="before-execution", "author"="Julius Krah", "class"="CreateProductCollectionChangeUnit202401151530", "method"="createProductCollection"}
2024-04-09T10:28:42.271+02:00 INFO 81888 --- [ main] i.m.r.c.executor.ChangeLogRuntimeImpl : method[addDataProductCollection] with arguments: []
2024-04-09T10:28:42.271+02:00 INFO 81888 --- [ main] i.m.r.core.executor.ChangeExecutorBase : FAILED OVER - {"id"="create-product-collection-202401151530", "type"="execution", "author"="Julius Krah", "class"="CreateProductCollectionChangeUnit202401151530", "method"="addDataProductCollection"}
2024-04-09T10:28:42.273+02:00 INFO 81888 --- [ main] i.m.r.core.executor.ChangeExecutorBase : Mongock migration aborted and DB transaction not enabled. Starting manual rollback process
2024-04-09T10:28:42.273+02:00 INFO 81888 --- [ main] i.m.r.c.executor.ChangeLogRuntimeImpl : method[deleteProductCollection] with arguments: []
2024-04-09T10:28:42.273+02:00 INFO 81888 --- [ main] i.m.r.core.executor.ChangeExecutorBase : ROLL BACK FAILED- {"id"="create-product-collection-202401151530_before", "type"="before-execution", "author"="Julius Krah", "class"="CreateProductCollectionChangeUnit202401151530", "method"="createProductCollection"}
2024-04-09T10:28:42.275+02:00 INFO 81888 --- [ main] i.m.driver.core.lock.LockManagerDefault : Mongock waiting to release the lock
2024-04-09T10:28:42.281+02:00 INFO 81888 --- [ Thread-3] i.m.driver.core.lock.LockManagerDefault : Cancelled mongock lock daemon
2024-04-09T10:28:42.281+02:00 INFO 81888 --- [ main] i.m.driver.core.lock.LockManagerDefault : Mongock releasing the lock
2024-04-09T10:28:42.283+02:00 INFO 81888 --- [ main] i.m.driver.core.lock.LockManagerDefault : Mongock released the lock
2024-04-09T10:28:42.283+02:00 INFO 81888 --- [ main] i.m.r.c.e.o.migrate.MigrateExecutorBase : Mongock has finished
2024-04-09T10:28:42.283+02:00 ERROR 81888 --- [ main] i.m.r.core.executor.MongockRunnerImpl : Error in mongock process. ABORTED OPERATION
io.mongock.api.exception.MongockException: java.lang.reflect.InvocationTargetException
at io.mongock.runner.core.executor.ChangeExecutorBase.lambda$rollbackProcessedChangeSetsIfApply$4(ChangeExecutorBase.java:182) ~[graphql-demo:na]
at java.base@21/java.util.ArrayDeque.forEach(ArrayDeque.java:887) ~[graphql-demo:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.rollbackProcessedChangeSetsIfApply(ChangeExecutorBase.java:178) ~[graphql-demo:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.processSingleChangeLog(ChangeExecutorBase.java:130) ~[graphql-demo:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.processChangeLogs(ChangeExecutorBase.java:107) ~[graphql-demo:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.lambda$processMigration$1(ChangeExecutorBase.java:101) ~[graphql-demo:na]
at io.mongock.runner.core.executor.NonTransactioner.executeInTransaction(NonTransactioner.java:17) ~[na:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.processMigration(ChangeExecutorBase.java:101) ~[graphql-demo:na]
at io.mongock.runner.core.executor.operation.migrate.MigrateExecutorBase.executeMigration(MigrateExecutorBase.java:66) ~[graphql-demo:na]
at io.mongock.runner.core.executor.operation.migrate.MigrateExecutorBase.executeMigration(MigrateExecutorBase.java:18) ~[graphql-demo:na]
at io.mongock.runner.core.executor.MongockRunnerImpl.execute(MongockRunnerImpl.java:57) ~[na:na]
at io.mongock.runner.springboot.base.MongockApplicationRunner.run(MongockApplicationRunner.java:18) ~[graphql-demo:na]
at org.springframework.boot.SpringApplication.lambda$callRunner$4(SpringApplication.java:794) ~[graphql-demo:3.2.1]
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:83) ~[na:na]
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60) ~[graphql-demo:6.1.2]
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:88) ~[na:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:806) ~[graphql-demo:3.2.1]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:794) ~[graphql-demo:3.2.1]
at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:782) ~[graphql-demo:3.2.1]
at java.base@21/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:na]
at java.base@21/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
at java.base@21/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) ~[graphql-demo:na]
at java.base@21/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[graphql-demo:na]
at java.base@21/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[graphql-demo:na]
at java.base@21/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:na]
at java.base@21/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[graphql-demo:na]
at java.base@21/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[graphql-demo:na]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:782) ~[graphql-demo:3.2.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:341) ~[graphql-demo:3.2.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1358) ~[graphql-demo:3.2.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1347) ~[graphql-demo:3.2.1]
at com.example.graph.ApplicationKt.main(Application.kt:16) ~[graphql-demo:na]
at java.base@21/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH) ~[na:na]
Caused by: java.lang.reflect.InvocationTargetException: null
at java.base@21/java.lang.reflect.Method.invoke(Method.java:580) ~[graphql-demo:na]
at io.mongock.runner.core.executor.ChangeLogRuntimeImpl.runChangeSet(ChangeLogRuntimeImpl.java:82) ~[na:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.executeChangeSetMethod(ChangeExecutorBase.java:397) ~[graphql-demo:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.rollbackIfPresentAndTrackChangeEntry(ChangeExecutorBase.java:281) ~[graphql-demo:na]
at io.mongock.runner.core.executor.ChangeExecutorBase.lambda$rollbackProcessedChangeSetsIfApply$4(ChangeExecutorBase.java:180) ~[graphql-demo:na]
... 32 common frames omitted
Caused by: java.lang.IllegalStateException: state should be: open
at com.mongodb.assertions.Assertions.isTrue(Assertions.java:109) ~[na:na]
at com.mongodb.internal.session.BaseClientSessionImpl.getServerSession(BaseClientSessionImpl.java:125) ~[graphql-demo:na]
at com.mongodb.internal.session.ClientSessionContext.getSessionId(ClientSessionContext.java:48) ~[graphql-demo:na]
at com.mongodb.internal.connection.ClusterClockAdvancingSessionContext.getSessionId(ClusterClockAdvancingSessionContext.java:50) ~[na:na]
at com.mongodb.internal.connection.CommandMessage.getExtraElements(CommandMessage.java:230) ~[na:na]
at com.mongodb.internal.connection.CommandMessage.encodeMessageBodyWithMetadata(CommandMessage.java:155) ~[na:na]
at com.mongodb.internal.connection.RequestMessage.encode(RequestMessage.java:136) ~[graphql-demo:na]
at com.mongodb.internal.connection.CommandMessage.encode(CommandMessage.java:59) ~[na:na]
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceiveAsync(InternalStreamConnection.java:492) ~[na:na]
at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceiveAsync(UsageTrackingInternalConnection.java:157) ~[graphql-demo:na]
at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceiveAsync(DefaultConnectionPool.java:802) ~[na:na]
at com.mongodb.internal.connection.CommandProtocolImpl.executeAsync(CommandProtocolImpl.java:83) ~[na:na]
at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.executeAsync(DefaultServer.java:232) ~[na:na]
at com.mongodb.internal.connection.DefaultServerConnection.executeProtocolAsync(DefaultServerConnection.java:122) ~[na:na]
at com.mongodb.internal.connection.DefaultServerConnection.commandAsync(DefaultServerConnection.java:102) ~[na:na]
at com.mongodb.internal.connection.DefaultServerConnection.commandAsync(DefaultServerConnection.java:93) ~[na:na]
at com.mongodb.internal.connection.DefaultServer$AsyncOperationCountTrackingConnection.commandAsync(DefaultServer.java:361) ~[na:na]
at com.mongodb.internal.operation.AsyncOperationHelper.executeCommandAsync(AsyncOperationHelper.java:207) ~[na:na]
at com.mongodb.internal.operation.DropCollectionOperation$ProcessCommandsCallback.onResult(DropCollectionOperation.java:254) ~[na:na]
at com.mongodb.internal.operation.DropCollectionOperation.lambda$executeAsync$2(DropCollectionOperation.java:121) ~[na:na]
at com.mongodb.internal.operation.AsyncOperationHelper.lambda$withAsyncConnectionSourceCallableConnection$4(AsyncOperationHelper.java:146) ~[na:na]
at com.mongodb.internal.connection.DefaultServer.lambda$getConnectionAsync$0(DefaultServer.java:130) ~[na:na]
at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:47) ~[na:na]
at com.mongodb.internal.connection.DefaultConnectionPool.lambda$getAsync$0(DefaultConnectionPool.java:222) ~[na:na]
at com.mongodb.internal.connection.DefaultConnectionPool.lambda$getAsync$1(DefaultConnectionPool.java:245) ~[na:na]
at com.mongodb.internal.connection.DefaultConnectionPool$Task.doComplete(DefaultConnectionPool.java:1445) ~[na:na]
at com.mongodb.internal.connection.DefaultConnectionPool$Task.execute(DefaultConnectionPool.java:1431) ~[na:na]
at com.mongodb.internal.connection.DefaultConnectionPool$AsyncWorkManager.workerRun(DefaultConnectionPool.java:1375) ~[na:na]
at com.mongodb.internal.connection.DefaultConnectionPool$AsyncWorkManager.runAndLogUncaught(DefaultConnectionPool.java:1402) ~[na:na]
at com.mongodb.internal.connection.DefaultConnectionPool$AsyncWorkManager.lambda$initUnlessClosed$1(DefaultConnectionPool.java:1343) ~[na:na]
at java.base@21/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[na:na]
at java.base@21/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[graphql-demo:na]
at java.base@21/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[graphql-demo:na]
at java.base@21/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na]
at java.base@21/java.lang.Thread.runWith(Thread.java:1596) ~[graphql-demo:na]
at java.base@21/java.lang.Thread.run(Thread.java:1583) ~[graphql-demo:na]
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:833) ~[graphql-demo:na]
at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:211) ~[na:na] |
@juliuskrah can I assume this repository it has been updated and it's not using the proxies, so I can reproduce this? |
Yes this can be reproduced |
Defining new classes at runtime is not supported
When running in native mode, mongock migration fails with the following exception:
PRIORITY
NORMAL
Version and environment
kotlin:1.9.21
Oracle GraalVM 21+35.1 (build 21+35-jvmci-23.1-b15)
Mongock
io.mongock:mongodb-reactive-driver:5.4.0
io.mongock:mongock-springboot:5.4.0
Environment
Steps to Reproduce
Given the change unit class:
when configured with change unit class:
and built in native mode
./gradlew nativeCompile
; fails to start migrationBehaviour
Expected behavior: Migration should run
Actual behavior: Migration does not run
How often the bug happens: When the changeunit is run the first time
Link to repository using Mongock: https://github.com/juliuskrah/graphql-demo
The text was updated successfully, but these errors were encountered: