Repository navigation
Interop - #40
Open
kafkiansky wants to merge 9 commits into
Open
Interop#40kafkiansky wants to merge 9 commits into
kafkiansky wants to merge 9 commits into
Conversation
On GitHub runners localhost resolves to ::1 as well, and the server listening on 0.0.0.0 only refused the client whenever it picked the IPv6 address. Listen on both, like the grpc-go server, and put an IPv6 --server_host in brackets.
The connection used to be established lazily inside the HTTP request, so a failure to connect surfaced only once the call was already running and the call failed even if another endpoint was reachable. Like pick_first in grpc-go, start the call only on an established connection: StreamFactory waits until amphp acquires one, and DefaultConnection excludes an endpoint it cannot connect to and picks the next one, failing with UNAVAILABLE once every endpoint is excluded. The deadline of timeout_on_sleeping_server may now expire while the call waits for the connection, which grpc-go also accepts.
PickFirst shuffled the endpoints, while pick_first in grpc-go keeps their order by default. Pick the first endpoint in resolution order instead. PickFirstFactory no longer takes a Randomizer.
A target such as [::1]:50051 keeps the brackets in its host, and DnsResolver passed them to amphp/dns, which rejected the name and failed the call with UNAVAILABLE. Strip them, so amphp returns the literal as is, like grpc-go.
amphp takes :authority from the request URI, which carried the resolved endpoint address, so the server saw ip:port instead of the target name. Like grpc-go, the authority is now the peer name of the transport credentials if set, localhost for unix, otherwise the target address, or the first one when the target lists several. The URI carries this authority, while the endpoint address travels as a request attribute: EndpointConnectionPool keeps a pool per endpoint and AddressSocketConnector connects to that address. As a result unix targets work, and SNI defaults to the target name. A client passed to withHttpClient() knows nothing about the attribute and keeps receiving the endpoint address in the URI.
amphp/pipeline 1.2.0 throws "Must call suspend() before calling throw()" when a queue is completed while a cancelled consumer is still waiting on it, fixed in 1.2.1. Now that a call starts only on an established connection, the request body is already being read when the call is cancelled, so the lowest dependencies hit it in ClientCancellationTest.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
closes #34