[
https://issues.apache.org/jira/browse/CASSANDRA-16581?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17347867#comment-17347867
]
David Capwell edited comment on CASSANDRA-16581 at 5/19/21, 9:12 PM:
---------------------------------------------------------------------
[~samt]
FrameEncoder change is
{code}
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise
promise) throws Exception
{
if (!(msg instanceof Payload))
- throw new IllegalStateException("Unexpected type: " + msg);
+ {
+ ctx.write(msg, promise);
+ return;
+ }
{code}
This isn't a leftover from debugging, its from the fact that we no longer
support it as the v5 logic uses the more lower level APIs (such as
ChannelInboundHandlerAdapter); the higher level APIs pass through objects which
do not match the type. Here is an example from v4
{code}
public static class ProtocolEncoder extends MessageToMessageEncoder<Message>
{code}
MessageToMessageEncoder has the following
https://github.com/netty/netty/blob/4.1/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java#L84-L100
{code}
if (acceptOutboundMessage(msg)) {
...
} else {
ctx.write(msg, promise);
}
{code}
I use this in the simple client to send arbitrary payloads to validate server
behavior.
ProtocolVersion - made the change
was (Author: dcapwell):
[~samt]
FrameEncoder change is
{code}
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise
promise) throws Exception
{
if (!(msg instanceof Payload))
- throw new IllegalStateException("Unexpected type: " + msg);
+ {
+ ctx.write(msg, promise);
+ return;
+ }
{code}
This isn't a leftover from debugging, its from the fact that we no longer
support it as the v5 logic uses the more lower level APIs (such as
ChannelInboundHandlerAdapter); the higher level APIs pass through objects which
do not match the type. Here is an example from v4
{code}
public static class ProtocolEncoder extends MessageToMessageEncoder<Message>
{code}
MessageToMessageEncoder has the following
https://github.com/netty/netty/blob/4.1/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java#L84-L100
{code}
if (acceptOutboundMessage(msg)) {
...
} else {
ctx.write(msg, promise);
}
{code}
I use this in the simple client to send arbitrary payloads to validate server
behavior.
ProtocolVersion - made the change; back porting now
> Failure to execute queries should emit a KPI other than read
> timeout/unavailable so it can be alerted/tracked
> -------------------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-16581
> URL: https://issues.apache.org/jira/browse/CASSANDRA-16581
> Project: Cassandra
> Issue Type: Bug
> Components: Messaging/Client, Observability/Metrics
> Reporter: David Capwell
> Assignee: David Capwell
> Priority: Normal
> Fix For: 3.0.x, 3.11.x, 4.0-rc
>
>
> When we are unable to parse a message we do not have a way to detect this
> from a monitoring point of view so can get into situations where we believe
> the database is fine but the clients are on-fire. This case popped up in the
> 2.1 to 3.0 upgrade as paging state wasn’t mixed-mode safe.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]