-
Notifications
You must be signed in to change notification settings - Fork 504
Reduce scariness of log message when a H2 router receives a H1 request #1618
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
Conversation
Alternative Solutions
|
|
||
// if we attempted to cast a Http2Frame as a H1 frame, log a message & kill the | ||
// connection. | ||
case Throw(e: ClassCastException) if e.getMessage == H1RequestError => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm worried about this being quite brittle but... I can't really see a better way
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps remove the message equality check and make the log more generic? "HTTP/2 router could not handle non-HTTP/2 request!"? WDYT?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I considered that, but it seemed unwise to assume all ClassCastException
s were due to a mismatched request protocol. If a ClassCastException
was thrown for some other reason, logging the protocol error message would obscure that failure...
What about a test that the message contains "Transport.cast failed."
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
⭐ 🔨
Previously, when a HTTP/2 router received a request in a non-HTTP/2 protocol, a `ClassCastException` was thrown, resulting in a stack trace that was not very user-friendly and did not accurately describe what had occurred. I've added a line to match these exceptions & log a more meaningful warning. Tested this by `curl`ing the H2 router started with `./sbt linkerd-examples/h2:run`. Closes #1472.
## 1.2.0 2017-09-07 * **Breaking Change**: `io.l5d.mesh`, `io.l5d.thriftNameInterpreter`, linkerd admin, and namerd admin now serve on 127.0.0.1 by default (instead of 0.0.0.0). * **Breaking Change**: Removed support for PKCS#1-formatted keys. PKCS#1 formatted keys must be converted to PKCS#8 format. * Added experimental `io.l5d.dnssrv` namer for DNS SRV records (#1611) * Kubernetes * Added an experimental `io.l5d.k8s.configMap` interpreter for reading dtabs from a Kubernetes ConfigMap (#1603). This interpreter will respond to changes in the ConfigMap, allowing for dynamic dtab updates without the need to run Namerd. * Made ingress controller's ingress class annotation configurable (#1584). * Fixed an issue where Linkerd would continue routing traffic to endpoints of a service after that service was removed (#1622). * Major refactoring and performance improvements to `io.l5d.k8s` and `io.l5d.k8s.ns` namers (#1603). * Ingress controller now checks all available ingress resources before using a default backend (#1607). * Ingress controller now correctly routes requests with host headers that contain ports (#1607). * HTTP/2 * Fixed an issue where long-running H2 streams would eventually hang (#1598). * Fixed a memory leak on long-running H2 streams (#1598) * Added a user-friendly error message when a HTTP/2 router receives a HTTP/1 request (#1618) * HTTP/1 * Removed spurious `ReaderDiscarded` exception logged on HTTP/1 retries (#1609) * Consul * Added support for querying Consul by specific service health states (#1601) * Consul namers and Dtab store now fall back to a last known good state on Consul observation errors (#1597) * Improved log messages for Consul observation errors (#1597) * TLS * Removed support for PKCS#1 keys (#1590) * Added validation to prevent incompatible `disableValidation: true` and `clientAuth` settings in TLS client configurations (#1621) * Changed `io.l5d.mesh`, `io.l5d.thriftNameInterpreter`, linkerd admin, and namerd admin to serve on 127.0.0.1 by default (instead of 0.0.0.0) (#1366) * Deprecated `io.l5d.statsd` telemeter.
Previously, when a HTTP/2 router received a HTTP/1 request, a
ClassCastException
was thrown, resulting in a "strange" stack trace (#1472).I've added a line to match these exceptions & log a more meaningful warning.
Tested this by
curl
ing the H2 router started with./sbt linkerd-examples/h2:run
. While sending a request to the router's port withcurl
used to produce:now it produces: