You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jclouds.apache.org by "Jasdeep Hundal (JIRA)" <ji...@apache.org> on 2014/03/26 22:58:17 UTC

[jira] [Comment Edited] (JCLOUDS-515) Cinder volume create does not require availability zone

    [ https://issues.apache.org/jira/browse/JCLOUDS-515?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13948531#comment-13948531 ] 

Jasdeep Hundal edited comment on JCLOUDS-515 at 3/26/14 9:57 PM:
-----------------------------------------------------------------

This was a fix because I did run into this, and probably should have pasted that in the ticket... :P

Code:
{code:title=CinderVolumeCreate.java|borderStyle=solid}
Properties properties = new Properties();
// Assume properties set properly
CinderApi cinderApi = builder.overrides(properties).buildApi(CinderApi.class);
VolumeApi cinderVolumeApi = cinderApi.getVolumeApiForZone("RegionOne");

CreateVolumeOptions volumeOptions = new CreateVolumeOptions();        
volumeOptions.name("test");
volumeOptions.volumeType("type");
cinderVolumeApi.create(size, volumeOptions);
{code}

Traceback:
{code}
    java.lang.NullPointerException: zone
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:229)
        at org.jclouds.openstack.cinder.v1.domain.Volume.<init>(Volume.java:244)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at com.google.common.reflect.Invokable$ConstructorInvokable.invokeInternal(Invokable.java:242)
        at com.google.common.reflect.Invokable.invoke(Invokable.java:102)
        at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.newInstance(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:215)
        at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:195)
        at com.google.gson.Gson.fromJson(Gson.java:803)
        at org.jclouds.http.functions.ParseFirstJsonValueNamed.apply(ParseFirstJsonValueNamed.java:83)
        at org.jclouds.http.functions.ParseFirstJsonValueNamed.apply(ParseFirstJsonValueNamed.java:47)
        at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:93)
        at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:76)
        at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:47)
        at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
        at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
        at com.sun.proxy.$Proxy89.create(Unknown Source)
        ...
{code}



was (Author: jasdeep):
This was a fix because I did run into this, and probably should have pasted that in the ticket... :P

Code:
{code:title=CinderVolumeCreate.java|borderStyle=solid}
Properties properties = new Properties();
// Assume properties set properly
CinderApi cinderApi = builder.overrides(properties).buildApi(CinderApi.class);
VolumeApi cinderVolumeApi = cinderApi.getVolumeApiForZone("RegionOne");

CreateVolumeOptions volumeOptions = new CreateVolumeOptions();        
volumeOptions.name(name);
volumeOptions.volumeType("nebula");
cinderVolumeApi.create(size, volumeOptions);
{code}

Traceback:
{code}
    java.lang.NullPointerException: zone
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:229)
        at org.jclouds.openstack.cinder.v1.domain.Volume.<init>(Volume.java:244)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at com.google.common.reflect.Invokable$ConstructorInvokable.invokeInternal(Invokable.java:242)
        at com.google.common.reflect.Invokable.invoke(Invokable.java:102)
        at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.newInstance(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:215)
        at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:195)
        at com.google.gson.Gson.fromJson(Gson.java:803)
        at org.jclouds.http.functions.ParseFirstJsonValueNamed.apply(ParseFirstJsonValueNamed.java:83)
        at org.jclouds.http.functions.ParseFirstJsonValueNamed.apply(ParseFirstJsonValueNamed.java:47)
        at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:93)
        at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:76)
        at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:47)
        at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
        at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
        at com.sun.proxy.$Proxy89.create(Unknown Source)
        ...
{code}


> Cinder volume create does not require availability zone
> -------------------------------------------------------
>
>                 Key: JCLOUDS-515
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-515
>             Project: jclouds
>          Issue Type: Bug
>          Components: jclouds-core
>    Affects Versions: 1.7.1
>            Reporter: Jasdeep Hundal
>            Assignee: Jasdeep Hundal
>             Fix For: 1.8.0
>
>
> Openstack Cinder does not require specifying an availability zone for volume creation, but the Cinder API as implemented in JClouds does. We should change the check in the constructor of org.jclouds.openstack.cinder.v1.domain to allow a null value for availability zone.
> The docs on the v1 API are not readily available but tracing through the Cinder source code, we find this line that gets executed if we specify no availability zone in either the v1 or v2 block storage APIs:
> https://github.com/openstack/cinder/blob/master/cinder/volume/flows/api/create_volume.py#L247
> It can also be noted the the Block Storage v2 request here does not require an availability zone:
> http://docs.openstack.org/api/openstack-block-storage/2.0/content/POST_createVolume_v2__tenant_id__volumes_Volumes.html



--
This message was sent by Atlassian JIRA
(v6.2#6252)