Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Serialization of queue size is broken #6325

Closed
maf23 opened this issue May 28, 2014 · 1 comment · Fixed by #6486
Closed

Serialization of queue size is broken #6325

maf23 opened this issue May 28, 2014 · 1 comment · Fixed by #6486
Assignees

Comments

@maf23
Copy link

maf23 commented May 28, 2014

This issue exists in both in the 1.1 branch and head.

I have set the threadpool.get.queue_size to -1 using the REST API.
I am running the elasticsearch server with assertions enable (-ea).
If then a TransportClient with "sniff=false" connects and tries to send a query it gets a org.elasticsearch.client.transport.NoNodeAvailableException
The underlying exception is:
Caused by: java.lang.AssertionError
at org.elasticsearch.common.io.stream.StreamOutput.writeVLong(StreamOutput.java:176)
at org.elasticsearch.common.io.stream.AdapterStreamOutput.writeVLong(AdapterStreamOutput.java:126)
at org.elasticsearch.common.unit.SizeValue.writeTo(SizeValue.java:211)
at org.elasticsearch.threadpool.ThreadPool$Info.writeTo(ThreadPool.java:643)
at org.elasticsearch.threadpool.ThreadPoolInfo.writeTo(ThreadPoolInfo.java:74)
at org.elasticsearch.action.admin.cluster.node.info.NodeInfo.writeTo(NodeInfo.java:291)
at org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse.writeTo(NodesInfoResponse.java:68)
at org.elasticsearch.transport.netty.NettyTransportChannel.sendResponse(NettyTransportChannel.java:83)
at org.elasticsearch.action.support.nodes.TransportNodesOperationAction$TransportHandler$1.onResponse(TransportNodesOperationAction.java:246)
at org.elasticsearch.action.support.nodes.TransportNodesOperationAction$TransportHandler$1.onResponse(TransportNodesOperationAction.java:241)
at org.elasticsearch.action.support.nodes.TransportNodesOperationAction$AsyncAction.finishHim(TransportNodesOperationAction.java:227)
at org.elasticsearch.action.support.nodes.TransportNodesOperationAction$AsyncAction.onOperation(TransportNodesOperationAction.java:202)
at org.elasticsearch.action.support.nodes.TransportNodesOperationAction$AsyncAction.access$900(TransportNodesOperationAction.java:102)
at org.elasticsearch.action.support.nodes.TransportNodesOperationAction$AsyncAction$2.run(TransportNodesOperationAction.java:146)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

That is the server tries to use OutputStream.writeVLong on a negative number.

Please let me know if you need more information.

@spinscale spinscale self-assigned this Jun 10, 2014
@spinscale
Copy link
Contributor

I think I found the root cause of this... the queue_size variable is serialized as a SizeValue, which does not support negative values in ThreadPool.Info.writeTo()

spinscale added a commit to spinscale/elasticsearch that referenced this issue Jul 16, 2014
As a SizeValue is used for serializing the thread pool size, a negative number
resulted in throwing an exception when deserializing (using -ea an assertionerror
was thrown).

This fixes a check for changing the serialization logic, so that negative numbers are read correctly, by adding an internal UNBOUNDED value.

Closes elastic#6325
Closes elastic#5357
spinscale added a commit that referenced this issue Jul 16, 2014
As a SizeValue is used for serializing the thread pool size, a negative number
resulted in throwing an exception when deserializing (using -ea an assertionerror
was thrown).

This fixes a check for changing the serialization logic, so that negative numbers are read correctly, by adding an internal UNBOUNDED value.

Closes #6325
Closes #5357
spinscale added a commit that referenced this issue Jul 16, 2014
As a SizeValue is used for serializing the thread pool size, a negative number
resulted in throwing an exception when deserializing (using -ea an assertionerror
was thrown).

This fixes a check for changing the serialization logic, so that negative numbers are read correctly, by adding an internal UNBOUNDED value.

Closes #6325
Closes #5357
spinscale added a commit that referenced this issue Jul 16, 2014
As a SizeValue is used for serializing the thread pool size, a negative number
resulted in throwing an exception when deserializing (using -ea an assertionerror
was thrown).

This fixes a check for changing the serialization logic, so that negative numbers are read correctly, by adding an internal UNBOUNDED value.

Closes #6325
Closes #5357
mute pushed a commit to mute/elasticsearch that referenced this issue Jul 29, 2015
As a SizeValue is used for serializing the thread pool size, a negative number
resulted in throwing an exception when deserializing (using -ea an assertionerror
was thrown).

This fixes a check for changing the serialization logic, so that negative numbers are read correctly, by adding an internal UNBOUNDED value.

Closes elastic#6325
Closes elastic#5357
mute pushed a commit to mute/elasticsearch that referenced this issue Jul 29, 2015
As a SizeValue is used for serializing the thread pool size, a negative number
resulted in throwing an exception when deserializing (using -ea an assertionerror
was thrown).

This fixes a check for changing the serialization logic, so that negative numbers are read correctly, by adding an internal UNBOUNDED value.

Closes elastic#6325
Closes elastic#5357
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants