Commit Graph

755 Commits

Author SHA1 Message Date
sanjaypujare b05ce13df2
xds: implementation of SdsClient to be used by SDS based SslContextProviders (#6400) 2019-11-18 10:36:42 -08:00
Chengyuan Zhang a49bd6efaa
xds: do not globally cache results of reading bootstrap file (#6420)
Do not cache content read from bootstrap file. Each call of readBootstrap() should just trigger reading file explicitly.
2019-11-14 17:04:34 -08:00
ZHANG Dapeng 194d1512c0
xds: refactor xds policy to use XdsClient
This is a refactor of the existing xds policy to use XdsClient. It does neither create a copy of EDS policy as in #6371 nor re-implement an EDS policy. This should be similar to the idea of https://github.com/grpc/grpc/pull/20368 in C-core. 

Here it refactors `XdsComms2` to an implementation of `XdsClient`, which can be drop-in replaced by `XdsClientImp` when it's available.
2019-11-14 15:10:44 -08:00
sanjaypujare 80c78ddede
xds: add inline bytes support to CertificationValidationContext we use in SdsTrustManagerFactory (#6429) 2019-11-14 10:51:42 -08:00
Chengyuan Zhang b38134eebd
xds: add APIs for initiating LRS in XdsClient (#6419) 2019-11-13 16:05:36 -08:00
ZHANG Dapeng ce2b0174b2
xds: ignore endpoints with health_status != HEALTHY or UNKNOWN
Let child balancer (currently is Round Robin) handle the address list with only healthy addresses for its locality. If no healthy address available, let the child balancer handleNameResolutionError.
2019-11-12 13:40:25 -08:00
ZHANG Dapeng 6d3fb53128
xds: not use Immutable collections in method signature 2019-11-07 15:18:59 -08:00
ZHANG Dapeng b38d3ee571
all: remove unnecessary SuppressWarnings 2019-11-06 15:20:04 -08:00
Chengyuan Zhang 794517a7c3
xds: modify XdsClient interface and define data to be used by gRPC client from xDS responses (#6390)
This change completes the definition of XdsClient interface and fill the content of data types passing from XdsClient to each resource watcher.
2019-11-05 23:59:04 -08:00
sanjaypujare 6d51163933
xds: use ReferenceCountingSslContextProviderMap in TlsContextManager for clients and servers (#6385) 2019-11-04 17:32:48 -08:00
Chengyuan Zhang 44c4fee95b
xds: build channel to xDS server with GoogleDefaultChannelBuilder if bootstrap file specifies so (#6362)
This change adds support to build channel to xDS server with Google Default Credentials based on bootstrap file's "channel_creds" field.
2019-11-03 16:12:20 -08:00
ZHANG Dapeng 97d4fa6614
xds: fix lint warning for throwing RuntimeException 2019-11-01 16:52:24 -07:00
Chengyuan Zhang c931c87430
xds: refactor gRPC's data types for envoy proto messages (#6361)
This change cleans up the definitions of gRPC's data types for envoy's proto messages. These data types carry only information needed for gRPC's logic extracted from envoy's proto messages. Each data type has a static method to convert from its corresponding envoy's proto.
2019-11-01 10:08:20 -07:00
sanjaypujare b1eb48a910
xds: reference counting map for SslContextProvider needed for TlsContextManager (#6350) 2019-10-31 10:40:19 -07:00
Chengyuan Zhang 39af8690a7
xds: refactor Bootstrapper implementation to be more use friendly (#6339)
Existing Bootstrapper is an eagerly loaded singleton and reading bootstrap file is done when first time referencing Boostrapper class. This is not use friendly for error propagation.
This change added an instance method Bootstrapper#readBootstrap() for reading the bootstrap file. Instead of making the Bootstrapper instance a singleton, make the bootstrap data (aka, BootstrapInfo) a singleton. Now reading the bootstrap file happens when the first Bootstrapper instance first time calling Bootstrapper#readBootstrap().
2019-10-30 12:14:00 -07:00
sanjaypujare d04529256a
xds: rename SecretProvider to SslContextProvider and make it non-generic (#6349) 2019-10-29 11:25:10 -07:00
sanjaypujare d6b64bbf80
xds: add sds.proto to imported envoy proto files (#6346) 2019-10-28 15:51:27 -07:00
Chengyuan Zhang c66c26805f
xds: define XdsClient interface (#6303)
Defines an XdsClient interface, which is the blueprint for the class that encapsulates all of the logic for communicating with the xDS server. Also defines watcher interfaces for watching CDS/EDS updates.
2019-10-24 16:46:20 -07:00
sanjaypujare 48b41dce9e
xds: Client and server proto negotiators and handlers added to SdsProtocolNegotiators (#6319) 2019-10-24 15:27:53 -07:00
ZHANG Dapeng b009e92156
xds: Bump perfmark to 0.19.0
Resolves #6217
2019-10-22 16:55:39 -07:00
Jihun Cho 2eb3f8c34e
stub,compiler: Rollback Abstract{Future,Blocking,Async}Stub (#6317)
rollback of #6304 & #6196
2019-10-22 13:27:30 -07:00
sanjaypujare ed845991db
xds: remove unused SecretManager code based on separate TlsCertificate and CertificateValidationContext secrets (#6310) 2019-10-21 16:45:45 -07:00
ZHANG Dapeng 13fad99549
xds: remove gogoproto dependency
Since e7f0b7176e and 1dd72ab043 , gogoproto is not a dependency anymore.
2019-10-21 15:42:27 -07:00
sanjaypujare f07fcd7d7b
xds: TlsContextManager refactoring to match its usage; add tests for TlsContextManager (#6297) 2019-10-21 15:07:35 -07:00
ZHANG Dapeng 5cb67d6399
xds: remove invalid srcDir third_party/protoc-gen-validate/src/main/proto
The directory third_party/protoc-gen-validate/src/main/proto was removed in #6177.
2019-10-21 14:24:17 -07:00
Chengyuan Zhang 9dce879742
xds: add fields for EDS server and LRS server in XdsConfig (#6287) 2019-10-18 13:33:56 -07:00
Chengyuan Zhang c0f91efffb
xds: import http_connection_manager proto from envoy repo (#6301) 2019-10-18 11:00:11 -07:00
Chengyuan Zhang b5ddf3ef08
xds: import proto files for CDS, LDS, RDS from envoy repo (#6292) 2019-10-17 18:29:07 -07:00
Chengyuan Zhang 1dd72ab043
xds: update envoy proto version to f709434b37e9ff74666d5b854aa11fb2f1ec37f3 (#6291) 2019-10-17 17:23:40 -07:00
Jihun Cho 45d49a56cc
stub,compiler: generated stub extends Abstract{Async,Future,Blocking}Stub (#6196) 2019-10-17 14:49:24 -07:00
Jihun Cho 9a34ceece6
xds: fix lint warnings (#6289) 2019-10-16 16:50:03 -07:00
sanjaypujare 8d1ee9cfc7
xds: implementation of SslContextSecretVolumeSecretProvider (#6251) 2019-10-16 15:15:28 -07:00
sanjaypujare 4fc41bd0e1
xds: SdsTrustManagerFactory implementation - uses SdsX509TrustManager (#6267) 2019-10-16 14:35:49 -07:00
sanjaypujare ddaf1c8ce9
xds: fix to use the resource based TestUtils.loadCert (#6281) 2019-10-15 17:32:45 -04:00
Ran 58886310e4
xds: disable test that break on blaze. (#6275) 2019-10-11 14:16:47 -07:00
sanjaypujare ab092ec43c
xds: disables some tests that break with blaze (#6273) 2019-10-11 11:40:11 -07:00
sanjaypujare 0c4fc64bf2
xds: first installment of SdsProtocolNegotiators with Client and Server builders (#6261)
* xds: SdsProtocolNegotiators with Client and Server builders
2019-10-10 16:38:27 -07:00
Ran a94a63c7ae
xds: clean up. (#6271) 2019-10-10 16:18:09 -07:00
Ran 0e25cd8e7c
xds: add private constructor for utility class. (#6270) 2019-10-10 16:06:17 -07:00
sanjaypujare a633b53f95
xds: SdsX509TrustManager implementation for XDS and SDS (#6254) 2019-10-09 14:52:09 -07:00
dapengzhang0 5fce838b4e xds: fix wrong class name of XdsNameResolverTest 2019-10-05 10:53:48 -07:00
dapengzhang0 ed220c14b8 xds: fix wrong json key balancerName 2019-10-05 10:53:48 -07:00
Sanjay Pujare be83a3ddc5 xds: fix Javadoc comments and add final qualifier also fix typo 2019-10-04 18:16:02 -07:00
Sanjay Pujare edd9e5a257 define interface for the new TlsContextManager that will replace the SecretManager 2019-10-04 18:16:02 -07:00
ZHANG Dapeng 31b1da5a8d
xds: bootstrap xDS load balancer with xDS name resolver
`XdsNameResolver` will load bootstrap file and populate `Node` reference to the `XdsLoadBalancer` through attributes of `ResolvedAddresses`. This is only for demo purpose until `XdsClient` is available, whence `XdsNameResolver` will populate `XdsClient` reference to `XdsLoadBalancer` through attributes instead.
2019-10-04 12:13:48 -07:00
Sanjay Pujare ed4f1fbdae Mark XdsAttributes internal 2019-10-04 10:37:34 -07:00
Sanjay Pujare c16b104e61 Adding more attributes to XdsAttributes and making XdsAttributes public to prepare for using *TlsContext in the new SecretManager 2019-10-04 10:37:34 -07:00
Sanjay Pujare 103c2f9858 re-add the grpc-netty dependency 2019-10-03 16:02:22 -07:00
ZHANG Dapeng dba7e9c36f
xds: migrate to restructured xds loadbalancer
* Deleted:
  + XdsLoadBalancer
  + XdsLbState
  + XdsComms
  + Their test classes (except XdsCommsTest)
* Moved/Renamed:
  + AdsStreamCallback -> LookasideChannelCallback
  + AdsStreamCallback2 -> AdsStreamCallback
  + XdsComms.LocalityInfo -> ClusterLoadAssignmentData.LocalityInfo
  + XdsComms.LbEndpoint -> ClusterLoadAssignmentData.LbEndpoint
  + XdsComms.DropOverload -> ClusterLoadAssignmentData.DropOverload
  + XdsLocality -> ClusterLoadAssignmentData.XdsLocality
* XdsComms2 is not renamed because it's temporary.
* XdsLoadBalancer2 is not renamed because otherwise the diff is hard to read.
2019-10-03 15:58:53 -07:00
ZHANG Dapeng 28323e2fb6
xds: plumbing restructured xds loadbalancer
Moved `ManagedChannel initLbChannel(Helper helper, String balancerName)` out of `LookasideChannelLb` because `LoadReportClientImpl` need channel be initialized already. 

Migration will be in an upcoming PR.
2019-10-02 15:13:39 -07:00
Jihun Cho e9ac1b4a76
all: update modules to wait until other module's sourceSet is available (#6232) 2019-10-02 15:05:44 -07:00
Sanjay Pujare 5e814d49d1 xds: remove the inapplicable text from a comment - as pointed out in a previous PR 2019-10-02 14:15:24 -07:00
Sanjay Pujare e1323e46d1 xds: Add tlsCertificate and certificateValidationContext attributes to XdsAttributes: needed for passing those values to the SDS component 2019-10-02 14:15:24 -07:00
sanjaypujare 468d540bc9
SecretManager implementation for file secrets (#6173)
* SecretManager implementation for file secrets (only TlsCertificate in this PR)
2019-10-02 09:36:42 -07:00
ZHANG Dapeng 2bc8c452f3
xds: restructure XdsLoadBalancer Part 4: LookasideChannelLb
Note: XdsComms2 is a temporary refactor of XdsComms, and will be re-implemented with the new XdsClient design.
2019-10-01 16:33:26 -07:00
Chengyuan Zhang e448f9c7d3
xds: reimplement bootstrapping with new bootstrap file format design (#6201)
This change reimplements Bootstrapper with new design of bootstrap file format, with no longer using ApiConfigSource proto. The new JSON format of the bootstrap file contains a top level "node" and a "xds_server" object, which contains a "server_uri" string and a `channel_creds` list for channel credentials.

Unknown fields in the bootstrap file are allowed by ignored so that the implementation does not break when new fields are added in the future. Therefore, we cannot simply create a custom proto file and use proto util to parse it.
2019-10-01 14:48:28 -07:00
sanjaypujare 7435221629
Make grpc-xds dependent on grpc-netty - needed for TLS related protocolNegotiator implementations in grpc-xds (#6206) 2019-09-27 11:21:58 -07:00
ZHANG Dapeng 694de41107
xds: add server name in EDS request resource_names field 2019-09-25 12:48:03 -07:00
ZHANG Dapeng f9ba620309
xds: shade gogoproto 2019-09-24 09:52:03 -07:00
ZHANG Dapeng 5bc1309c87
xds: Priority failover
- Implementing priority failover
- Removed `localityWeight` field from `LocalityLbInfo` because this is always available and up to date in `edsResponsLocalityInfo`, otherwise need to create a new instance of `LocalityLbInfo` each time weight is updated.
- Introduced `PriorityManager` that manages all the priority failover logic.
2019-09-23 18:32:43 -07:00
ZHANG Dapeng cd8dbd306b
xds: use PGV dependency from maven artifact
Resolves #6016
2019-09-23 18:09:38 -07:00
Eric Anderson 2902a9373c gradle: Use absolute path with checkstyle fileTree
The fileTree is supposed to be relative to the current project, which in
this case would be the child project, but apparently it isn't. Poked
around but couldn't find out why. In any case this fixes a regression
introduced in 4215b80b where checkstyle would no longer file any Java
files and thus it would not notice any failures.
2019-09-23 13:06:01 -07:00
ZHANG Dapeng 1f3931b3c8
xds: restructure XdsLoadBalancer Part 3: LookasideLb 2019-09-23 11:07:50 -07:00
ZHANG Dapeng 4db1c893f8
xds: restructure XdsLoadBalancer Part 2: FallbackLb 2019-09-23 11:07:24 -07:00
Chengyuan Zhang 65321b5a67
xds: implement bootstrapping for xDS load balancer for alpha release (#6145)
* Defined a proto message that maps the bootstrap JSON file for convenient parsing purpose.

* Implemented a Bootstrapper class which reads a local bootstrap file.

* Added unit test for Bootstrapper.

* Let xDS load balancer bootstrap from a bootstrap file. Currently not use configurations from bootstrap in xDS communication as the xDS load balancer implementation is undergoing changes. We will integrate it later.

* Added newline at the end of files.

* Added json_name proto field option.

* Replaced all RuntimeException with IOException for bootstrap data errors.

* Changed to use JUnit exception rules in test.

* Use StandardCharSets.UTF_8

* Revert "Let xDS load balancer bootstrap from a bootstrap file. Currently not use configurations from bootstrap in xDS communication as the xDS load balancer implementation is undergoing changes. We will integrate it later."

This reverts commit 37200cdd3c.

* Use initialization-on-demand holder idiom for instantiating Bootstrapper instance.

* Fixed usage of JUnit exception rules.

* Changed lazily instantiated variable to camel case

* Removed unnecessary constructor.
2019-09-22 16:49:09 -07:00
sanjaypujare fd4f189d2b
Create a new class XdsAttributes in xds to house XDS related attributes and define ATTR_SDS_CONFIG there (#6154)
Need to define a new attribute so we can plumb SdsSecretConfig from the xDS LB to SSL code so the value can be passed on to the SDS module.
2019-09-17 11:01:45 -07:00
ZHANG Dapeng 4334583681
xds: restructure XdsLoadBalancer part 1
- Get rid of `XdsLbState` and make config change handling into two layers: `LookasideLb` (handles balancer name) and `LookasideChannelLb` (handles child policy), under `XdsLoadBalanecer` (fallback manager layer)
- Move `XdsComms`/`AdsStream` to a layer under `LookasideChannelLb`. They don't keep the helper, but only `SyncCtx` and `ChannelLogger`
- For each layer, we pass in a `LoadBalancer.Factory` for the next/child layer. In test, 
  + we mock/fake the factory, so we don't care about the implementation details of the child layer.
  + we capture the helper of `factory.newBalancer(factory)`, so we can mimic `updateBalancingState() `from the child layer.

Part 1 contains fallback management logic. There is no change in fallback management logic.
2019-09-13 12:11:27 -07:00
Eric Anderson 2b945774b6 Apply animalsniffer plugin explicitly when needed 2019-09-13 09:42:17 -07:00
Eric Anderson 4215b80b81 Apply java plugin explicitly when needed 2019-09-13 09:42:17 -07:00
Eric Anderson 5b838e5284 Apply maven-publish plugin explicitly when needed 2019-09-13 09:42:17 -07:00
Eric Anderson 3c3a823a81 Swap to Gradle's Plugin DSL for much of build
Examples and android projects were left unchanged. They can be changed
later.

No plugin versions were changed, to make this as non-functional of a
change as possible. Upgrading Gradle to 5.6 was necessary for
pluginManagement in settings.gradle.
2019-09-13 09:42:17 -07:00
Chengyuan Zhang 7f693941f8
xds: add test for LRS retry and re-send load reports after stream closed (#6140)
* xds: add test for LRS retry and re-send load reports

* Removed log verifications.
2019-09-11 14:12:58 -07:00
ZHANG Dapeng 842dfa49b1
xds: Fix a bug locality reset not fully clean up
There is a bug in LocalityStore.reset() found during import.
2019-09-11 14:00:18 -07:00
ZHANG Dapeng fbba47e6bd
xds: Clean up some ImmutableMaps 2019-09-06 14:41:10 -07:00
ZHANG Dapeng d86eb711c4
xds: Clean up updateChildState() (#6127) 2019-09-06 14:40:46 -07:00
ZHANG Dapeng 62e37a6e6b
xds: Cache locality for 15 minutes 2019-09-05 18:28:30 -07:00
Chengyuan Zhang d771f254aa
xds: import proto files for xDS LB bootstrap from upstream envoy repository (#6125)
* xds: import proto files for xDS LB bootstrap from upstream envoy repository.

* reorder import filenames
2019-09-04 16:33:11 -07:00
ZHANG Dapeng 0bc659cfdd
xds: bump envoy to 6ff0bce8ff417a252cde4d04dfb9cba2bab463d8
Also add import script for upda protos from https://github.com/cncf/udpa

This PR is for the purpose to sync up with internal cl/265717410
2019-08-28 12:58:09 -07:00
Chengyuan Zhang 1d04601313
xds: Implement an xDS NameResolver/Provider for xDS load balancing alpha release (#6052)
* Implemented an XdsNameResolver that always returns a hard-coded service config

* Implemented XdsNameResolverProvider

* Added unit tests for XdsNameResolver and XdsNameResolverProvider

* Added META-INF file for XdsNameReresolverProvider

* Removed balancer name field in hard-coded service config

* Changed URI scheme to xds-experimental.

* Deleted unnecessary executors for running name resolution in a separate thread.

* Fixed nits.

* Fixed usage of GrpcUtil.getDefaultProxyDetector() as it was deleted.

* Removed unnecessary shutdown implementation.

* Replaced return with AssertionError as it hard-coded service config should never have error.

* Removed unused name resolver args.

* Added tail blank line.
2019-08-19 16:39:36 -07:00
ZHANG Dapeng 9dbbcf5a42
xds: move XdsLoadBalancer.XdsConfig to XdsLoadBalancerProvider
`XdsLoadBalancer` will be replaced by `XdsLoadBalancer2`, and `XdsConfig` is better fit in `XdsLoadBalancerProvider`.
2019-08-16 15:08:10 -07:00
Chengyuan Zhang c5317e4935
xds: do not add a new CallMetricRecorder instance to context if there is already one (#6042)
* xds: do not add a new CallMetricRecorder instance to context if there is already one

* save a local reference to CallMetricRecorder instance to allow ServerCall#close() being called in a different context

* added test coverage for having ServerInterceptor/ServerStreamTracerFactory both install CallMetricRecorder
2019-08-08 13:00:46 -07:00
Chengyuan Zhang 99993bee13
xds: implement a server interceptor for taking server application metrics and sending to client side in ORCA format (#6018)
* Added methods in CallMetricRecorder accessor for accessing context key and creating new CallMetricRecorder instance.

* Added impl for a server interceptor that records and sends custom metric values to client side.

* Added unit test for the server interceptor.

* Modified dependencies to have xds package depends on grpc-services (for CallMetricRecorder) and grpc-testing-proto (for testing proto).

* Changed usage of GrpcServerRule to GrpcCleanupRule.

* make constant fields static

* use GrpcCleanupRule to register InProcessChannel to avoid manual shutdown.

* Make class public and match the usage of grpclb's load reporting server tracer.

* added ExperimentalApi annotation
2019-07-29 14:46:24 -07:00
liym 47b11ab7a1 compiler: Use 'SERVICE_NAME' instead of duplicated '$Package$$service… (#5943)
* compiler: Use 'SERVICE_NAME' instead of duplicated '$Package$$service_name$'

* compiler: Align indentation

* Fix typo

* Add modified golden files and all re-generated code to meet Travis CI and Windows build requirements

See PR #5943

* Polishing
2019-07-24 10:37:13 -07:00
Chengyuan Zhang d30c304d8f
xds: Fix bug of locality store not update weights for existing localities (#5976)
* Fixed LocalityStore test relying on WeightChildPicker list order for mapping to its corresponding locality.

* Fixed bug for not updating new weights for existing localities.
2019-07-11 09:44:40 -07:00
Chengyuan Zhang ce830bc3bf
xds: Remove unnecessary subchannel creation by helper, use mocked subchannels directly. (#5977) 2019-07-10 16:57:02 -07:00
ZHANG Dapeng d648e8f2df xds: update envoy to 89eb31bcbe2308bf1e9073620e843bf472363495 (#5972)
* xds: update envoy to 89eb31bcbe2308bf1e9073620e843bf472363495

* run import.sh
2019-07-09 21:19:53 -07:00
Chengyuan Zhang 4d30f313e1
xds: import third party envoy proto (#5929)
* xds/third_party: import envoy proto based on envoy's commit eefcd0e6fcbeba446454bd5396a34c69348338eb

* xds: fixed breaking changes introduced by changes of fields in ORCA proto message.
2019-07-09 14:20:25 -07:00
ZHANG Dapeng eecd5a72bd
xds: ignore zero-weighted locality 2019-07-08 15:21:52 -07:00
Chengyuan Zhang 36476cb1f8
xds: clean up client load reporting code (#5928)
* Cleaned up XdsLoadStatsStore.
- Renamed the StatsStore interface to XdsLoadStatsStore and its corresponding implementation is XdsLoadStatsStoreImpl.
- Revised/reworded specification for XdsLoadStatsStore.

* Cleaned up ClientLoadCounter specification.

Reworded specification for ClientLoadCounter

* Cleaned up XdsLoadReportClient, reworded specifications, formatted tests.

* Removed Xds prefix from LoadStatsStore.

* Removed Xds prefix from XdsLoadReportClient.
2019-06-26 16:27:01 -07:00
ZHANG Dapeng f0a824bb53
all: fix lint 2019-06-26 15:25:18 -07:00
ZHANG Dapeng 84f8bac8d4
xds: ADS RPC retry
Resolves #5812
2019-06-25 13:13:18 -07:00
Chengyuan Zhang e36ad47695
xds: integrate receiving and reporting OOB backend metrics in xDS load balancer (#5924)
* augmented xds child balancer helper with orcaOobReportingHelperWrapper and added an interface method in LocalityStore for updating out-of-band backend metrics reporting interval

* added an callback for passing load reporting interval received from lrs response to xDS load balancer, thus, LocalityStore for configuring OOB backend metrics reporting

* moved XdsLoadReportCallback interface into XdsLoadReportClient
2019-06-24 16:05:32 -07:00
Chengyuan Zhang 44bbccff79
xds: use order-deterministic locality map for preserving most recent locality update to eliminate test flakiness (#5921)
* xds: use order-deterministic locality map for preserving most recent locality update to eliminate test flakiness

* make localityMap immutable
2019-06-21 15:56:37 -07:00
Jihun Cho 5edd726551
all: fix lint errors (#5919) 2019-06-21 15:16:31 -07:00
Chengyuan Zhang 95d02410a2
xds: redesign client load recording and backend metrics receiving interface (#5903)
* Redefined StatsStore interface.
- Removed interface method StatsStore#interceptPickResult and implementation do not take the resposibility intercepting PickResult with locality-level load recording.
- Introduce a wrapper class for SubchannelPicker to let users wrap SubchannelPicker by themselves, with client side load recording logic.
- Associate the corresponding locality counter with child helper when it is created, child helper will intercept the SubchannelPicker it creates.

* Renamed backend metrics listener class to be more abstract, hides the implementation detail of doing locality-level aggregation.

* Integrate client load recording and backend metrics recording with xDS load balancer.

- Created LoadRecordingSubchannelPicker class for applying XdsClientLoadRecorder that records client load to PickResult.
- Created MetricsObservingSubchannel class for applying OrcaReportingTracerFactory that takes listener to receive ORCA reports to PickResult.
- In xDS load balancer LocalityStore, the original picker is wrapped two layers inside the above wrappers.

* Renamed XdsClientLoadRecorder to ClientLoadRecorder. It should only be used for testing, xDS load balancer should use SubchannelPicker wrappers instead of this load recorder directly.

* Removed redudent layer of wrapping for SubchannelPicker in LocalityStore

* Added toString for SubchannelPicker wrapper classes.

* Rename ClientLoadRecorder to LoadRecordingStreamTracerFactory.

* Renamed StreamInstrumentedSubchannelPicker to TracerWrappingSubchannelPicker.

* Eliminate duplicated code in LocalityStoreTest, put them into a loop.
2019-06-20 10:42:28 -07:00
Chengyuan Zhang 3829574c1c
removed abstract class StatsStore, make ClientLoadCounter not mockable (#5890) 2019-06-17 14:08:08 -07:00
Chengyuan Zhang fda406b0ff added missing RunWith annotations 2019-06-14 15:26:55 -07:00
Chengyuan Zhang 5f4bc15f83
xds: StatsStore#interceptPickResult should not intercept NO_RESULT (#5876)
* fixed bug of intercepting a PickResult with no Subchannel, it should just return the original PickResult. Also, the test was not correct, fixed it.

* changed ClientLoadCounter to a mock in XdsLoadStatsStoreTest, it's not necessary to instantiate a real instance.

* added a TODO comment for suggesting a warning for desired locality counter missing when intercepting a PickResult

* use isSameInstanceAs for verifying intercepting invalid PickResult instead of isEqualTo.
2019-06-14 10:50:36 -07:00
ZHANG Dapeng 0b27e2862d
xds: let ChannelLogger log more useful information 2019-06-13 15:43:53 -07:00
Chengyuan Zhang 77544786b6
xds: integrate client load reporting with xds load balancer (part 2) (#5867)
* integrate recordDropRequest in LocalityStore

* integrated StatsStore#addLocality and StatsStore#removeLocality in LocalityStore in handling EDS response.

* integrated picker interception in LocalityStore

* integrate XdsLoadReportClient in XdsLoadBalancer

* put removing locality counters after updating subchannl pickers to narrow down race window

* fixed modifier for XdsLoadReportClientFactory

* refactor handleNewConfig method in XdsLoadBalancer for better readability

* edited message for closing lb rpc when balancer name changes

* weaker the specification of XdsLoadReportClient to allow start/stop be called multiple times.

* removed lrsWorking flag as we relaxed precondition of calling start/stop on XdsLoadReportClient

* refactor initLbChannel to be a factory method for better readability

* added comment for the case when child policy changes, lrs should not be affected

* changed comments for eliminating potential load lose upon locality update.

* make lb RPC cancellation message more informative
2019-06-13 13:43:45 -07:00
Chengyuan Zhang ef5a992e77
xds: fix bug of using the wrong cluster name for client load reporting (#5865)
* fixed bug of using the wrong cluster name for client load reporting

* moved clusterName into LrsStream
2019-06-11 15:54:05 -07:00
Chengyuan Zhang 213b91b165
xds: refactor XdsLoadReportClient and XdsLoadStatsStore in order to integrate with XdsLoadBalancer (part 1) (#5863)
* extract self-defined Locality into XdsLocality class

* separate out functionalities for recording client load from lrsClient, xds load balancer will directly interact with XdsLoadStatsStore to set up locality counters

* added GRPC to constant TRAFFICDIRECTOR_HOSTNAME_FIELD name to better match that in XdsComms

* fixed bug of using the wrong cluster name in load report's ClusterStats, it should be GSLB service name, which is responsed by load report response (same as that in EDS response).

* added a new line to the end of files.

* Revert "fixed bug of using the wrong cluster name in load report's ClusterStats, it should be GSLB service name, which is responsed by load report response (same as that in EDS response)."

This reverts commit 6097dd4066.

* rephrase interface comment for StatsStore

* added equality and hashCode test for XdsLocality
2019-06-11 09:43:15 -07:00
Chengyuan Zhang c98fb2d03e
xds: fix bug of missing total_dropped_requests field in ClusterStats proto (#5862) 2019-06-10 14:22:16 -07:00
ZHANG Dapeng f7077a565a
xds: cleanup XdsLbStateTest
The test case `XdsLbStateTest.handleSubchannelState()` was introduced before `LocalityStore` refactored out of `XdsLbState`. After `LocalityStore` refactored out, the test case should not be in `XdsLbStateTest` anymore. The test case is already covered in `LocalityStoreTest`.
2019-06-10 14:19:27 -07:00
ZHANG Dapeng 33c30db42c
xds: allow grpclb balancer addresses for backward compatibility
During migration, the name resolver may not know when the client has been upgraded to xds, so it may still send grpclb v1 addresses with a list of policies including both grpclb v1 and xds.
2019-06-10 11:27:42 -07:00
ZHANG Dapeng 16de96befe
xds: Add gogoproto dependency to xds
The generated grpc services are not changed.
2019-06-05 10:13:19 -07:00
Chengyuan Zhang 93551719b9
xds: integrate backend metric API to client load reporting (#5797)
* augmented ClientLoadCounter with backend metrics

* added a listener implementation for receiving backend metrics and aggregate in ClientLoadCounter
2019-05-31 14:28:23 -07:00
ZHANG Dapeng d8aa42723d
xds: fix bug in XdsLoadBalancerProvider.parseLoadBalancingConfigPolicy
Resolves #5804
2019-05-30 16:37:08 -07:00
ZHANG Dapeng f9decbf69d
xds: remove unused variables 2019-05-30 14:38:43 -07:00
ZHANG Dapeng 77a512551f
xds: handle 100% drop for fallback mode
- Cancel fallback timer and/or exit fallback mode once receiving an EDS response indicating 100% drop.
- Also update balancing state once receiving the first EDS response with drop information when the channel is at the initial IDLE state.
2019-05-24 20:54:37 -07:00
Chengyuan Zhang 7fd5f261b4
xds: implement lb policy backend metric api (#5639)
* implemented utility methods to create ClientStreamTracer.Factory with OrcaReportListener installed for retrieving per-request ORCA data

* added unit tests

* use delegatesTo instead of spy

* implemented OrcaReportingHelper delegating to some original Helper for load balancing policies accessing OOB metric reports

* added unit tests for out-of-band ORCA metric accessing API in a separate test class

* rebase to master, resolve the breaking change of StreamInfo class being final with builder

* trashed hashCode/equal for OrcaReportingConfig

* changed log level and channel trace event level to ERROR as required by design doc

* added OrcaReportingHelperWrapper layer to allow updating report interval at any time

* reverse the naming of parent/child helper, child helper is the outer-most helper in the wrapping structure

* changed orca listener interface to use separate listener interfaces for per-request and out-of-band cases

* added more comprehensive unit tests

* added test case for per-request reporting that parent creates its own stream tracer

* fixed bug of directly assign reporting config, which would cause it be mutated later

* separate test cases for updating reporting config at different time

* fixed lint style error

* polish comments

* minor polish in unit tests

* refactor OrcaUtil class into OrcaOobUtil and OrcaPerRequestUtil and get rid of static methods for easier user testing

* hide BackoffPolicyProvider and Stopwatch supplier in OrcaOobUtil's public API

* add javadoc for getInstance() methods

* ensure the same Subchannel instance created by the helper that has corresponding OrcaOobReportListener registered are passed to the listener callback

* removed costNames foe OrcaReportingConfig

* removed redundant checks

* reformated the OrcaOobUtilTest class to put helper methods in the bottom

* fixed impl with changes made on Subchannel (SubchannelStateListener now ties with Subchannel)

* fixed comments

* added usage examples in javadoc for OrcaUtils

* add method comments for OrcaUtil's listener API threading

* make fields in OrcaReportingConfig final

* fixed OrcaOobUtilTest for calling setOrcaReportingConfig inside syncContext

* added ExperimentalApi annotation for Orca utils
2019-05-24 15:12:22 -07:00
Chengyuan Zhang d86d3dd363
all: fix lint and revert redundant lint fixes in #5570 (#5787)
* Revert "all: fix lint (#5770)"

This reverts commit 00d4cc29ad.

* all: fix lint and revert redundant lint fix in #5570
2019-05-24 01:02:12 -07:00
ZHANG Dapeng 2180fcd113
xds: fix protobuf fields can not be null 2019-05-23 18:27:09 -07:00
ZHANG Dapeng 08843f8d59
xds: handle drop percentage for SubchannelPicker (#5765)
* xds: handle drop percentage for SubchannelPicker

* XdsCommsTest

* refactor ThreadSafeRandom

* remove hasNonDropBackends

* fix comments
2019-05-23 10:36:59 -07:00
ZHANG Dapeng 54bbd372ef
xds: implement Fallback-at-Startup mode
This is the implementation of the Fallback-at-Startup mode in the design doc.

- The Fallback-After-Startup mode is not implemented.
- Drop related behavior is not implemented.
2019-05-22 17:44:39 -07:00
ZHANG Dapeng 36ae0ed165
xds: temporarily use ManagedChannelBuilder.forTarget for creating resolving oob channel 2019-05-22 13:38:00 -07:00
ZHANG Dapeng b3bac95f90
xds: not sending resource_name in EDS request 2019-05-22 09:36:51 -07:00
ZHANG Dapeng 994fd7429a
xds: populate XdsLoadBalancerProvider to ServiceLoader
Also changed `XdsLoadBalancerProvider` to avoid initialization error when using `ServiceLoader`.
2019-05-22 09:35:38 -07:00
ZHANG Dapeng c242fc8245
xds: fix XdsLoadStatsStoreTest.recordingDroppedRequests flaky NPE 2019-05-20 16:00:18 -07:00
Kun Zhang 7934594dfe
api: pass Subchannel state updates to SubchannelStateListener rather than LoadBalancer (take 2) (#5722)
This is a revised version of #5503 (62b03fd), which was rolled back in f8d0868. The newer version passes SubchannelStateListener to Subchannel.start() instead of SubchannelCreationArgs, which allows us to remove the Subchannel argument from the listener, which works as a solution for #5676.

LoadBalancers that call the old createSubchannel() will get start() implicitly called with a listener that passes updates to the deprecated LoadBalancer.handleSubchannelState(). Those who call the new createSubchannel() will have to call start() explicitly.

GRPCLB code is still using the old API, because it's a pain to migrate the SubchannelPool to the new API.  Since CachedSubchannelHelper is on the way, it's easier to switch to it when it's ready. Keeping
GRPCLB with the old API would also confirm the backward compatibility.
2019-05-17 16:37:41 -07:00
ZHANG Dapeng 53f74c62ba
all: fix lint 2019-05-16 15:00:20 -07:00
Chengyuan Zhang b7fb3c2e93
xds: add counts for recently issued calls in client side load reporting (#5735)
* added counts for recently issued calls in client side load reporting

* use recordCallStarted/Finished to manipulate counter instead of explicitly incr/decr methods
2019-05-15 15:52:20 -07:00
Chengyuan Zhang e483478913
xds/third_party: update xds load report proto by importing latest files from envoy repo (#5727) 2019-05-14 13:29:37 -07:00
ZHANG Dapeng 9dacc45447
xds: implement ADS request and response handling in standard mode (#5532)
Summary of PR: 
- XdsLbState now assumes standard mode only.
- Will not send CDS request. A EDS request will be sent at the constructor of `AdsStream`.
- Added a method to `LocalityStore`
  - `void updateLocalityStore(Map<Locality, LocalityInfo> localityInfoMap);`
- When a EDS response is received. `LocalityStore.updateLocalityStore()` will be called.
- `LocalityStoreImpl` maintains a map `Map<Locality, LocalityLbInfo> localityMap`.
- `LocalityStoreImpl.updateLocalityStore()` will create a child balancer for each locality, with a `ChildHelper`. Then each child balancer will call `handleResolvedAddresses()`.
- `LocalityStoreImpl.updateLocalityStore()` will update `childPickers`.
- `ChildHelper.updateBalancingState()` will update `childPickers` and then delegate to parent `helper.updateBalancingState()`.
- `XdsLbState.handleSubchannelState()` will delegate to `childBalancer.handleSubchannelState()` where the subchannel belongs to the childBalancer's locality.
2019-05-13 17:31:24 -07:00
Chengyuan Zhang 690b655f24
xds: refactor XdsLrsClient and XdsLoadReportStore for integrating backend metric data in load report (#5728)
* make ClientLoadCounter as a separate class, added unit tests for it as it now counts quite many stats

* add MetricListener class that takes in a ClientLoadCounter and updates metric counts from received OrcaLoadReport

* refactor XdsClientLoadRecorder into XdsLoadReportStore for better integrity

* move interceptPickResult implementation to XdsLrsClient, no delegated call

* added unit test annotation

* created a StatsStore interface for better modularize LrsClient and LoadReportStore

* add more tests to ClientLoadCounter to increase coverage

* added tests for add/get/remove locality counter

* refactored tests for XdsLoadReportStore, with newly added abstract base class for ClientLoadCounter, real counter data is not involved, only stubbed snapshot is needed

* comparing doubles doing arithmetic is not recommended, but we are fine here as we are manually repeating the computation exactly

* added test case for two metric listeners with the same counter, metric values should be aggregated to the same counter

* fixed exception message and comment to only refer to interface

* removed unused variables

* cleaned up unused mock init

* removed unnecessary ClusterStats comparison helper method, as we are really comparing with the object manually created, order is deterministic

* trashed stuff for backend metrics, it should be in a separate PR

* added toString test

* remove Duration dependency in LoadReportStore

* use ThreadLocalRandom to generate positive double randoms directly

* rename XdsLoadReportStore to XdsLoadStatsStore

* rename XdsLrsClient to XdsLoadReportClient

* refactor ClientLoadSnapshot to be an exact snapshoht of ClientLoadCounter, use getters for ClientLoadSnapshot and avoid touching fields directly

* renamed XdsLoadStatsManager to XdsLoadReportClient and XdsLoadReportClient to XdsLoadReportClientImpl

* make fields final in ClientLoadSnapshot

* use a constant noop client stream tracer instead of creating new one for each noop client stream tracer factory

* rename loadReportStore for abstraction
2019-05-13 15:38:26 -07:00
Chengyuan Zhang 7712ef596c
xds/third_part: revert change of envoy import script (#5667)
* Revert "xds/third_party: fixed compatibility issue of regex in BSD for import.sh sed command (#5613)"

This reverts commit affce636dd.

* added comment to avoid manual change as the script is synced with internal upstream
2019-05-04 12:23:54 -07:00
Eric Anderson ab2e048f13 Lint fixes for unused and Truth and Queue 2019-04-30 22:44:00 -07:00
Kun Zhang 973885457f
core: change ClientStreamTracer.StreamInfo to a final class with a builder (#5648)
As we are now endorsing the wrapping of ClientStreamTracers by
providing ForwardingClientStreamTracer, there is a need for altering
StreamInfo, especially CallOptions before it's passed onto the
delegate.  A Builder class and a toBuilder() provides a robust way
to copy the rest of the fields.

This is a breaking change for anybody who creates StreamInfo, which is
unlikely in non-test code, because StreamInfo was added as late as
1.20.0.
2019-04-30 09:10:56 -07:00
Chengyuan Zhang ea70de601c
xds: xds LRS client implementation with client load stats (#5588)
* Implement LRS client with backoff. No load data is invovled yet, only for load reporting interval updates. Unit test with load report interval update and streamClosed retry.

* use a separate stopwatch to manage actual load report interval

* refactor XdsLrsClientTest

* LRS response will only receive exactly one cluster name for grpc use case

* add more XdsLrsClientTest

* change class modifier

* fixed class comment

* renamed TRAFFICDIRECTOR_HOSTNAME_FIELD

* removed self-implemented Duration util methods, instead use methods in com.google.protobuf.util.Durations

* starting LrsStream's stopwatch inside LrsStream's start method

* fixed bug of using the wrong stopwatch for XdsLrsClient retrying

* removed try-catch around request StreamObserver

* polished code by eliminating unnecessary operations

* log an error instead of crash the thread when receiving LRS response for different cluster name

* created a XdsLoadStatsManager interface, XdsLrsClient implements it

* added XdsLoadStatsStore component in XdsLrsClient

* specify thread safety in XdsLoadStatsManager

* fixed style and convention issues

* added test case for verifying recorded load data by manually crafting load data

* added thread-safety in interface specification

* minor polish with adding debug logs to LRS client
2019-04-24 13:58:51 -07:00
Eric Anderson 2936242160 xds: Add missing RunWith annotation to test 2019-04-23 17:36:46 -07:00
Carl Mastrangelo 04e07034f3
all: update to truth 0.44 2019-04-23 10:50:49 -07:00
Chengyuan Zhang 43e4bce1c3
xds/third_party: import proto from envoy repo, added udpa orca protos (#5614) 2019-04-19 17:31:29 -07:00
Chengyuan Zhang 07f9efe95e
xds: xds load report store implementation (#5587)
* Implemented XdsCliendLoadRecorder which is a ClientStreamTracer.Factory that takes a counter and produces ClientStreamTracer aggregating the counter in callback.

* WIP: add tests for XdsLoadReportStore

* fix query count logic, use an atomic in-progress call counter instead of callsStarted with manual computation at snapshot

* make XdsLoadReportStore threadsafe

* fix class and field modifiers

* make iterating concurrentMap threadsafe

* fixed forgetting to call delegated streamClosed

* add a method to discard ClientLoadCounter for a given locality

* add test to guard interceptPickResult does not destroy original ClientStreamTracer

* added cluster wide dropCounters and method to be called to record dropped requests, tests to be added later.

* add methods for add/discard ClientLoadCounters for localities manually instead of implicitly added by interceptPickResult call. Unit tested.

* make a static noop ClientStreamTracer and ClientStreamTracer.Factory instead of creating one each every time need it

* refractor interceptPickResult

* modified ClientLoadCounter to allow continuing recording loads for localities no longer exposed by balancer while having ongoing loads

* refractor tests

* reworded method comment for calling in syncContext

* fixed issue of no setting dropCount to 0 after load reporting

* polish test

* added test coverage for recording dropped requests (not concurrent)

* added class comment for XdsClientLoadRecorder
2019-04-19 12:08:05 -07:00
Chengyuan Zhang affce636dd
xds/third_party: fixed compatibility issue of regex in BSD for import.sh sed command (#5613)
* fixed issue import.sh sed expr with non-extended regex does not support \| in BSD

* fixed sed -i issue for cross platform
2019-04-18 14:20:57 -07:00
Carl Mastrangelo a395eec4a3
core: update LB and NR API names
Updates #1770
2019-04-17 12:45:29 -07:00
Eric Anderson 80c3c992a6 core: Move io.grpc to grpc-api
io.grpc has fewer dependencies than io.grpc.internal. Moving it to a
separate artifact lets users use the API without bringing in the deps.
If the library has an optional dependency on grpc, that can be quite
convenient.

We now version-pin both grpc-api and grpc-core, since both contain
internal APIs.

I had to change a few tests in grpc-api to avoid FakeClock. Moving
FakeClock to grpc-api was difficult because it uses
io.grpc.internal.TimeProvider, which can't be moved since it is a
production class. Having grpc-api's tests depend on grpc-core's test
classes would be weird and cause a circular dependincy. Having
grpc-api's tests depend on grpc-core is likely possible, but weird and
fairly unnecessary at this point. So instead I rewrote the tests to
avoid FakeClock.

Fixes #1447
2019-04-16 21:45:40 -07:00
Kun Zhang 0244418d2d
core: Move ConfigOrError up level up. (#5578)
This class is used in other places than just NameResolver.Helper.  It
should not be an inner class of Helper.

Strictly speaking this is an API-breaking change.  However, this is
part of the service config error handling API that hasn't been done
yet.  Nobody has a legitimate reason to use it.
2019-04-10 16:28:23 -07:00
ZHANG Dapeng c8a0af572c
xds: add InterLocalityPicker 2019-04-05 18:52:25 -07:00
Eric Anderson 52dff83717 Update Protobuf to 3.7.1
This mainly avoids protoc from 3.7.0 which has a dependency on libatomic. Most
of our systems have libatomic, so it mostly works, but the interop docker
container does not, so building fails. Version 3.7.1 was rebuilt to avoid
needing the libatomic shared library.

This has the added benefit that Bazel is now on the same version as Gradle, as
3.7.1 included fixes for Bazel.
2019-04-05 10:55:14 -07:00
ZHANG Dapeng 30038fd0be
xds: remove unused code in test 2019-04-02 13:52:55 -07:00
Carl Mastrangelo 17d67f17fa
all: add LoadBalancer overload for Resolution results 2019-03-29 09:31:24 -07:00
Carl Mastrangelo 5ef8377efa
core: remove Type from ConfigOrError 2019-03-28 09:40:50 -07:00
ZHANG Dapeng a2cda8d15d
all: fix lint 2019-03-20 09:01:25 -07:00
Tim van der Lippe d35fbd7eee all: Update to Mockito 2
This is the public port of cl/238445847

Fixes #5319
2019-03-19 14:17:52 -07:00
Carl Mastrangelo c6b505229c
all: move LB parsing logic into LB.Factory 2019-03-19 13:33:13 -07:00
Eric Anderson d7e53e871b
Merge pull request #5454 from ejona86/protobuf-3.7.0
Upgrade to Protobuf 3.7.0
2019-03-11 15:39:50 -06:00
Carl Mastrangelo e5e01b5169
core,grpclb: use better generics on service config 2019-03-08 14:11:13 -08:00
Eric Anderson b48b0ac1d4 all: Stop committing generated protobuf messages
This commit swaps to using a Sync task to place generated code in the
src/generated folder instead of the gradle-protobuf-plugin's
generatedFilesBaseDir. This provides much nicer results on failed
builds, and you will no longer see all the generated files deleted.

But at the same time the Sync task makes it easy to only copy the
grpc-generated code. This was not previously done because we were lazy
and using generatedFilesBaseDir, which made it difficult to treat the
services differently from the messages.
2019-03-05 16:28:55 -07:00
Kun Zhang 02f55189aa
core: refactor load-balancing config handling (#5397)
The LoadBalancingConfig message, which looks like
```json
{
  "policy_name" : {
    "config_key1" : "config_value1",
    "config_key2" : "config_value2"
   }
}
```
appears multiple times. It gets super tedious and confusing to handle, because both the whole config and the value (in the above example is `{ "config_key1" : "config_value1" }`) are just `Map<String, Object>`, and each user needs to do the following validation:
 1. The whole config must have exactly one key
 2. The value must be a map

Here I define `LbConfig` that holds the policy name and the config value, and a method in `ServiceConfigUtil` that converts the parsed JSON format into `LbConfig`.

There is also multiple cases where you need to handle a list of configs (top-level balancing policy, child and fallback policies in xds, grpclb child policies). I also made another helper method in `ServiceConfigUtil` to convert them into `List<LbConfig>`.

Found and fixed a bug in the xds code, where the top-level balancer should pass the config value (excluding the policy name), not the whole config to the child balancers. Search for "supported_1_option" in the diff to see it in the tests.
2019-03-01 19:05:33 -08:00
ZHANG Dapeng b9fb649ce1
xds: fallback handling
added fallback handling
in addition: 
- made XdsLbState not abstract for now
- did not include graceful swapping balancers when service config change, for now just shutdown the old one and use the new one.
2019-02-26 13:13:42 -08:00
ZHANG Dapeng 5ae9d91039
xds: use shadow plugin for generated code
* Import envoy proto file to the latest internal version, which has correct java proto options. (The PGV proto, `validate.proto`, doesn't have the correct and up-to-date java_package proto option yet, but as long as we don't use those generated classes, it seems fine.)
* Stop modifying java proto options by import.sh.
* Apply shadow plugin when publishing.
2019-02-15 10:19:44 -08:00
Eric Anderson eaca73473c
Upgrade to protobuf 3.6.1
For Bazel, we upgrade to protobuf 3.6.1.2 and javalite HEAD to fix
incompatibilities in newer Bazel releases.

compiler/Dockerfile is unused, so it was removed instead of being updated.

protoc no longer includes codegen for nano, so we remain on the older protoc
any time nano is used.

Protobuf now requires C++11 when compiling, so windows was swapped to
VC 14.
2019-02-07 13:40:53 -08:00
ZHANG Dapeng ea8968beed
xds: implement xds plugin selection
- defined XdsLbState, playing a similar role to GrpclbState
- there are two modes of XdsLbState: STANDARD and CUSTOM
- on `XdsLoadBalancer.handleResolvedAddressGroups()`, the `xdsLoadBalancer` will update the `xdsLbState` based on the lb config in the attributes passed in
2019-02-05 14:07:09 -08:00
ZHANG Dapeng 7a547276da
xds: import from envoy and add ads.proto and lrs.proto 2019-01-11 14:46:04 -08:00
ZHANG Dapeng 94fefdda12
xds: import xds service protos
All files other than the following are generated by `import.sh`.
```
settings.gradle
xds/build.gradle
xds/third_party/envoy/import.sh
xds/third_party/protoc-gen-validate/import.sh
```
2018-12-17 10:50:54 -08:00