elasticsearch-ruby: HTTP 400 in scroll API
Using the scroll API as explained
r = client.search index: 'test', scroll: '1m', body: {sort: ['_doc']}
while r = client.scroll(scroll_id: r['_scroll_id'], scroll: '5m') and not r['hits']['hits'].empty? do ...
an error occurred (status 400, Bad request, Cannot get xcontent for unknown type
)
It occurs only in our production cluster (ES 5.2.2) secured with x-pack. Cannot replicate it in devel environment (without security it works fine).
I fixed it wrapping scroll_id
into body
parameter while calling scroll
, as follows:
while r = client.scroll(scroll: '5m', body: {scroll_id: r['_scroll_id']}) and not r['hits']['hits'].empty? do ...
That works fine because (see here)
r = client.scroll(scroll: '5m', body: {scroll_id: r['_scroll_id']})
produces
2017-03-09 09:46:00 +0100: GET https://USER:PWD@URL//_search/scroll?scroll=5m [status:200, request:0.146s, query:0.022s]
2017-03-09 09:46:00 +0100: > {"scroll_id":"$$28$$$$AHdBzPgTqV9AN49_kD3CSQH45tI=DnF1ZXJ5VGhlbkZldGNoHgAAAAAAAbVzFjlyWXJGalZ0VHhTTW1Pb1ppQVo5aUEAAAAAAAA74BZQME9iWTc3ZVFaaVFIZkdJZVlGQzJRAAAAAAAAO8UWRU5wcm1DeHJUQnlrWDhkb3d4dndkZwAAAAAAADvWFjNRTXJXTXdlU0ZxUU11QUZuUmhkQ0EAAAAAAAA74RZQME9iWTc3ZVFaaVFIZkdJZVlGQzJRAAAAAAAAO9UWM1FNcldNd2VTRnFRTXVBRm5SaGRDQQAAAAAAADu1FjlmRVFXNFJfUlpTa2JjWGtmRllSLUEAAAAAAAG1dRY5cllyRmpWdFR4U01tT29aaUFaOWlBAAAAAAAAO64WN25VNUt4T3BTeFdvS2laRjgtTXJuQQAAAAAAAbV0FjlyWXJGalZ0VHhTTW1Pb1ppQVo5aUEAAAAAAAA7thY5ZkVRVzRSX1JaU2tiY1hrZkZZUi1BAAAAAAABtXYWOXJZckZqVnRUeFNNbU9vWmlBWjlpQQAAAAAAAbWIFnN3S3hKM2FFUU0yaWY1b0EyMlNpaWcAAAAAAAA71hZCekRudVhWOVFBUzZEcTVBemt3Zy1nAAAAAAABtXcWOXJZckZqVnRUeFNNbU9vWmlBWjlpQQAAAAAAADvDFkVOcHJtQ3hyVEJ5a1g4ZG93eHZ3ZGcAAAAAAAA7xxZFTnBybUN4clRCeWtYOGRvd3h2d2RnAAAAAAAAO8QWRU5wcm1DeHJUQnlrWDhkb3d4dndkZwAAAAAAADvGFkVOcHJtQ3hyVEJ5a1g4ZG93eHZ3ZGcAAAAAAAG1iRZzd0t4SjNhRVFNMmlmNW9BMjJTaWlnAAAAAAABtYsWc3dLeEozYUVRTTJpZjVvQTIyU2lpZwAAAAAAAbWKFnN3S3hKM2FFUU0yaWY1b0EyMlNpaWcAAAAAAAA7yBZFTnBybUN4clRCeWtYOGRvd3h2d2RnAAAAAAAAO64WaW1hbmJXNC1RZGVHMEpCSWVqTXFVdwAAAAAAADvQFjBIRGVWSFlyVDk2QnVtakNQQ053MUEAAAAAAAA7zhYwSERlVkhZclQ5NkJ1bWpDUENOdzFBAAAAAAAAO9MWMEhEZVZIWXJUOTZCdW1qQ1BDTncxQQAAAAAAADvPFjBIRGVWSFlyVDk2QnVtakNQQ053MUEAAAAAAAA70RYwSERlVkhZclQ5NkJ1bWpDUENOdzFBAAAAAAAAO9IWMEhEZVZIWXJUOTZCdW1qQ1BDTncxQQ=="}
where he request body is a HASH {scroll_id: value}
While
r = client.scroll(scroll_id: r['_scroll_id'], scroll: '5m')
produces a
2017-03-09 09:22:37 +0100: GET https://USER:PWD@URL/_search/scroll?scroll=5m [status:400, request:0.077s, query:N/A]
2017-03-09 09:22:37 +0100: > $$28$$$$Ze_mvA3jHBEnU8hJ4zKITkHn8X4=DnF1ZXJ5VGhlbkZldGNoHgAAAAAAAbOwFjlyWXJGalZ0VHhTTW1Pb1ppQVo5aUEAAAAAAAA7MRZQME9iWTc3ZVFaaVFIZkdJZVlGQzJRAAAAAAAAOxUWRU5wcm1DeHJUQnlrWDhkb3d4dndkZwAAAAAAADskFjNRTXJXTXdlU0ZxUU11QUZuUmhkQ0EAAAAAAAA7MBZQME9iWTc3ZVFaaVFIZkdJZVlGQzJRAAAAAAAAOyUWM1FNcldNd2VTRnFRTXVBRm5SaGRDQQAAAAAAADsDFjlmRVFXNFJfUlpTa2JjWGtmRllSLUEAAAAAAAGzshY5cllyRmpWdFR4U01tT29aaUFaOWlBAAAAAAAAOv4WN25VNUt4T3BTeFdvS2laRjgtTXJuQQAAAAAAAbOxFjlyWXJGalZ0VHhTTW1Pb1ppQVo5aUEAAAAAAAA7BBY5ZkVRVzRSX1JaU2tiY1hrZkZZUi1BAAAAAAABs7QWOXJZckZqVnRUeFNNbU9vWmlBWjlpQQAAAAAAAbPGFnN3S3hKM2FFUU0yaWY1b0EyMlNpaWcAAAAAAAA7JhZCekRudVhWOVFBUzZEcTVBemt3Zy1nAAAAAAABs7MWOXJZckZqVnRUeFNNbU9vWmlBWjlpQQAAAAAAADsWFkVOcHJtQ3hyVEJ5a1g4ZG93eHZ3ZGcAAAAAAAA7EhZFTnBybUN4clRCeWtYOGRvd3h2d2RnAAAAAAAAOxcWRU5wcm1DeHJUQnlrWDhkb3d4dndkZwAAAAAAADsTFkVOcHJtQ3hyVEJ5a1g4ZG93eHZ3ZGcAAAAAAAGzxRZzd0t4SjNhRVFNMmlmNW9BMjJTaWlnAAAAAAABs8QWc3dLeEozYUVRTTJpZjVvQTIyU2lpZwAAAAAAAbPHFnN3S3hKM2FFUU0yaWY1b0EyMlNpaWcAAAAAAAA7FBZFTnBybUN4clRCeWtYOGRvd3h2d2RnAAAAAAAAOv4WaW1hbmJXNC1RZGVHMEpCSWVqTXFVdwAAAAAAADseFjBIRGVWSFlyVDk2QnVtakNQQ053MUEAAAAAAAA7HRYwSERlVkhZclQ5NkJ1bWpDUENOdzFBAAAAAAAAOx8WMEhEZVZIWXJUOTZCdW1qQ1BDTncxQQAAAAAAADshFjBIRGVWSFlyVDk2QnVtakNQQ053MUEAAAAAAAA7IBYwSERlVkhZclQ5NkJ1bWpDUENOdzFBAAAAAAAAOyIWMEhEZVZIWXJUOTZCdW1qQ1BDTncxQQ==
where request body is just the value of scroll_id
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Comments: 18 (10 by maintainers)
ok done thanks, @karmi
@karmi ++ thanks for the clarification. I’ve created a fix in the elasticsearch input logstash plugin to use the scroll api correctly: https://github.com/logstash-plugins/logstash-input-elasticsearch/pull/61
@jsvd, we now have branches and branches corresponding to Elasticsearch version, so to to use the client with Elasticsearch 1.x, a 1.x of the client should be used.
@vicvega I’ve recently merged (fixes to the “Scroll API”](https://github.com/elastic/elasticsearch-ruby/commit/9837d66f2796f7d541f6e3ff712454350a5607b5), but I think I forgot to revisit examples, let me look at that!
assuming elasticsearch-ruby 5.x will not support elasticsearch 1.x, we can enforce both in code and documentation that: this is valid:
r = client.scroll(:body => { :scroll_id => scroll_id }, :scroll => "1m")
this is not:r = client.scroll(:body => scroll_id, :scroll => "1m")