Hi everyone! what’s the best way to debug grpc rec...
# java
b
Hi everyone! what’s the best way to debug grpc recursion issues? Example stacktrace in the thread.
Copy code
io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
    	at io.grpc.Status.asRuntimeException(Status.java:532)
    	at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538)
    	at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:564)
    	at io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72)
    	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:729)
    	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:710)
    	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
    	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    	at java.base/java.lang.Thread.run(Thread.java:1575)
    Caused by: io.grpc.StatusRuntimeException: INTERNAL: Invalid protobuf byte sequence
    	at io.grpc.Status.asRuntimeException(Status.java:524)
    	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:240)
    	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:134)
    	at io.grpc.MethodDescriptor.parseResponse(MethodDescriptor.java:284)
    	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:657)
    	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:644)
    	... 5 more
    Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message had too many levels of nesting.  May be malicious.  Use setRecursionLimit() to increase the recursion depth limit.
    	at com.google.protobuf.InvalidProtocolBufferException.recursionLimitExceeded(InvalidProtocolBufferException.java:133)
    	at com.google.protobuf.CodedInputStream.checkRecursionLimit(CodedInputStream.java:177)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:850)
    	at com.google.protobuf.MapEntryLite.parseField(MapEntryLite.java:105)
    	at com.google.protobuf.MapEntryLite.parseEntry(MapEntryLite.java:161)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:84)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:27)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:48)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:42)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:869)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:442)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:307)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:853)
    	at com.google.protobuf.Value$Builder.mergeFrom(Value.java:716)
    	at com.google.protobuf.Value$Builder.mergeFrom(Value.java:536)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:853)
    	at com.google.protobuf.MapEntryLite.parseField(MapEntryLite.java:105)
    	at com.google.protobuf.MapEntryLite.parseEntry(MapEntryLite.java:161)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:84)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:27)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:48)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:42)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:869)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:442)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:307)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:853)
    	at com.google.protobuf.Value$Builder.mergeFrom(Value.java:716)
    	at com.google.protobuf.Value$Builder.mergeFrom(Value.java:536)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:853)
    	at com.google.protobuf.MapEntryLite.parseField(MapEntryLite.java:105)
    	at com.google.protobuf.MapEntryLite.parseEntry(MapEntryLite.java:161)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:84)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:27)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:48)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:42)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:869)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:442)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:307)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:853)
    	at com.google.protobuf.Value$Builder.mergeFrom(Value.java:716)
    	at com.google.protobuf.Value$Builder.mergeFrom(Value.java:536)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:853)
    	at com.google.protobuf.MapEntryLite.parseField(MapEntryLite.java:105)
    	at com.google.protobuf.MapEntryLite.parseEntry(MapEntryLite.java:161)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:84)
    	at com.google.protobuf.MapEntry.<init>(MapEntry.java:27)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:48)
    	at com.google.protobuf.MapEntry$Metadata$1.parsePartialFrom(MapEntry.java:42)
...
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:869)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:442)
    	at com.google.protobuf.Struct$Builder.mergeFrom(Struct.java:307)
    	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:853)
    	at pulumirpc.Provider$InvokeResponse$Builder.mergeFrom(Provider.java:10093)
    	at pulumirpc.Provider$InvokeResponse$1.parsePartialFrom(Provider.java:10632)
    	at pulumirpc.Provider$InvokeResponse$1.parsePartialFrom(Provider.java:10624)
    	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:63)
    	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:25)
    	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parseFrom(ProtoLiteUtils.java:245)
    	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:237)
    	... 9 more
I tried the latest pulumi 3.145.0 and an older one 3.132.0 since we use
com.pulumi:pulumi:0.16.1
This only happens when I add a Helm chart resource like this:
Copy code
Chart envoy = new Chart("envoy", ChartArgs.builder()
                .namespace(namespace.metadata().applyValue(metadata -> metadata.name().orElseThrow()))
                .chart("<oci://docker.io/envoyproxy/gateway-helm>")
                .version("1.2.4")
                .build(),
                ComponentResourceOptions.builder()
                        .parent(this)
                        .dependsOn(namespace)
                        .build());
but it’s not about Helm, just the specific resources created by Envoy, I got the same when trying to use:
Copy code
ConfigFile envoy = new ConfigFile("envoy", ConfigFileArgs.builder()
                .file("<https://github.com/envoyproxy/gateway/releases/download/v1.2.4/install.yaml>")
                .build(),
                ComponentResourceOptions.builder()
                        .parent(this)
                        .dependsOn(namespace)
                        .build());
I guess I won’t be using Pulumi for managing k8s apps, just the infra part
a
Jan, can you open an issue on https://github.com/pulumi/pulumi-kubernetes/? This was we can track it, It should not be doing that.
b
sure
a
Awesome, excellent Jan, thank you.
pulumi-kubernetes 4.21.0 now supports pulumi-java v1.0.0, would you mind giving that a try?
b
I’ll do that in a few days and will get back to you. The project I’m working on has a lot of dependencies, and I’m also hitting a whole bunch of other issues, which I need to resolve first.
a
Thank you Jan, let me know if you need help on the other stuff.
b