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

Biswa Ranjan Ray edited comment on JCLOUDS-1483 at 1/17/19 8:57 AM:
--------------------------------------------------------------------

Hi Andrew,

Appreciate your time and thanks for the suggestions.

I tried the following:

*Trial 1*:
 a. I forked jclouds repo to mine. Cloned the master branch and tried to build 
openstack-swift module without modifying anything.
 b. Build failed because of testcase failure at line 117 of 
*testReplaceManifestUnicodeUTF8*() method in *StaticLargeObjectApiMockTest* 
class.
 I also tried to build the module in *2.1.x* branch. But build failed for the 
same reason. 
 Logs are attached for your reference. Please see the file 
[^BuildException.txt].

*Trial* 2: 
 a. I skipped the testcases and build openstack-swift module. Build was 
successfull.
 b. As you suggested I modified delete method in StaticLargeObjectApi class by 
replacing 
 *@QueryParams(keys = "multipart-manifest", values = "delete")* with 
*@QueryParams(keys = \{"format", "multipart-manifest"}, values = \{"json", 
"delete"})*
 c. It still throws the same exception as reported earlier : 
 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected 
BEGIN_OBJECT but was STRING at line 1 column 1 path $

*Trial* 3:
 a. I ignored "multipart-manifest" from the QueryParams of delete() and just 
set the "format" to "json" as shown here : *@QueryParams(keys = "format", 
values = "json")*
 b. This one is bit interesting. The above changes throw a 
NullPointerException, but I found the blob is removed from the container. Not 
sure about the impact of this change. StackTrace is attached with name 
[^NullPointerException.txt].


was (Author: roy.biswa):
Hi Andrew,

Appreciate your time and thanks for the suggestions.

I tried the following:

*Trial 1*:
a. I forked jclouds repo to mine. Cloned the master branch and tried to build 
openstack-swift module without modifying anything.
b. Build failed because of testcase failure at line 117 of 
*testReplaceManifestUnicodeUTF8*() method in *StaticLargeObjectApiMockTest* 
class.
 I also tried to build the module in *2.1.x* branch. But build failed for the 
same reason. 
 Logs are attached for your reference. Please see the file 
[^BuildException.txt].
 
*Trial* 2: 
a. I skipped the testcases and build openstack-swift module. Build was 
successfull.
b. As you suggested I modified delete method in StaticLargeObjectApi class by 
replacing 
 *@QueryParams(keys = "multipart-manifest", values = "delete")* with 
*@QueryParams(keys = \{"format", "multipart-manifest"}, values = {"json", 
"**delete**"})*
c. It still throws the same exception as reported earlier : 
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected 
BEGIN_OBJECT but was STRING at line 1 column 1 path $

*Trial* 3:
a. I ignored "multipart-manifest" from the QueryParams of delete() and just set 
the "format" to "json" as shown here : *@QueryParams(keys = "format", values = 
"json")*
b. This one is bit interesting. The above changes throw a NullPointerException, 
but I found the blob is removed from the container. Not sure about the impact 
of this change. StackTrace is attached with name [^NullPointerException.txt].

> 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: Bug
>          Components: jclouds-blobstore
>    Affects Versions: 2.1.1
>            Reporter: Biswa Ranjan Ray
>            Priority: Major
>              Labels: openstack-swift
>         Attachments: BuildException.txt, NullPointerException.txt, 
> stacktrace.txt
>
>
>  
> *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