Hi all,

We've set up a new Apache CloudStack instance (4.19.1.2) and are
experimenting with it.
While we're able to migrate instances between the hosts of a single cluster
without issues, if we try to migrate an instance from one cluster to
another, we get the following error:
2024-12-03 08:02:29,431 ERROR [c.c.a.ApiAsyncJobDispatcher]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Unexpected
exception while executing
org.apache.cloudstack.api.command.admin.vm.MigrateVirtualMachineWithVolumeCmd
com.cloud.utils.exception.CloudRuntimeException: Failed to migrate VM [VM
instance
{"id":8,"instanceName":"i-2-8-VM","type":"User","uuid":"64c2ffbb-d7e9-4264-9a31-d9e79bce1ef7"}]
along with its volumes due to [java.lang.ClassCastException: class
com.cloud.agent.api.Answer cannot be cast to class
com.cloud.agent.api.ModifyTargetsAnswer (com.cloud.agent.api.Answer and
com.cloud.agent.api.ModifyTargetsAnswer are in unnamed module of loader
'app')].
        at
org.apache.cloudstack.engine.orchestration.VolumeOrchestrator.migrateVolumes(VolumeOrchestrator.java:1451)
        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
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
        at com.sun.proxy.$Proxy241.migrateVolumes(Unknown Source)
        at
com.cloud.vm.VirtualMachineManagerImpl.orchestrateMigrateWithStorage(VirtualMachineManagerImpl.java:3284)
        at
com.cloud.vm.VirtualMachineManagerImpl.orchestrateMigrateWithStorage(VirtualMachineManagerImpl.java:5534)
        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
com.cloud.vm.VmWorkJobHandlerProxy.handleVmWorkJob(VmWorkJobHandlerProxy.java:105)
        at
com.cloud.vm.VirtualMachineManagerImpl.handleVmWorkJob(VirtualMachineManagerImpl.java:5610)
        at
com.cloud.vm.VmWorkJobDispatcher.runJob(VmWorkJobDispatcher.java:102)
        at
org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl$5.runInContext(AsyncJobManagerImpl.java:654)
        at
org.apache.cloudstack.managed.context.ManagedContextRunnable$1.run(ManagedContextRunnable.java:48)
        at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:55)
        at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:102)
        at
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:52)
        at
org.apache.cloudstack.managed.context.ManagedContextRunnable.run(ManagedContextRunnable.java:45)
        at
org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl$5.run(AsyncJobManagerImpl.java:602)
        at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at
java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
2024-12-03 08:02:29,434 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Complete async
job-862, jobStatus: FAILED, resultCode: 530, result:
org.apache.cloudstack.api.response.ExceptionResponse/null/{"uuidList":[],"errorcode":"530","errortext":"Failed
to migrate VM [VM instance
{"id":8,"instanceName":"i-2-8-VM","type":"User","uuid":"64c2ffbb-d7e9-4264-9a31-d9e79bce1ef7"}]
along with its volumes due to [java.lang.ClassCastException: class
com.cloud.agent.api.Answer cannot be cast to class
com.cloud.agent.api.ModifyTargetsAnswer (com.cloud.agent.api.Answer and
com.cloud.agent.api.ModifyTargetsAnswer are in unnamed module of loader
'app')]."}
2024-12-03 08:02:29,435 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Publish async
job-862 complete on message bus
2024-12-03 08:02:29,435 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Wake up jobs
related to job-862
2024-12-03 08:02:29,435 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Update db
status for job-862
2024-12-03 08:02:29,437 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Wake up jobs
joined with job-862 and disjoin all subjobs created from job- 862
2024-12-03 08:02:29,443 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Done executing
org.apache.cloudstack.api.command.admin.vm.MigrateVirtualMachineWithVolumeCmd
for job-862
2024-12-03 08:02:29,443 INFO  [o.a.c.f.j.i.AsyncJobMonitor]
(API-Job-Executor-84:ctx-87ebdcb5 job-862) (logid:485fa37d) Remove job-862
from job monitoring
2024-12-03 08:02:29,666 DEBUG [c.c.s.d.VolumeStatsDaoImpl]
(StatsCollector-5:ctx-1755907b) (logid:39acf2c5) Starting to remove all
volume_stats rows older than [Mon Dec 02 20:02:29 CET 2024].
2024-12-03 08:02:29,666 INFO  [c.c.s.d.VolumeStatsDaoImpl]
(StatsCollector-5:ctx-1755907b) (logid:39acf2c5) Removed a total of [0]
volume_stats rows older than [Mon Dec 02 20:02:29 CET 2024].

It's a very simple Rocky Linux VM running on KVM hypervisors. As mentioned,
migrating between hypervisors works perfectly but migrating between
clusters (with storage migration enabled) results in the error above.
Has anyone experienced this before?


Kind regards,

Jeroen Kleijer

Reply via email to