grpc 1.34.0 → 1.35.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (458) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +808 -2787
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +14 -0
  6. data/include/grpc/grpc_security.h +61 -3
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +1 -1
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  12. data/include/grpc/slice_buffer.h +3 -3
  13. data/include/grpc/support/sync.h +3 -3
  14. data/include/grpc/support/time.h +7 -7
  15. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  16. data/src/core/ext/filters/client_channel/client_channel.cc +2734 -1498
  17. data/src/core/ext/filters/client_channel/client_channel.h +0 -4
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -0
  20. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  21. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  22. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
  23. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +4 -5
  25. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +32 -30
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +162 -20
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +7 -14
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  42. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -9
  43. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  44. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +18 -31
  45. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -5
  46. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  48. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
  50. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  51. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  52. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
  53. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  54. data/src/core/ext/filters/client_channel/subchannel.cc +34 -50
  55. data/src/core/ext/filters/client_channel/subchannel.h +12 -18
  56. data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
  57. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  59. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  60. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  61. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  62. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  63. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  64. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  65. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +178 -86
  66. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  69. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  70. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  71. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
  72. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  73. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  74. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  75. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -27
  77. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -111
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +424 -241
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
  85. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +44 -44
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +17 -17
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +72 -35
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +47 -47
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +163 -78
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +7 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  117. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +28 -28
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -23
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +106 -54
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  127. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +203 -203
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +845 -495
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  133. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
  135. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +87 -87
  137. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +343 -204
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +20 -20
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +85 -46
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +33 -11
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -32
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  145. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +29 -29
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +120 -82
  151. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  157. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  159. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  177. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  178. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  179. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  180. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  182. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  184. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
  189. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  190. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  191. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  192. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  193. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  194. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  195. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  196. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  197. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  198. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  199. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  200. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  201. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  202. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  203. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  204. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  205. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  207. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  208. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  209. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  213. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  214. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  215. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  218. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  219. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  220. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  222. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  223. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  224. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  225. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +1 -1
  227. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +7 -0
  228. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +5 -5
  229. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +21 -7
  230. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +2 -2
  231. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +7 -0
  232. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +4 -4
  233. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +17 -8
  234. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +7 -7
  235. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +31 -18
  236. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +5 -5
  237. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +19 -11
  238. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  239. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  240. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  241. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  242. data/src/core/ext/xds/certificate_provider_store.cc +10 -7
  243. data/src/core/ext/xds/certificate_provider_store.h +12 -7
  244. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
  245. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
  246. data/src/core/ext/xds/xds_api.cc +220 -31
  247. data/src/core/ext/xds/xds_api.h +41 -10
  248. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  249. data/src/core/ext/xds/xds_certificate_provider.cc +61 -2
  250. data/src/core/ext/xds/xds_certificate_provider.h +40 -2
  251. data/src/core/ext/xds/xds_client.cc +31 -29
  252. data/src/core/ext/xds/xds_client.h +6 -1
  253. data/src/core/ext/xds/xds_client_stats.cc +2 -2
  254. data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
  255. data/src/core/lib/channel/channel_args.cc +8 -8
  256. data/src/core/lib/channel/channel_trace.h +1 -1
  257. data/src/core/lib/channel/channelz.cc +13 -14
  258. data/src/core/lib/channel/channelz.h +0 -1
  259. data/src/core/lib/channel/channelz_registry.h +0 -1
  260. data/src/core/lib/channel/handshaker.cc +2 -2
  261. data/src/core/lib/compression/compression_args.cc +3 -2
  262. data/src/core/lib/debug/stats.h +2 -2
  263. data/src/core/lib/debug/stats_data.h +13 -13
  264. data/src/core/lib/gpr/alloc.cc +3 -2
  265. data/src/core/lib/gpr/log.cc +53 -16
  266. data/src/core/lib/gpr/log_linux.cc +3 -1
  267. data/src/core/lib/gpr/log_posix.cc +3 -1
  268. data/src/core/lib/gpr/log_windows.cc +3 -1
  269. data/src/core/lib/gpr/spinlock.h +10 -2
  270. data/src/core/lib/gpr/string.cc +22 -21
  271. data/src/core/lib/gpr/string.h +5 -6
  272. data/src/core/lib/gpr/sync.cc +4 -4
  273. data/src/core/lib/gpr/time.cc +12 -12
  274. data/src/core/lib/gprpp/arena.h +3 -2
  275. data/src/core/lib/gprpp/ref_counted.h +2 -2
  276. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -1
  277. data/src/core/lib/gprpp/thd_posix.cc +6 -1
  278. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  279. data/src/core/lib/http/httpcli.cc +1 -1
  280. data/src/core/lib/http/httpcli.h +2 -3
  281. data/src/core/lib/http/httpcli_security_connector.cc +1 -1
  282. data/src/core/lib/http/parser.cc +1 -2
  283. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  284. data/src/core/lib/iomgr/combiner.cc +2 -1
  285. data/src/core/lib/iomgr/endpoint.h +1 -1
  286. data/src/core/lib/iomgr/error.cc +15 -11
  287. data/src/core/lib/iomgr/error_internal.h +1 -1
  288. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  289. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -13
  290. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  291. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  292. data/src/core/lib/iomgr/executor.cc +2 -1
  293. data/src/core/lib/iomgr/executor.h +1 -1
  294. data/src/core/lib/iomgr/executor/threadpool.h +1 -1
  295. data/src/core/lib/iomgr/iomgr.cc +1 -1
  296. data/src/core/lib/iomgr/load_file.h +1 -1
  297. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  298. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  299. data/src/core/lib/iomgr/parse_address.cc +52 -46
  300. data/src/core/lib/iomgr/parse_address.h +13 -9
  301. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  302. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  303. data/src/core/lib/iomgr/python_util.h +1 -1
  304. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  305. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  306. data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
  307. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  308. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  309. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  310. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  311. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  312. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  313. data/src/core/lib/iomgr/tcp_posix.cc +9 -6
  314. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  315. data/src/core/lib/iomgr/timer_custom.cc +3 -3
  316. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  317. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  318. data/src/core/lib/iomgr/udp_server.cc +1 -2
  319. data/src/core/lib/iomgr/udp_server.h +1 -2
  320. data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
  321. data/src/core/lib/json/json.h +10 -0
  322. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  323. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  324. data/src/core/lib/security/context/security_context.cc +4 -3
  325. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  326. data/src/core/lib/security/credentials/credentials.cc +6 -6
  327. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  328. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  329. data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
  330. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
  331. data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
  332. data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
  333. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  334. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
  335. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
  339. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  341. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -3
  342. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  345. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
  346. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
  350. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
  351. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
  352. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
  353. data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
  354. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  355. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  356. data/src/core/lib/security/credentials/xds/xds_credentials.cc +140 -10
  357. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  358. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  359. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  360. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +46 -13
  361. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
  362. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +3 -2
  364. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  365. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  366. data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +57 -12
  368. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
  369. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  370. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  371. data/src/core/lib/slice/slice_intern.cc +4 -5
  372. data/src/core/lib/slice/slice_internal.h +2 -2
  373. data/src/core/lib/surface/call.cc +32 -24
  374. data/src/core/lib/surface/call_details.cc +8 -8
  375. data/src/core/lib/surface/channel.cc +16 -10
  376. data/src/core/lib/surface/channel.h +3 -2
  377. data/src/core/lib/surface/channel_init.cc +1 -1
  378. data/src/core/lib/surface/completion_queue.cc +23 -18
  379. data/src/core/lib/surface/completion_queue.h +16 -16
  380. data/src/core/lib/surface/init.cc +6 -5
  381. data/src/core/lib/surface/lame_client.cc +20 -46
  382. data/src/core/lib/surface/lame_client.h +4 -0
  383. data/src/core/lib/surface/server.cc +59 -15
  384. data/src/core/lib/surface/server.h +37 -5
  385. data/src/core/lib/surface/version.cc +1 -1
  386. data/src/core/lib/transport/authority_override.cc +6 -4
  387. data/src/core/lib/transport/authority_override.h +5 -2
  388. data/src/core/lib/transport/connectivity_state.h +6 -4
  389. data/src/core/lib/transport/error_utils.h +1 -1
  390. data/src/core/lib/transport/metadata_batch.h +4 -4
  391. data/src/core/lib/transport/static_metadata.cc +1 -1
  392. data/src/core/lib/transport/status_metadata.cc +4 -3
  393. data/src/core/lib/transport/transport.h +7 -7
  394. data/src/core/lib/uri/uri_parser.cc +131 -249
  395. data/src/core/lib/uri/uri_parser.h +57 -21
  396. data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
  397. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  398. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  399. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  400. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -23
  401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  403. data/src/core/tsi/fake_transport_security.cc +5 -3
  404. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  405. data/src/core/tsi/ssl_transport_security.cc +62 -49
  406. data/src/core/tsi/ssl_transport_security.h +6 -6
  407. data/src/core/tsi/transport_security.cc +6 -6
  408. data/src/core/tsi/transport_security_interface.h +1 -1
  409. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -0
  411. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +31 -13
  412. data/src/ruby/lib/grpc/version.rb +1 -1
  413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
  414. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  415. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  416. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  417. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  418. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  419. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  420. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  421. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  422. data/third_party/upb/upb/decode.c +248 -167
  423. data/third_party/upb/upb/decode.h +20 -1
  424. data/third_party/upb/upb/decode.int.h +163 -0
  425. data/third_party/upb/upb/decode_fast.c +1040 -0
  426. data/third_party/upb/upb/decode_fast.h +126 -0
  427. data/third_party/upb/upb/def.c +525 -516
  428. data/third_party/upb/upb/def.h +16 -31
  429. data/third_party/upb/upb/def.hpp +37 -123
  430. data/third_party/upb/upb/encode.c +227 -169
  431. data/third_party/upb/upb/encode.h +27 -2
  432. data/third_party/upb/upb/json_decode.c +1443 -0
  433. data/third_party/upb/upb/json_decode.h +23 -0
  434. data/third_party/upb/upb/json_encode.c +713 -0
  435. data/third_party/upb/upb/json_encode.h +36 -0
  436. data/third_party/upb/upb/msg.c +167 -88
  437. data/third_party/upb/upb/msg.h +174 -34
  438. data/third_party/upb/upb/port_def.inc +74 -61
  439. data/third_party/upb/upb/port_undef.inc +3 -7
  440. data/third_party/upb/upb/reflection.c +36 -19
  441. data/third_party/upb/upb/table.c +34 -197
  442. data/third_party/upb/upb/table.int.h +14 -5
  443. data/third_party/upb/upb/text_encode.c +45 -22
  444. data/third_party/upb/upb/text_encode.h +4 -1
  445. data/third_party/upb/upb/upb.c +18 -41
  446. data/third_party/upb/upb/upb.h +36 -7
  447. data/third_party/upb/upb/upb.hpp +4 -4
  448. data/third_party/upb/upb/upb.int.h +29 -0
  449. metadata +60 -46
  450. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
  451. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  452. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  453. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  454. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  455. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
  456. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
  457. data/src/core/lib/gprpp/map.h +0 -53
  458. data/third_party/upb/upb/port.c +0 -26
@@ -101,11 +101,12 @@ static void register_builtin_channel_init() {
101
101
  grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL,
102
102
  GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
103
103
  grpc_add_connected_filter, nullptr);
104
- grpc_channel_init_register_stage(GRPC_CLIENT_LAME_CHANNEL,
105
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
106
- append_filter, (void*)&grpc_lame_filter);
107
- grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX, prepend_filter,
108
- (void*)&grpc_core::Server::kServerTopFilter);
104
+ grpc_channel_init_register_stage(
105
+ GRPC_CLIENT_LAME_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
106
+ append_filter, const_cast<grpc_channel_filter*>(&grpc_lame_filter));
107
+ grpc_channel_init_register_stage(
108
+ GRPC_SERVER_CHANNEL, INT_MAX, prepend_filter,
109
+ const_cast<grpc_channel_filter*>(&grpc_core::Server::kServerTopFilter));
109
110
  }
110
111
 
111
112
  typedef struct grpc_plugin {
@@ -39,59 +39,25 @@ namespace grpc_core {
39
39
 
40
40
  namespace {
41
41
 
42
- struct CallData {
43
- CallCombiner* call_combiner;
44
- grpc_linked_mdelem status;
45
- grpc_linked_mdelem details;
46
- Atomic<bool> filled_metadata;
47
- };
48
-
49
42
  struct ChannelData {
50
43
  ChannelData() : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {}
44
+ ~ChannelData() { GRPC_ERROR_UNREF(error); }
51
45
 
52
- grpc_status_code error_code;
53
- const char* error_message;
46
+ grpc_error* error = GRPC_ERROR_NONE;
54
47
  Mutex mu;
55
48
  ConnectivityStateTracker state_tracker;
56
49
  };
57
50
 
58
- static void fill_metadata(grpc_call_element* elem, grpc_metadata_batch* mdb) {
59
- CallData* calld = static_cast<CallData*>(elem->call_data);
60
- bool expected = false;
61
- if (!calld->filled_metadata.CompareExchangeStrong(
62
- &expected, true, MemoryOrder::RELAXED, MemoryOrder::RELAXED)) {
63
- return;
64
- }
65
- ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
66
- char tmp[GPR_LTOA_MIN_BUFSIZE];
67
- gpr_ltoa(chand->error_code, tmp);
68
- calld->status.md = grpc_mdelem_from_slices(
69
- GRPC_MDSTR_GRPC_STATUS, grpc_core::UnmanagedMemorySlice(tmp));
70
- calld->details.md = grpc_mdelem_from_slices(
71
- GRPC_MDSTR_GRPC_MESSAGE,
72
- grpc_core::UnmanagedMemorySlice(chand->error_message));
73
- calld->status.prev = calld->details.next = nullptr;
74
- calld->status.next = &calld->details;
75
- calld->details.prev = &calld->status;
76
- mdb->list.head = &calld->status;
77
- mdb->list.tail = &calld->details;
78
- mdb->list.count = 2;
79
- mdb->deadline = GRPC_MILLIS_INF_FUTURE;
80
- }
51
+ struct CallData {
52
+ CallCombiner* call_combiner;
53
+ };
81
54
 
82
55
  static void lame_start_transport_stream_op_batch(
83
56
  grpc_call_element* elem, grpc_transport_stream_op_batch* op) {
84
57
  CallData* calld = static_cast<CallData*>(elem->call_data);
85
- if (op->recv_initial_metadata) {
86
- fill_metadata(elem,
87
- op->payload->recv_initial_metadata.recv_initial_metadata);
88
- } else if (op->recv_trailing_metadata) {
89
- fill_metadata(elem,
90
- op->payload->recv_trailing_metadata.recv_trailing_metadata);
91
- }
58
+ ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
92
59
  grpc_transport_stream_op_batch_finish_with_failure(
93
- op, GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"),
94
- calld->call_combiner);
60
+ op, GRPC_ERROR_REF(chand->error), calld->call_combiner);
95
61
  }
96
62
 
97
63
  static void lame_get_channel_info(grpc_channel_element* /*elem*/,
@@ -152,6 +118,12 @@ static void lame_destroy_channel_elem(grpc_channel_element* elem) {
152
118
 
153
119
  } // namespace
154
120
 
121
+ void SetLameFilterError(grpc_channel_element* elem, grpc_error* error) {
122
+ GPR_ASSERT(elem->filter == &grpc_lame_filter);
123
+ auto chand = static_cast<grpc_core::ChannelData*>(elem->channel_data);
124
+ chand->error = error;
125
+ }
126
+
155
127
  } // namespace grpc_core
156
128
 
157
129
  const grpc_channel_filter grpc_lame_filter = {
@@ -182,10 +154,12 @@ grpc_channel* grpc_lame_client_channel_create(const char* target,
182
154
  "grpc_lame_client_channel_create(target=%s, error_code=%d, "
183
155
  "error_message=%s)",
184
156
  3, (target, (int)error_code, error_message));
185
- GPR_ASSERT(elem->filter == &grpc_lame_filter);
186
- auto chand = static_cast<grpc_core::ChannelData*>(elem->channel_data);
187
- chand->error_code = error_code;
188
- chand->error_message = error_message;
189
-
157
+ grpc_core::SetLameFilterError(
158
+ elem, grpc_error_set_str(
159
+ grpc_error_set_int(
160
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"),
161
+ GRPC_ERROR_INT_GRPC_STATUS, error_code),
162
+ GRPC_ERROR_STR_GRPC_MESSAGE,
163
+ grpc_slice_from_static_string(error_message)));
190
164
  return channel;
191
165
  }
@@ -25,4 +25,8 @@
25
25
 
26
26
  extern const grpc_channel_filter grpc_lame_filter;
27
27
 
28
+ namespace grpc_core {
29
+ void SetLameFilterError(grpc_channel_element* elem, grpc_error* error);
30
+ } // namespace grpc_core
31
+
28
32
  #endif /* GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H */
@@ -538,6 +538,14 @@ Server::Server(const grpc_channel_args* args)
538
538
 
539
539
  Server::~Server() {
540
540
  grpc_channel_args_destroy(channel_args_);
541
+ // Remove the cq pollsets from the config_fetcher.
542
+ if (started_ && config_fetcher_ != nullptr &&
543
+ config_fetcher_->interested_parties() != nullptr) {
544
+ for (grpc_pollset* pollset : pollsets_) {
545
+ grpc_pollset_set_del_pollset(config_fetcher_->interested_parties(),
546
+ pollset);
547
+ }
548
+ }
541
549
  for (size_t i = 0; i < cqs_.size(); i++) {
542
550
  GRPC_CQ_INTERNAL_UNREF(cqs_[i], "server");
543
551
  }
@@ -571,6 +579,16 @@ void Server::Start() {
571
579
  MutexLock lock(&mu_global_);
572
580
  starting_ = true;
573
581
  }
582
+ // Register the interested parties from the config fetcher to the cq pollsets
583
+ // before starting listeners so that config fetcher is being polled when the
584
+ // listeners start watch the fetcher.
585
+ if (config_fetcher_ != nullptr &&
586
+ config_fetcher_->interested_parties() != nullptr) {
587
+ for (grpc_pollset* pollset : pollsets_) {
588
+ grpc_pollset_set_add_pollset(config_fetcher_->interested_parties(),
589
+ pollset);
590
+ }
591
+ }
574
592
  for (auto& listener : listeners_) {
575
593
  listener.listener->Start(this, &pollsets_);
576
594
  }
@@ -579,14 +597,18 @@ void Server::Start() {
579
597
  starting_cv_.Signal();
580
598
  }
581
599
 
582
- void Server::SetupTransport(
600
+ grpc_error* Server::SetupTransport(
583
601
  grpc_transport* transport, grpc_pollset* accepting_pollset,
584
602
  const grpc_channel_args* args,
585
603
  const RefCountedPtr<grpc_core::channelz::SocketNode>& socket_node,
586
604
  grpc_resource_user* resource_user) {
587
605
  // Create channel.
606
+ grpc_error* error = GRPC_ERROR_NONE;
588
607
  grpc_channel* channel = grpc_channel_create(
589
- nullptr, args, GRPC_SERVER_CHANNEL, transport, resource_user);
608
+ nullptr, args, GRPC_SERVER_CHANNEL, transport, resource_user, &error);
609
+ if (channel == nullptr) {
610
+ return error;
611
+ }
590
612
  ChannelData* chand = static_cast<ChannelData*>(
591
613
  grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0)
592
614
  ->channel_data);
@@ -607,6 +629,7 @@ void Server::SetupTransport(
607
629
  }
608
630
  // Initialize chand.
609
631
  chand->InitTransport(Ref(), channel, cq_idx, transport, channelz_socket_uuid);
632
+ return GRPC_ERROR_NONE;
610
633
  }
611
634
 
612
635
  bool Server::HasOpenConnections() {
@@ -1115,8 +1138,8 @@ void Server::ChannelData::AcceptStream(void* arg, grpc_transport* /*transport*/,
1115
1138
  calld->Start(elem);
1116
1139
  }
1117
1140
 
1118
- void Server::ChannelData::FinishDestroy(void* cd, grpc_error* /*error*/) {
1119
- auto* chand = static_cast<Server::ChannelData*>(cd);
1141
+ void Server::ChannelData::FinishDestroy(void* arg, grpc_error* /*error*/) {
1142
+ auto* chand = static_cast<Server::ChannelData*>(arg);
1120
1143
  Server* server = chand->server_.get();
1121
1144
  GRPC_CHANNEL_INTERNAL_UNREF(chand->channel_, "server");
1122
1145
  server->Unref();
@@ -1355,8 +1378,8 @@ void Server::CallData::StartTransportStreamOpBatchImpl(
1355
1378
  grpc_call_next_op(elem, batch);
1356
1379
  }
1357
1380
 
1358
- void Server::CallData::RecvInitialMetadataReady(void* ptr, grpc_error* error) {
1359
- grpc_call_element* elem = static_cast<grpc_call_element*>(ptr);
1381
+ void Server::CallData::RecvInitialMetadataReady(void* arg, grpc_error* error) {
1382
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1360
1383
  CallData* calld = static_cast<CallData*>(elem->call_data);
1361
1384
  grpc_millis op_deadline;
1362
1385
  if (error == GRPC_ERROR_NONE) {
@@ -1398,9 +1421,8 @@ void Server::CallData::RecvInitialMetadataReady(void* ptr, grpc_error* error) {
1398
1421
  Closure::Run(DEBUG_LOCATION, closure, error);
1399
1422
  }
1400
1423
 
1401
- void Server::CallData::RecvTrailingMetadataReady(void* user_data,
1402
- grpc_error* error) {
1403
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
1424
+ void Server::CallData::RecvTrailingMetadataReady(void* arg, grpc_error* error) {
1425
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1404
1426
  CallData* calld = static_cast<CallData*>(elem->call_data);
1405
1427
  if (calld->original_recv_initial_metadata_ready_ != nullptr) {
1406
1428
  calld->recv_trailing_metadata_error_ = GRPC_ERROR_REF(error);
@@ -1535,23 +1557,45 @@ grpc_call_error grpc_server_request_call(
1535
1557
  }
1536
1558
 
1537
1559
  grpc_call_error grpc_server_request_registered_call(
1538
- grpc_server* server, void* rmp, grpc_call** call, gpr_timespec* deadline,
1539
- grpc_metadata_array* request_metadata, grpc_byte_buffer** optional_payload,
1560
+ grpc_server* server, void* registered_method, grpc_call** call,
1561
+ gpr_timespec* deadline, grpc_metadata_array* request_metadata,
1562
+ grpc_byte_buffer** optional_payload,
1540
1563
  grpc_completion_queue* cq_bound_to_call,
1541
1564
  grpc_completion_queue* cq_for_notification, void* tag_new) {
1542
1565
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1543
1566
  grpc_core::ExecCtx exec_ctx;
1544
1567
  GRPC_STATS_INC_SERVER_REQUESTED_CALLS();
1545
- auto* rm = static_cast<grpc_core::Server::RegisteredMethod*>(rmp);
1568
+ auto* rm =
1569
+ static_cast<grpc_core::Server::RegisteredMethod*>(registered_method);
1546
1570
  GRPC_API_TRACE(
1547
1571
  "grpc_server_request_registered_call("
1548
- "server=%p, rmp=%p, call=%p, deadline=%p, request_metadata=%p, "
1572
+ "server=%p, registered_method=%p, call=%p, deadline=%p, "
1573
+ "request_metadata=%p, "
1549
1574
  "optional_payload=%p, cq_bound_to_call=%p, cq_for_notification=%p, "
1550
1575
  "tag=%p)",
1551
1576
  9,
1552
- (server, rmp, call, deadline, request_metadata, optional_payload,
1553
- cq_bound_to_call, cq_for_notification, tag_new));
1577
+ (server, registered_method, call, deadline, request_metadata,
1578
+ optional_payload, cq_bound_to_call, cq_for_notification, tag_new));
1554
1579
  return server->core_server->RequestRegisteredCall(
1555
1580
  rm, call, deadline, request_metadata, optional_payload, cq_bound_to_call,
1556
1581
  cq_for_notification, tag_new);
1557
1582
  }
1583
+
1584
+ void grpc_server_set_config_fetcher(
1585
+ grpc_server* server, grpc_server_config_fetcher* server_config_fetcher) {
1586
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1587
+ grpc_core::ExecCtx exec_ctx;
1588
+ GRPC_API_TRACE("grpc_server_set_config_fetcher(server=%p, config_fetcher=%p)",
1589
+ 2, (server, server_config_fetcher));
1590
+ server->core_server->set_config_fetcher(
1591
+ std::unique_ptr<grpc_server_config_fetcher>(server_config_fetcher));
1592
+ }
1593
+
1594
+ void grpc_server_config_fetcher_destroy(
1595
+ grpc_server_config_fetcher* server_config_fetcher) {
1596
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1597
+ grpc_core::ExecCtx exec_ctx;
1598
+ GRPC_API_TRACE("grpc_server_config_fetcher_destroy(config_fetcher=%p)", 1,
1599
+ (server_config_fetcher));
1600
+ delete server_config_fetcher;
1601
+ }
@@ -103,6 +103,15 @@ class Server : public InternallyRefCounted<Server> {
103
103
  // result is valid for the lifetime of the server.
104
104
  const std::vector<grpc_pollset*>& pollsets() const { return pollsets_; }
105
105
 
106
+ grpc_server_config_fetcher* config_fetcher() const {
107
+ return config_fetcher_.get();
108
+ }
109
+
110
+ void set_config_fetcher(
111
+ std::unique_ptr<grpc_server_config_fetcher> config_fetcher) {
112
+ config_fetcher_ = std::move(config_fetcher);
113
+ }
114
+
106
115
  bool HasOpenConnections();
107
116
 
108
117
  // Adds a listener to the server. When the server starts, it will call
@@ -115,11 +124,11 @@ class Server : public InternallyRefCounted<Server> {
115
124
 
116
125
  // Sets up a transport. Creates a channel stack and binds the transport to
117
126
  // the server. Called from the listener when a new connection is accepted.
118
- void SetupTransport(grpc_transport* transport,
119
- grpc_pollset* accepting_pollset,
120
- const grpc_channel_args* args,
121
- const RefCountedPtr<channelz::SocketNode>& socket_node,
122
- grpc_resource_user* resource_user = nullptr);
127
+ grpc_error* SetupTransport(
128
+ grpc_transport* transport, grpc_pollset* accepting_pollset,
129
+ const grpc_channel_args* args,
130
+ const RefCountedPtr<channelz::SocketNode>& socket_node,
131
+ grpc_resource_user* resource_user = nullptr);
123
132
 
124
133
  void RegisterCompletionQueue(grpc_completion_queue* cq);
125
134
 
@@ -350,6 +359,7 @@ class Server : public InternallyRefCounted<Server> {
350
359
  grpc_channel_args* const channel_args_;
351
360
  grpc_resource_user* default_resource_user_ = nullptr;
352
361
  RefCountedPtr<channelz::ServerNode> channelz_node_;
362
+ std::unique_ptr<grpc_server_config_fetcher> config_fetcher_;
353
363
 
354
364
  std::vector<grpc_completion_queue*> cqs_;
355
365
  std::vector<grpc_pollset*> pollsets_;
@@ -394,4 +404,26 @@ struct grpc_server {
394
404
  grpc_core::OrphanablePtr<grpc_core::Server> core_server;
395
405
  };
396
406
 
407
+ // TODO(roth): Eventually, will need a way to modify configuration even after
408
+ // a connection is established (e.g., to change things like L7 rate
409
+ // limiting, RBAC, and fault injection configs). One possible option
410
+ // would be to do something like ServiceConfig and ConfigSelector, but
411
+ // that might add unnecessary per-call overhead. Need to consider other
412
+ // approaches here.
413
+ struct grpc_server_config_fetcher {
414
+ public:
415
+ class WatcherInterface {
416
+ public:
417
+ virtual ~WatcherInterface() = default;
418
+ virtual void UpdateConfig(grpc_channel_args* args) = 0;
419
+ };
420
+
421
+ virtual ~grpc_server_config_fetcher() = default;
422
+
423
+ virtual void StartWatch(std::string listening_address,
424
+ std::unique_ptr<WatcherInterface> watcher) = 0;
425
+ virtual void CancelWatch(WatcherInterface* watcher) = 0;
426
+ virtual grpc_pollset_set* interested_parties() = 0;
427
+ };
428
+
397
429
  #endif /* GRPC_CORE_LIB_SURFACE_SERVER_H */
@@ -25,4 +25,4 @@
25
25
 
26
26
  const char* grpc_version_string(void) { return "14.0.0"; }
27
27
 
28
- const char* grpc_g_stands_for(void) { return "gauntlet"; }
28
+ const char* grpc_g_stands_for(void) { return "gecko"; }
@@ -16,6 +16,8 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
+ #include "absl/strings/string_view.h"
20
+
19
21
  #include "src/core/lib/channel/channel_args.h"
20
22
 
21
23
  // Channel arg key for the authority override.
@@ -23,16 +25,16 @@
23
25
 
24
26
  namespace grpc_core {
25
27
 
26
- /// Returns a channel argument containing \a authority.
27
28
  grpc_arg CreateAuthorityOverrideChannelArg(const char* authority) {
28
29
  return grpc_channel_arg_string_create(
29
30
  const_cast<char*>(GRPC_ARG_AUTHORITY_OVERRIDE),
30
31
  const_cast<char*>(authority));
31
32
  }
32
33
 
33
- /// Returns the authority override from \a args or nullptr.
34
- const char* FindAuthorityOverrideInArgs(const grpc_channel_args* args) {
35
- return grpc_channel_args_find_string(args, GRPC_ARG_AUTHORITY_OVERRIDE);
34
+ absl::string_view FindAuthorityOverrideInArgs(const grpc_channel_args* args) {
35
+ const char* found =
36
+ grpc_channel_args_find_string(args, GRPC_ARG_AUTHORITY_OVERRIDE);
37
+ return found == nullptr ? "" : found;
36
38
  }
37
39
 
38
40
  } // namespace grpc_core
@@ -19,6 +19,8 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include "absl/strings/string_view.h"
23
+
22
24
  #include <grpc/grpc.h>
23
25
 
24
26
  namespace grpc_core {
@@ -26,8 +28,9 @@ namespace grpc_core {
26
28
  /// Returns a channel argument containing \a authority.
27
29
  grpc_arg CreateAuthorityOverrideChannelArg(const char* authority);
28
30
 
29
- /// Returns the authority override from \a args or nullptr.
30
- const char* FindAuthorityOverrideInArgs(const grpc_channel_args* args);
31
+ /// Returns the authority override from \a args or the empty string. The return
32
+ /// value is a string_view into the `args` data structure.
33
+ absl::string_view FindAuthorityOverrideInArgs(const grpc_channel_args* args);
31
34
 
32
35
  } // namespace grpc_core
33
36
 
@@ -21,13 +21,15 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <map>
25
+ #include <memory>
26
+
24
27
  #include "absl/status/status.h"
25
28
 
26
29
  #include <grpc/grpc.h>
27
30
 
28
31
  #include "src/core/lib/debug/trace.h"
29
32
  #include "src/core/lib/gprpp/atomic.h"
30
- #include "src/core/lib/gprpp/map.h"
31
33
  #include "src/core/lib/gprpp/orphanable.h"
32
34
  #include "src/core/lib/iomgr/closure.h"
33
35
  #include "src/core/lib/iomgr/exec_ctx.h"
@@ -95,9 +97,9 @@ class AsyncConnectivityStateWatcherInterface
95
97
  // to be called).
96
98
  class ConnectivityStateTracker {
97
99
  public:
98
- ConnectivityStateTracker(const char* name,
99
- grpc_connectivity_state state = GRPC_CHANNEL_IDLE,
100
- const absl::Status& status = absl::Status())
100
+ explicit ConnectivityStateTracker(
101
+ const char* name, grpc_connectivity_state state = GRPC_CHANNEL_IDLE,
102
+ const absl::Status& status = absl::Status())
101
103
  : name_(name), state_(state), status_(status) {}
102
104
 
103
105
  ~ConnectivityStateTracker();
@@ -36,7 +36,7 @@
36
36
  /// NULL.
37
37
  void grpc_error_get_status(grpc_error* error, grpc_millis deadline,
38
38
  grpc_status_code* code, grpc_slice* slice,
39
- grpc_http2_error_code* http_status,
39
+ grpc_http2_error_code* http_error,
40
40
  const char** error_string);
41
41
 
42
42
  /// Utility Function to convert a grpc_error * \a error to an absl::Status.
@@ -73,7 +73,7 @@ void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
73
73
  /** Substitute a new mdelem for an old value */
74
74
  grpc_error* grpc_metadata_batch_substitute(grpc_metadata_batch* batch,
75
75
  grpc_linked_mdelem* storage,
76
- grpc_mdelem new_value);
76
+ grpc_mdelem new_mdelem);
77
77
 
78
78
  void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
79
79
  const grpc_slice& value);
@@ -172,10 +172,10 @@ grpc_error* grpc_metadata_batch_filter(
172
172
  void* user_data, const char* composite_error_string) GRPC_MUST_USE_RESULT;
173
173
 
174
174
  #ifndef NDEBUG
175
- void grpc_metadata_batch_assert_ok(grpc_metadata_batch* comd);
175
+ void grpc_metadata_batch_assert_ok(grpc_metadata_batch* batch);
176
176
  #else
177
- #define grpc_metadata_batch_assert_ok(comd) \
178
- do { \
177
+ #define grpc_metadata_batch_assert_ok(batch) \
178
+ do { \
179
179
  } while (0)
180
180
  #endif
181
181