{"push_id":1893167187,"size":5,"distinct_size":1,"ref":"refs/heads/alex/h2-retry","head":"1e9bd18476f57a9ccaf0d39359c455125ad895a2","before":"ae9ef7c5d6f88c6c0534d7fa76499f4e0a91053b","commits":[{"sha":"869a9c0cceb67a187613b41eaf3b344d70639981","author":{"name":"Eliza Weisman","email":"6c62bab17e02ee8acb8120389a6f8184a9b8174f@elizas.website"},"message":"Stream-aware classifiers for H2 client stats (#1542)\n\nAlthough I added stream-based response classification to the H2 router's `StreamStatsFilter` in  b81efb74a48aecda7a064af20aec1362a6e7b6f7, the `LocalClassifierStatsFilter` and `PerDstPathStatsFilter` were still wired up to use standard finagle `ResponseClassifier`s. In order to make client stats also stream-aware, these filters need to be rewritten to use `H2StreamClassifier`s as well.\r\n\r\nI've added a `StreamClassifierCtx` `LocalKey` to the H2 path stack that functions analogously to the `ResponseClassifierCtx` in other protocols, and I've added `PerDstPathStreamStatsFilter` and `LocalClassifierStreamStatsFilter` types that operate similarly to their non-stream-aware counterparts, but based on `StreamStatsFilter` rather than on the standard `StatsFilter`.\r\n\r\nI've added a unit test class, `PerDstPathStreamStatsFilterTest`, and end-to-end test class, `StreamClassificationEndToEndTest`. These tests are both based their non-stream-aware counterparts, `PerDstPathStatsFilterTest` and `ResponseClassificationEndToEndTest`, but modified to test the new stats filters. Note that some of the tests in the end-to-end test are currently ignored, since they test for classified retries functionality which isn't currently available; they should be un-ignored when #1523 lands.\r\n\r\nCloses #1537","distinct":false,"url":"https://api.github.com/repos/linkerd/linkerd/commits/869a9c0cceb67a187613b41eaf3b344d70639981"},{"sha":"aafd44a53259fd35f55b986b29b32b0072f796ca","author":{"name":"Risha Mars","email":"a436e43c1d3a844265e77c365eac498b987852d8@buoyant.io"},"message":"Fix incorrect retries stat in router summary of admin dashboard (#1541)\n\n* Fix incorrect retries stat in router summary of admin dashboard\r\n\r\nProblem: we were only fetching stats for services named 'svc'\r\nSolution: remove hardcoded service name from path stats accessor","distinct":false,"url":"https://api.github.com/repos/linkerd/linkerd/commits/aafd44a53259fd35f55b986b29b32b0072f796ca"},{"sha":"8476ede440fb80fbf4b7814d3ef806a9918388b7","author":{"name":"Eliza Weisman","email":"6c62bab17e02ee8acb8120389a6f8184a9b8174f@elizas.website"},"message":"Add ExceptionStatsHandler to StreamStatsFilters (#1543)\n\nWhile working on tests for #1542, I noticed that the standard `StatsFilter` also has an `ExceptionStatsHandler` stack param, which `StreamStatsFilter` lacks. This param is used for counting the number of occurrences of specific exceptions that occur.\r\n\r\nI thought we might want to have that for stream stats as well (and @adleong confirmed). This PR adds the `ExceptionStatsHandler` to both `StreamStatsFilter` and the `LocalClassifier` and `PerDstPath` stream stats filter derivatives added in #1542. \r\n\r\nThe only aspect of this PR that I think is complicated enough to comment on in detail is that I've added a public re-export of `ResponseClassificationSyntheticException` to `com.twitter.finagle.buoyant`. This exception appears to be used by the `ExceptionHandler` for cases where the classifier determined that there was a failure, but there was no associated exception thrown. Unfortunately, it's declared as `private[finagle]`, so in order to use it in `StreamStatsFilter` (which lives in the `io.buoyant.router.h2` package), I needed to re-export it from somewhere that lives inside the `finagle` package.\r\n\r\nI've re-enabled the tests in `PerDstPathStreamStatsFilterTest` that expect per-exception stats counters. These were commented out when I modified that test class from the non-stream-aware version to test #1542, since we weren't currently generating those stats. Now that we are, they can be re-enabled.","distinct":false,"url":"https://api.github.com/repos/linkerd/linkerd/commits/8476ede440fb80fbf4b7814d3ef806a9918388b7"},{"sha":"ed15162b37d914c80fff08e478bd1c71a763c94e","author":{"name":"Alex Leong","email":"af52d3065b8b78750f844012b8e34dbc454a5a0a@buoyant.io"},"message":"Allow early H2 classification (#1545)\n\nThe H2StreamClassifier type requires that a response stream be complete before\r\nthe response can be classified.  This is so that classifiers may use\r\ninformation from the Trailers, such as gRPC status code, to inform\r\nclassification.  However, for classifiers that only use information from the\r\nresponse Headers, classification is unnecessary delayed until the stream is\r\ncomplete.  Furthermore, once retries are introduced, responses will be held\r\nand buffered until the reponse can be classified or the buffer is overfull.\r\nHolding the response until the response stream completes introduces an\r\nunnecessary delay when enough information exists in the response Headers to\r\nclassify that response.\r\n\r\nRename H2StreamClassifer to H2Classifer and enrich it to include two partial\r\nfunctions: responseClassifier and streamClassifier.  When the response future\r\ncompletes, the responseClassifier should be consulted.  If the\r\nresponseClassifier partial function is not defined for this input, the\r\nstreamClassifier partial function should be consulted once the response stream\r\nis complete.  This allows classifiers to classify \"early\" when there is enough\r\ninformation in the response headers to make a classification.","distinct":false,"url":"https://api.github.com/repos/linkerd/linkerd/commits/ed15162b37d914c80fff08e478bd1c71a763c94e"},{"sha":"1e9bd18476f57a9ccaf0d39359c455125ad895a2","author":{"name":"Alex Leong","email":"af52d3065b8b78750f844012b8e34dbc454a5a0a@buoyant.io"},"message":"Resolve merge conflicts","distinct":true,"url":"https://api.github.com/repos/linkerd/linkerd/commits/1e9bd18476f57a9ccaf0d39359c455125ad895a2"}]}
{"actor":{"display_login":"adleong"}}