Uploaded image for project: 'jclouds'
  1. jclouds
  2. JCLOUDS-1483

Removing a blob from a Swift container using BlobStore.removeBlob fails.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.1.1
    • None
    • jclouds-blobstore

    Description

       

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

      //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);
       }
      

       Debug: Following are my observations after debugging the code.

      1. The type of the blobstore is found to be RegionScopedSwiftBlobStore.
      2. 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.

      Attachments

        1. StaticLargeObjectApiMockTest.html
          8 kB
          Biswa Ranjan Ray
        2. stacktrace.txt
          10 kB
          Biswa Ranjan Ray
        3. NullPointerException.txt
          10 kB
          Biswa Ranjan Ray
        4. BuildException.txt
          11 kB
          Biswa Ranjan Ray

        Activity

          People

            Unassigned Unassigned
            roy.biswa Biswa Ranjan Ray
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: