{"push_id":3108310019,"size":63,"distinct_size":63,"ref":"refs/heads/master","head":"baf7b55090bf133f13c8b89fca77c0c24c2f53d3","before":"d38f686c5e7a6941cd8b1fdeae0572cb7e5ae5cf","commits":[{"sha":"8a9a9bf26b3901fdd345a96e6cf8f39ca4d1bf49","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Move telemetry::metrics into dedicated crate (#84)\n\nThe `metrics!` macro is currently local to the telemetry module.\r\nFurthermore, the `telemetry::metrics` module no longer has\r\nproxy-specific logic.\r\n\r\nThis change moves the `telemetry::metrics` module into a new crate,\r\n`linkerd2_metrics`.\r\n\r\nThis will enable unifying `telemetry::http` and `telemetry::transport`\r\ninto `http` and `transport`, respectively.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/8a9a9bf26b3901fdd345a96e6cf8f39ca4d1bf49"},{"sha":"8ea9a3644dd527bb4908ff89f62fb9ccf1745289","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Move telemetry::transport to transport::metrics (#85)\n\nFollowing #84, the `telemetry::transport` module can be moved into the\r\n`transport` module.\r\n\r\nThis should allow us to simplify type signatures by combining redundant\r\ntypes. It's also hoped that we can reduce the API boilerplate around\r\nmetrics so it's much easier to instrument and track new metrics in\r\ntransport code.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/8ea9a3644dd527bb4908ff89f62fb9ccf1745289"},{"sha":"d98c83404b7af83154d3d8fb38564da86cdf1e6e","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Move `control::Bind` to `svc::NewClient` (#86)\n\nThe `control::destination` exposes an important trait, `Bind`, that\r\nabstracts the logic of instantiating a new service for an individual\r\nendpoint (i.e., in a load balancer).\r\n\r\nThis interface is not specific to our service discovery implementation,\r\nand can easily be used to model other types of client factory.\r\n\r\nIn the spirit of consolidating our HTTP-specific logic, and making the\r\ncore APIs of the proxy more visible, this change renames the `Bind`\r\ntrait to `NewClient`, simplifies the trait to have fewer type\r\nparameters, and documents this new generalized API.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/d98c83404b7af83154d3d8fb38564da86cdf1e6e"},{"sha":"b86694546a4f069bbbef2189e682cf91fe3530e1","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Remove redundant reconnect logic (#87)\n\n`bind::BoundService` wraps a `Reconnect` service and handles its Connect\r\nerrors. However, `BoundService` exposes `Reconnect`'s Error type to\r\ncallers even though these errors can never be returned.\r\n\r\nFurthermore, `Reconnect` is allowed be polled after returning an error,\r\ntriggering the inner service to be rebuilt. We needlessly duplicate this\r\nlogic in `BoundService`.\r\n\r\nBefore splitting this file up into smaller chunks, let's update\r\n`BoundService` to more narrowly adhere to `Reconnect`s API:\r\n\r\n- Only the inner error type is returned. `unreachable!` assertions\r\n  have been made where error variants cannot be returned.\r\n- Do not \"rebind\" the stack explicitly. Instead, let `Reconnect` do\r\n  this.\r\n- Now BoundService::call may panic if invoked before poll_ready. It's a\r\n  programming error, since `Reconnect` requires that `poll_ready` be\r\n  called first.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/b86694546a4f069bbbef2189e682cf91fe3530e1"},{"sha":"216fe16523a2a4434348b7f46b6ccd40acba21ac","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Reorder endpoint-specific HTTP middlewares (#88)\n\nCurrently, the layered service implementations that comprise the HTTP\r\nstack are a mix of `Service` and `NewService` types. In the\r\nendpoint-specific stack. `transparency::Client` is the only layer that\r\nactually needs to be a `NewService` if it is wrapped immediately with a\r\n`Reconnect`.\r\n\r\nThis allows us to remove several `NewService` implementations.\r\n\r\nThis extracts a new `svc::Reconnect` middleware from `bind`, handling\r\nconnection error logging and hiding `tower_reconnect::Error` from outer\r\nlayers.\r\n\r\nFurthermore, two HTTP/1-specific middlewares have been moved outside of\r\nthe TLS rebinding layer, since they are not dependent on TLS\r\nconfiguration.\r\n\r\nFinally, `bind`'s type aliases have been simplified, removing the\r\n`HttpRequest` and `HttpResponse` aliases. By removing these, and\r\nremoving `transparency::Client`'s dependency on the telemetry body\r\ntypes, it should be easier to change type signatures going forward.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/216fe16523a2a4434348b7f46b6ccd40acba21ac"},{"sha":"9f9518a98f373998b77bb60ec1e677769192f7fd","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Rename `transparency` to `proxy` (#89)\n\nThis change clarifies the naming and role of the `proxy` (née transparency)\r\nmodule. There are no functional changes.\r\n\r\n`proxy::tcp::Proxy` has been renamed to `proxy::tcp::Forward` to help\r\ndisambiguate terminology: TCP connections may be _forwarded_\r\nby the proxy server.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/9f9518a98f373998b77bb60ec1e677769192f7fd"},{"sha":"ccd5d219786ce79df572b25e1ee5072e2d6e2068","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Introduce a \"server stack\" (#90)\n\nPreviously, `proxy::Server` was generic over a `NewService` (constructed\r\nin `lib.rs`) that instruments error handling around the router and metrics. In\r\npreparation of adding a metrics module into the server stack (that is configured\r\nby the source connection), `Server` should be changed to instantaneously build\r\nclients with a `MakeClient<Arc<ctx::transport::Server>>`.\r\n\r\nIn order to do this, the following changes were made:\r\n\r\n1. The `svc::NewClient` type was changed to `svc::MakeClient<Target>`. The\r\n    naming change (\"New\" to \"Make\") is intended to differentiate the type from\r\n    `NewService`, which is asynchronous and does not accept a `Target` argument.\r\n2. The `proxy::h2_router` module was split from `lib.rs` and `map_err.rs`.  `MapErr`\r\n    tried to be generic, though we only used it in once place. Now, the `h2_router::Make`\r\n    type supports cloning routers and handling their errors.\r\n3. The `TimestampRequestOpen` middleware was split into its own file and given a\r\n    `MakeClient` implementation.\r\n4. The `svc::Layer` trait has been introduced to support layering middlewares like\r\n    `TimestampRequestOpen`. This is analogous to Finagle's `Stack.Module` type.\r\n\r\nThere are no functional changes.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/ccd5d219786ce79df572b25e1ee5072e2d6e2068"},{"sha":"bbf296668bb9b032018675394735e75c34994c60","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Move HTTP-specific `proxy` modules into proxy::http (#93)\n\nTo prepare to move http-specific proxying logic from bind.rs into\r\nproxy, let's carve out a proxy::http module for HTTP-specific behavior.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/bbf296668bb9b032018675394735e75c34994c60"},{"sha":"567b1b7ff2d68808b28cab9ec351f70065647940","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Move bind::NormalizeUri to its own module in proxy::http (#94)\n\nSplit proxy infrastructure from `bind`\r\n\r\nIn order to simplify `bind.rs`, this change moves `NormalizeUri` into\r\nits own module, `proxy::http::normalize_uri`.\r\n\r\nThis will later become part of the \"client stack\" built from\r\n`proxy::http`.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/567b1b7ff2d68808b28cab9ec351f70065647940"},{"sha":"66d59dafdef0046bdebc66b1978cb1fd10f56225","author":{"name":"Sean McArthur","email":"d7e19930cc1f42c2d0781f4d9e6f1fe5891bf9cf@buoyant.io"},"message":"update http to v0.1.13\n\nSigned-off-by: Sean McArthur <sean@buoyant.io>","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/66d59dafdef0046bdebc66b1978cb1fd10f56225"},{"sha":"0861f968d74517929a757ee32260f950a293ec25","author":{"name":"Sean McArthur","email":"d7e19930cc1f42c2d0781f4d9e6f1fe5891bf9cf@buoyant.io"},"message":"update hyper to v0.12.9\n\nSigned-off-by: Sean McArthur <sean@buoyant.io>","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/0861f968d74517929a757ee32260f950a293ec25"},{"sha":"53a85f442adc1ccefc0943f88d993262e955bd13","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Split the `timeout` module into its own subcrate (#96)\n\nThe `timeout` module has very little to do with the proxy, specifically.\r\n\r\nThis change moves it into a dedicated subcrate. This helps to clarify\r\ndependencies and to minimize generic logic in the main proxy crate.\r\n\r\nIn doing this, an unused implementation of AsyncRead/AsyncWrite for\r\nTimeout was deleted.\r\n\r\nFurthermore, the `HumanDuration` type has been copied into\r\ntests/support/mod.rs so that this type need not be part of the timeout\r\nmodule's public API.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/53a85f442adc1ccefc0943f88d993262e955bd13"},{"sha":"a4d411077660b6c8222152ab1d75b5527ec3d379","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Create a `lib` dir for subcrates (#97)\n\nAs we extract subcrates from the `src/` directory, the repository root\r\nbecomes a bit cluttered. This change moves these subcrates into a `lib`\r\ndirectory.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/a4d411077660b6c8222152ab1d75b5527ec3d379"},{"sha":"b4ced35838ca65d78a44998b6e61cdcf3878051d","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Fix linkerd2-metrics test compilation (#98)\n\n* Fix linkerd2-metrics test compilation\r\n\r\nThe `quickcheck` dependency was lost when the subcrate was split out.\r\nThis change restores the dependency.\r\n\r\nFixes linkerd/linkerd2#1685\r\n\r\n* Run tests for all packages in `make test`","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/b4ced35838ca65d78a44998b6e61cdcf3878051d"},{"sha":"977ff25cb98e1cc317125d7ff2719bbf417f909a","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Make config variable naming uniform (#99)\n\nThere are a few crufty remaining references to the `private` and\r\n`public` proxy interfaces. `private` referred to the pod-local side of\r\nthe proxy; and `public` the external side.\r\n\r\nThese terms have been replaced by `inbound` and `outbound` proxies.\r\n\r\nThe \"private forward address\" is now the \"inbound forward address\".\r\nThe \"private listener\" is now the \"outbound listener\".\r\nThe \"public listener\" is now the \"inbound listener\".\r\n\r\nThis change adds alternate environment variables to support configuration:\r\n- `LINKERD2_PROXY_INBOUND_CONNECT_TIMEOUT`\r\n- `LINKERD2_PROXY_INBOUND_FORWARD`\r\n- `LINKERD2_PROXY_INBOUND_LISTENER`\r\n- `LINKERD2_PROXY_OUTBOUND_CONNECT_TIMEOUT`\r\n- `LINKERD2_PROXY_OUTBOUND_LISTENER`\r\n\r\nThe old configuration variables have not been removed. Instead, a\r\nwarning is logged when such a variable is used to configure the proxy.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/977ff25cb98e1cc317125d7ff2719bbf417f909a"},{"sha":"51db6f8be89d4b6e80e487dd89f7adddc1f462e5","author":{"name":"Eliza Weisman","email":"f43a79dfd42415a8656f99967c2caaf66ded84db@buoyant.io"},"message":"Change trust-dns-resolver to a version rather than git dependency (#103)\n\nThis branch changes the proxy's `trust-dns-resolver` dependency to a\r\nversion dependency rather than a Git dependency, since the\r\n`0.10.0-alpha.3` version has the features that we previously required\r\nthe git dependency for.\r\n\r\nThe only changes to the proxy codebase itself were fixes for deprecation\r\nwarnings introduced by the dependency upgrade, since it was necessary to\r\nupdate the minimum `tokio_timer` version as `trust-dns-proto` uses APIs\r\nadded in `tokio-timer` v0.2.6. In particular, `tokio_timer::Deadline`\r\nwas deprecated and replaced by `Timeout`.\r\n\r\nSigned-off-by: Eliza Weisman <eliza@buoyant.io>","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/51db6f8be89d4b6e80e487dd89f7adddc1f462e5"},{"sha":"978fed1cf651c8ed26ba8aa97d774371673275e8","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"refactor: Structure the proxy in terms of `Stack` (#100)\n\nAs the proxy's functionality has grown, the HTTP routing functionality\r\nhas become complex. Module boundaries have become ill-defined, which\r\nleads to tight coupling--especially around the `ctx` metadata types and\r\n`Service` type signatures.\r\n\r\nThis change introduces a `Stack` type (and subcrate) that is used as the\r\nbase building block for proxy functionality. The `proxy` module now\r\nexposes generic components--stack layers--that are configured and\r\ninstantiated in the `app::main` module.\r\n\r\nThis change reorganizes the repo as follows:\r\n- Several auxiliary crates have been split out from the `src/` directory\r\n  into `lib/fs-watch`, `lib/stack` and `lib/task`.\r\n- All logic specific to configuring and running the linkerd2 sidecar\r\n  proxy has been moved into `src/app`. The `Main` type has been moved\r\n  from `src/lib.rs` to `src/app/main.rs`.\r\n- The `src/proxy` has reusable, generic components useful for building\r\n  proxies in terms of `Stack`s.\r\n\r\nThe logic contained in `lib/bind.rs`, pertaining to per-endpoint service\r\nbehavior, has almost entirely been moved into `app::main`.\r\n\r\n`control::destination` has changed so that it is not responsible for\r\nbuilding services. (It used to take a clone of `Bind` and use it to\r\ncreate per-endpoint services). Instead, the destination service\r\nimplements the new `proxy::Resolve` trait, which produces an infinite\r\n`Resolution` stream for each lookup. This allows the `proxy::balance`\r\nmodule to be generic over the servie discovery source.\r\n\r\nFurthermore, the `router::Recognize` API has changed to only expose a\r\n`recgonize()` method and not a `bind_service()` method. The\r\n`bind_service` logic is now modeled as a `Stack`.\r\n\r\nThe `telemetry::http` module has been replaced by a\r\n`proxy::http::metrics` module that is generic over its metadata types\r\nand does not rely on the old telemetry event system. These events are\r\nnow a local implementation detail of the `tap` module.\r\n\r\nThere are no user-facing changes in the proxy's behavior.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/978fed1cf651c8ed26ba8aa97d774371673275e8"},{"sha":"f1210b4947e27597e9f7ea70bf2b39fc146908f9","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Decouple reconnect & connect layers from proxy::http::client (#101)\n\nPreviously, the `client` module was responsible for instrument\r\nreconnects. Now, the reconnect module becomes its own stack layer that\r\ncomposes over NewService stacks.\r\n\r\nAdditionally, the `proxy::http::client` module can now layer over an\r\nunderlying Connect stack.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/f1210b4947e27597e9f7ea70bf2b39fc146908f9"},{"sha":"4625302bd915ea3bd265a716d596c7409f1f8187","author":{"name":"Sean McArthur","email":"d7e19930cc1f42c2d0781f4d9e6f1fe5891bf9cf@seanmonstar.com"},"message":"Remove panic when failing to get remote address (#107)\n\nThe listener *already* got the remote address when it was accepted, but we drop the value by using `TcpListener::incoming`. By the time we call `socket.peer_addr()`, the connection may have been closed, and thus we were panicking.\r\n\r\nBy removing the panic here, later code should notice that the connection is closed (when a `read` finds EOF), and it should be dropped gracefully.\r\n\r\nFor the same reasons (that the connection might already be closed), this reduces the `error!` from `get_original_dst` to just a `warn!`, just as `set_nodelay` is a `warn!`. No need to yell in that case.\r\n\r\nCloses https://github.com/linkerd/linkerd2/issues/1787\r\n\r\nSigned-off-by: Sean McArthur <sean@buoyant.io>","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/4625302bd915ea3bd265a716d596c7409f1f8187"},{"sha":"2109f375316536a86b9d5f29ebcad2be3e162d9c","author":{"name":"Oliver Gould","email":"5e0b8aa15aad848de36cf3fd23d80803845b78d5@buoyant.io"},"message":"Make a generic Watch stack (#104)\n\nThe TLS-configuration-watching logic in `app::outbound::tls_config` need\r\nnot be specific to the outbound types, or even TLS configuration.\r\n\r\nInstead, this change extends the `watch` stack module with a Stack type\r\nthat can satisfy the TLS use case independently of the concrete types at\r\nplay.","distinct":true,"url":"https://api.github.com/repos/huanwei/linkerd2-proxy/commits/2109f375316536a86b9d5f29ebcad2be3e162d9c"}]}
{"actor":{"display_login":"huanwei"}}