Join the Community
and take part in the story

Create Container fails with "Object argument expected"


#1

While trying out the SDS proxy as documented here, no matter what I was trying with curl, I always got the following error:

$ curl -v -X POST -H ‘x-oio-action-mode: autocreate’ -H ‘Content-Length: 0’ ‘http://openio-test-01:6006/v3.0/OPENIO/container/create?acct=object-store&ref=test1

  • Trying 172.xx.yy.zz…
  • Connected to openio-test-01 (172.xx.yy.zz) port 6006 (#0)
    > POST /v3.0/OPENIO/container/create?acct=object-store&ref=test1 HTTP/1.1
    > Host: openio-test-01:6006
    > User-Agent: curl/7.47.0
    > Accept: /
    > x-oio-action-mode: autocreate
    > Content-Length: 0
    >
    < HTTP/1.1 400 Bad request
    < Server: oio-proxy/master/3.0
    < Connection: Close
    < Content-Type: application/json
    < Transfer-Encoding: identity
    < Content-Length: 51
    <
  • Closing connection 0
    {“status”:400,“message”:“Object argument expected”}

Then I tried out the same using the openio client, which succeeded:

openio -vv --debug --oio-ns=OPENIO --oio-account=object-store container create test2
admin API: cmd group openio.admin
directory API: cmd group openio.directory
storage API: cmd group openio.storage
command: container create -> oio.cli.storage.container.CreateContainer
take_action(Namespace(columns=[], containers=[‘test2’], formatter=‘table’, max_width=0, noindent=False, property=None, quote_mode=‘nonnumeric’))
Using parameters {‘proxyd_url’: ‘http://172.xx.yy.zz:6006’, ‘admin_mode’: False, ‘namespace’: ‘OPENIO’, ‘account_name’: ‘object-store’}
Starting new HTTP connection (1): 172.xx.yy.zz
"POST /v3.0/OPENIO/container/create?acct=object-store&ref=test2 HTTP/1.1" 204 0
±------±--------+
| Name | Created |
±------±--------+
| test2 | True |
±------±--------+
clean up CreateContainer:

…which indicates to me it uses the same request.


#2

OK, I initially stumbled across this while testing the Java SDK, from which I got the same error when trying to use the function “ContainerInfo createContainer(OioUrl url)”.

I now see that I was using version 0.4.0 of the Java client and we already are at 0.6.2, which contains a fix for this with commit 845a52f (I am able to reproduce the fix with curl).

Nevertheless, version 0.6.1 introduces a regression (at least for me) for the same functionality with commit 4515622. For me (openio-sds Debian package version 3.0.1-1), the HTTP status code when creating a new container is “204 No Content” and “201 Created” when the container already exists, weird but this leads to the latest version to not work as well.

Apparently, versions 0.5.0 (which introduces the actual fix for the problem described) not version 0.6.0 (which does not yet contain the regression) are not available in the Maven Central repository.

Could we fix that?


#3

Just verified with a local build of the Java API version 0.6.0 that container creation works like a charm.


#4

Hello,
the request is actually not the same, the CLI also sends a body with the POST request.

{"status":400,"message":"Object argument expected"}

This indicates that the proxy expected a JSON object in the body and found nothing.


#5

Could you try with latest openio-sds version (3.1.2-1) for Debian and latest java SDK 0.6.2?


#6

Hi Julien,

I have seen using TCP dump that the CLI command indeed does POST a JSON object with empty “properties”, which is why I am using 0.6.0 for the time being.

Concerning the Debian package upgrade: do all the OpenIO services play well when I just do a package upgrade or is there some maintenance to-be-done afterwards or before to prepare upgrading a node without affecting data consistency or availability of the system?