[grpc-io] Re: Can't decode compressed gRPC message as compression not configured

2023-02-01 Thread Hristo Katsarski
We have not experienced this issue for the past several days. We've updated 
the grpc-java libs on both sides(client/server) to v1.51.1. Here are the 
HTTP headers:

2023-02-02 02:30:19,985 DEBUG [GRPC worker, id #3] netty.NettyServerHandler 
- [id: 0x408a80cd, L:/xxx.xxx.xxx.xxx:8443 - R:/yyy.yyy.yyy.yyy:64339] 
INBOUND HEADERS: streamId=3 headers=GrpcHttp2RequestHeaders[:path: 
/com.xxx.yyy.grpc.service.v1.XxxService/Connect, :authority: 
xxx.yyy.com:8443, :method: POST, :scheme: https, te: trailers, 
content-type: application/grpc, user-agent: grpc-java-netty/1.51.1, 
traceparent: 00-9a43474eb67253ba175f03f6a4440250-cae6829dd96d83f5-01, 
grpc-accept-encoding: gzip] streamDependency=0 weight=16 exclusive=false 
padding=0 endStream=false

2023-02-02 02:30:20,254 DEBUG [GRPC worker, id #3] netty.NettyServerHandler 
- [id: 0x408a80cd, L:/xxx.xxx.xxx.xxx:8443 - R:/yyy.yyy.yyy.yyy:64339] 
OUTBOUND HEADERS: streamId=3 headers=GrpcHttp2OutboundHeaders[:status: 200, 
content-type: application/grpc, grpc-encoding: identity, 
grpc-accept-encoding: gzip] padding=0 endStream=false

Will post an update if it happens again.
Regards
On Friday, January 27, 2023 at 7:39:39 PM UTC+2 sanjay...@google.com wrote:

> On Friday, January 27, 2023 at 2:06:28 AM UTC-8 chris...@gmail.com wrote:
> ...
> It might not be the reason though (the error was on the server-side), 
> since the API says: 
>
>
> *Enables full-stream decompression of inbound streams. This will cause the 
> channel's outboundheaders to advertise support for GZIP compressed streams, 
> and gRPC servers which support the feature may respond with a GZIP 
> compressed stream.*
>
> Yes, it looks unrelated so I am going to ignore it.
>
>
>
>
> > Can you enable debug/trace logging to see the value of the 
> "grpc-encoding"  header for the offending RPC? That will give us some idea 
> whether you need to use a custom decompressor registry.
>
> Could you please provide more info of how to do that? 
>
> At present we have such logging config:
>
> 
>   
>   
> 
>
> which produces log like that (no "grpc-encoding"  header in it):
>
> DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
> R:/yyy:43421] INBOUND PING: ack=false bytes=1234
> DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
> R:/yyy:43421] OUTBOUND PING: ack=true bytes=1234
>
> DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
> R:/yyy:43421] OUTBOUND DATA: streamId=3 padding=0 endStream=false 
> length=249 
> bytes=c708820610f8dc9594df30186b22b8010a0732353233363432120d6f706f732d3239373535316333180120033a0642555344420b313030323432...
>
> DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
> R:/yyy:43421] INBOUND DATA: streamId=3 padding=0 endStream=false length=48 
> bytes=2b08e00110fbdc9594df301804221d0a0732353233363432120c6f72642d3239373735316333180220012803
>
> The headers appear in a log message like this:
>
> Aug 26, 2022 5:21:53 PM 
> io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2FrameLogger 
> logHeaders
> FINE: [id: 0x22c81f9d, L:/xx.xx.x.xx:50052 - R:/yy.yyy.yy.yyy:42068] 
> INBOUND HEADERS: streamId=1 headers=GrpcHttp2RequestHeaders[:path: 
> /grpc.health.v1.Health/Check, :authority: 
> [qqq::qqq:qq:qq::qqq:qqq]:50052, :method: POST, :scheme: http, te: 
> trailers, goog-outboundacl-exempt: true, grpc-trace-bin: 
> AABri/UCUi7MmVLcREUbqBPsAgD8gAgARv0A/gAA, 
> grpc-tags-bin: AAAKb3JpZ2luYXRvchhjbG91ZC1nZmUtcHJvZC1kZWRpY2F0ZWQ, 
> content-type: application/grpc, user-agent: grpc-c++/1.40.0-dev 
> grpc-c/18.0.0 (linux; chttp2), grpc-accept-encoding: identity,deflate,gzip, 
> accept-encoding: identity,gzip, grpc-timeout: 4510m] padding=0 
> endStream=false
>
> - looks like you need to enable FINE logging for 
> io.grpc.netty.shaded.io.netty (you have DEBUG for 
> io.grpc.netty.shaded.io.grpc.netty which is not enough)
> - there is no grpc-encoding header in my example snippet either but I 
> would like to see what you have in yours when the error happens then I will 
> analyze the code further
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/71fbc239-23fa-45e6-8dcc-67897ca693fcn%40googlegroups.com.


[grpc-io] Re: Can't decode compressed gRPC message as compression not configured

2023-01-27 Thread Hristo Katsarski
>  Is it possible some new clients (esp clients using another gRPC 
language) are now connecting which is why you are seeing this error?

Both the client and the server are backend Java services. Both use same set 
of gRPC+ProtoBuf libraries. After removing below method on the client-side 
there are no more errors for few days (the communication is bi-di streaming 
and is always up, messages get exchanged constantly):

NettyChannelBuilder...enableFullStreamDecompression()

It might not be the reason though (the error was on the server-side), since 
the API says: 


*Enables full-stream decompression of inbound streams. This will cause the 
channel's outboundheaders to advertise support for GZIP compressed streams, 
and gRPC servers which support the feature may respond with a GZIP 
compressed stream.*



> Can you enable debug/trace logging to see the value of the 
"grpc-encoding"  header for the offending RPC? That will give us some idea 
whether you need to use a custom decompressor registry.

Could you please provide more info of how to do that? 

At present we have such logging config:


  
  


which produces log like that (no "grpc-encoding"  header in it):

DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
R:/yyy:43421] INBOUND PING: ack=false bytes=1234
DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
R:/yyy:43421] OUTBOUND PING: ack=true bytes=1234

DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
R:/yyy:43421] OUTBOUND DATA: streamId=3 padding=0 endStream=false 
length=249 
bytes=c708820610f8dc9594df30186b22b8010a0732353233363432120d6f706f732d3239373535316333180120033a0642555344420b313030323432...

DEBUG netty.NettyServerHandler - [id: 0x9f841cd8, L:/xxx:8443 - 
R:/yyy:43421] INBOUND DATA: streamId=3 padding=0 endStream=false length=48 
bytes=2b08e00110fbdc9594df301804221d0a0732353233363432120c6f72642d3239373735316333180220012803


On Thursday, January 26, 2023 at 9:53:00 PM UTC+2 sanjay...@google.com 
wrote:
> There were plenty of messages processed for few days, and all of a sudden 
this exception breaks the connection. 

Is it possible some new clients (esp clients using another gRPC language) 
are now connecting which is why you are seeing this error?

> What does it mean, and how can be solved?

Can you enable debug/trace logging to see the value of the "grpc-encoding"  
header for the offending RPC? That will give us some idea whether you need 
to use a custom decompressor registry.



On Monday, January 23, 2023 at 9:41:17 PM UTC-8 chris...@gmail.com wrote:
Hello Everyone,

We got this error on the server-side of a bi-di streaming:

2023-01-23 23:41:54,879 ERROR [GRPC worker, id #1]  
io.grpc.netty.shaded.io.grpc.netty.NettyServerStream$TransportState 
deframeFailed
WARNING: Exception processing message
io.grpc.StatusRuntimeException: INTERNAL: Can't decode compressed gRPC 
message as compression not configured
at io.grpc.Status.asRuntimeException(Status.java:526)
at 
io.grpc.internal.MessageDeframer.getCompressedBody(MessageDeframer.java:428)
at 
io.grpc.internal.MessageDeframer.processBody(MessageDeframer.java:410)
at 
io.grpc.internal.MessageDeframer.deliver(MessageDeframer.java:275)
at 
io.grpc.internal.MessageDeframer.request(MessageDeframer.java:161)
at 
io.grpc.internal.AbstractStream$TransportState$1RequestRunnable.run(AbstractStream.java:236)
at 
io.grpc.netty.shaded.io.grpc.netty.NettyServerStream$TransportState$1.run(NettyServerStream.java:202)
at 
io.grpc.netty.shaded.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at 
io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at 
io.grpc.netty.shaded.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384)
at 
io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at 
io.grpc.netty.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.lang.Thread.run(Thread.java:748)


