Deployment error: pre-compilation failed for document model

A12 version 2024.06ext5
I have an application with A12 models.
The local deployment works.
Deployment on Topic env fails with the following logs:

2025-09-25 11:07:07,040 [eAsyncTaskExecutor-1][DEBUG][rvices.server.util.KernelCachesPreloader][u:][processId:] - Pre-loading of DomainBAUENGU_CDM finished in 4180 ms
2025-09-25 11:07:07,590 [eAsyncTaskExecutor-1][DEBUG][rvices.server.util.KernelCachesPreloader][u:][processId:] - Pre-loading of insurance_tax_GU finished in 548 ms
2025-09-25 11:07:08,017 [eAsyncTaskExecutor-1][DEBUG][rvices.server.util.KernelCachesPreloader][u:][processId:] - Pre-loading of BAUENGUContractShortTerm_relationship_shortTerm____generated finished in 426 ms
2025-09-25 11:07:18,467 [eAsyncTaskExecutor-1][ERROR][rvices.server.util.KernelCachesPreloader][u:][processId:] - pre-compilation failed for document model DomainFIRMENGU_CDM
2025-09-25 11:07:18,467 [eAsyncTaskExecutor-1][WARN ][rvices.server.util.KernelCachesPreloader][u:][processId:] - Kernel cache pre-loading failed
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during instruction selection: Method too large: C2_domainfirmengu_cdm$_calc_pr_DA_Tariff_1to3_closure1.doCall (Ljava/lang/Object;)Ljava/lang/Object;
groovyjarjarasm.asm.MethodTooLargeException: Method too large: C2_domainfirmengu_cdm$_calc_pr_DA_Tariff_1to3_closure1.doCall (Ljava/lang/Object;)Ljava/lang/Object;
	at groovyjarjarasm.asm.MethodWriter.computeMethodInfoSize(MethodWriter.java:2088)
	at groovyjarjarasm.asm.ClassWriter.toByteArray(ClassWriter.java:512)
	at org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:800)
	at org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:814)
	at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:943)
	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
	at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:335)
	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:261)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:272)
	at com.mgmtp.a12.kernel.md.rt.internal.service.ModelGroovyCode.modelCode(ModelGroovyCode.java:56)
	at com.mgmtp.a12.kernel.md.rt.internal.service.ModelGroovyCode.getCalculator(ModelGroovyCode.java:76)
	at com.mgmtp.a12.kernel.md.rt.internal.service.DynamicModelProvider.getCalculator(DynamicModelProvider.java:38)
	at com.mgmtp.a12.kernel.md.rt.internal.service.DocumentDynamicRtService.precompileDocumentModel(DocumentDynamicRtService.java:24)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader$1.lambda$run$0(KernelCachesPreloader.java:79)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader$1.lambda$run$1(KernelCachesPreloader.java:76)
	at com.mgmtp.a12.uaa.authentication.backend.BackendAuthenticationService.executeWithBackendAuthentication(BackendAuthenticationService.java:52)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader$1.run(KernelCachesPreloader.java:68)
	at org.springframework.security.concurrent.DelegatingSecurityContextRunnable.run(DelegatingSecurityContextRunnable.java:94)
	at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
	at org.springframework.security.concurrent.DelegatingSecurityContextExecutor.execute(DelegatingSecurityContextExecutor.java:63)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader.listenOnServicesInitializationFinished(KernelCachesPreloader.java:120)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:114)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
1 error
	at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292)
	at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140)
	at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
	at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:335)
	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:261)
	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:272)
	at com.mgmtp.a12.kernel.md.rt.internal.service.ModelGroovyCode.modelCode(ModelGroovyCode.java:56)
	at com.mgmtp.a12.kernel.md.rt.internal.service.ModelGroovyCode.getCalculator(ModelGroovyCode.java:76)
	at com.mgmtp.a12.kernel.md.rt.internal.service.DynamicModelProvider.getCalculator(DynamicModelProvider.java:38)
	at com.mgmtp.a12.kernel.md.rt.internal.service.DocumentDynamicRtService.precompileDocumentModel(DocumentDynamicRtService.java:24)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader$1.lambda$run$0(KernelCachesPreloader.java:79)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader$1.lambda$run$1(KernelCachesPreloader.java:76)
	at com.mgmtp.a12.uaa.authentication.backend.BackendAuthenticationService.executeWithBackendAuthentication(BackendAuthenticationService.java:52)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader$1.run(KernelCachesPreloader.java:68)
	at org.springframework.security.concurrent.DelegatingSecurityContextRunnable.run(DelegatingSecurityContextRunnable.java:94)
	at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
	at org.springframework.security.concurrent.DelegatingSecurityContextExecutor.execute(DelegatingSecurityContextExecutor.java:63)
	at com.mgmtp.a12.dataservices.server.util.KernelCachesPreloader.listenOnServicesInitializationFinished(KernelCachesPreloader.java:120)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:114)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

Hi @clara-fleet-yew,

after talking back to our kernel team there is a general statement i can give:

If a method has too many lines (don’t know the exact number yet, but it’s around 10,000), we do have logic in place to split methods and prevent this error, but there might still be an edge case here.

That’s why I’m asking you to create an A12 Bug Ticket that covers your findings.

Thanks a lot

Hi @markus-agile-fog,
thanks a lot for your answer!
With “method” do you talk about A12 computations or something else? Because the computation that is mentioned in the logs is even shorter than before and before it worked well.
So do you know if I can find out how long it actually is to be able to split it in the correct size manually?
Because I cannot wait for an A12 Bug to be fixed.

Hi @clara-fleet-yew,
The method should be calc_pr_DA_Tariff_1to3.
In groovy there is a hard restriction on the number of bytes (bytecode size) in a method (64k, sometimes even half that).

The method lists all relevant fields and has code for each calculation alternative.
This might get pretty big.

You can try to split up the method on your own, but when you regenerate the groovy code it will have the same problem again.

Could you please create an A12 bug ticket for this case (and maybe provide the document model you used)