1

我们正在调用 API 以在非工作时间期间取消部署 vApp,然后再重新启动它们。

尝试取消部署 VApp 时出现间歇性错误。(稍后我将给出完整的堆栈跟踪)。

只是为了让您知道我在做什么,是我首先调用 VApp.shutdown() ,这似乎总是返回成功。在调用 Vapp.undeploy(UndeployPowerActionType.DEFAULT) 之前,我有时会等待长达 10 分钟。它仍然经常不起作用。然后当我再次运行它时,它通常可以工作(当我检查结果时,Vapp 确实未部署),或者如果它仍然不起作用,那么当我再次调用它时,它确实有效。

堆栈跟踪如下所示..(有时数组索引超出范围,具有不同的数字,例如 -5 或 -12 等。但堆栈跟踪始终如下所示......)

2014-07-17 13:10:33 错误 [main] ControlModule:75 - 取消部署导致错误 java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:com.sun.xml.bind.v2.util 处的 -2。 CollisionCheckStack.findDuplicate(CollisionCheckStack.java:133) at com.sun.xml.bind.v2.util.CollisionCheckStack.push(CollisionCheckStack.java:71) at com.sun.xml.bind.v2.runtime.XMLSerializer.pushObject( XMLSerializer.java:494) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:609) 在 com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty. java:113) 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:120) 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:149) 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:276) 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:276) 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:269) .sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:35) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:472) 在 com.sun.xml .bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:301) 在 com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:230) 在 javax.xml.bind.helpers.AbstractMarshallerImpl .marshal(AbstractMarshallerImpl.java:106) 在 com.vmware.vcloud.sdk.JAXBUtil.marshal(JAXBUtil.java:199) 在 com.vmware.vcloud.sdk.AbstractVapp.createVappUnDeployParamBody(AbstractVapp.java:299) 在 com。 vmware。vcloud.sdk.AbstractVapp.undeploy(AbstractVapp.java:318) 在 com.ipt.ebsa.skyscape.client.module.ControlModule.controlVApp(ControlModule.java:70) 在 com.ipt.ebsa.skyscape.client.manager。 VMManager.controlVApp(VMManager.java:294) 在 com.ipt.ebsa.skyscape.client.CloudManager.UndeployVApp(CloudManager.java:197) 在 com.ipt.ebsa.skyscape.client.RajVAppTest.stopAndUndeployVApp(RajVAppTest.java: 178) 在 com.ipt.ebsa.skyscape.client.RajVAppTest.testUndeployVApp0(RajVAppTest.java:121) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94)在 org.junit 的 java.lang.reflect.Method.invoke(Method.java:619) 的 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)。runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod .java:44) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 在 org. junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org .junit.runners.ParentRunner$3.run(ParentRunner.java:238) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner .java:229) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.ParentRunner.run(ParentRunner.java:309)。 jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal。 junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner。RemoteTestRunner.main(RemoteTestRunner.java:197) 2014-07-17 13:10:33 调试 [main] ControlModule:77 - 取消部署 vapp 'TEST_RAJ2' 完成 2014-07-17 13:10:33 调试 [main] VMManager :296 - controlVApp 退出

有人可以告诉我我做错了什么吗?为了取消部署我的 Vapp,只需要重试并最终它会起作用是正常的做法吗?

如果是这种情况,我必须不断重试,我可以检测到这个异常,如果我得到它,在最终失败并放弃之前重试一定次数?

还是有其他方法可以检测 Vapp 是否未部署?

调用 'shutdown() 而不是 undeploy() 会更好吗?我认为,根据我的经验,这似乎更一致。但是,控制台中生成的 vApp 被命名为“部分运行”而不是“关闭”。这可能是可以接受的,因为归根结底,我们只是希望我们的云托管合作伙伴在我们不需要 vAPP 的时候停止向我们收费。我认为关闭vAPP实际上可能达到这个目的?我将不得不检查云托管合作伙伴。

任何帮助深表感谢。

谢谢,

4

0 回答 0