Commit Graph

555 Commits

Author SHA1 Message Date
Chengyuan Zhang b4fe07d22d
xds: support ring_hash as the endpoint-level LB policy (#7991)
Update LB policy config generation to support ring hash policy as the endpoint-level LB policy.

- Changed the CDS LB policy to accept RING_HASH as the endpoint LB policy from CDS updates. This configuration is directly passed to its child policy (aka, ClusterResolverLoadBalancer) in its config.

- Changed ClusterResolverLoadBalancer to generate different LB configs for its downstream LB policies, depending on the endpoint-level LB policies.
  - If the endpoint-level LB policy is ROUND_ROBIN, the downstream LB policy hierarchy is: PriorityLB -> ClusterImplLB -> WeightedTargetLB -> RoundRobinLB
  - If the endpoin-level LB policy is RNIG_HASH, the downstream LB policy hierarchy is: PriorityLB -> ClusterImplLB -> RingHashLB.
2021-04-16 12:46:55 -07:00
Chengyuan Zhang 9614738a7d
core, grpclb, xds: let leaf LB policies explicitly refresh name resolution when subchannel connection is broken (#8048)
Currently each subchannel implicitly refreshes the name resolution when its state changes to IDLE or TRANSIENT_FAILURE. That is, this feature is built into subchannel's internal implementation. Although it eliminates the burden of having LB implementations refreshing the resolver when connections to backends are broken, this is gives LB policies no chance to disable or override this refresh (e.g., in some complex load balancing hierarchy like xDS, LB policies may embed a resolver inside for resolving backends so the refreshing resolution operation should be hooked to the resolver embedded in the LB policy instead of the one in Channel).

In order to make this transition smoothly, we add a check to SubchannelImpl that checks if the LoadBalancer has explicitly called Helper.refreshNameResolution for broken subchannels created by it. If not, it logs a warning and do the refresh.

A temporary LoadBalancer.Helper API ignoreRefreshNameResolution() is added to avoid false-positive warnings for xDS that intentionally does not want a refresh. Once the migration is done, this should be deleted.
2021-04-16 10:49:06 -07:00
Chengyuan Zhang d4fa0ecc07
xds: reduce the size of ring for testing pick distributions (#8079)
In the ring hash LB policy, building the ring is computationally heavy. Although using a larger ring can make the RPC distribution closer to the actual weights of hosts, it takes long time to finish the test.

Internally, each test class is expected to finish within 1 minute, while each of the test cases for testing pick distribution takes about 30 sec. By reducing the ring size by a factor of 10, the time spent for those test cases reduce to 1-2 seconds. Now we need larger tolerance for the distribution (three hosts with weights 1:10:100):

- With a ring size of 100000, the 10000 RPCs distribution is close to 91 : 866 : 9043
- With a ring size of 10000, the 10000 RPCs distribution is close to 104 : 808 : 9088

Roughly, this is still acceptable.
2021-04-12 14:55:31 -07:00
Chengyuan Zhang 95adf96848
xds: implement ring_hash load balancing policy (#7943)
Implementation for the ring hash LB policy. A LoadBalancer that provides consistent hashing based load balancing to upstream hosts, with the "Ketama" hashing that maps hosts onto a circle (the "ring") by hashing its addresses. Each request is routed to a host by hashing some property of the request and finding the nearest corresponding host clockwise around the ring. Each host is placed on the ring some number of times proportional to its weight. With the ring partitioned appropriately, the addition or removal of one host from a set of N hosts will affect only 1/N requests.
2021-04-08 17:58:45 -07:00
Sergii Tkachenko 6ad3f5d9e4 xds: Fix error prone UnnecessaryJavacSuppressWarnings in a test 2021-04-07 21:59:31 -04:00
sanjaypujare 1a3b02b44b
xds: cache bootstrapInfo in the SslContextProviderFactory to prevent rereading (#8051) 2021-04-05 16:26:29 -07:00
sanjaypujare d9956a53df
xds: Fix validation of HCM filter and Router httpFilter (#8039)
* add 1 more check that works with TD now
2021-04-02 09:48:13 -07:00
sanjaypujare ac6461dfe5
xds: expose bootstrap through XdsClient interface (#8041) 2021-04-01 18:45:46 -07:00
sanjaypujare 4896a0fee8
xds: move the state check logic to delegate and eliminate boilerplate code (#8018) 2021-03-25 16:52:15 -07:00
Sergii Tkachenko 828b03da27 xds: add CsdsService 2021-03-25 16:20:30 -04:00
Sergii Tkachenko b417b70db1 xds: add csds.proto (v3) with dependencies, generated code 2021-03-25 16:20:30 -04:00
Chengyuan Zhang ad2b26436c
xds: update (local) configurations atomically for each LDS/RDS resource update (#8011)
Fixes inconsistent state of XdsNameResolver with most recently received xDS configurations. The full suite of configurations should always be updated whenever receiving new resource updates, including updates that revoke currently in-use resources. Reference counts for currently in-use clusters should also be cleaned up properly. Otherwise, re-receiving (after being revoked) the same resource can be treated as if the configuration never changed.
2021-03-24 17:06:03 -07:00
ZHANG Dapeng ccedd85418
xds: enforce non-null overrideConfigs field for http filters 2021-03-24 17:05:17 -07:00
ZHANG Dapeng 3ccc6792d5
xds: enable circuit breaking, timeout, fault injection by default 2021-03-24 14:50:59 -07:00
sanjaypujare b7afbc30d1
xds: remove syncContext and just use the executorService (#8006) 2021-03-24 12:41:58 -07:00
sanjaypujare c4dec7517f
xds: add/enhance Javadoc comments for XdsServerBuilder. (#8007) 2021-03-23 10:53:21 -07:00
Sergii Tkachenko 8ff0b23c2e
xds: ADS parsing: collect parsing errors on NACK; cache resources on ACK 2021-03-22 20:34:03 -04:00
apolcyn ccd43b64e3
xds: enable v3 API in bootstrap generated by cloud-to-prod resolver (#7995) 2021-03-19 15:26:15 -07:00
apolcyn ab216a1720
interop-testing, xds: Allow using TestServiceClient for making Traffic Director RPCs (#7994)
Updates TestServiceClient to support creating channel without target port (mostly useful for xDS that uses the channel target as the resource name).

Adds an env var for overriding the TD URI used in cloud-to-prod test.
2021-03-19 12:44:52 -07:00
yifeizhuang 043c9d6407
xds: weightedTargetLB collect all failure child pickers to log more error details (#7989) 2021-03-18 17:39:48 -07:00
Chengyuan Zhang f0512db060
xds: delete redundant hash function configuration (#7950)
Initially we were about to support both xx_hash and murmur_hash. But later we decided to support xx_hash only. So for any hashing we are using in xDS, it's going to be xx_hash. Therefore, we do not need to define and carry this configuration around.
2021-03-18 11:48:25 -07:00
sanjaypujare a460f784c6
xds: fix filterChainMatch for multiple matchers, 0-length prefixLength and empty prefixRange list (#7985) 2021-03-18 10:22:35 -07:00
sanjaypujare cd3b0c4412
xds: clean up to remove the cert-instance-override related code (#7986) 2021-03-18 10:22:04 -07:00
Penn (Dapeng) Zhang e8d935e5c9 xds: pretty print http filters 2021-03-18 10:13:36 -07:00
Penn (Dapeng) Zhang 9950d30881 xds: import envoy router.proto 2021-03-18 10:13:36 -07:00
ZHANG Dapeng 3ebb3e1924
xds: HttpFilter support 2021-03-17 16:37:13 -07:00
sanjaypujare 69587c5239
xds: use the correct resource id template as per xDS server gRFC (#7978) 2021-03-17 08:22:59 -07:00
sanjaypujare 224247cf02
xds: implement xDS server validations (#7972) 2021-03-16 15:24:04 -07:00
yifeizhuang 71c4ef730e
xds:fix cdsLoadBalancer2 childLb shutdown (#7971) 2021-03-16 12:37:05 -07:00
sanjaypujare be6192e82a
xds: replace ServerXdsClient with ClientXdsClient (#7969) 2021-03-16 11:23:41 -07:00
ZHANG Dapeng 3f7aa8c592
xds: fix Node.toBuilder() bug 2021-03-12 14:06:00 -08:00
Chengyuan Zhang 8e1c9b6948
xds: change system property for reading bootstrap config (#7961)
Changes from "io.grpc.xds.bootstrapValue" to "io.grpc.xds.bootstrapConfig".
2021-03-12 13:54:58 -08:00
sanjaypujare afe883119d
xds: add server side Listener processing to ClientXdsClient (#7955)
* xds: add server side Listener processing to ClientXdsClient

* address review comments

* minor fixes for review comments
2021-03-11 16:23:50 -08:00
yifeizhuang 528ef63c58
core: Move negotiationLogger from channel attributes to GrpcHttp2ConnectionHandler (#7933) 2021-03-10 16:43:56 -08:00
Sergii Tkachenko c8d3cf23e6
xds: Simplify ClientXdsClientTestBase by reusing test resources 2021-03-08 09:14:22 -08:00
Chengyuan Zhang 4b52639aa1
xds: implement per-RPC hash generation (#7922)
Generates a hash value for each RPC based on the HashPolicies configured for the Route that the RPC is routed to.
2021-03-05 10:51:42 -08:00
Sergii Tkachenko cf99e8a7b2
xds: add helper to unpack compatible com.google.protobuf.Any messages 2021-03-03 14:46:44 -08:00
sanjaypujare 46a136d62b
xds: implement listener deletion/re-add and server serving/not-serving logic (#7919) 2021-03-02 10:47:50 -08:00
Chengyuan Zhang a3ca6321ba
xds: fix typo in handling malformed cluster config (#7930) 2021-03-01 16:58:23 -08:00
ZHANG Dapeng 14432dfe67
xds: import udpa/type/v1/typed_struct.proto 2021-02-26 12:22:04 -08:00
Chengyuan Zhang 7a92de619b
xds: add env var protection for google-c2p resolver (#7918) 2021-02-25 17:55:05 -08:00
Chengyuan Zhang 2bfa0037ad
xds: implement cloud-to-prod resolver (#7900)
Implemented CloudToProdNameResolver, which will be used for DirectPath with URI scheme "google-c2p". The resolver is only a wrapper that delegates name resolution either to DNS or xDS resolver depending on the environment. If it is delegating to the xDS resolver, it will send HTTP requests (to a local HTTP server) to fetch metadata that is used to generate a bootstrap config. The self-generated bootstrap will be used for xDS.
2021-02-23 12:27:47 -08:00
sanjaypujare bfc67bfcf4
xds: remove the env var GRPC_XDS_EXPERIMENTAL_NEW_SERVER_API (#7914) 2021-02-23 11:15:22 -08:00
Chengyuan Zhang 22d1af0c89
xds: implement simple safe and allocation-free xx_hash (#7912)
Implement a simple allocation-free xx_hash utility class without using sun.misc.Unsafe. The hash function mainly targets on xDS use case, which is mostly small strings (endpoint address, headers, etc) and primitive types.

In gRPC's use case, string characters need to be treated as ASCIIs to make the produced hash values match other implementations (Envoy, gRPC-Go, C-core, etc) would produce.

The hashing implementation and tests are borrowed from OpenHFT's XxHash implementation (https://github.com/OpenHFT/Zero-Allocation-Hashing/blob/master/src/main/java/net/openhft/hashing/XxHash.java, see commit 658079a50903c32c54f2ab5c86243244b3ac60ed), which is under Apache 2.0 license. For more details, see https://github.com/OpenHFT/Zero-Allocation-Hashing.

The code is made to be in third_party directory with LISENCE and NOTICE files.
2021-02-22 11:07:25 -08:00
sanjaypujare 6a581f282b
xds: implement the new filterChainMatch algorithm (#7910) 2021-02-19 15:29:27 -08:00
ZHANG Dapeng 132a40a1cf
xds: implement fault injection interceptor in XdsNameResolver 2021-02-18 14:35:45 -08:00
Sergii Tkachenko e5e9c7a714 xds: sync envoy proto to commit ac9a2637336decdcc52c24add5e8fc39edebb962 2021-02-18 16:11:04 -05:00
ZHANG Dapeng 29864f4fad
xds: gate HttpFilter parsing by env flag 2021-02-17 18:55:43 -08:00
yifeizhuang 97b705614b
xds: add proto leakage check at gradle build (#7899) 2021-02-16 16:19:06 -08:00
sanjaypujare 8030c3a11d
xds: Implement XdsServingStatusListener as per the new xDS server gRFC (#7876) 2021-02-12 09:22:26 -08:00