[ 
https://issues.apache.org/jira/browse/JCLOUDS-1483?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Biswa Ranjan Ray updated JCLOUDS-1483:
--------------------------------------
    Description: 
Hi Team,

I set the issue type to Improvement as I'm not sure if its a bug in jclouds 
library. :)

*Usecase*: Try to delete a blob (size ~ 107kb) from a swift container using 
BlobStore.removBlob() api of jclouds.

*Issue*: Following exception is found in console: 
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: *Expected 
BEGIN_OBJECT but was STRING at line 1 column 1 path $*.

*Code*: Sharing the code snippet that I've used to delete a blob from a swift 
container.

BlobStore blobStore = getBlobStoreContext();              
blobStore.removeBlob(containerName, fileName);
{code:java}
//To get the BlobStoreContext for OpenStack Swift

private BlobStoreContext getBlobStoreContext() {
 final Properties override = new Properties();
 override.put(KeystoneProperties.KEYSTONE_VERSION, "3");
 override.put(KeystoneProperties.SCOPE, "project:" + swiftConfig.getProject());
 
 final String credential = swiftConfig.getPassword();
 final String identity = swiftConfig.getUserDomain() + ":" + 
swiftConfig.getUsername();
 final String authUrl = swiftConfig.getAuthUrl();
 
 return ContextBuilder.newBuilder("openstack-swift")
 .endpoint(authUrl+"/v3")
 .credentials(identity,credential)
 .overrides(override)
 .buildApi(BlobStoreContext.class);
 }
{code}
 *Debug:* Following are my observations after debugging the code.
 # The type of the blobstore is found to be RegionScopedSwiftBlobStore.
 # stepinto blobStore.*removeBlob*(containerName, fileName);                    
                    at line 396 in *RegionScopedSwiftBlobStore* class, I found 
it expects a response from *StaticLargeObjectApi* as shown in the below code 
and this is where the exception occurs:                                         
            **                                                  
DeleteStaticLargeObjectResponse response = 
api.getStaticLargeObjectApi(regionId, container).delete(name); 

*Analysis*: While the api BlobStore.removeBlob fails to delete a blob in a 
Swift container, it works fine in AWS S3 and GCS container. I also observed 
that if I use *ObjectApi.delete(objectName)* instead of *BlobStore.removeBlob* 
then the blob gets deleted from the swift container without any issue. As per 
the java doc of StaticLargeObjectApi, it is in beta and still under evaluation. 
Is this api stable?

Any help is highly appreciated.

Thank you.

  was:
Hi Team,

I set the issue type to Improvement as I'm not sure if its a bug in jclouds 
library. :)

*Usecase*: Try to delete a blob (size ~ 107kb) from a swift container using 
BlobStore.removBlob() api of jclouds.

*Issue*: Following exception is  obtained: com.google.gson.JsonSyntaxException: 
java.lang.IllegalStateException: *Expected BEGIN_OBJECT but was STRING at line 
1 column 1 path $*.

*Code*: The below code snippet shows how a blob is deleted from a swift 
container.

BlobStore blobStore = getBlobStoreContext();              
blobStore.removeBlob(containerName, fileName);

{code:java}
//To get the BlobStoreContext for OpenStack Swift

private BlobStoreContext getBlobStoreContext() {
 final Properties override = new Properties();
 override.put(KeystoneProperties.KEYSTONE_VERSION, "3");
 override.put(KeystoneProperties.SCOPE, "project:" + swiftConfig.getProject());
 
 final String credential = swiftConfig.getPassword();
 final String identity = swiftConfig.getUserDomain() + ":" + 
swiftConfig.getUsername();
 final String authUrl = swiftConfig.getAuthUrl();
 
 return ContextBuilder.newBuilder("openstack-swift")
 .endpoint(authUrl+"/v3")
 .credentials(identity,credential)
 .overrides(override)
 .buildApi(BlobStoreContext.class);
 }
{code}

 *Debug:* Following are my observations after debugging the code.
 # got the BlobStore. The blobstore type is found to be 
RegionScopedSwiftBlobStore.
 # stepinto blobStore.removeBlob(containerName, fileName);                      
                    at line 396 in *RegionScopedSwiftBlobStore* class, it 
expects a response from *StaticLargeObjectApi* and this is where it throws the 
exception. DeleteStaticLargeObjectResponse response = 
api.getStaticLargeObjectApi(regionId, container).delete(name);

*Analysis*: While the api BlobStore.removeBlob fails in a Swift container, it 
works fine in AWS S3 and GCS container. I also observed that if I use 
*ObjectApi.delete(objectName)* instead of BlobStore.removeBlob then the blob 
gets deleted from the swift container. I believe its the StaticLargeObjectApi 
that's causing issue. As per the java doc of StaticLargeObjectApi, it is in 
beta and still under evaluation. 

Any help is highly appreciated.

Thank you.


> Removing a blob from a Swift container using BlobStore.removeBlob fails.
> ------------------------------------------------------------------------
>
>                 Key: JCLOUDS-1483
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1483
>             Project: jclouds
>          Issue Type: Improvement
>          Components: jclouds-blobstore
>    Affects Versions: 2.1.1
>            Reporter: Biswa Ranjan Ray
>            Priority: Major
>              Labels: openstack-swift
>         Attachments: stacktrace.txt
>
>
> Hi Team,
> I set the issue type to Improvement as I'm not sure if its a bug in jclouds 
> library. :)
> *Usecase*: Try to delete a blob (size ~ 107kb) from a swift container using 
> BlobStore.removBlob() api of jclouds.
> *Issue*: Following exception is found in console: 
> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 
> *Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $*.
> *Code*: Sharing the code snippet that I've used to delete a blob from a swift 
> container.
> BlobStore blobStore = getBlobStoreContext();              
> blobStore.removeBlob(containerName, fileName);
> {code:java}
> //To get the BlobStoreContext for OpenStack Swift
> private BlobStoreContext getBlobStoreContext() {
>  final Properties override = new Properties();
>  override.put(KeystoneProperties.KEYSTONE_VERSION, "3");
>  override.put(KeystoneProperties.SCOPE, "project:" + 
> swiftConfig.getProject());
>  
>  final String credential = swiftConfig.getPassword();
>  final String identity = swiftConfig.getUserDomain() + ":" + 
> swiftConfig.getUsername();
>  final String authUrl = swiftConfig.getAuthUrl();
>  
>  return ContextBuilder.newBuilder("openstack-swift")
>  .endpoint(authUrl+"/v3")
>  .credentials(identity,credential)
>  .overrides(override)
>  .buildApi(BlobStoreContext.class);
>  }
> {code}
>  *Debug:* Following are my observations after debugging the code.
>  # The type of the blobstore is found to be RegionScopedSwiftBlobStore.
>  # stepinto blobStore.*removeBlob*(containerName, fileName);                  
>                       at line 396 in *RegionScopedSwiftBlobStore* class, I 
> found it expects a response from *StaticLargeObjectApi* as shown in the below 
> code and this is where the exception occurs:                                  
>                    **                                                  
> DeleteStaticLargeObjectResponse response = 
> api.getStaticLargeObjectApi(regionId, container).delete(name); 
> *Analysis*: While the api BlobStore.removeBlob fails to delete a blob in a 
> Swift container, it works fine in AWS S3 and GCS container. I also observed 
> that if I use *ObjectApi.delete(objectName)* instead of 
> *BlobStore.removeBlob* then the blob gets deleted from the swift container 
> without any issue. As per the java doc of StaticLargeObjectApi, it is in beta 
> and still under evaluation. Is this api stable?
> Any help is highly appreciated.
> Thank you.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to