grpc 1.43.1 → 1.44.0.pre2

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 (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -0,0 +1,364 @@
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/xds/xds_endpoint.h"
20
+
21
+ #include "absl/memory/memory.h"
22
+ #include "absl/strings/str_cat.h"
23
+ #include "absl/strings/str_join.h"
24
+ #include "envoy/config/core/v3/address.upb.h"
25
+ #include "envoy/config/core/v3/base.upb.h"
26
+ #include "envoy/config/core/v3/health_check.upb.h"
27
+ #include "envoy/config/endpoint/v3/endpoint.upb.h"
28
+ #include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
29
+ #include "envoy/config/endpoint/v3/endpoint_components.upb.h"
30
+ #include "envoy/type/v3/percent.upb.h"
31
+ #include "google/protobuf/wrappers.upb.h"
32
+ #include "upb/text_encode.h"
33
+ #include "upb/upb.h"
34
+ #include "upb/upb.hpp"
35
+
36
+ #include "src/core/ext/xds/upb_utils.h"
37
+ #include "src/core/lib/address_utils/parse_address.h"
38
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
39
+
40
+ namespace grpc_core {
41
+
42
+ //
43
+ // XdsEndpointResource
44
+ //
45
+
46
+ std::string XdsEndpointResource::Priority::Locality::ToString() const {
47
+ std::vector<std::string> endpoint_strings;
48
+ for (const ServerAddress& endpoint : endpoints) {
49
+ endpoint_strings.emplace_back(endpoint.ToString());
50
+ }
51
+ return absl::StrCat("{name=", name->AsHumanReadableString(),
52
+ ", lb_weight=", lb_weight, ", endpoints=[",
53
+ absl::StrJoin(endpoint_strings, ", "), "]}");
54
+ }
55
+
56
+ bool XdsEndpointResource::Priority::operator==(const Priority& other) const {
57
+ if (localities.size() != other.localities.size()) return false;
58
+ auto it1 = localities.begin();
59
+ auto it2 = other.localities.begin();
60
+ while (it1 != localities.end()) {
61
+ if (*it1->first != *it2->first) return false;
62
+ if (it1->second != it2->second) return false;
63
+ ++it1;
64
+ ++it2;
65
+ }
66
+ return true;
67
+ }
68
+
69
+ std::string XdsEndpointResource::Priority::ToString() const {
70
+ std::vector<std::string> locality_strings;
71
+ for (const auto& p : localities) {
72
+ locality_strings.emplace_back(p.second.ToString());
73
+ }
74
+ return absl::StrCat("[", absl::StrJoin(locality_strings, ", "), "]");
75
+ }
76
+
77
+ bool XdsEndpointResource::DropConfig::ShouldDrop(
78
+ const std::string** category_name) const {
79
+ for (size_t i = 0; i < drop_category_list_.size(); ++i) {
80
+ const auto& drop_category = drop_category_list_[i];
81
+ // Generate a random number in [0, 1000000).
82
+ const uint32_t random = static_cast<uint32_t>(rand()) % 1000000;
83
+ if (random < drop_category.parts_per_million) {
84
+ *category_name = &drop_category.name;
85
+ return true;
86
+ }
87
+ }
88
+ return false;
89
+ }
90
+
91
+ std::string XdsEndpointResource::DropConfig::ToString() const {
92
+ std::vector<std::string> category_strings;
93
+ for (const DropCategory& category : drop_category_list_) {
94
+ category_strings.emplace_back(
95
+ absl::StrCat(category.name, "=", category.parts_per_million));
96
+ }
97
+ return absl::StrCat("{[", absl::StrJoin(category_strings, ", "),
98
+ "], drop_all=", drop_all_, "}");
99
+ }
100
+
101
+ std::string XdsEndpointResource::ToString() const {
102
+ std::vector<std::string> priority_strings;
103
+ for (size_t i = 0; i < priorities.size(); ++i) {
104
+ const Priority& priority = priorities[i];
105
+ priority_strings.emplace_back(
106
+ absl::StrCat("priority ", i, ": ", priority.ToString()));
107
+ }
108
+ return absl::StrCat("priorities=[", absl::StrJoin(priority_strings, ", "),
109
+ "], drop_config=", drop_config->ToString());
110
+ }
111
+
112
+ //
113
+ // XdsEndpointResourceType
114
+ //
115
+
116
+ namespace {
117
+
118
+ void MaybeLogClusterLoadAssignment(
119
+ const XdsEncodingContext& context,
120
+ const envoy_config_endpoint_v3_ClusterLoadAssignment* cla) {
121
+ if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
122
+ gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
123
+ const upb_msgdef* msg_type =
124
+ envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(
125
+ context.symtab);
126
+ char buf[10240];
127
+ upb_text_encode(cla, msg_type, nullptr, 0, buf, sizeof(buf));
128
+ gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s",
129
+ context.client, buf);
130
+ }
131
+ }
132
+
133
+ grpc_error_handle ServerAddressParseAndAppend(
134
+ const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
135
+ ServerAddressList* list) {
136
+ // If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
137
+ const int32_t health_status =
138
+ envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
139
+ if (health_status != envoy_config_core_v3_UNKNOWN &&
140
+ health_status != envoy_config_core_v3_HEALTHY) {
141
+ return GRPC_ERROR_NONE;
142
+ }
143
+ // Find the ip:port.
144
+ const envoy_config_endpoint_v3_Endpoint* endpoint =
145
+ envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
146
+ const envoy_config_core_v3_Address* address =
147
+ envoy_config_endpoint_v3_Endpoint_address(endpoint);
148
+ const envoy_config_core_v3_SocketAddress* socket_address =
149
+ envoy_config_core_v3_Address_socket_address(address);
150
+ std::string address_str = UpbStringToStdString(
151
+ envoy_config_core_v3_SocketAddress_address(socket_address));
152
+ uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
153
+ if (GPR_UNLIKELY(port >> 16) != 0) {
154
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
155
+ }
156
+ // Find load_balancing_weight for the endpoint.
157
+ const google_protobuf_UInt32Value* load_balancing_weight =
158
+ envoy_config_endpoint_v3_LbEndpoint_load_balancing_weight(lb_endpoint);
159
+ const int32_t weight =
160
+ load_balancing_weight != nullptr
161
+ ? google_protobuf_UInt32Value_value(load_balancing_weight)
162
+ : 500;
163
+ if (weight == 0) {
164
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
165
+ "Invalid endpoint weight of 0.");
166
+ }
167
+ // Populate grpc_resolved_address.
168
+ grpc_resolved_address addr;
169
+ grpc_error_handle error =
170
+ grpc_string_to_sockaddr(&addr, address_str.c_str(), port);
171
+ if (error != GRPC_ERROR_NONE) return error;
172
+ // Append the address to the list.
173
+ std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
174
+ attributes;
175
+ attributes[ServerAddressWeightAttribute::kServerAddressWeightAttributeKey] =
176
+ absl::make_unique<ServerAddressWeightAttribute>(weight);
177
+ list->emplace_back(addr, nullptr, std::move(attributes));
178
+ return GRPC_ERROR_NONE;
179
+ }
180
+
181
+ grpc_error_handle LocalityParse(
182
+ const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
183
+ XdsEndpointResource::Priority::Locality* output_locality,
184
+ size_t* priority) {
185
+ // Parse LB weight.
186
+ const google_protobuf_UInt32Value* lb_weight =
187
+ envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(
188
+ locality_lb_endpoints);
189
+ // If LB weight is not specified, it means this locality is assigned no load.
190
+ // TODO(juanlishen): When we support CDS to configure the inter-locality
191
+ // policy, we should change the LB weight handling.
192
+ output_locality->lb_weight =
193
+ lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
194
+ if (output_locality->lb_weight == 0) return GRPC_ERROR_NONE;
195
+ // Parse locality name.
196
+ const envoy_config_core_v3_Locality* locality =
197
+ envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
198
+ locality_lb_endpoints);
199
+ if (locality == nullptr) {
200
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty locality.");
201
+ }
202
+ std::string region =
203
+ UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
204
+ std::string zone =
205
+ UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
206
+ std::string sub_zone =
207
+ UpbStringToStdString(envoy_config_core_v3_Locality_sub_zone(locality));
208
+ output_locality->name = MakeRefCounted<XdsLocalityName>(
209
+ std::move(region), std::move(zone), std::move(sub_zone));
210
+ // Parse the addresses.
211
+ size_t size;
212
+ const envoy_config_endpoint_v3_LbEndpoint* const* lb_endpoints =
213
+ envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
214
+ locality_lb_endpoints, &size);
215
+ for (size_t i = 0; i < size; ++i) {
216
+ grpc_error_handle error = ServerAddressParseAndAppend(
217
+ lb_endpoints[i], &output_locality->endpoints);
218
+ if (error != GRPC_ERROR_NONE) return error;
219
+ }
220
+ // Parse the priority.
221
+ *priority = envoy_config_endpoint_v3_LocalityLbEndpoints_priority(
222
+ locality_lb_endpoints);
223
+ return GRPC_ERROR_NONE;
224
+ }
225
+
226
+ grpc_error_handle DropParseAndAppend(
227
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
228
+ drop_overload,
229
+ XdsEndpointResource::DropConfig* drop_config) {
230
+ // Get the category.
231
+ std::string category = UpbStringToStdString(
232
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(
233
+ drop_overload));
234
+ if (category.empty()) {
235
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty drop category name");
236
+ }
237
+ // Get the drop rate (per million).
238
+ const envoy_type_v3_FractionalPercent* drop_percentage =
239
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
240
+ drop_overload);
241
+ uint32_t numerator =
242
+ envoy_type_v3_FractionalPercent_numerator(drop_percentage);
243
+ const auto denominator =
244
+ static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
245
+ envoy_type_v3_FractionalPercent_denominator(drop_percentage));
246
+ // Normalize to million.
247
+ switch (denominator) {
248
+ case envoy_type_v3_FractionalPercent_HUNDRED:
249
+ numerator *= 10000;
250
+ break;
251
+ case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
252
+ numerator *= 100;
253
+ break;
254
+ case envoy_type_v3_FractionalPercent_MILLION:
255
+ break;
256
+ default:
257
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
258
+ }
259
+ // Cap numerator to 1000000.
260
+ numerator = std::min(numerator, 1000000u);
261
+ drop_config->AddCategory(std::move(category), numerator);
262
+ return GRPC_ERROR_NONE;
263
+ }
264
+
265
+ grpc_error_handle EdsResourceParse(
266
+ const XdsEncodingContext& /*context*/,
267
+ const envoy_config_endpoint_v3_ClusterLoadAssignment*
268
+ cluster_load_assignment,
269
+ bool /*is_v2*/, XdsEndpointResource* eds_update) {
270
+ std::vector<grpc_error_handle> errors;
271
+ // Get the endpoints.
272
+ size_t locality_size;
273
+ const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
274
+ envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
275
+ cluster_load_assignment, &locality_size);
276
+ for (size_t j = 0; j < locality_size; ++j) {
277
+ size_t priority;
278
+ XdsEndpointResource::Priority::Locality locality;
279
+ grpc_error_handle error = LocalityParse(endpoints[j], &locality, &priority);
280
+ if (error != GRPC_ERROR_NONE) {
281
+ errors.push_back(error);
282
+ continue;
283
+ }
284
+ // Filter out locality with weight 0.
285
+ if (locality.lb_weight == 0) continue;
286
+ // Make sure prorities is big enough. Note that they might not
287
+ // arrive in priority order.
288
+ while (eds_update->priorities.size() < priority + 1) {
289
+ eds_update->priorities.emplace_back();
290
+ }
291
+ eds_update->priorities[priority].localities.emplace(locality.name.get(),
292
+ std::move(locality));
293
+ }
294
+ for (const auto& priority : eds_update->priorities) {
295
+ if (priority.localities.empty()) {
296
+ errors.push_back(
297
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("sparse priority list"));
298
+ }
299
+ }
300
+ // Get the drop config.
301
+ eds_update->drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
302
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy* policy =
303
+ envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
304
+ cluster_load_assignment);
305
+ if (policy != nullptr) {
306
+ size_t drop_size;
307
+ const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload* const*
308
+ drop_overload =
309
+ envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
310
+ policy, &drop_size);
311
+ for (size_t j = 0; j < drop_size; ++j) {
312
+ grpc_error_handle error =
313
+ DropParseAndAppend(drop_overload[j], eds_update->drop_config.get());
314
+ if (error != GRPC_ERROR_NONE) {
315
+ errors.push_back(
316
+ grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
317
+ "drop config validation error"),
318
+ error));
319
+ }
320
+ }
321
+ }
322
+ return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing EDS resource", &errors);
323
+ }
324
+
325
+ } // namespace
326
+
327
+ absl::StatusOr<XdsResourceType::DecodeResult> XdsEndpointResourceType::Decode(
328
+ const XdsEncodingContext& context, absl::string_view serialized_resource,
329
+ bool is_v2) const {
330
+ // Parse serialized proto.
331
+ auto* resource = envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
332
+ serialized_resource.data(), serialized_resource.size(), context.arena);
333
+ if (resource == nullptr) {
334
+ return absl::InvalidArgumentError(
335
+ "Can't parse ClusterLoadAssignment resource.");
336
+ }
337
+ MaybeLogClusterLoadAssignment(context, resource);
338
+ // Validate resource.
339
+ DecodeResult result;
340
+ result.name = UpbStringToStdString(
341
+ envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(resource));
342
+ auto endpoint_data = absl::make_unique<ResourceDataSubclass>();
343
+ grpc_error_handle error =
344
+ EdsResourceParse(context, resource, is_v2, &endpoint_data->resource);
345
+ if (error != GRPC_ERROR_NONE) {
346
+ std::string error_str = grpc_error_std_string(error);
347
+ GRPC_ERROR_UNREF(error);
348
+ if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
349
+ gpr_log(GPR_ERROR, "[xds_client %p] invalid ClusterLoadAssignment %s: %s",
350
+ context.client, result.name.c_str(), error_str.c_str());
351
+ }
352
+ result.resource = absl::InvalidArgumentError(error_str);
353
+ } else {
354
+ if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
355
+ gpr_log(GPR_INFO, "[xds_client %p] parsed ClusterLoadAssignment %s: %s",
356
+ context.client, result.name.c_str(),
357
+ endpoint_data->resource.ToString().c_str());
358
+ }
359
+ result.resource = std::move(endpoint_data);
360
+ }
361
+ return std::move(result);
362
+ }
363
+
364
+ } // namespace grpc_core
@@ -0,0 +1,135 @@
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_XDS_XDS_ENDPOINT_H
18
+ #define GRPC_CORE_EXT_XDS_XDS_ENDPOINT_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <map>
23
+ #include <set>
24
+ #include <string>
25
+
26
+ #include "absl/container/inlined_vector.h"
27
+ #include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
28
+
29
+ #include "src/core/ext/xds/xds_client.h"
30
+ #include "src/core/ext/xds/xds_client_stats.h"
31
+ #include "src/core/ext/xds/xds_resource_type_impl.h"
32
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
+ #include "src/core/lib/resolver/server_address.h"
34
+
35
+ namespace grpc_core {
36
+
37
+ struct XdsEndpointResource {
38
+ struct Priority {
39
+ struct Locality {
40
+ RefCountedPtr<XdsLocalityName> name;
41
+ uint32_t lb_weight;
42
+ ServerAddressList endpoints;
43
+
44
+ bool operator==(const Locality& other) const {
45
+ return *name == *other.name && lb_weight == other.lb_weight &&
46
+ endpoints == other.endpoints;
47
+ }
48
+ bool operator!=(const Locality& other) const { return !(*this == other); }
49
+ std::string ToString() const;
50
+ };
51
+
52
+ std::map<XdsLocalityName*, Locality, XdsLocalityName::Less> localities;
53
+
54
+ bool operator==(const Priority& other) const;
55
+ std::string ToString() const;
56
+ };
57
+ using PriorityList = absl::InlinedVector<Priority, 2>;
58
+
59
+ // There are two phases of accessing this class's content:
60
+ // 1. to initialize in the control plane combiner;
61
+ // 2. to use in the data plane combiner.
62
+ // So no additional synchronization is needed.
63
+ class DropConfig : public RefCounted<DropConfig> {
64
+ public:
65
+ struct DropCategory {
66
+ bool operator==(const DropCategory& other) const {
67
+ return name == other.name &&
68
+ parts_per_million == other.parts_per_million;
69
+ }
70
+
71
+ std::string name;
72
+ const uint32_t parts_per_million;
73
+ };
74
+
75
+ using DropCategoryList = absl::InlinedVector<DropCategory, 2>;
76
+
77
+ void AddCategory(std::string name, uint32_t parts_per_million) {
78
+ drop_category_list_.emplace_back(
79
+ DropCategory{std::move(name), parts_per_million});
80
+ if (parts_per_million == 1000000) drop_all_ = true;
81
+ }
82
+
83
+ // The only method invoked from outside the WorkSerializer (used in
84
+ // the data plane).
85
+ bool ShouldDrop(const std::string** category_name) const;
86
+
87
+ const DropCategoryList& drop_category_list() const {
88
+ return drop_category_list_;
89
+ }
90
+
91
+ bool drop_all() const { return drop_all_; }
92
+
93
+ bool operator==(const DropConfig& other) const {
94
+ return drop_category_list_ == other.drop_category_list_;
95
+ }
96
+ bool operator!=(const DropConfig& other) const { return !(*this == other); }
97
+
98
+ std::string ToString() const;
99
+
100
+ private:
101
+ DropCategoryList drop_category_list_;
102
+ bool drop_all_ = false;
103
+ };
104
+
105
+ PriorityList priorities;
106
+ RefCountedPtr<DropConfig> drop_config;
107
+
108
+ bool operator==(const XdsEndpointResource& other) const {
109
+ return priorities == other.priorities && *drop_config == *other.drop_config;
110
+ }
111
+ std::string ToString() const;
112
+ };
113
+
114
+ class XdsEndpointResourceType
115
+ : public XdsResourceTypeImpl<XdsEndpointResourceType, XdsEndpointResource> {
116
+ public:
117
+ absl::string_view type_url() const override {
118
+ return "envoy.config.endpoint.v3.ClusterLoadAssignment";
119
+ }
120
+ absl::string_view v2_type_url() const override {
121
+ return "envoy.api.v2.ClusterLoadAssignment";
122
+ }
123
+
124
+ absl::StatusOr<DecodeResult> Decode(const XdsEncodingContext& context,
125
+ absl::string_view serialized_resource,
126
+ bool is_v2) const override;
127
+
128
+ void InitUpbSymtab(upb_symtab* symtab) const override {
129
+ envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(symtab);
130
+ }
131
+ };
132
+
133
+ } // namespace grpc_core
134
+
135
+ #endif // GRPC_CORE_EXT_XDS_XDS_ENDPOINT_H
@@ -22,6 +22,7 @@
22
22
  #include "envoy/extensions/filters/http/router/v3/router.upbdefs.h"
23
23
 
24
24
  #include "src/core/ext/xds/xds_http_fault_filter.h"
25
+ #include "src/core/ext/xds/xds_http_rbac_filter.h"
25
26
 
26
27
  namespace grpc_core {
27
28
 
@@ -106,6 +107,10 @@ void XdsHttpFilterRegistry::Init() {
106
107
  {kXdsHttpRouterFilterConfigName});
107
108
  RegisterFilter(absl::make_unique<XdsHttpFaultFilter>(),
108
109
  {kXdsHttpFaultFilterConfigName});
110
+ RegisterFilter(absl::make_unique<XdsHttpRbacFilter>(),
111
+ {kXdsHttpRbacFilterConfigName});
112
+ RegisterFilter(absl::make_unique<XdsHttpRbacFilter>(),
113
+ {kXdsHttpRbacFilterConfigOverrideName});
109
114
  }
110
115
 
111
116
  void XdsHttpFilterRegistry::Shutdown() {