[ 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)