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/

Reply via email to