-
Notifications
You must be signed in to change notification settings - Fork 286
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
[BUG] Wrong deserialization method is chosen in a mixed cluster of <2.11 and 2.11 nodes when PA is enabled #3771
Comments
To reproduce the issue, run a 3 node cluster running 2.10. You can use the attached zip which has a Once the nodes are up, kill Once the cluster is up enable PA by running:
Once enabled create an index called
If the replica of the
The primary and replica shard need to be on different versions for the reproduction. Once that is done, try running a bulk request.
The issue will show up while handling the bulk request. |
Hi @cwperks Was this fixed in the 2.12 release? |
Yes - this was included in 2.12, 9110114 |
Hello,
|
In a mixed cluster of <2.11 and >=2.11 nodes with Performance Analyzer (PA) enabled the 2.11 nodes can choose the wrong method of deserialization (Custom instead of JDK) when receiving a transport request from the >2.11 and receive the following error:
Performance Analyzer (PA) sets up a transport interceptor that wraps a TransportChannel. The security plugin has logic to extract the inner channel so that the rest of SecuritySSLRequestHandler uses the original channel. There is logic before the inner channel extraction to determine whether to use JDK Serialization if the incoming message was received from a node running OS <= 2.10. That code relies on
channel.getVersion()
to get the version of the node that transmitted the transport request, but when the channel is wrapped its not delegating to the original channel in PA. This PR moves the logic after the extraction of the inner channel to ensure thatchannel.getVersion()
correctly returns the version from the transmitting node.The coupling of the Security plugin and PA should be re-visited to avoid having to use reflection to extract the inner channel. With the Telemetry feature, there is also another instance where the TransportChannel can be wrapped: https://github.com/opensearch-project/OpenSearch/blob/main/server/src/main/java/org/opensearch/transport/InboundHandler.java#L253
The text was updated successfully, but these errors were encountered: