delete elasticsearch error
haslinger opened this issue · 8 comments
While get
Tirexs.HTTP.get("/panoptikum_dev/personas/4083/")
and queries work nicely for me (thanks for the great work!), i struggle with deleting:
Tirexs.HTTP.delete!("/panoptikum_dev/personas/4083/")
The error in elasticsearch 5.3.0 tells me:
[2017-03-30T13:53:38,735][WARN ][o.e.h.n.Netty4HttpServerTransport] [Yo-gtFL] caught exception while handling client http traffic, closing connection [id: 0xc3f0cd06, L:/127.0.0.1:9200 - R:/127.0.0.1:37007]
java.lang.IllegalArgumentException: invalid Content-Type header []
at org.elasticsearch.rest.RestRequest.parseContentType(RestRequest.java:492) ~[elasticsearch-5.3.0.jar:5.3.0]
at org.elasticsearch.rest.RestRequest.<init>(RestRequest.java:88) ~[elasticsearch-5.3.0.jar:5.3.0]
at org.elasticsearch.http.netty4.Netty4HttpRequest.<init>(Netty4HttpRequest.java:49) ~[transport-netty4-5.3.0.jar:5.3.0]
at org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:67) ~[transport-netty4-5.3.0.jar:5.3.0]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at org.elasticsearch.http.netty4.pipelining.HttpPipeliningHandler.channelRead(HttpPipeliningHandler.java:63) [transport-netty4-5.3.0.jar:5.3.0]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at org.elasticsearch.http.netty4.cors.Netty4CorsHandler.channelRead(Netty4CorsHandler.java:76) [transport-netty4-5.3.0.jar:5.3.0]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-codec-4.1.7.Final.jar:4.1.7.Final]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [netty-codec-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-codec-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-codec-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) [netty-codec-4.1.7.Final.jar:4.1.7.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) [netty-codec-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:129) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:642) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:527) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:481) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:441) [netty-transport-4.1.7.Final.jar:4.1.7.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) [netty-common-4.1.7.Final.jar:4.1.7.Final]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
am I doing something wrong here?
Any hints appreciated!
Update: I could delete via curl
curl -XDELETE http://localhost:9200/panoptikum_dev/personas/4083/
Hi @haslinger. I think for elastic 5.3.0 we don't need send any headers. so, you can try check Tirexs.HTTP.delete! and remove headers
Currently no luck, tried with
:delete -> ( request(method, {url, []}, [], []) |> response() )
tried to get old elasticsearch behaviour by setting
http.content_type.required: true
I have the strange feeling, that the error message
invalid Content-Type header []
indicates, that the content type is not sent as specified, but overwritten with a "[]" string or so somewhere.
Have to investigate further...
Eureka! I found a (weird) way, that works from within elixir:
:httpc.request(:delete, {'http://localhost:9200/panoptikum_dev/personas/921', [], 'application/json', ""}, [], [])
so providing an empty-string body helped. I believe, that elastic's auto detection is somehow broken.
IN IEX:
iex(70)> get("/test/users/AVs91cX8gmVkMe6i2NtC")
{:ok, 200,
%{_id: "AVs91cX8gmVkMe6i2NtC", _index: "test",
_source: %{email: "1190000008944122@example.com", name: "1190000008944122"},
_type: "users", _version: 1, found: true}}
iex(71)> delete!("/test/users/AVs91cX8gmVkMe6i2NtC")
** (FunctionClauseError) no function clause matching in Tirexs.HTTP.ok!/1
(tirexs) lib/tirexs/http.ex:320: Tirexs.HTTP.ok!(:error)
CURL is OK
➜ curl -XDELETE 'localhost:9200/test/users/AVs91cX8gmVkMe6i2NtC' -H'Content-Type: application/json'
{"found":true,"_index":"test","_type":"users","_id":"AVs91cX8gmVkMe6i2NtC","_version":2,"result":"deleted","_shards":{"total":2,"successful":1,"failed":0}}#
@haslinger take a look at 2d708f5 commit, does it work for you?
No, that finally creates a request in the form of
:httpc.request(:delete, {'http://127.0.0.1:9200/panoptikum_dev/categories/14', [{'Content-Type', 'application/json'}]}, 'application/json', [])
instead of
:httpc.request(:delete, {'http://127.0.0.1:9200/panoptikum_dev/categories/14', [], 'application/json', ""}, [], [])
So the line should be
:delete -> ( request(method, {url, headers, content_type, []}, [], []) |> response() )
instead of your suggestion
:delete -> ( request(method, {url, headers}, content_type, []) |> response() )
@haslinger Ohh, I see, it's my fault... The recent commit is actually what you're looking for...
Yes! That works!