There were plenty of messages processed for few days, and all of a sudden 
this exception breaks the connection. What does it mean, and how can be 
solved?

Is there a way to trap and "swallow" such exception so that the channel 
does not get closed?

Using grpc netty shaded 1.42.1 with epoll.

Regards,
Chris

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/c8aae68c-27c0-48fa-bf16-f3c341fab707n%40googlegroups.com.


[grpc-io] Can't decode compressed gRPC message as compression not configured

2023-01-23 Thread Hristo Katsarski
Hello Everyone,

We got this error on the server-side of a bi-di streaming:

2023-01-23 23:41:54,879 ERROR [GRPC worker, id #1]  
io.grpc.netty.shaded.io.grpc.netty.NettyServerStream$TransportState 
deframeFailed
WARNING: Exception processing message
io.grpc.StatusRuntimeException: INTERNAL: Can't decode compressed gRPC 
message as compression not configured
at io.grpc.Status.asRuntimeException(Status.java:526)
at 
io.grpc.internal.MessageDeframer.getCompressedBody(MessageDeframer.java:428)
at 
io.grpc.internal.MessageDeframer.processBody(MessageDeframer.java:410)
at 
io.grpc.internal.MessageDeframer.deliver(MessageDeframer.java:275)
at 
io.grpc.internal.MessageDeframer.request(MessageDeframer.java:161)
at 
io.grpc.internal.AbstractStream$TransportState$1RequestRunnable.run(AbstractStream.java:236)
at 
io.grpc.netty.shaded.io.grpc.netty.NettyServerStream$TransportState$1.run(NettyServerStream.java:202)
at 
io.grpc.netty.shaded.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at 
io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at 
io.grpc.netty.shaded.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384)
at 
io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at 
io.grpc.netty.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.lang.Thread.run(Thread.java:748)


There were plenty of messages processed for few days, and all of a sudden 
this exception breaks the connection. What does it mean, and how can be 
solved?

Is there a way to trap and "swallow" such exception so that the channel 
does not get closed?

Using grpc netty shaded 1.42.1 with epoll.

Regards,
Chris

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/071be626-af27-4747-a564-a0a60c4e0653n%40googlegroups.com.


[grpc-io] Re: Send same message to multiple clients

2022-02-04 Thread Hristo Katsarski
Hi,

Thank you for your reply. It is very useful, will save CPU and GC times. 

For sending, I already synchronize calling "onNext()" on the outbound 
stream observer, since sending may happen directly if isReady() is true(by 
the caller thread) or via the setOnReadyHandler() Runnable, i.e. some 
thread from Netty's executor service. There were different errors (on the 
server and clients) without synchronizing onNext().

Regards
On Wednesday, February 2, 2022 at 10:52:17 PM UTC+2 zda...@google.com wrote:

> Yes, all protobuf v3 messages and immutable in Java so it's thread-safe to 
> be used concurrently. (Note that you should not send concurrent messages 
> over the same stream, because that will corrupt the data that grpc is 
> sending out.)
>
> On Sunday, January 30, 2022 at 7:43:36 AM UTC-8 chris...@gmail.com wrote:
>
>> Hi,
>>
>> We have a bi-di streaming service, the server is in gRPC Java. 
>>
>> Many of the server-side ProtoBuf messages are immutable, i.e. can be 
>> created once and sent to all client channels.  Right now new instance is 
>> created and sent to each client.
>>
>> Is sending the same ProtoBuf message, concurrently,  to multiple outbound 
>> streams possible and thread-safe thing to do?
>>
>>
>> Thanks
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/72873cb2-15b3-4cb4-b163-af16c72e6057n%40googlegroups.com.


[grpc-io] Send same message to multiple clients

2022-01-30 Thread Hristo Katsarski
Hi,

We have a bi-di streaming service, the server is in gRPC Java. 

Many of the server-side ProtoBuf messages are immutable, i.e. can be 
created once and sent to all client channels.  Right now new instance is 
created and sent to each client.

Is sending the same ProtoBuf message, concurrently,  to multiple outbound 
streams possible and thread-safe thing to do?


Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/ce167269-345d-4b93-8a98-2dbb678461b4n%40googlegroups.com.