This is an Openstack limitation and in Amazon EC2 we can attach instance when the server is still building.
So, for Openstack case, if a Cartridge needs to have volume support, Cartridge config should set autoAssignIp property to true, where that would inturn make the start instance call to Openstack IaaS a blocking one. IMO this is reasonable from Stratos PoV. On Mon, Feb 17, 2014 at 7:15 PM, Melan Nimesh <[email protected]> wrote: > Hi Devs, > > I noticed the $subject when doing some testing on persistence volumes. > getting an error [1] "Cannot 'attach_volume' while instance is in vm_state > building", as a workaround we can check vm_state==RUNNING before calling > the attachVolume() on CloudControllerServiceImpl (IAAS dependent code). > What is the best way to address this issue? > > Thanks, > Melan > > [1] TID: [0] [CC] [2014-02-17 14:03:12,590] ERROR > {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl} - > Failed to start an instance. MemberContext > [memberId=php1234.php.domainc9ad5022-9b64-46e0-bfe7-e0debf9446c3, > nodeId=RegionOne/24979106-7e2e-478b-b131-f28878c76e44, > clusterId=php1234.php.domain, cartridgeType=php, privateIpAddress=null, > publicIpAddress=null, allocatedIpAddress=null, initTime=1392625985543, > lbClusterId=null, networkPartitionId=openstack] > {org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl} > java.lang.IllegalStateException: org.jclouds.http.HttpResponseException: > command: POST > http://192.168.18.25:8774/v2/6542ad22fc9248b2bd05a030e3f21a79/servers/24979106-7e2e-478b-b131-f28878c76e44/os-volume_attachmentsHTTP/1.1 > failed with response: HTTP/1.1 409 Conflict; content: > [{"conflictingRequest": {"message": "Cannot 'attach_volume' while instance > is in vm_state building", "code": 409}}] > at > org.jclouds.fallbacks.MapHttp4xxCodesToExceptions.createOrPropagate(MapHttp4xxCodesToExceptions.java:66) > at > org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.invoke(InvokeSyncToAsyncHttpMethod.java:132) > at > org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.apply(InvokeSyncToAsyncHttpMethod.java:95) > at > org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.apply(InvokeSyncToAsyncHttpMethod.java:56) > at > org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117) > at > com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:79) > at com.sun.proxy.$Proxy98.attachVolumeToServerAsDevice(Unknown Source) > at > org.apache.stratos.cloud.controller.iaases.OpenstackNovaIaas.attachVolume(OpenstackNovaIaas.java:440) > at > org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl.startInstance(CloudControllerServiceImpl.java:338) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at > org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212) > at > org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117) > at > org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) > at > org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110) > at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) > at > org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172) > at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) > at > org.wso2.carbon.core.transports.CarbonServlet.doPost(CarbonServlet.java:231) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) > at > org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) > at > org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) > at > org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) > at > org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) > at > org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) > at > org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178) > at > org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:49) > at > org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141) > at > org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156) > at > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) > at > org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:52) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) > at > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) > at > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > at java.lang.Thread.run(Thread.java:724) > Caused by: org.jclouds.http.HttpResponseException: command: POST > http://192.168.18.25:8774/v2/6542ad22fc9248b2bd05a030e3f21a79/servers/24979106-7e2e-478b-b131-f28878c76e44/os-volume_attachmentsHTTP/1.1 > failed with response: HTTP/1.1 409 Conflict; content: > [{"conflictingRequest": {"message": "Cannot 'attach_volume' while instance > is in vm_state building", "code": 409}}] > at > org.jclouds.openstack.nova.v2_0.handlers.NovaErrorHandler.handleError(NovaErrorHandler.java:81) > at > org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:67) > at > org.jclouds.http.internal.BaseHttpCommandExecutorService.shouldContinue(BaseHttpCommandExecutorService.java:180) > at > org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:150) > at > org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.invoke(InvokeSyncToAsyncHttpMethod.java:129) > ... 50 more > > > -- > Melan Nimesh Jayasingha > -- Best Regards, Nirmal Nirmal Fernando. PPMC Member & Committer of Apache Stratos, Senior Software Engineer, WSO2 Inc. Blog: http://nirmalfdo.blogspot.com/
