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