-
Notifications
You must be signed in to change notification settings - Fork 296
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
Unexpected HTTP response codes for unimplemented GRPC methods #4392
Comments
Link to gist with pd logs: https://gist.github.com/hdevalence/3cc8c9cef56463dc08cf4e303f316ba4
|
Using
Reflection is also supported, shown here via
That makes sense, as a side-effect of our merging multiple routers in the pd endpoint, so that we can provide a node status page in addition to the gRPC services. I'm not sure what the best compromise is for this situation. |
Ah, looks like I had an outdated
|
Looks like newer versions of grpcurl, the server reflection API moved from |
Let's do an upstream patch and version bump, that seems like the best solution |
i am opening an upstream patch now! cc: @conorsch https://github.com/cratelyn/tonic/tree/kate/update-tonic-reflection-to-v1 |
this fixes hyperium#1685. ### 🩹 changes * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392
this fixes hyperium#1685. ### 🩹 changes * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
i've opened hyperium/tonic/pull/1701. @conorsch and i confirmed fixes this issue by running once that lands, we will need to either upgrade our in any case, i have a version of this patch based on the 0.11 and 0.10 releases here and here, respectively. |
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. * `HttpsUriWithoutTlsSupport` is now gated behind the `transport` feature flag, because it is not used otherwise. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. * `HttpsUriWithoutTlsSupport` is now gated behind the `tls` feature flag, because it is not used otherwise. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. * `HttpsUriWithoutTlsSupport` is now gated behind the `tls` feature flag, because it is not used otherwise. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. * `HttpsUriWithoutTlsSupport` is now gated behind the `tls` feature flag, because it is not used otherwise. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. * `HttpsUriWithoutTlsSupport` is now gated behind the `tls` feature flag, because it is not used otherwise. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. * `HttpsUriWithoutTlsSupport` is now gated behind the `tls` feature flag, because it is not used otherwise. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
fixes #4392. in #4392, we found an issue with gRPC reflection when recent versions of `grpcurl` were used to list supported endpoints. this was tracked down and fixed in #hyperium/tonic#1701, in collaboration with @conorsch. that pr targets the more recent 0.11 tonic release however, which we are not yet using. eventually we should upgrade to tonic 0.11 (see #4400). as a short-term measure, but we want to unblock engineers from Skip working on an integration with Penumbra. this commit patches the `tonic` dependencies used to point to a temporary fork of the `tonic` repo, where i have backported that patch (and some ci-related fixes) to the 0.10 release. see also: * hyperium/tonic#1701 * penumbra-zone/tonic#1 * penumbra-zone/tonic#2 * #4392 * #4400 --- checking that all transitive dependencies point to the patched version: ``` ; cargo tree | grep tonic │ └── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic-reflection v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) │ │ └── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic-web v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-reflection v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-web v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-reflection v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-web v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ```
fixes #4392. in #4392, we found an issue with gRPC reflection when recent versions of `grpcurl` were used to list supported endpoints. this was tracked down and fixed in #hyperium/tonic#1701, in collaboration with @conorsch. that pr targets the more recent 0.11 tonic release however, which we are not yet using. eventually we should upgrade to tonic 0.11 (see #4400). as a short-term measure, but we want to unblock engineers from Skip working on an integration with Penumbra. this commit patches the `tonic` dependencies used to point to a temporary fork of the `tonic` repo, where i have backported that patch (and some ci-related fixes) to the 0.10 release. see also: * hyperium/tonic#1701 * penumbra-zone/tonic#1 * penumbra-zone/tonic#2 * #4392 * #4400 --- checking that all transitive dependencies point to the patched version: ``` ; cargo tree | grep tonic │ └── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic-reflection v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) │ │ └── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic-web v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) │ │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) │ ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-reflection v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-web v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-reflection v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic-web v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ├── tonic v0.10.2 (https://github.com/penumbra-zone/tonic.git?tag=v0.10.3-penumbra#db355dd7) (*) ```
Refs #4392. We want to ensure that server reflection remains working, despite changes to the tonic dependencies (#4400) and proto compiling logic #4422. While the most effective test is exercising all these protos regularly, we currently lack solid coverage, so this superficial integration test is a sanity-check to save time versus building locally and inspecting the output manually.
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
Refs #4392. We want to ensure that server reflection remains working, despite changes to the tonic dependencies (#4400) and proto compiling logic #4422. While the most effective test is exercising all these protos regularly, we currently lack solid coverage, so this superficial integration test is a sanity-check to save time versus building locally and inspecting the output manually.
Refs #4392. We want to ensure that server reflection remains working, despite changes to the tonic dependencies (#4400) and proto compiling logic #4422. While the most effective test is exercising all these protos regularly, we currently lack solid coverage, so this superficial integration test is a sanity-check to save time versus building locally and inspecting the output manually.
this fixes hyperium#1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: hyperium#1685 x-ref: penumbra-zone/penumbra#4392 co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
Refs #4392. We want to ensure that server reflection remains working, despite changes to the tonic dependencies (#4400) and proto compiling logic #4422. While the most effective test is exercising all these protos regularly, we currently lack solid coverage, so this superficial integration test is a sanity-check to save time versus building locally and inspecting the output manually.
Refs #4392. We want to ensure that server reflection remains working, despite changes to the tonic dependencies (#4400) and proto compiling logic #4422. While the most effective test is exercising all these protos regularly, we currently lack solid coverage, so this superficial integration test is a sanity-check to save time versus building locally and inspecting the output manually.
Refs #4392. We want to ensure that server reflection remains working, despite changes to the tonic dependencies (#4400) and proto compiling logic #4422. While the most effective test is exercising all these protos regularly, we currently lack solid coverage, so this superficial integration test is a sanity-check to save time versus building locally and inspecting the output manually.
this fixes #1685. in penumbra-zone/penumbra#4392, we observed that tonic servers do not properly support reflection when servicing a request sent by recent versions of [`grpcurl`], after [v1.8.8] began using `grpc.reflection.v1.ServerReflection`. (see fullstorydev/grpcurl#407) these lead to an error regarding an unexpected status code, like this: ``` ❯ grpcurl --version grpcurl v1.9.1 ❯ grpcurl -vv grpc.testnet.penumbra.zone:443 list Failed to list services: rpc error: code = Unknown desc = unexpected HTTP status code received from server: 405 (Method Not Allowed); malformed header: missing HTTP content-type ``` this adds the v1 reflection definition to `tonic-reflection`, which was observed as fixing these issues for our gRPC endpoint. ### 🩹 changes changes in this commet are as follows: * vendors the `v1` definition of [`reflection.proto`][proto]. * renames the (deprecated) `v1alpha` definition to `reflection_v1alpha.proto`. * `tonic_reflection::generated::grpc_reflection_v1` links to the generated Rust code (created by running `cargo run --package codegen`). * `tonic_reflection::generated::FILE_DESCRIPTOR_SET` is replaced by `tonic_reflection::generated::{FILE_DESCRIPTOR_SET_V1ALPHA, FILE_DESCRIPTOR_SET_V1}`. * `tonic_reflection::pb` now contains namespaced `tonic_reflection::pb::{v1alpha, v1}` submodules. (**NB: this is a breaking change to the public `tonic-reflection` API.**) * `tonic_reflection::server` is updated to use the generated `tonic_reflection::pb::v1` code. [v1.8.8]: https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.8 [proto]: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1/reflection.proto [grpcurl]: https://github.com/fullstorydev/grpcurl --- fixes: #1685 x-ref: penumbra-zone/penumbra#4392 Co-authored-by: Conor Schaefer <conor@penumbralabs.xyz>
Adds a version of grpcui to the local nix dev env. Includes logic to build the go binary from source, via nix, because the released version of grpcui upstream still uses the old v1alpha reflection API, which is incompatible with current versions of `pd`. Refs #4392.
Adds a version of grpcui to the local nix dev env. Includes logic to build the go binary from source, via nix, because the released version of grpcui upstream still uses the old v1alpha reflection API, which is incompatible with current versions of `pd`. Refs #4392.
Adds a version of grpcui to the local nix dev env. Includes logic to build the go binary from source, via nix, because the released version of grpcui upstream still uses the old v1alpha reflection API, which is incompatible with current versions of `pd`. Refs #4392.
Describe the bug
Skip reported unexpected HTTP response codes for unimplemented GRPC methods:
They also reported that
grpcurl
didn't work, potentially because of problems with reflection.This was against
https://grpc.testnet.penumbra.zone
; it's possible the custom load balancer setup there interferes with HTTP headers, we've had that issue in the past, but this seems more likely to be a problem inpd
itself.🔗 related work
v1
reflection protobuffer definitions hyperium/tonic#1701v1
reflection protobuffer definitions tonic#1The text was updated successfully, but these errors were encountered: