go.uber.org/yarpc@v1.72.1/CHANGELOG.md (about)

     1  # Changelog
     2  All notable changes to this project will be documented in this file.
     3  
     4  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
     5  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
     6  
     7  =======
     8  ## [1.72.1] - 2024-03-14
     9  - tchannel: Renamed caller-procedure header from `$rpc$-caller-procedure` to `rpc-caller-procedure`.
    10  
    11  ## [1.72.0] - 2024-02-21
    12  - Removed gonum.org/v1/gonum dependency.
    13  - Enable rpc-caller-procedure via yarpc outbound middleware.
    14  
    15  ## [1.71.0] - 2023-12-14
    16  - tchannel: optional transport-level config to allow reusing a buffer for reading a tchannel response body.
    17  - grpc: returned outbound response body is no longer writable.
    18  - Fixed panic when error details list contains message that cannot be unmarshalled.
    19  - Plugin v2: use v2 of internal libraries; indicate "optional" field support in the plugin response.
    20  
    21  ## [1.70.4] - 2023-08-31
    22  - logging: fix logged error in observability middleware when fields of transport.Request is in the tagsBlocklist
    23  - `go.mod`: update minimum requirements to go1.21 instead of go1.14 and update `golang.org/x/net v0.7.0` to v0.14.0
    24  - middleware stack usage: remove ~2KB of stack usage from the rpc handler function,
    25    so that it decreases the chance of needing more stack. It can improve the
    26    performance of the application.
    27  
    28  ## [1.70.3] - 2023-06-27
    29  - tls-outbounds: spiffe ids field has been made optional field. Outbounds
    30    will accept any server certificate issued by the internal CA with any spiffe id
    31    if no spiffe id config is provided.
    32  
    33  ## [1.70.2] - 2023-04-11
    34  - yarpcerrors: classify http 422 as InvalidArgument.
    35  
    36  ## [1.70.1] - 2023-03-31
    37  ### Fixed
    38  - yarpcerrors: classify http 304 as StatusOk and other 3XX statusCode as InvalidArgument.
    39  - yarpcerrors: classify tchannel BusyError to yarpc ResourceExchausted error
    40  
    41  ## [1.70.0] - 2023-02-16
    42  ### Fixed
    43  - grpc: apply compression only on the outbounds with compression enabled.
    44  
    45  ## [1.69.1] - 2023-1-24
    46  ### Changed
    47  -- yarpcerrors: export logic to get server and client fault type
    48  
    49  ## [1.69.0] - 2022-11-10
    50  ### Added
    51  - tchannel: add TLS support for the outbound through yaml config and transport option.
    52  
    53  ## [1.68.0] - 2022-10-20
    54  ### Added
    55  -- logging: Original context deadline if available is logged under `timeout` field.
    56  ### Changed
    57  - Bump version of google.golang.org/grpc to v1.40.1.
    58  
    59  ## [1.67.0] - 2022-10-20
    60  - http: add TLS support for the oubound through yaml config and outbound option.
    61  
    62  ## [1.66.0] - 2022-10-10
    63  ### Added
    64  - grpc: add TLS support for the outbound through yaml config or dial option.
    65  
    66  ## [1.65.0] - 2022-09-26
    67  ### Added
    68  - protoc-gen-yarpc-go-v2: Added new yarpc proto plugin `protoc-gen-yarpc-go-v2`. `protoc-gen-yarpc-go-v2`
    69    generated yarpc protobuf code is compatible with golang protobuf v2 apis.
    70  
    71  ## [1.64.0] - 2022-09-12
    72  ### Added
    73  - tchannel: add TLS support for the inbound. Supports accepting
    74    TLS and plaintext connections on the same port.
    75  ### Changed
    76  - protoc-gen-yarpc-go: expose service reflection metadata.
    77  
    78  ## [1.63.0] - 2022-08-17
    79  ### Added
    80  - http - add TLS support for the inbound. Supports accepting
    81    TLS and plaintext connections on the same port.
    82  ### Changed
    83  - grpc - set default client and server maximum receive message
    84    sizes to 64MB from earlier 4MB.
    85  
    86  ## [1.62.0] - 2022-07-27
    87  ### Added
    88  - grpc - option to enable multiplexed inbound which accepts TLS and
    89    plaintext connections on the same port.
    90  
    91  ## [1.61.0] - 2022-07-19
    92  ### Added
    93  - grpc - option to set custom maximum header list size.
    94  
    95  
    96  ## [1.60.0] - 2022-02-03
    97  ### Added
    98  - tchannel - option to disable RPC-Service in response header.
    99  
   100  ## [1.59.0] - 2021-11-10
   101  ### Added
   102  - tchannel: add option to accept native tchannel handlers.
   103  - call/headers: add `OriginalItems` method to access original headers.
   104  
   105  ## [1.58.0] - 2021-09-29
   106  ### Changed
   107  - Bump minimum version of go.uber.org/thriftrw to v1.29.2.
   108  - Default to thriftrw NoWire for both client and server.
   109  
   110  ## [1.57.1] - 2021-08-31
   111  ### Changed
   112  - Bump minimum version of go.uber.org/thriftrw to v1.29.1.
   113  
   114  ## [1.57.0] - 2021-08-30
   115  ### Added
   116  - thrift: add server and client encoding implementations to use ThriftRW's streaming.
   117    ThriftRW's streaming is an optimized way of encoding/decoding thrift payloads.
   118  - thrift: add an option, `NoWire(enabled bool)` to enable thriftrw's streaming.
   119  ### Changed
   120  - Bump minimum version of go.uber.org/thriftrw to v1.29.0.
   121  
   122  ## [1.56.1] - 2021-08-08
   123  ### Fixed
   124  - http: remove HTTP/2 pseudo headers for HTTP/2 requests propagated to HTTP/1 service through
   125    YARPC transport middleware.
   126  
   127  ## [1.56.0] - 2021-07-22
   128  - http: allow multiple interception options and execute in order at runtime.
   129  
   130  ## [1.55.1] - 2021-07-14
   131  ### Fixed
   132  - peer/direct: peer connections were closed even if they were still in use.
   133  - configuration: clarify error message for the special case of attempting to use a peer list
   134    updater when none have been registered.
   135  - protoplugin: generated golang code from the yarpc plugin follows same GoType conventions as gogo/protobuf.
   136  
   137  ## [1.55.0] - 2021-07-06
   138  - Downgrade github.com/apache/thrift to the previously-compatible version (0.10)
   139  
   140  ## [1.54.2] - 2021-06-11
   141  - go.uber.org/yarpc@v1.54.1 points to v1.54.0 instead of v1.54.1. This release unblocks
   142    go.uber.org/yarpc to serve v1.54.1 through v1.54.2.
   143  
   144  ## [1.54.1] - 2021-06-11
   145  ### Fixed
   146  - protobuf error: a protobuf error created with an invalid code returns a unknown
   147    error.
   148  - protobuf error details: protobuf.GetErrorDetails returns nil instead of an empty array
   149    if there is no details in the given error.
   150  
   151  ## [1.54.0] - 2021-06-01
   152  ### Added
   153  - observability: extend response, and request payload size histogram buckets up to 256MB.
   154  ### Fixed
   155  - introspection: wrong display of proto procedure name.
   156  - error details: propagation of protobuf error details did not work if the any message was not
   157    registered in the gogo proto registry.
   158  
   159  ## [1.53.2] - 2021-04-16
   160  ### Removed
   161  - Disable `rpc-caller-procedure` header temporarily by stopping the `CallerProcedure` propagation.
   162  ### Added
   163  - gRPC: log header values upon validation error
   164  
   165  ## [1.53.1] - 2021-03-30
   166  - v1.53.1 is v1.52.0. v1.53.0 has a backward compatible issue with the new header
   167    `rpc-caller-procedure` added in v1.53.0.
   168  
   169  ## [1.53.0] - 2021-03-12
   170  ### Added
   171  - gRPC: accept keepalive parameters for gRPC outbound configuration.
   172  - observability: deprecation of logging levels `applicationError` and `serverError` in favor
   173    of `serverError` and `clientError`.
   174  - The `transport.Request` provides a new field `CallerProcedure`. A header `rpc-caller-procedure`
   175    is also propagated for outbound calls. This field represents the origin procedure where the
   176    requests was sent.
   177  ### Fixed
   178  - peer: concurrency issue when using `rand` for the peer strategies `randpeer` and `tworandomchoices`
   179  
   180  ## [1.52.0] - 2021-02-12
   181  ### Added
   182  - gRPC: accept keepalive parameters for the outbound gRPC connection.
   183  - observability: panic metrics are now also reported for these type of requests:
   184    - inbound oneway
   185    - outbound stream
   186    - outbound oneway
   187    - outbound unary
   188  
   189  ## [1.51.0] - 2021-02-04
   190  ### Added
   191  - observability: Add metric tags blocklist configuration. Allows to stub high cardinality tags emitted
   192    in the observability middleware
   193  
   194  ## [1.50.0] - 2021-01-22
   195  ### Added
   196  - gRPC: accept dialer options in gRPC transportSpec config
   197  
   198  ### Fixed
   199  - Http: fix memory and connection leak in http outbound call handler
   200  - Observability: error code CodeUnimplemented will be marked as an `application_error`
   201  - peer: the peer implementations provided by yarpc (hashring32, pendingheap,
   202    randpeer, roundrobin, tworandomchoices) are thread-safe now
   203  
   204  ## [1.49.1] - 2020-11-17
   205  ### Fixed
   206  - proto: pass protobuf error details in gRPC streams
   207  - proto: pass error details on proto-error to yarpcerror conversion
   208  
   209  ## [1.49.0] - 2020-10-22
   210  ### Added
   211  - observability: Add request and response payload size histogram
   212  - api: expose `BodySize` field in the transport request/response, middleware can use
   213    this field to get or update the request/response body size
   214  - hashring32: new option OffsetGeneratorValue
   215  ### Fixed
   216  - yarpc: service name can contain `_` now.
   217  
   218  ## [1.48.0] - 2020-10-07
   219  ### Added
   220  - peer/hashring32: Support using an application header as the shard key, instead
   221    of `transport.Request#ShardKey`
   222  - peer/hashring32: options NumReplicas and NumPeersEstimate are not private
   223    anymore and can be used by consumer of the pkg.
   224  - observability: Add caller request TTL histogram in inbound middleware
   225  
   226  
   227  ## [1.47.2] - 2020-09-16
   228  ### Fixed
   229  - errors returned by `yarpcerrors.FromError` now behave properly when using
   230    `errors.Is` and `errors.Unwrap`.
   231  - thrift plugin: `types_yarpc.go` file, which contains exception annotations is
   232    always generated.
   233  - thrift plugin: `types_yarpc.go` recognizes case-sensitive Thrift file names
   234    for generating correct Go package name.
   235  
   236  ## [1.47.1] - 2020-09-02
   237  ### Removed
   238  - Reverted `go.mod` Go version from 1.14 to 1.13.
   239  
   240  ## [1.47.0] - 2020-08-31
   241  ### Added
   242  - gRPC Streaming: Added the ability to send and read stream response headers.
   243  - thrift: Using the `rpc.code` annotation, services may specify an associated
   244    error code for Thrift exceptions. Metrics will classify the exception as a
   245    client or server failure like a `yarpcerrors` error. If a Thrift exception is
   246    not annotated with a code, it will continue to be classified as a client
   247    failure.
   248  - logging: Errors and annotated Thrift exceptions are logged with their error
   249    code under the `errorCode` field. Errors created outside of
   250    `protobuf.NewError` and `yarpcerrors` will yield `CodeUnknown`.
   251  - logging: Thrift exceptions and Protobuf error details are logged under the
   252    `errorDetails` field.
   253  - grpc: Enabled outbound introspection for debug pages.
   254  - experimental: Added `tchannel.GetResponseErrorMeta` API for retrieving native
   255    TChannel error response codes.
   256  ### Fixed
   257  - tchannel: middleware may modify the outbound `transport.Request#Caller` field,
   258    similar to gRPC and HTTP outbounds.
   259  - Added `github.com/dgryski/go-farm` dependency to `glide.yaml` for legacy
   260    projects.
   261  ### Removed
   262  - Removed `yarpcproto` package that enabled "oneway" Protobuf signatures.
   263  
   264  ## [1.46.0] - 2020-05-20
   265  ### Added
   266  - peer lists accepts a `DefaultChooseTimeout` configuration for applying to
   267    `context`s without deadlines.
   268  - gRPC-go version is added to debug pages.
   269  ### Changed
   270  - observability: if a context deadline exceeded (timeout) or context cancelled
   271    error is observed, handler responses (success and errors) are replaced by the
   272    context error. Dropped responses are logged under the `dropped` field.
   273  - Introspection APIs are added to `api/x/introspection`. This enabling custom
   274    outbounds, inbounds and peer lists to use YARPC's existing `x/debug` page.
   275  - Introduced `api/x/restriction` for preventing unwanted transport-encoding
   276    combinations. This may cause panics for existing Fx services on start-up.
   277  ### Fixed
   278  - yarpcerrors: `fmt` verbs are ignored when no args are passed to error
   279    constructors.
   280  - Fix gRPC streaming when used with the direct peer chooser.
   281  - Streaming calls do not require contexts with deadlines. Users should use
   282    cancelable contexts for long-lived streams instead of timeouts.
   283  - Outbound status on debug pages is ordered by outbound name.
   284  ## Removed
   285  - The `x/yarpcmeta` package is completely removed.
   286  - tchannel: dropped "handler failed" log. Context error override change makes
   287    this log redundant as richer information exists in observability logs.
   288  - tchannel: when callers time out, TChannel servers will not log
   289    "SendSystemError failed" and "responseWriter failed to close" messages, since
   290    they are unactionable.
   291  
   292  ## [1.45.0] - 2020-04-21
   293  ### Added
   294  - gRPC inbound supports introspection, suitable for debug pages.
   295  - yarpctest: Add `ContextWithCall` function to ease testing of functions that
   296    use `yarpc.CallFromContext`.
   297  - `yarpcerrors` are aligned with the `errors` API introduced in Go 1.13
   298    (https://blog.golang.org/go1.13-errors). `yarpcerrors.IsStatus`,
   299    `yarpcerrors.FromError`, support wrapped errors, and `yarpcerrors.Status`
   300    implements `Unwrap() error`.
   301  ### Changed
   302  - Inbound Thrift requests that fail during `wire.Value#FromWire` are returned as
   303    `yarpcerrors.CodeInvalidArgument`, to indicate a client error.
   304  - Dropped library dependency on development tools.
   305  ### Fixed
   306  - gRPC inbounds correctly convert all YARPC error codes to gRPC error codes,
   307    outside of handler errors. Previously, well-defined YARPC errors were wrapped
   308    with an `Unknown` gRPC code for unimplemented procedures.
   309  - Fixes `idleConnTimeout` not propgated to the underlying http transport.
   310  - HTTP does not hold onto connections forever by default. `IdleConnTimeout`
   311    now defaults to 15 minutes.
   312  - `protobuf.GetErrorDetails` can extract error details from wrapped errors.
   313  - observability: errors returned from Protobuf handlers are logged with their
   314    error message instead of `application_error`.
   315  - `encoding/protobuf` error details (`yarpcerrors.Status` with details) are
   316    logged at application error log level. This matches behavior with Thrift
   317    exceptions.
   318  
   319  ## [1.44.0] - 2020-02-27
   320  ### Added
   321  - The TChannel Transport now supports a custom dialer function option.
   322  
   323  ## [1.43.0] - 2020-02-25
   324  ### Added
   325  - gRPC now supports compression.
   326    The packages `compressor/gzip` and `compressor/snappy` provide
   327    compressors accepted by the gRPC `Compressor` dialer option.
   328  - The `peer/hashring32` package now provides support for consistent hashing
   329    that is compatible with RingPop hash ring topologies.
   330    This peer selection strategy uses the `ShardKey` call option to
   331    pin traffic to an arbitrary peer that is relatively stable as the peer list
   332    membership changes.
   333  - Observability middleware now emits metrics for panics that occur on the stack
   334    of an inbound call handler.
   335  - The `transporttest` package now provides a `Pipe` constructor, which creates
   336    a bound pair of transport layer streams, for testing streaming protocols like
   337    gRPC.
   338  - The `yarpctest.FakeOutbound` can now send requests to a `transport.Router`.
   339    This allows end to end testing with a client and server in memory.
   340    The `OutboundCallOverride`, `OutboundCallOnewayOverride` (new), and
   341    `OutboundCallStreamOverride` (new) are now a complete set that allow tests to
   342    hook any of the call behaviors.
   343  - All outbounds now implement `TransportName` and a new `transport.Namer`
   344    interface.
   345    This will allow outbound observability middleware to carry the transport name
   346    in metrics properly.
   347  ### Changed
   348  - This change reduces the API surface of the peer list implementations to
   349    remove a previously public embedded type and replace it with implementations
   350    of the underlying interfaces.
   351    The new type does not provide all of the public interface of the previous
   352    concrete types.
   353    However, we expect that in practice, peer lists are used as either peer.List,
   354    peer.Chooser, or for the private introspection interface.
   355  - Peer list peer unavailability errors now provide additional context including
   356    the number of assigned peers and whether fail-fast is enabled.
   357  ### Fixed
   358  - Fixed Streaming Protobuf-flavored-JSON nil pointer panic.
   359  - Log entries for EOF stream messages are now considered successes to avoid
   360    setting off false alarms.
   361    The successful log entries still carry the "error" field, which will reflect
   362    the EOF error.
   363  
   364  ## [1.42.1] - 2019-11-27 (Gobble)
   365  ### Fixed
   366  - Simplified the flow of status change notifications for the gRPC and TChannel
   367    transports to reduce the liklihood of deadlocks.
   368  - Increase default HTTP timeout to avoid stop timeout errors when the server
   369    has a new idle connection.
   370  - Close idle connections when the transport is closed.
   371  
   372  ## [1.42.0] - 2019-10-31 (Spooky)
   373  ### Added
   374  - Added fail-fast option to peer lists.  With this option enabled, a peer list
   375    will return an error if no peers are connected at the time of a call, instead
   376    of waiting for an available peer or the context to time out.
   377  ### Fixed
   378  - Previously, every peer list reported itself as a "single" peer list for
   379    purposes of debugging, instead of its own name.
   380  - Metrics emit `CodeResourceExhausted` as a client error and `CodeUnimplemented`
   381    as a server error.
   382  - Simplified the flow of status change notifications for the HTTP transport to
   383    reduce the liklihood of deadlocks.
   384  - Removed a bug from the gRPC transport that would cause a very rare deadlock
   385    during production deploys and restarts.
   386    The gRPC peer release method would synchronize with the connection status
   387    change monitor loop, waiting for it to exit.
   388    This would wait forever since retain was called while holding a lock on the
   389    list.
   390  
   391  ## [1.41.0] - 2019-10-01
   392  ### Fixed
   393  - Fixed TChannel memory pressure that would occur during server-side errors.
   394  
   395  ## [1.40.0] - 2019-09-19
   396  ### Added
   397  - Added improved logging and metrics for streams and streaming messages.
   398  - Log level configuration can now be expressed specifically for every
   399    combination of inbound and outbound, for success, failure, and application
   400    error.
   401  - A peer list and transport stress tester is now in the `yarpctest` package.
   402  - Added `direct` peer chooser to enable directly addressable peers.
   403  - Added custom dialer option for outbound HTTP requests.
   404  - Added custom dialer option for outbound gRPC requests.
   405  
   406  ## [1.39.0] - 2019-06-25
   407  ### Fixed
   408  - call.HeaderNames() now specifies a capacity when creating a slice,
   409    which should improve the call.HeaderNames()'s performance.
   410  - Observability middleware will always emit an error code if the returned error
   411    is from the `yarpcerrors` package.
   412  ### Added
   413  - Added error details support in protobuf over gRPC and HTTP.
   414  - Protobuf JSON encoding can take a custom gogo/protobuf/jsonpb.AnyResolver with
   415    Fx.
   416  
   417  ## [1.38.0] - 2019-05-20
   418  ### Changed
   419  - The Thrift encoding attempts to close the request body immediately after
   420    reading the request bytes. This significantly reduces TChannel/Thrift memory
   421    usage in some scenarios.
   422  
   423  ## [1.37.4] - 2019-05-02
   424  ### Fixed
   425  - Fixed duplicated tracing headers being set with gRPC.
   426  
   427  ## [1.37.3] - 2019-04-29
   428  ### Fixed
   429  - Fixed pending heap deadlock that occured when attempting to remove a peer that
   430    was already removed.
   431  
   432  ## [1.37.2] - 2019-04-08
   433  ### Removed
   434  - Revert: Use separate context for grpc streams once dial has been completed.
   435  
   436  ## [1.37.1] - 2019-03-25
   437  ### Fixed
   438  - Fix fewest pending heap panic that occurs when calling a peer and removing it
   439    simultaneously.
   440  
   441  ## [1.37.0] - 2019-03-14
   442  ### Fixed
   443  - Use separate context for grpc streams once dial has been completed.
   444  
   445  ## [1.36.2] - 2019-02-25
   446  ### Fixed
   447  - Removed error name validation.
   448  
   449  ## [1.36.1] - 2019-01-23
   450  ### Fixed
   451  - Updated dependency on ThriftRW.
   452  
   453  ## [1.36.0] - 2019-01-23
   454  ### Added
   455  - The log level for application errors is now configurable with yarpcconfig and
   456    with yarpc.NewDispatcher.
   457  
   458  ### Fixed
   459  - Upgrade a read-lock to a read-write lock around peer selection.
   460    This addresses a data race observed in production that results in broken peer
   461    list invariants.
   462  
   463  ## [1.35.2] - 2018-11-06
   464  ### Removed
   465  - Reverted HTTP transport marking peers as unavailable when the remote side
   466    closes the connection due to a deadlock.
   467  
   468  ## [1.35.1] - 2018-10-17
   469  ### Fixed
   470  - Fixed a deadlock issue when the HTTP transport detects a connection failure
   471    and attempts to lock once to obtain the peer, then again to send
   472    notifications.
   473  
   474  ## [1.35.0] - 2018-10-15
   475  ### Added
   476  - Added `encoding/protobuf/reflection` for exposing server reflection related
   477    information through codegeneration. For docs related to server reflection read
   478    https://github.com/grpc/grpc/blob/master/doc/server-reflection.md.
   479  - `protoc-gen-yarpc-go` now generates `yarpcfx` fx groups containing
   480    information required for building server reflection API's.
   481  
   482  ### Fixed
   483  - Using a `http.Outbound` previously leaked implementation details that it was using a
   484    `*http.Client` underneath, when attempting to cast a `http.Outbound` into a `http.RoundTripper`
   485  
   486  ## [1.34.0] - 2018-10-03
   487  ### Added
   488  - Adds `thrift.Named` option for appropriately labelling procedures inherited
   489    from other thrift services.
   490  - The HTTP protocol now marks peers as unavailable immediately when the remote
   491    side closes the connection.
   492  
   493  ### Fixed
   494  - Calling extended Thrift service procedures previously called the base service's
   495    procedures.
   496  
   497  ## [1.33.0] - 2018-09-26
   498  ### Added
   499  - x/yarpctest: Add a retry option to HTTP/TChannel/GRPCRequest.
   500  - Added `peer/tworandomchoices`, an implementation of the Two Random Choices
   501    load balancer algorithm.
   502  - Reintroduce Transport field matching for `transporttest.RequestMatcher`.
   503  ### Changed
   504  - HTTP inbounds gracefully shutdown with an optional timeout, defaulting to 5
   505    seconds.
   506  
   507  ## [1.32.4] - 2018-08-07
   508  ### Fixed
   509  - Address data races in yarpctest.FakeTransport
   510  
   511  ## [1.32.3] - 2018-08-07
   512  ### Fixed
   513  - Revert Transport field match from RequestMatcher
   514  
   515  ## [1.32.2] - 2018-08-07
   516  ### Fixed
   517  - CHANGELOG.md and version.go changes were still incorrect for v1.32.1
   518  
   519  ## [1.32.1] - 2018-08-07
   520  ### Fixed
   521  - CHANGELOG.md and version.go changes were incorrect for v1.32.0
   522  
   523  ## [1.32.0] - 2018-08-06
   524  ### Added
   525  - Adds inbound and outbound TLS support for gRPC. See `gprc.InboundCredentials`,
   526    `grpc.DialerCredentials`, and `grpc.Transport.NewDialer` for usage.
   527  - Added `peer/peerlist/v2` which differs from the original `peer/peerlist` by
   528    replacing the use of `api/peer.ListImplementation` with
   529    `peer/peerlist/v2.Implementation`, which threads the peer separately from the
   530    peer identifier.
   531    This allows us to thread shard information from the peer list updater to a
   532    sharding peer list.
   533  - Added connection/disconnection simulation to the `yarpctest` fake transport
   534    and peers.
   535  - x/yarpctest: Added support for specifying outbound middleware.
   536  - yarpctest: Changed `FakePeer` id to use "go.uber.org/yarpc/api/peer".Identifier
   537    interface instead of the concrete "go.uber.org/peer/hostport".Identifier type.
   538  ### Changed
   539  - The HTTP protocol now mitigates peers that are unavailable due to a half-open
   540    TCP connection.
   541    Previously, if a peer shut down unexpectedly, it might fail to send a TCP FIN
   542    packet, leaving the sender unaware that the peer is unavailable.
   543    The symptom is that requests sent down this connection will time out.
   544    This change introduces a suspicion window for peers that time out.
   545    Once per suspicion window, the HTTP transport's peer manager will attempt
   546    to establish a fresh TCP connection to the peer.
   547    Failing to establish a connection will transition the peer to the unavailable
   548    state until a fresh TCP connection becomes available.
   549    The HTTP transport now accepts an `InnocenceWindow` duration, and an
   550    `innocenceWindow` config field.
   551  
   552  ## [1.31.0] - 2018-07-09
   553  ### Added
   554  - Added `Outbounds()` on `Dispatcher` to provide access to the configured outbounds.
   555  - Expose capacity option to configurator for the round-robin peer chooser.
   556  - Expose capacity option to configurator for the fewest pending heap peer chooser.
   557  - Dispatchers now log recovered handler panics via a Zap logger, if present.
   558  - Responses for all transports now include a header containing the name of the
   559    service that handled the request.
   560  
   561  ### Changed
   562  - TChannel inbounds will blackhole requests when handlers return resource
   563    exhausted errors.
   564  - Change log level to reflect error statuses. Previously all logs were logged at
   565    debug level. Errors are now logged at error level.
   566  - Update pin for gogo/protobuf to ^1
   567  
   568  ## [1.30.0] - 2018-05-03
   569  ### Added
   570  - The YARPC HTTP outbound now implements http.RoundTripper.
   571    This makes YARPC's load balancers, other peer selectors, and peer
   572    availability management accessible to REST call sites.
   573  - Adds `Addr()` on `grpc.Inbound` to expose the address the server is listening
   574    on when the server is running.
   575  - Adds Transport property to transport.Request and transport.RequestMeta
   576    Metrics will now be tagged with the transport of calls to handlers
   577  ### Fixed
   578  - YARPC HTTP, gRPC, and TChannel transports are now compatible with any
   579    peer.Identifier implementation.
   580    They previously required a hostport.PeerIdentifier for RetainPeer and
   581    ReleasePeer calls.
   582  
   583  ## [1.29.1] - 2018-04-04
   584  ### Fixed
   585  - Removed `repo:` from glide.yaml because Apache Thrift development has moved
   586    to GitHub (https://issues.apache.org/jira/browse/INFRA-16287).
   587  
   588  ## [1.29.0] - 2018-03-21
   589  ### Added
   590  - Add methods to start and stop a dispatcher's transports, inbounds, and
   591    outbounds separately.
   592  - Add `NewFx{{Service}}YARPCClient` and `NewFx{{Service}}YARPCProcedures`
   593    generated methods from protoc-gen-yarpc-go for Fx.
   594  
   595  ## [1.28.0] - 2018-03-13
   596  ### Changed
   597  - Enabled random shuffling of peerlist order by default.
   598  ### Added
   599  - Reintroduce envelope-agnostic Thrift inbounds. Thrift inbounds will now
   600    accept Thrift requests with or without envelopes.  This feature was
   601    originally added in 1.26.0 and removed in 1.26.1 because the implementation
   602    introduced an inbound request data corruption hazard.
   603  - Adds an option to the TChannel transport to carry headers in their original
   604    form, instead of normalizing their case.
   605  - Adds an option to disable observability middleware, in the event you
   606    provide alternate observability middleware.
   607  
   608  ## [1.27.2] - 2017-01-23
   609  ### Fixed
   610  - Removed buffer pooling from GRPC outbound requests which had possible data
   611    corruption issues.
   612  
   613  ## [1.27.1] - 2017-01-22
   614  ### Changed
   615  - Regenerate thrift files.
   616  
   617  ## [1.27.0] - 2017-01-22
   618  ### Added
   619  - Add support for Inbound and Outbound streaming RPCs using gRPC and Protobuf.
   620  - Add support for creating peer choosers through config with PeerChooserSpec.
   621  - Add the option of injecting a `"go.uber.org/net/metrics".Scope` into the
   622    dispatcher metrics configuration, in lieu of a Tally Scope.  Metrics scopes
   623    support in memory and Prometheus collection.
   624  
   625  ### Changed
   626  - Detect buffer pooling bugs by detecting concurrent accesses in production
   627    and more thorough use-after-free detection in tests.
   628  
   629  ### Fixed
   630  - Removed buffer pooling from GRPC inbound responses which had possible data
   631    corruption issues.
   632  - TChannel inbound response errors are now properly mapped from YARPC errors.
   633  
   634  
   635  ## [1.26.2] - 2017-01-17
   636  ### Removed
   637  - Removed buffer pooling from GRPC inbound responses which had possible data
   638    corruption issues.
   639  
   640  
   641  ## [1.26.1] - 2017-12-21
   642  ### Removed
   643  - Reverts the integration for envelope-agnostic Thrift. This change
   644    introduced data corruption to request bodies due to a buffer pooling bug.
   645  
   646  
   647  ## [1.26.0] - 2017-12-13
   648  ### Added
   649  - Support envelope-agnostic Thrift inbounds. Thrift inbounds will now accept
   650    Thrift requests with or without envelopes.
   651  
   652  ### Changed
   653  - Wrap errors returned from lifecycle.Once functions in the yarpcerrors API.
   654  - Wrap errors returned from tchannel outbounds in the yarpcerrors API.
   655  
   656  
   657  ## [1.25.1] - 2017-12-05
   658  ### Changed
   659  - Revert Providing a better error message if outbound calls are made or inbound calls
   660    are received before Dispatcher start or after Dispatcher stop.
   661  
   662  
   663  ## [1.25.0] - 2017-12-04
   664  ### Added
   665  - Make Dispatcher start/stop thread-safe.
   666  
   667  ### Changed
   668  - Validate all oneway calls have a TTL.
   669  - Add opentracing tags to denote the YARPC version and Golang version to the
   670    gRPC and HTTP transports.
   671  - Provide a better error message if outbound calls are made or inbound calls
   672    are received before Dispatcher start or after Dispatcher stop.
   673  
   674  
   675  ## [1.24.1] - 2017-11-27
   676  
   677  - Undeprecate ClientConfig function.
   678  
   679  
   680  ## [1.24.0] - 2017-11-22
   681  
   682  - Introduces `api/peer.ListImplementation` with `peer/peerlist.List`, a
   683    building block that provides peer availability management for peer lists
   684    like round-robin, hash-ring.
   685  - Adds /x/yarpctest infrastructure to create fake services and requests for
   686    tests.
   687  - Adds a `peer/pendingheap` implementation that performs peer selection,
   688    sending requests to the available peer with the fewest pending requests.
   689  - Adds `OutboundConfig` and `MustOutboundConfig` functions to the dispatcher
   690    to replace the ClientConfig function.
   691  
   692  
   693  ## [1.22.0] - 2017-11-14
   694  
   695  - Thrift: Fx modules generated by the ThriftRW plugin now include a function
   696    to register procedures with YARPC.
   697  
   698  
   699  ## [1.21.1] - 2017-11-13
   700  
   701  - Fix a bug in protoc-gen-yarpc-go where request or response types for
   702    methods in the same package but in a different file would result in an
   703    extraneous import.
   704  
   705  
   706  ## [1.21.0] - 2017-10-26
   707  
   708  - Add a Logger option to the HTTP, GRPC, and TChannel transports to allow for
   709    internal logging.
   710  
   711  
   712  ## [1.20.1] - 2017-10-23
   713  
   714  - http: Fix `http.Interceptor` ignoring `http.Mux`.
   715  
   716  
   717  ## [1.20.0] - 2017-10-16
   718  
   719  - http: Add `http.Interceptor` option to inbounds, which allows intercepting
   720    incoming HTTP requests for that inbound.
   721  
   722  
   723  ## [1.19.2] - 2017-10-10
   724  
   725  - transport/grpc: Fix deadlock where Peers can never be stopped if their
   726    corresponding Transport was not started.
   727  
   728  
   729  ## [1.19.1] - 2017-10-10
   730  
   731  - transport/grpc: Add Chooser function to Outbound for testing.
   732  
   733  
   734  ## [1.19.0] - 2017-10-10
   735  
   736  - Promote `transport/x/grpc` out of experimental status, moving it to
   737    `transport/grpc`.
   738  
   739  
   740  ## [1.18.1] - 2017-10-04
   741  
   742  - Remove staticcheck from glide.yaml.
   743  
   744  
   745  ## [1.18.0] - 2017-09-26
   746  
   747  - Add inbound/outbound direction tag to observability metrics.
   748  - Remove x/retry to incubate internally.
   749  - yarpcerrors: Undeprecate per error type creation and validation functions.
   750  
   751  
   752  ## [1.17.0] - 2017-09-20
   753  
   754  - yarpcerrors: Make core API much simpler and use a Status struct
   755    to represent YARPC errors.
   756  - transport/http: Add GrabHeaders option to propagate specific
   757    headers starting with x- to handlers.
   758  - tranxport/x/grpc: Remove ContextWrapper.
   759  - Export no-op backoff strategy in api/backoff.
   760  
   761  
   762  ## [1.16.0] - 2017-09-18
   763  
   764  - ThriftRW Plugin: Added an option to strip TChannel-specific
   765    information from Contexts before making outgoing requests.
   766  - x/retry: Fix bug where large TChannel responses would cause errors in retries.
   767  - transport/http: Correct the Content-Type for Thrift responses, to
   768    `application/vnd.apache.thrift.binary`.
   769  - transport/http: Correct the Content-Type for Proto responses, to
   770    `application/x-protobuf`.
   771  
   772  
   773  ## [1.15.0] - 2017-09-15
   774  
   775  - yarpcerrors: Update the ErrorCode and ErrorMessage functions to return
   776    default values for non-YARPC errors.
   777  - transport/http: Return appropriate Content-Type response headers based on
   778    the transport encoding.
   779  - transport/x/grpc: Add options to specify the maximum message size sent and
   780    received over the wire.
   781  
   782  
   783  ## [1.14.0] - 2017-09-08
   784  
   785  - Increased granularity of error observability metrics to expose yarpc
   786    error types.
   787  - Wrapped peer list `Choose` errors in yarpc error codes.
   788  - x/retry: Add granular metric counters for retry middleware.
   789  - Removed experimental redis and cherami transports.
   790  
   791  
   792  ## [1.13.1] - 2017-08-03
   793  
   794  - Rename structured logging field to avoid a type collision.
   795  
   796  
   797  ## [1.13.0] - 2017-08-01
   798  
   799  - Added a `yarpc.ClientConfig` interface to provide access to ClientConfigs.
   800    All Dispatchers already implement this interface.
   801  - Thrift: Fx modules generated by the ThriftRW plugin now rely on
   802    `yarpc.ClientConfig` instead of the Dispatcher.
   803  - Promote `x/config` out of experimental status, moving it to `yarpcconfig`.
   804  
   805  
   806  ## [1.12.1] - 2017-07-26
   807  
   808  - Fixed issue with github.com/apache/thrift by pinning to version 0.9.3
   809    due to breaking change https://issues.apache.org/jira/browse/THRIFT-4261.
   810  
   811  
   812  ## [1.12.0] - 2017-07-20
   813  
   814  Experimental:
   815  
   816  - x/debug: Added support for debug pages for introspection.
   817  
   818  
   819  ## [1.11.0] - 2017-07-18
   820  
   821  - Fixed bug where outbound HTTP errors were not being properly wrapped in
   822    yarpc errors.
   823  
   824  Experimental:
   825  
   826  - x/retry: Added support for procedure-based retry policies.
   827  - x/retry: Fixed bug in retry middleware where a failed request that did not
   828    read the request body would not be retried.
   829  - x/grpc: Altered inbound GRPC code in order to support RouterMiddleware.
   830  
   831  
   832  ## [1.10.0] - 2017-17-11
   833  
   834  - Thrift: UberFx-compatible modules are now generated for each service inside
   835    a subpackage. Disable this by passing a `-no-fx` flag to the plugin.
   836  - Improves resilience of HTTP and TChannel by broadcasting peer availability
   837    to peer lists like round robin. A round robin or least pending peer list
   838    blocks requests until a peer becomes available.
   839  - Add support for reading ShardKey, RoutingKey, and RoutingDelegate for
   840    inbound http and tchannel calls.
   841  - Move encoding/x/protobuf to encoding/protobuf.
   842  - Exposes the Lifecycle synchronization helper as pkg/lifecycle, for
   843    third-party implementations of transports, inbounds, outbounds, peer lists,
   844    and peer list bindings.
   845  
   846  Experimental:
   847  
   848  - x/retry: Added support for creating retry middleware directly from config.
   849  
   850  
   851  ## [1.9.0] - 2017-06-08
   852  
   853  - Different encodings can now register handlers under the same procedure
   854    name.
   855  - http: Added support for configuring the HTTP transport using x/config.
   856  - tchannel: Added support for configuring the TChannel transport using
   857    x/config.
   858  - Moved the RoundRobin Peer List out of the /x/ package.
   859  - Fixed race conditions in hostport.Peer.
   860  - Buffers for inbound Thrift requests are now pooled to reduce allocations.
   861  
   862  Experimental:
   863  
   864  - x/cherami: Renamed the `InboundConfig` and `OutboundConfig` structures to
   865    `InboundOptions` and `OutboundOptions`.
   866  - x/cherami: Added support for configuring the Cherami transport using
   867    x/config.
   868  - x/roundrobin: Added support for taking peer list updates before and after
   869    the peer list has been started.
   870  - x/config: Fix bug where embedded struct fields could not be interpolated.
   871  - x/config: Fix bug where Chooser and Updater fields could not be interpolated.
   872  - x/grpc: Remove `NewInbound` and `NewSingleOutbound` in favor of methods on
   873    `Transport`.
   874  - x/grpc: Use `rpc-caller`, `rpc-service`, `rpc-encoding`, `rpc-shard-key`,
   875    `rpc-routing-key`, `rpc-routing-delegate` headers.
   876  - x/protobuf: Handle JSON-encoded protobuf requests and return JSON-encoded
   877    protobuf responses if the `rpc-encoding` header is set to `json`. Protobuf
   878    clients may use JSON by supplying the `protobuf.UseJSON` option.
   879  - x/protobuf: Support instantiating clients with `yarpc.InjectClients`.
   880  - x/protobuf: The wire representation of request metadata was changed. This
   881    will break existing users of this encoding.
   882  
   883  
   884  ## [1.8.0] - 2017-05-01
   885  
   886  - Adds consistent structured logging and metrics to all RPCs. This feature
   887    may be enabled and configured through `yarpc.Config`.
   888  - Adds an `http.AddHeader` option to HTTP outbounds to send certain HTTP
   889    headers for all requests.
   890  - Options `thrift.Multiplexed` and `thrift.Enveloped` may now be provided for
   891    Thrift clients constructed by `yarpc.InjectClients` by adding a `thrift`
   892    tag to the corresponding struct field with the name of the option. See the
   893    Thrift package documentation for more details.
   894  - Adds support for matching and constructing `UnrecognizedProcedureError`s
   895    indicating that the router was unable to find a handler for the request.
   896  - Adds support for linking peer lists and peer updaters using the `peer.Bind`
   897    function.
   898  - Adds an accessor to Dispatcher which provides access to the inbound
   899    middleware used by that Dispatcher.
   900  - Fixes a bug where the TChannel inbounds would not write the response headers
   901    if the response body was empty.
   902  
   903  Experimental:
   904  
   905  - x/config: The service name is no longer part of the configuration and must
   906    be passed as an argument to the `LoadConfig*` or `NewDispatcher*` methods.
   907  - x/config: Configuration structures may now annotate primitive fields with
   908    `config:",interpolate"` to support reading environment variables in them.
   909    See the `TransportSpec` documentation for more information.
   910  
   911  
   912  ## [1.7.1] - 2017-03-29
   913  
   914  - Thrift: Fixed a bug where deserialization of large lists would return
   915    corrupted data at high throughputs.
   916  
   917  
   918  ## [1.7.0] - 2017-03-20
   919  
   920  - x/config adds support for a pluggable configuration system that allows
   921    building `yarpc.Config` and `yarpc.Dispatcher` objects from YAML and
   922    arbitrary `map[string]interface{}` objects. Check the package documentation
   923    for more information.
   924  - tchannel: mask existing procedures with provided procedures.
   925  - Adds a peer.Bind function that takes a peer.ChooserList and a binder
   926    (anything that binds a peer list to a peer provider and returns the
   927    Lifecycle of the binding), and returns a peer.Chooser that combines
   928    the lifecycle of the peer list and its bound peer provider.
   929    The peer chooser is suitable for passing to an outbound constructor,
   930    capturing the lifecycle of its dependencies.
   931  - Adds a peer.ChooserList interface to the API, for convenience when passing
   932    instances with both capabilities (suitable for outbounds, suitable for peer
   933    list updaters).
   934  
   935  
   936  ## [1.6.0] - 2017-03-08
   937  
   938  - Remove buffer size limit from Thrift encoding/decoding buffer pool.
   939  - Increased efficiency of inbound/outbound requests by pooling buffers.
   940  - Added MaxIdleConnsPerHost option to HTTP transports.  This option will
   941    configure the number of idle (keep-alive) outbound connections the transport
   942    will maintain per host.
   943  - Fixed bug in Lifecycle Start/Stop where we would run the Stop functionality
   944    even if Start hadn't been called yet.
   945  - Updated RoundRobin and PeerHeap implementations to block until the list has
   946    started or a timeout had been exceeded.
   947  
   948  
   949  ## [1.5.0] - 2017-03-03
   950  
   951  - Increased efficiency of Thrift encoding/decoding by pooling buffers.
   952  - x/yarpcmeta make it easy to expose the list of procedures and other
   953    introspection information of a dispatcher on itself.
   954  - Redis: `Client` now has an `IsRunning` function to match the `Lifecycle`
   955    interface.
   956  - TChannel: bug fix that allows a YARPC proxy to relay requests for any
   957    inbound service name. Requires upgrade of TChannel to version 1.4 or
   958    greater.
   959  
   960  
   961  ## [1.4.0] - 2017-02-14
   962  
   963  - Relaxed version constraint for `jaeger-client-go` to `>= 1, < 3`.
   964  - TChannel transport now supports procedures with a different service name
   965    than the default taken from the dispatcher. This brings the TChannel
   966    transport up to par with HTTP.
   967  
   968  
   969  ## [1.3.0] - 2017-02-06
   970  
   971  - Added a `tchannel.NewTransport`. The new transport, a replacement for the
   972    temporary `tchannel.NewChannelTransport`, supports YARPC peer choosers.
   973  
   974      ```go
   975      transport, err := tchannel.NewTransport(tchannel.ServiceName("keyvalue"))
   976      chooser := peerheap.New(transport)
   977      outbound := transport.NewOutbound(chooser)
   978      ```
   979  
   980    The new transport hides the implementation of TChannel entirely to give us
   981    flexibility going forward to relieve TChannel of all RPC-related
   982    responsibilities, leaving only the wire protocol at its core.
   983    As a consequence, you cannot thread an existing Channel through this
   984    transport.
   985  
   986  - All outbounds now support `Call` before `Start` and all peer choosers now
   987    support `Choose` before `Start`, within the context deadline.
   988    These would previously return an error indicating that the component was
   989    not yet started.  They now wait for the component to start, or for their
   990    deadline to expire.
   991  
   992  
   993  ## [1.2.0] - 2017-02-02
   994  
   995  - Added heap based PeerList under `peer/x/peerheap`.
   996  - Added `RouterMiddleware` parameter to `yarpc.Config`, which, if provided,
   997    will allow customizing routing to handlers.
   998  - Added experimental `transports/x/cherami` for transporting RPCs through
   999    [Cherami](https://eng.uber.com/cherami/).
  1000  - Added ability to specify a ServiceName for outbounds on the
  1001    transport.Outbounds object.  This will allow defining outbounds with a
  1002    `key` that is different from the service name they will use for requests.
  1003    If no ServiceName is specified, the ServiceName will fallback to the
  1004    config.Outbounds map `key`.
  1005  
  1006    Before:
  1007  
  1008      ```go
  1009      config.Outbounds['service'] := transport.Outbounds{
  1010          Unary: httpTransport.NewSingleOutbound(...)
  1011      }
  1012      ...
  1013      cc := dispatcher.ClientConfig('service')
  1014      cc.Service() // returns 'service'
  1015      ```
  1016  
  1017    After (optional):
  1018  
  1019      ```go
  1020      config.Outbounds['service-key'] := transport.Outbounds{
  1021          ServiceName: 'service'
  1022          Unary: httpTransport.NewSingleOutbound(...)
  1023      }
  1024      ...
  1025      cc := dispatcher.ClientConfig('service-key')
  1026      cc.Service() // returns 'service'
  1027      ```
  1028  
  1029  
  1030  ## [1.1.0] - 2017-01-24
  1031  
  1032  - Thrift: Mock clients compatible with gomock are now generated for each
  1033    service inside a test subpackage. Disable this by passing a `-no-gomock`
  1034    flag to the plugin.
  1035  
  1036  
  1037  ## [1.0.1] - 2017-01-11
  1038  
  1039  - Thrift: Fixed code generation for empty services.
  1040  - Thrift: Fixed code generation for Thrift services that inherit other Thrift
  1041    services.
  1042  
  1043  
  1044  ## [1.0.0] - 2016-12-30
  1045  
  1046  - Stable release: No more breaking changes will be made in the 1.x release
  1047    series.
  1048  
  1049  
  1050  ## [1.0.0-rc5] - 2016-12-30
  1051  
  1052  - **Breaking**: The ThriftRW plugin now generates code under the subpackages
  1053    `${service}server` and `$[service}client` rather than
  1054    `yarpc/${service}server` and `yarpc/${service}client`.
  1055  
  1056    Given a `kv.thrift` that defines a `KeyValue` service, previously the
  1057    imports would be,
  1058  
  1059        import ".../kv/yarpc/keyvalueserver"
  1060        import ".../kv/yarpc/keyvalueclient"
  1061  
  1062    The same packages will now be available at,
  1063  
  1064        import ".../kv/keyvalueserver"
  1065        import ".../kv/keyvalueclient"
  1066  
  1067  - **Breaking**: `NewChannelTransport` can now return an error upon
  1068    construction.
  1069  - **Breaking**: `http.URLTemplate` has no effect on `http.NewSingleOutbound`.
  1070  - `http.Transport.NewOutbound` now accepts `http.OutboundOption`s.
  1071  
  1072  
  1073  ## [1.0.0-rc4] - 2016-12-28
  1074  
  1075  - **Breaking**: Removed the `yarpc.ReqMeta` and `yarpc.ResMeta` types. To
  1076    migrate your handlers, simply drop the argument and the return value from
  1077    your handler definition.
  1078  
  1079    Before:
  1080  
  1081      ```go
  1082      func (h *myHandler) Handle(ctx context.Context, reqMeta yarpc.ReqMeta, ...) (..., yarpc.ResMeta, error) {
  1083          // ...
  1084      }
  1085      ```
  1086  
  1087    After:
  1088  
  1089      ```go
  1090      func (h *myHandler) Handle(ctx context.Context, ...) (..., error) {
  1091          // ...
  1092      }
  1093      ```
  1094  
  1095    To access information previously available in the `yarpc.ReqMeta` or to
  1096    write response headers, use the `yarpc.CallFromContext` function.
  1097  
  1098  - **Breaking**: Removed the `yarpc.CallReqMeta` and `yarpc.CallResMeta`
  1099    types. To migrate your call sites, drop the argument and remove the return
  1100    value.
  1101  
  1102    Before:
  1103  
  1104      ```go
  1105      res, resMeta, err := client.Call(ctx, reqMeta, ...)
  1106      ```
  1107  
  1108    After:
  1109  
  1110      ```go
  1111      res, err := client.Call(ctx, ...)
  1112      ```
  1113  
  1114    Use `yarpc.CallOption`s to specify per-request options and
  1115    `yarpc.ResponseHeaders` to receive response headers for the call.
  1116  
  1117  - **Breaking**: Removed `yarpc.Headers` in favor of `map[string]string`.
  1118  - **Breaking**: `yarpc.Dispatcher` no longer implements the
  1119    `transport.Router` interface.
  1120  - **Breaking**: Start and Stop for Inbound and Outbound are now expected to
  1121    be idempotent.
  1122  - **Breaking**: Combine `ServiceProcedure` and `Registrant` into `Procedure`.
  1123  - **Breaking**: Rename `Registrar` to `RouteTable`.
  1124  - **Breaking**: Rename `Registry` to `Router`.
  1125  - **Breaking**: Rename `middleware.{Oneway,Unary}{Inbound,Outbound}Middleware`
  1126    to `middleware.{Oneway,Unary}{Inbound,Outbound}`
  1127  - **Breaking**: Changed `peer.List.Update` to accept a `peer.ListUpdates`
  1128    struct instead of a list of additions and removals
  1129  - **Breaking**: yarpc.NewDispatcher now returns a pointer to a
  1130    yarpc.Dispatcher. Previously, yarpc.Dispatcher was an interface, now a
  1131    concrete struct.
  1132  
  1133    This change will allow us to extend the Dispatcher after the 1.0.0 release
  1134    without breaking tests depending on the rigidity of the Dispatcher
  1135    interface.
  1136  - **Breaking**: `Peer.StartRequest` and `Peer.EndRequest` no longer accept a
  1137    `dontNotify` argument.
  1138  - Added `yarpc.IsBadRequestError`, `yarpc.IsUnexpectedError` and
  1139    `yarpc.IsTimeoutError` functions.
  1140  - Added a `transport.InboundBadRequestError` function to build errors which
  1141    satisfy `transport.IsBadRequestError`.
  1142  - Added a `transport.ValidateRequest` function to validate
  1143    `transport.Request`s.
  1144  
  1145  
  1146  ## [1.0.0-rc3] - 2016-12-09
  1147  
  1148  - Moved the `yarpc/internal/crossdock/` and `yarpc/internal/examples`
  1149    folders to `yarpc/crossdock/` and `yarpc/examples` respectively.
  1150  
  1151  - **Breaking**: Relocated the `go.uber.org/yarpc/transport` package to
  1152    `go.uber.org/yarpc/api/transport`.  In the process the `middleware`
  1153    logic from transport has been moved to `go.uber.org/yarpc/api/middleware`
  1154    and the concrete implementation of the Registry has been moved from
  1155    `transport.MapRegistry` to `yarpc.MapRegistry`.  This did **not** move the
  1156    concrete implementations of http/tchannel from the `yarpc/transport/` directory.
  1157  
  1158  - **Breaking**: Relocated the `go.uber.org/yarpc/peer` package to
  1159    `go.uber.org/yarpc/api/peer`. This does not include the concrete
  1160    implementations still in the `/yarpc/peer/` directory.
  1161  
  1162  - **Breaking**: This version overhauls the code required for constructing
  1163    inbounds and outbounds.
  1164  
  1165    Inbounds and Outbounds now share an underlying Transport, of which there
  1166    should be one for each transport protocol, so one HTTP Transport for all
  1167    HTTP inbounds and outbounds, and a TChannel transport for all TChannel
  1168    inbounds and outbounds.
  1169  
  1170    Before:
  1171  
  1172      ```go
  1173      ch, err := tchannelProper.NewChannel("example-service", nil)
  1174      if err != nil {
  1175          log.Fatalln(err)
  1176      }
  1177      yarpc.NewDispatcher(yarpc.Config{
  1178          Name: "example-service",
  1179          yarpc.Inbounds{
  1180              http.NewInbound(":80"),
  1181              tchannel.NewInbound(ch, tchannel.ListenAddr(":4040")),
  1182          },
  1183          yarpc.Outbounds{
  1184              http.NewOutbound("http://example-service/rpc/v1"),
  1185              tchannel.NewOutbound(ch, tchannel.HostPort("127.0.0.1:4040")),
  1186          },
  1187      })
  1188      ```
  1189  
  1190    After:
  1191  
  1192      ```go
  1193      httpTransport := http.NewTransport()
  1194      tchannelTransport := tchannel.NewChannelTransport(
  1195            tchannel.ServiceName("example-service"),
  1196            tchannel.ListenAddr(":4040"),
  1197      )
  1198      yarpc.NewDispatcher(yarpc.Config{
  1199          Name: "example-service",
  1200          yarpc.Inbounds{
  1201              httpTransport.NewInbound(":80"),
  1202              tchannelTransport.NewInbound(),
  1203          },
  1204          yarpc.Outbounds{
  1205              httpTransport.NewSingleOutbound("http://example-service/rpc/v1"),
  1206              tchannelTransport.NewSingleOutbound("127.0.0.1:4040"),
  1207          },
  1208      })
  1209      ```
  1210  
  1211    The dispatcher now collects all of the unique transport instances from
  1212    inbounds and outbounds and manages their lifecycle independently.
  1213  
  1214    This version repurposed the name `NewOutbound` for outbounds with a peer
  1215    chooser, whereas `NewSingleOutbound` is a convenience for creating an
  1216    outbound addressing a specific single peer.
  1217    You may need to rename existing usage. The compiler will complain that
  1218    strings are not `peer.Chooser` instances.
  1219  
  1220    This version introduces support for peer choosers, peer lists, and peer
  1221    list updaters for HTTP outbounds. This is made possible by the above
  1222    change that introduces a concrete instance of a Transport for each
  1223    protocol, which deduplicates peer instances across all inbounds and
  1224    outbounds, making connection sharing and load balancing possible,
  1225    eventually for all transport protocols.
  1226  
  1227    Note that we use `NewChannelTransport`, as opposed to `NewTransport`.
  1228    We reserve this name for a future minor release that will provide
  1229    parity with HTTP for outbounds with peer choosers.
  1230  
  1231    The new ChannelTransport constructor can still use a shared TChannel
  1232    Channel instance, if that is required.
  1233  
  1234      ```go
  1235      ch, err := tchannelProper.NewChannel("example-service", nil)
  1236      if err != nil {
  1237          log.Fatalln(err)
  1238      }
  1239      tchannelTransport := tchannel.NewChannelTransport(
  1240          tchannel.WithChannel(ch),
  1241            tchannel.ServiceName("example-service"),
  1242            tchannel.ListenAddr(":4040"),
  1243      )
  1244      yarpc.NewDispatcher(yarpc.Config{
  1245          Name: "example-service",
  1246          yarpc.Inbounds{
  1247              tchannelTransport.NewInbound(),
  1248          },
  1249      })
  1250      ```
  1251  
  1252  - **Breaking**: the `transport.Inbound` and `transport.Outbound` interfaces
  1253    now implement `Start()` without any arguments.
  1254  
  1255    The dispatcher no longer threads a dependencies object through the start
  1256    method of every configured transport. The only existing dependency was an
  1257    opentracing Tracer, which you can now thread through Transport constructor
  1258    options instead.
  1259  
  1260    Before:
  1261  
  1262      ```go
  1263      yarpc.NewDispatcher(yarpc.Config{
  1264          yarpc.Inbounds{
  1265              http.NewInbound(...),
  1266          },
  1267          yarpc.Outbounds{
  1268              "callee": http.NewOutbound(...)
  1269          },
  1270          Tracer: opentracing.GlobalTracer(),
  1271      })
  1272      ```
  1273  
  1274    Now:
  1275  
  1276      ```go
  1277      tracer := opentracing.GlobalTracer()
  1278      httpTransport := http.NewTransport(
  1279          http.Tracer(tracer),
  1280      )
  1281      tchannelTransport := tchannel.NewChannelTransport(
  1282          tchannel.Tracer(tracer),
  1283      )
  1284      yarpc.NewDispatcher(yarpc.Config{
  1285          Name: "example-service",
  1286          yarpc.Inbounds{
  1287              httpTransport.NewInbound(":80"),
  1288              tchannelTransport.NewInbound(),
  1289          },
  1290          yarpc.Outbounds{
  1291              httpTransport.NewSingleOutbound("http://example-service/rpc/v1"),
  1292              tchannelTransport.NewSingleOutbound("127.0.0.1:4040"),
  1293          },
  1294      })
  1295      ```
  1296  
  1297    The `yarpc.Config` `Tracer` property is still accepted, but unused and
  1298    deprecated.
  1299  
  1300    The dispatcher no longer provides a `transport.ServiceDetail` as an
  1301    argument to `Start` on inbound transports.  The `transport.ServiceDetail`
  1302    no longer exists.  You no longer need to provide the service name to start
  1303    an inbound, only a registry.  Instead of passing the service detail to start,
  1304    the dispatcher now calls `inbound.SetRegistry(transport.Registry)` before
  1305    calling `Start()`.
  1306  
  1307    Custom transport protocols must change their interface accordingly to
  1308    satisfy the `transport.Inbound` interface.  Uses that construct inbounds
  1309    manually must either call `SetRegistry` or use the `WithRegistry` chained
  1310    configuration method before calling `Start` without a `ServiceDetail`.
  1311  
  1312    Before:
  1313  
  1314      ```go
  1315      inbound := tchannel.NewInbound(...)
  1316      err := inbound.Start(
  1317          transport.ServiceDetail{
  1318              Name: "service",
  1319              Registry: registry,
  1320          },
  1321          transport.NoDeps,
  1322      )
  1323      ```
  1324  
  1325    Now:
  1326  
  1327      ```go
  1328      transport := tchannel.NewTransport()
  1329      inbound := transport.NewInbound()
  1330      inbound.SetRegistry(registry)
  1331      err := inbound.Start()
  1332      ```
  1333  
  1334    The `transport.Deps` struct and `transport.NoDeps` instance no longer exist.
  1335  
  1336  - **Breaking**: TChannel inbound and outbound constructors now return
  1337    pointers to Inbound and Outbound structs with private state satisfying the
  1338    `transport.Inbound` and `transport.Outbound` interfaces.  These were
  1339    previously transport specific Inbound and Outbound interfaces.
  1340    This eliminates unnecessary polymorphism in some cases.
  1341  
  1342  - Introduced OpenTracing helpers for transport authors.
  1343  - Created the `yarpc.Serialize` package for marshalling RPC messages at rest.
  1344    Useful for transports that persist RPC messages.
  1345  - Tranports have access to `DispatchOnewayHandler` and `DispatchUnaryHandler`.
  1346    These should be called by all `transport.Inbounds` instead of directly
  1347    calling handlers.
  1348  
  1349  ## [1.0.0-rc2] - 2016-12-02
  1350  
  1351  - **Breaking** Renamed `Agent` to `Transport`.
  1352  - **Breaking** Renamed `hostport.Peer`'s `AddSubscriber/RemoveSubscriber`
  1353    to `Subscribe/Unsubscribe`.
  1354  - **Breaking** Updated `Peer.StartRequest` to take a `dontNotify` `peer.Subscriber` to exempt
  1355    from updates.  Also added `Peer.EndRequest` function to replace the `finish` callback
  1356    from `Peer.StartRequest`.
  1357  - **Breaking** Renamed `peer.List` to `peer.Chooser`, `peer.ChangeListener` to `peer.List`
  1358    and `peer.Chooser.ChoosePeer` to `peer.Chooser.Choose`.
  1359  - Reduced complexity of `single` `peer.Chooser` to retain the passed in peer immediately.
  1360  - **Breaking** Moved `/peer/list/single.go` to `/peer/single/list.go`.
  1361  - **Breaking** Moved `/peer/x/list/roundrobin.go` to `/peer/x/roundrobin/list.go`.
  1362  - HTTP Oneway requests will now process http status codes and returns appropriate errors.
  1363  - **Breaking** Update `roundrobin.New` function to stop accepting an initial peer list.
  1364    Use `list.Update` to initialize the peers in the list instead.
  1365  - **Breaking**: Rename `Channel` to `ClientConfig` for both the dispatcher
  1366    method and the interface. `mydispatcher.Channel("myservice")` becomes
  1367    `mydispatcher.ClientConfig("myservice")`. The `ClientConfig` object can
  1368    then used to build a new Client as before:
  1369    `NewMyThriftClient(mydispatcher.ClientConfig("myservice"))`.
  1370  - A comment is added atop YAML files generated by the recorder to help
  1371    understanding where they come from.
  1372  
  1373  ## [1.0.0-rc1] - 2016-11-23
  1374  
  1375  - **Breaking**: Rename the `Interceptor` and `Filter` types to
  1376    `UnaryInboundMiddleware` and `UnaryOutboundMiddleware` respectively.
  1377  - **Breaking**: `yarpc.Config` now accepts middleware using the
  1378    `InboundMiddleware` and `OutboundMiddleware` fields.
  1379  
  1380    Before:
  1381  
  1382        yarpc.Config{Interceptor: myInterceptor, Filter: myFilter}
  1383  
  1384    Now:
  1385  
  1386        yarpc.Config{
  1387            InboundMiddleware: yarpc.InboundMiddleware{Unary: myInterceptor},
  1388            OutboundMiddleware: yarpc.OutboundMiddleware{Unary: myFilter},
  1389        }
  1390  
  1391  - Add support for Oneway middleware via the `OnewayInboundMiddleware` and
  1392    `OnewayOutboundMiddleware` interfaces.
  1393  
  1394  
  1395  ## [0.5.0] - 2016-11-21
  1396  
  1397  - **Breaking**: A detail of inbound transports has changed.
  1398    Starting an inbound transport accepts a ServiceDetail, including
  1399    the service name and a Registry. The Registry now must
  1400    implement `Choose(context.Context, transport.Request) (HandlerSpec, error)`
  1401    instead of `GetHandler(service, procedure string) (HandlerSpec, error)`.
  1402    Note that in the prior release, `Handler` became `HandleSpec` to
  1403    accommodate oneway handlers.
  1404  - Upgrade to ThriftRW 1.0.
  1405  - TChannel: `NewInbound` and `NewOutbound` now accept any object satisfying
  1406    the `Channel` interface. This should work with existing `*tchannel.Channel`
  1407    objects without any changes.
  1408  - Introduced `yarpc.Inbounds` to be used instead of `[]transport.Inbound`
  1409    when configuring a Dispatcher.
  1410  - Add support for peer lists in HTTP outbounds.
  1411  
  1412  
  1413  ## [0.4.0] - 2016-11-11
  1414  
  1415  This release requires regeneration of ThriftRW code.
  1416  
  1417  - **Breaking**: Procedure registration must now always be done directly
  1418    against the `Dispatcher`. Encoding-specific functions `json.Register`,
  1419    `raw.Register`, and `thrift.Register` have been deprecated in favor of
  1420    the `Dispatcher.Register` method. Existing code may be migrated by running
  1421    the following commands on your go files.
  1422  
  1423      ```
  1424      gofmt -w -r 'raw.Register(d, h) -> d.Register(h)' $file.go
  1425      gofmt -w -r 'json.Register(d, h) -> d.Register(h)' $file.go
  1426      gofmt -w -r 'thrift.Register(d, h) -> d.Register(h)' $file.go
  1427      ```
  1428  
  1429  - Add `yarpc.InjectClients` to automatically instantiate and inject clients
  1430    into structs that need them.
  1431  - Thrift: Add a `Protocol` option to change the Thrift protocol used by
  1432    clients and servers.
  1433  - **Breaking**: Remove the ability to set Baggage Headers through yarpc, use
  1434    opentracing baggage instead
  1435  - **Breaking**: Transport options have been removed completely. Encoding
  1436    values differently based on the transport is no longer supported.
  1437  - **Breaking**: Thrift requests and responses are no longer enveloped by
  1438    default. The `thrift.Enveloped` option may be used to turn enveloping on
  1439    when instantiating Thrift clients or registering handlers.
  1440  - **Breaking**: Use of `golang.org/x/net/context` has been dropped in favor
  1441    of the standard library's `context` package.
  1442  - Add support for providing peer lists to dynamically choose downstream
  1443    peers in HTTP Outbounds
  1444  - Rename `Handler` interface to `UnaryHandler` and separate `Outbound`
  1445    interface into `Outbound` and `UnaryOutbound`.
  1446  - Add `OnewayHandler` and `HandlerSpec` to support oneway handlers.
  1447    Transport inbounds can choose which RPC types to accept
  1448  - The package `yarpctest.recorder` can be used to record/replay requests
  1449    during testing. A command line flag (`--recorder=replay|append|overwrite`)
  1450    is used to control the mode during the execution of the test.
  1451  
  1452  
  1453  ## [0.3.1] - 2016-09-31
  1454  
  1455  - Fix missing canonical import path to `go.uber.org/yarpc`.
  1456  
  1457  
  1458  ## [0.3.0] - 2016-09-30
  1459  
  1460  - **Breaking**: Rename project to `go.uber.org/yarpc`.
  1461  - **Breaking**: Switch to `go.uber.org/thriftrw ~0.3` from
  1462    `github.com/thriftrw/thriftrw-go ~0.2`.
  1463  - Update opentracing-go to `>= 1, < 2`.
  1464  
  1465  
  1466  ## [0.2.1] - 2016-09-28
  1467  
  1468  - Loosen constraint on `opentracing-go` to `>= 0.9, < 2`.
  1469  
  1470  
  1471  ## [0.2.0] - 2016-09-19
  1472  
  1473  - Update thriftrw-go to `>= 0.2, < 0.3`.
  1474  - Implemented a ThriftRW plugin. This should now be used instead of the
  1475    ThriftRW `--yarpc` flag. Check the documentation of the
  1476    [thrift](https://godoc.org/github.com/yarpc/yarpc-go/encoding/thrift)
  1477    package for instructions on how to use it.
  1478  - Adds support for [opentracing][]. Pass an opentracing instance as a
  1479    `Tracer` property of the YARPC config struct and both TChannel and HTTP
  1480    transports will submit spans and propagate baggage.
  1481  - This also modifies the public interface for transport inbounds and
  1482    outbounds, which must now accept a transport.Deps struct. The deps struct
  1483    carries the tracer and may eventually carry other dependencies.
  1484  - Panics from user handlers are recovered. The panic is logged (stderr), and
  1485    an unexpected error is returned to the client about it.
  1486  - Thrift clients can now make requests to multiplexed Apache Thrift servers
  1487    using the `thrift.Multiplexed` client option.
  1488  
  1489  [opentracing]: http://opentracing.io/
  1490  
  1491  
  1492  ## [0.1.1] - 2016-09-01
  1493  
  1494  - Use `github.com/yarpc/yarpc-go` as the import path; revert use of
  1495    `go.uber.org/yarpc` vanity path. There is an issue in Glide `0.11` which
  1496    causes installing these packages to fail, and thriftrw `~0.1`'s yarpc
  1497    template is still using `github.com/yarpc/yarpc-go`.
  1498  
  1499  
  1500  ## 0.1.0 - 2016-08-31
  1501  
  1502  - Initial release.
  1503  [1.72.1]: https://github.com/yarpc/yarpc-go/compare/v1.72.0...1.72.1
  1504  [1.72.0]: https://github.com/yarpc/yarpc-go/compare/v1.71.0...v1.72.0
  1505  [1.71.0]: https://github.com/yarpc/yarpc-go/compare/v1.70.4...v1.71.0
  1506  [1.70.4]: https://github.com/yarpc/yarpc-go/compare/v1.70.3...v1.70.4
  1507  [1.70.3]: https://github.com/yarpc/yarpc-go/compare/v1.70.2...v1.70.3
  1508  [1.70.2]: https://github.com/yarpc/yarpc-go/compare/v1.70.1...v1.70.2
  1509  [1.70.1]: https://github.com/yarpc/yarpc-go/compare/v1.70.0...v1.70.1
  1510  [1.70.0]: https://github.com/yarpc/yarpc-go/compare/v1.69.1...v1.70.0
  1511  [1.69.1]: https://github.com/yarpc/yarpc-go/compare/v1.69.0...v1.69.1
  1512  [1.69.0]: https://github.com/yarpc/yarpc-go/compare/v1.68.0...v1.69.0
  1513  [1.68.0]: https://github.com/yarpc/yarpc-go/compare/v1.67.0...v1.68.0
  1514  [1.67.0]: https://github.com/yarpc/yarpc-go/compare/v1.66.0...v1.67.0
  1515  [1.66.0]: https://github.com/yarpc/yarpc-go/compare/v1.65.0...v1.66.0
  1516  [1.65.0]: https://github.com/yarpc/yarpc-go/compare/v1.64.0...v1.65.0
  1517  [1.64.0]: https://github.com/yarpc/yarpc-go/compare/v1.63.0...v1.64.0
  1518  [1.63.0]: https://github.com/yarpc/yarpc-go/compare/v1.62.0...v1.63.0
  1519  [1.62.0]: https://github.com/yarpc/yarpc-go/compare/v1.61.0...v1.62.0
  1520  [1.61.0]: https://github.com/yarpc/yarpc-go/compare/v1.60.0...v1.61.0
  1521  [1.60.0]: https://github.com/yarpc/yarpc-go/compare/v1.59.0...v1.60.0
  1522  [1.59.0]: https://github.com/yarpc/yarpc-go/compare/v1.58.0...v1.59.0
  1523  [1.58.0]: https://github.com/yarpc/yarpc-go/compare/v1.57.1...v1.58.0
  1524  [1.57.1]: https://github.com/yarpc/yarpc-go/compare/v1.57.0...v1.57.1
  1525  [1.57.0]: https://github.com/yarpc/yarpc-go/compare/v1.56.1...v1.57.0
  1526  [1.56.1]: https://github.com/yarpc/yarpc-go/compare/v1.56.0...v1.56.1
  1527  [1.56.0]: https://github.com/yarpc/yarpc-go/compare/v1.55.1...v1.56.0
  1528  [1.55.1]: https://github.com/yarpc/yarpc-go/compare/v1.55.0...v1.55.1
  1529  [1.55.0]: https://github.com/yarpc/yarpc-go/compare/v1.54.2...v1.55.0
  1530  [1.54.2]: https://github.com/yarpc/yarpc-go/compare/v1.54.1...v1.54.2
  1531  [1.54.1]: https://github.com/yarpc/yarpc-go/compare/v1.54.0...v1.54.1
  1532  [1.54.0]: https://github.com/yarpc/yarpc-go/compare/v1.53.2...v1.54.0
  1533  [1.53.2]: https://github.com/yarpc/yarpc-go/compare/v1.53.1...v1.53.2
  1534  [1.53.1]: https://github.com/yarpc/yarpc-go/compare/v1.51.0...v1.52.0
  1535  [1.53.0]: https://github.com/yarpc/yarpc-go/compare/v1.52.0...v1.53.0
  1536  [1.52.0]: https://github.com/yarpc/yarpc-go/compare/v1.51.0...v1.52.0
  1537  [1.51.0]: https://github.com/yarpc/yarpc-go/compare/v1.50.0...v1.51.0
  1538  [1.50.0]: https://github.com/yarpc/yarpc-go/compare/v1.49.1...v1.50.0
  1539  [1.49.1]: https://github.com/yarpc/yarpc-go/compare/v1.49.0...v1.49.1
  1540  [1.49.0]: https://github.com/yarpc/yarpc-go/compare/v1.48.0...v1.49.0
  1541  [1.48.0]: https://github.com/yarpc/yarpc-go/compare/v1.47.2...v1.48.0
  1542  [1.47.2]: https://github.com/yarpc/yarpc-go/compare/v1.47.1...v1.47.2
  1543  [1.47.1]: https://github.com/yarpc/yarpc-go/compare/v1.47.0...v1.47.1
  1544  [1.47.0]: https://github.com/yarpc/yarpc-go/compare/v1.46.0...v1.47.0
  1545  [1.46.0]: https://github.com/yarpc/yarpc-go/compare/v1.45.0...v1.46.0
  1546  [1.45.0]: https://github.com/yarpc/yarpc-go/compare/v1.44.0...v1.45.0
  1547  [1.44.0]: https://github.com/yarpc/yarpc-go/compare/v1.43.0...v1.44.0
  1548  [1.43.0]: https://github.com/yarpc/yarpc-go/compare/v1.42.1...v1.43.0
  1549  [1.42.1]: https://github.com/yarpc/yarpc-go/compare/v1.42.0...v1.42.1
  1550  [1.42.0]: https://github.com/yarpc/yarpc-go/compare/v1.41.0...v1.42.0
  1551  [1.41.0]: https://github.com/yarpc/yarpc-go/compare/v1.40.0...v1.41.0
  1552  [1.40.0]: https://github.com/yarpc/yarpc-go/compare/v1.39.0...v1.40.0
  1553  [1.39.0]: https://github.com/yarpc/yarpc-go/compare/v1.38.0...v1.39.0
  1554  [1.38.0]: https://github.com/yarpc/yarpc-go/compare/v1.37.4...v1.38.0
  1555  [1.37.4]: https://github.com/yarpc/yarpc-go/compare/v1.37.3...v1.37.4
  1556  [1.37.3]: https://github.com/yarpc/yarpc-go/compare/v1.37.2...v1.37.3
  1557  [1.37.2]: https://github.com/yarpc/yarpc-go/compare/v1.37.1...v1.37.2
  1558  [1.37.1]: https://github.com/yarpc/yarpc-go/compare/v1.37.0...v1.37.1
  1559  [1.37.0]: https://github.com/yarpc/yarpc-go/compare/v1.36.2...v1.37.0
  1560  [1.36.2]: https://github.com/yarpc/yarpc-go/compare/v1.36.1...v1.36.2
  1561  [1.36.1]: https://github.com/yarpc/yarpc-go/compare/v1.36.0...v1.36.1
  1562  [1.36.0]: https://github.com/yarpc/yarpc-go/compare/v1.35.2...v1.36.0
  1563  [1.35.2]: https://github.com/yarpc/yarpc-go/compare/v1.35.1...v1.35.2
  1564  [1.35.1]: https://github.com/yarpc/yarpc-go/compare/v1.35.0...v1.35.1
  1565  [1.35.0]: https://github.com/yarpc/yarpc-go/compare/v1.34.0...v1.35.0
  1566  [1.34.0]: https://github.com/yarpc/yarpc-go/compare/v1.33.0...v1.34.0
  1567  [1.33.0]: https://github.com/yarpc/yarpc-go/compare/v1.32.4...v1.33.0
  1568  [1.32.4]: https://github.com/yarpc/yarpc-go/compare/v1.32.3...v1.32.4
  1569  [1.32.3]: https://github.com/yarpc/yarpc-go/compare/v1.32.2...v1.32.3
  1570  [1.32.2]: https://github.com/yarpc/yarpc-go/compare/v1.32.1...v1.32.2
  1571  [1.32.1]: https://github.com/yarpc/yarpc-go/compare/v1.32.0...v1.32.1
  1572  [1.32.0]: https://github.com/yarpc/yarpc-go/compare/v1.31.0...v1.32.0
  1573  [1.31.0]: https://github.com/yarpc/yarpc-go/compare/v1.30.0...v1.31.0
  1574  [1.30.0]: https://github.com/yarpc/yarpc-go/compare/v1.29.1...v1.30.0
  1575  [1.29.1]: https://github.com/yarpc/yarpc-go/compare/v1.29.0...v1.29.1
  1576  [1.29.0]: https://github.com/yarpc/yarpc-go/compare/v1.28.0...v1.29.0
  1577  [1.28.0]: https://github.com/yarpc/yarpc-go/compare/v1.27.2...v1.28.0
  1578  [1.27.2]: https://github.com/yarpc/yarpc-go/compare/v1.27.1...v1.27.2
  1579  [1.27.1]: https://github.com/yarpc/yarpc-go/compare/v1.27.0...v1.27.1
  1580  [1.27.0]: https://github.com/yarpc/yarpc-go/compare/v1.26.2...v1.27.0
  1581  [1.26.2]: https://github.com/yarpc/yarpc-go/compare/v1.26.1...v1.26.2
  1582  [1.26.1]: https://github.com/yarpc/yarpc-go/compare/v1.26.0...v1.26.1
  1583  [1.26.0]: https://github.com/yarpc/yarpc-go/compare/v1.25.1...v1.26.0
  1584  [1.25.1]: https://github.com/yarpc/yarpc-go/compare/v1.25.0...v1.25.1
  1585  [1.25.0]: https://github.com/yarpc/yarpc-go/compare/v1.24.1...v1.25.0
  1586  [1.24.1]: https://github.com/yarpc/yarpc-go/compare/v1.24.0...v1.24.1
  1587  [1.24.0]: https://github.com/yarpc/yarpc-go/compare/v1.22.0...v1.24.0
  1588  [1.22.0]: https://github.com/yarpc/yarpc-go/compare/v1.21.1...v1.22.0
  1589  [1.21.1]: https://github.com/yarpc/yarpc-go/compare/v1.21.0...v1.21.1
  1590  [1.21.0]: https://github.com/yarpc/yarpc-go/compare/v1.20.1...v1.21.0
  1591  [1.20.1]: https://github.com/yarpc/yarpc-go/compare/v1.20.0...v1.20.1
  1592  [1.20.0]: https://github.com/yarpc/yarpc-go/compare/v1.19.2...v1.20.0
  1593  [1.19.2]: https://github.com/yarpc/yarpc-go/compare/v1.19.1...v1.19.2
  1594  [1.19.1]: https://github.com/yarpc/yarpc-go/compare/v1.19.0...v1.19.1
  1595  [1.19.0]: https://github.com/yarpc/yarpc-go/compare/v1.18.1...v1.19.0
  1596  [1.18.1]: https://github.com/yarpc/yarpc-go/compare/v1.18.0...v1.18.1
  1597  [1.18.0]: https://github.com/yarpc/yarpc-go/compare/v1.17.0...v1.18.0
  1598  [1.17.0]: https://github.com/yarpc/yarpc-go/compare/v1.16.0...v1.17.0
  1599  [1.16.0]: https://github.com/yarpc/yarpc-go/compare/v1.15.0...v1.16.0
  1600  [1.15.0]: https://github.com/yarpc/yarpc-go/compare/v1.14.0...v1.15.0
  1601  [1.14.0]: https://github.com/yarpc/yarpc-go/compare/v1.13.1...v1.14.0
  1602  [1.13.1]: https://github.com/yarpc/yarpc-go/compare/v1.13.0...v1.13.1
  1603  [1.13.0]: https://github.com/yarpc/yarpc-go/compare/v1.12.1...v1.13.0
  1604  [1.12.1]: https://github.com/yarpc/yarpc-go/compare/v1.12.0...v1.12.1
  1605  [1.12.0]: https://github.com/yarpc/yarpc-go/compare/v1.11.0...v1.12.0
  1606  [1.11.0]: https://github.com/yarpc/yarpc-go/compare/v1.10.0...v1.11.0
  1607  [1.10.0]: https://github.com/yarpc/yarpc-go/compare/v1.9.0...v1.10.0
  1608  [1.9.0]: https://github.com/yarpc/yarpc-go/compare/v1.8.0...v1.9.0
  1609  [1.8.0]: https://github.com/yarpc/yarpc-go/compare/v1.7.1...v1.8.0
  1610  [1.7.1]: https://github.com/yarpc/yarpc-go/compare/v1.7.0...v1.7.1
  1611  [1.7.0]: https://github.com/yarpc/yarpc-go/compare/v1.6.0...v1.7.0
  1612  [1.6.0]: https://github.com/yarpc/yarpc-go/compare/v1.5.0...v1.6.0
  1613  [1.5.0]: https://github.com/yarpc/yarpc-go/compare/v1.4.0...v1.5.0
  1614  [1.4.0]: https://github.com/yarpc/yarpc-go/compare/v1.3.0...v1.4.0
  1615  [1.3.0]: https://github.com/yarpc/yarpc-go/compare/v1.2.0...v1.3.0
  1616  [1.2.0]: https://github.com/yarpc/yarpc-go/compare/v1.1.0...v1.2.0
  1617  [1.1.0]: https://github.com/yarpc/yarpc-go/compare/v1.0.1...v1.1.0
  1618  [1.0.1]: https://github.com/yarpc/yarpc-go/compare/v1.0.0...v1.0.1
  1619  [1.0.0]: https://github.com/yarpc/yarpc-go/compare/v1.0.0-rc5...v1.0.0
  1620  [1.0.0-rc5]: https://github.com/yarpc/yarpc-go/compare/v1.0.0-rc4...v1.0.0-rc5
  1621  [1.0.0-rc4]: https://github.com/yarpc/yarpc-go/compare/v1.0.0-rc3...v1.0.0-rc4
  1622  [1.0.0-rc3]: https://github.com/yarpc/yarpc-go/compare/v1.0.0-rc2...v1.0.0-rc3
  1623  [1.0.0-rc2]: https://github.com/yarpc/yarpc-go/compare/v1.0.0-rc1...v1.0.0-rc2
  1624  [1.0.0-rc1]: https://github.com/yarpc/yarpc-go/compare/v0.5.0...v1.0.0-rc1
  1625  [0.5.0]: https://github.com/yarpc/yarpc-go/compare/v0.4.0...v0.5.0
  1626  [0.4.0]: https://github.com/yarpc/yarpc-go/compare/v0.3.1...v0.4.0
  1627  [0.3.1]: https://github.com/yarpc/yarpc-go/compare/v0.3.0...v0.3.1
  1628  [0.3.0]: https://github.com/yarpc/yarpc-go/compare/v0.2.1...v0.3.0
  1629  [0.2.1]: https://github.com/yarpc/yarpc-go/compare/v0.2.0...v0.2.1
  1630  [0.2.0]: https://github.com/yarpc/yarpc-go/compare/v0.1.1...v0.2.0
  1631  [0.1.1]: https://github.com/yarpc/yarpc-go/compare/v0.1.0...v0.1.1