openstack4j icon indicating copy to clipboard operation
openstack4j copied to clipboard

OpenStack4j 3.0.4 glance image Update error

Open zhoutiekui opened this issue 7 years ago • 3 comments

Version: OpenStack4j 3.0.4-snapshot

Component: Glancev2

Codes: Image updateImage = os.imagesV2().update(createdImage.toBuilder().name("new format").build());

Error: ClientResponseException{message=Unsupported Media Type, status=415, status-code=UNSUPPORTED_MEDIATYPE} at org.openstack4j.core.transport.HttpExceptionHandler.mapException(HttpExceptionHandler.java:38) at org.openstack4j.core.transport.HttpExceptionHandler.mapException(HttpExceptionHandler.java:23) at org.openstack4j.core.transport.HttpEntityHandler.handleLessThan500(HttpEntityHandler.java:101) at org.openstack4j.core.transport.HttpEntityHandler.handle(HttpEntityHandler.java:47) at org.openstack4j.core.transport.HttpEntityHandler.handle(HttpEntityHandler.java:24) at org.openstack4j.connectors.jersey2.HttpResponseImpl.getEntity(HttpResponseImpl.java:63) at org.openstack4j.openstack.internal.BaseOpenStackService$Invocation.execute(BaseOpenStackService.java:220) at org.openstack4j.openstack.internal.BaseOpenStackService$Invocation.execute(BaseOpenStackService.java:202) at org.openstack4j.openstack.image.v2.internal.ImageServiceImpl.update(ImageServiceImpl.java:110) at org.openstack4j.openstack.image.v2.internal.ImageServiceImpl.update(ImageServiceImpl.java:95) at modify.OS4J304.GlanceImagesAndMember.testCreateAndUploadImage(GlanceImagesAndMember.java:123) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Wireshark analyze: PATCH /v2/images/a19854ef-264a-4b84-8e5e-ac7d8f6b5152 HTTP/1.1 Accept: application/json X-Auth-Token: e8dcc0dc01c84b1e88de1904be9fe7d8 User-Agent: OpenStack4j / OpenStack Client Content-Type: application/json Host: 172.22.17.41:9292 Connection: keep-alive Content-Length: 157

[ { "op" : "replace", "path" : "/name", "value" : "new format" }, { "op" : "replace", "path" : "/updated_at", "value" : 1487058832000 } ]HTTP/1.1 415 Unsupported Media Type Accept-Patch: application/openstack-images-v2.0-json-patch, application/openstack-images-v2.1-json-patch Content-Length: 130 Content-Type: text/plain; charset=UTF-8 X-Openstack-Request-Id: req-946577be-7fcf-4da9-a4d2-0794bfdf7940 Date: Tue, 14 Feb 2017 07:54:22 GMT Connection: keep-alive

415 Unsupported Media Type

The server could not comply with the request since it is either malformed or otherwise incorrect.

Analyze: The request content-type should be application/openstack-images-v2.1-json-patch rather than application/json.

zhoutiekui avatar Feb 15 '17 06:02 zhoutiekui

My connector is jerrsey2 , I tried to change the connector to openstack-resteasy,it works! I think when we deploy an application, we cannot switch between these connectors, we need an complete working connector. Thanks.

zhoutiekui avatar Feb 15 '17 07:02 zhoutiekui

Thanks for reporting @zhoutiekui. Would you like to submit a fix?

auhlig avatar Feb 15 '17 12:02 auhlig

I get this error (request uses invalid "application/json" instead of "application/openstack-images-v2.1-json-patch") with openstack4j-3.1.0 when using either jersey2- or okhttp-connector. It does not occur when using the httpclient connector. So somehow the code at org/openstack4j/openstack/image/v2/internal/ImageServiceImpl.java does not work with all connectors?!

Tried all connectors: As of openstack4j-3.1.0, the bug happens with the following connectors: jersey2, okhttp, and resteasy

when using the PatchOperation like this:

os.imagesV2().update(imageId, Builders.imageUpdateV2().ops(
                            new PatchOperation(
                                PatchOperation.OperationType.REPLACE,
                                "/block_device_mapping",
                                "[{"boot_index":0,"snapshot_id":"8510e485-57bb-4da1-b02fc785f6aad845","disk_bus":"virtio","volume_size":40,"source_type":"snapshot","device_type":"disk","destination_type":"volume","delete_on_termination":true}]")
                            ).build());

felfert avatar Dec 09 '18 14:12 felfert