grpc 1.45.0 → 1.46.2

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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +36 -29
  3. data/include/grpc/impl/codegen/grpc_types.h +7 -13
  4. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  5. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  6. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  7. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
  8. data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
  9. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
  11. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
  12. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  13. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  14. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
  15. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
  16. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
  17. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
  18. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
  22. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
  23. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  24. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
  26. data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
  27. data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
  28. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  29. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  30. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
  31. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  32. data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
  33. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  34. data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
  35. data/src/core/ext/filters/http/client_authority_filter.h +6 -5
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
  37. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
  38. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
  39. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  40. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
  41. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
  43. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
  44. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  45. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
  46. data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
  47. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
  48. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
  49. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  50. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
  51. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
  52. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
  53. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
  54. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
  55. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  56. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
  57. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
  58. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
  59. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  60. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
  61. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  62. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
  63. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  64. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
  65. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  66. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
  67. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  68. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
  69. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  70. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  71. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  72. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
  73. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  74. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
  75. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
  76. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
  85. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  86. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
  119. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  126. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
  127. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
  135. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  136. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
  137. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  138. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
  139. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  140. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
  141. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
  142. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
  143. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
  144. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
  145. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
  146. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
  149. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
  150. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
  151. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
  152. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
  155. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  156. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
  157. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  158. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
  159. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  160. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
  161. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
  163. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
  169. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
  171. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  172. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
  177. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
  178. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
  181. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
  182. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
  189. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  190. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
  191. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
  192. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  193. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
  194. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
  195. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
  196. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  197. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
  198. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
  200. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
  206. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  207. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
  208. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
  220. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  221. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
  222. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  223. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
  224. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
  232. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  233. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
  234. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  235. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  237. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
  238. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  239. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
  240. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  241. data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
  242. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  243. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
  244. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  245. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
  246. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
  247. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
  248. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  249. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
  250. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  251. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  252. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
  253. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  254. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
  255. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  256. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
  257. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  258. data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
  259. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  260. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
  261. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  262. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
  263. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  264. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
  265. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  266. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
  267. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  268. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
  269. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  270. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
  271. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  272. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
  273. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  274. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  275. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  276. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
  277. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  278. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
  279. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  280. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  281. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  282. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
  283. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  284. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
  285. data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
  286. data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
  287. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  288. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
  289. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  290. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
  291. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  292. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  293. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  294. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
  295. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  296. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
  297. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  298. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
  299. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  300. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
  301. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  302. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
  303. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  304. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
  305. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  306. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
  307. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  308. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
  309. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  310. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
  311. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
  312. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
  313. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  314. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
  315. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  316. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
  317. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  318. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
  319. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
  320. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
  321. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  322. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
  323. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  331. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
  332. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
  333. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
  334. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  335. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
  336. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  337. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  338. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  339. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  340. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  341. data/src/core/ext/xds/xds_api.cc +20 -0
  342. data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
  343. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  344. data/src/core/ext/xds/xds_client.cc +83 -93
  345. data/src/core/ext/xds/xds_client.h +11 -4
  346. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  347. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  348. data/src/core/ext/xds/xds_common_types.cc +9 -9
  349. data/src/core/ext/xds/xds_common_types.h +3 -3
  350. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  351. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  352. data/src/core/ext/xds/xds_listener.cc +1 -1
  353. data/src/core/ext/xds/xds_route_config.cc +162 -25
  354. data/src/core/ext/xds/xds_route_config.h +13 -10
  355. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  356. data/src/core/lib/avl/avl.h +68 -5
  357. data/src/core/lib/channel/call_tracer.h +4 -1
  358. data/src/core/lib/channel/channel_args.cc +138 -59
  359. data/src/core/lib/channel/channel_args.h +210 -9
  360. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  361. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  362. data/src/core/lib/channel/channel_stack.h +2 -5
  363. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  364. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  365. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  366. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  367. data/src/core/lib/channel/connected_channel.h +1 -0
  368. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  369. data/src/core/lib/channel/promise_based_filter.h +55 -41
  370. data/src/core/lib/compression/compression_internal.cc +1 -7
  371. data/src/core/lib/debug/stats_data.cc +2 -6
  372. data/src/core/lib/debug/stats_data.h +18 -21
  373. data/src/core/lib/gpr/tls.h +1 -0
  374. data/src/core/lib/gprpp/bitset.h +12 -0
  375. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  376. data/src/core/lib/gprpp/match.h +73 -0
  377. data/src/core/lib/gprpp/overload.h +59 -0
  378. data/src/core/lib/gprpp/ref_counted.h +2 -0
  379. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  380. data/src/core/lib/gprpp/status_helper.cc +18 -2
  381. data/src/core/lib/gprpp/time.cc +12 -0
  382. data/src/core/lib/gprpp/time.h +1 -1
  383. data/src/core/lib/http/format_request.cc +1 -2
  384. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  385. data/src/core/lib/http/parser.cc +80 -9
  386. data/src/core/lib/http/parser.h +14 -1
  387. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  388. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  389. data/src/core/lib/iomgr/port.h +0 -2
  390. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  391. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  392. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  393. data/src/core/lib/json/json_util.h +3 -3
  394. data/src/core/lib/promise/call_push_pull.h +144 -0
  395. data/src/core/lib/promise/detail/status.h +2 -1
  396. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  397. data/src/core/lib/promise/latch.h +104 -0
  398. data/src/core/lib/resource_quota/api.cc +5 -30
  399. data/src/core/lib/resource_quota/api.h +1 -1
  400. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  401. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  402. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  403. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  404. data/src/core/lib/security/context/security_context.h +8 -1
  405. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  406. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  407. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  408. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  409. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  410. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  411. data/src/core/lib/security/credentials/credentials.h +16 -33
  412. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  413. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  414. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  415. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  416. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  417. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  418. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  419. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  420. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  421. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  422. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  423. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  424. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  425. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  426. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  427. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  428. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  429. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  430. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  431. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  433. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  434. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  435. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  436. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  437. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  438. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  439. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  440. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  441. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  442. data/src/core/lib/security/transport/auth_filters.h +7 -7
  443. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  444. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  445. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  446. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  447. data/src/core/lib/surface/call.cc +1023 -903
  448. data/src/core/lib/surface/call.h +0 -14
  449. data/src/core/lib/surface/channel.cc +4 -3
  450. data/src/core/lib/surface/channel_init.cc +2 -3
  451. data/src/core/lib/surface/channel_init.h +2 -6
  452. data/src/core/lib/surface/init.cc +1 -1
  453. data/src/core/lib/surface/server.cc +3 -14
  454. data/src/core/lib/surface/server.h +1 -2
  455. data/src/core/lib/surface/version.cc +2 -2
  456. data/src/core/lib/transport/byte_stream.cc +2 -0
  457. data/src/core/lib/transport/metadata_batch.h +12 -8
  458. data/src/core/lib/transport/transport.h +20 -5
  459. data/src/core/lib/transport/transport_impl.h +4 -3
  460. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  461. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  462. data/src/core/tsi/ssl_transport_security.cc +75 -38
  463. data/src/core/tsi/ssl_transport_security.h +8 -2
  464. data/src/core/tsi/transport_security_interface.h +2 -0
  465. data/src/ruby/ext/grpc/extconf.rb +1 -1
  466. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  467. data/src/ruby/lib/grpc/grpc.rb +1 -1
  468. data/src/ruby/lib/grpc/version.rb +1 -1
  469. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  470. data/src/ruby/pb/test/client.rb +769 -0
  471. data/src/ruby/pb/test/server.rb +252 -0
  472. data/src/ruby/pb/test/xds_client.rb +415 -0
  473. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  474. data/third_party/upb/upb/decode.c +32 -16
  475. data/third_party/upb/upb/def.c +118 -55
  476. data/third_party/upb/upb/def.h +12 -3
  477. data/third_party/upb/upb/encode.c +14 -8
  478. data/third_party/upb/upb/json_encode.c +776 -0
  479. data/third_party/upb/upb/json_encode.h +62 -0
  480. data/third_party/upb/upb/msg.c +5 -7
  481. data/third_party/upb/upb/msg.h +1 -2
  482. data/third_party/upb/upb/msg_internal.h +49 -36
  483. data/third_party/upb/upb/port_def.inc +8 -0
  484. data/third_party/upb/upb/port_undef.inc +1 -0
  485. data/third_party/upb/upb/table.c +10 -6
  486. data/third_party/upb/upb/table_internal.h +2 -0
  487. data/third_party/upb/upb/upb.h +41 -11
  488. data/third_party/zlib/crc32.c +966 -292
  489. data/third_party/zlib/crc32.h +9441 -436
  490. data/third_party/zlib/deflate.c +78 -30
  491. data/third_party/zlib/deflate.h +12 -15
  492. data/third_party/zlib/gzguts.h +3 -2
  493. data/third_party/zlib/gzlib.c +5 -3
  494. data/third_party/zlib/gzread.c +5 -7
  495. data/third_party/zlib/gzwrite.c +25 -13
  496. data/third_party/zlib/infback.c +2 -1
  497. data/third_party/zlib/inffast.c +14 -14
  498. data/third_party/zlib/inflate.c +39 -8
  499. data/third_party/zlib/inflate.h +3 -2
  500. data/third_party/zlib/inftrees.c +3 -3
  501. data/third_party/zlib/trees.c +27 -48
  502. data/third_party/zlib/zlib.h +123 -100
  503. data/third_party/zlib/zutil.c +2 -2
  504. data/third_party/zlib/zutil.h +12 -9
  505. metadata +66 -45
  506. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  507. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  508. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  509. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  510. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  511. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  512. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  513. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -385,6 +385,18 @@ static char* encode_varint32(uint32_t val, char* ptr) {
385
385
  return ptr;
386
386
  }
387
387
 
388
+ static void upb_Decode_AddUnknownVarints(upb_Decoder* d, upb_Message* msg,
389
+ uint32_t val1, uint32_t val2) {
390
+ char buf[20];
391
+ char* end = buf;
392
+ end = encode_varint32(val1, end);
393
+ end = encode_varint32(val2, end);
394
+
395
+ if (!_upb_Message_AddUnknown(msg, buf, end - buf, &d->arena)) {
396
+ decode_err(d, kUpb_DecodeStatus_OutOfMemory);
397
+ }
398
+ }
399
+
388
400
  UPB_NOINLINE
389
401
  static bool decode_checkenum_slow(upb_Decoder* d, const char* ptr,
390
402
  upb_Message* msg, const upb_MiniTable_Enum* e,
@@ -398,17 +410,9 @@ static bool decode_checkenum_slow(upb_Decoder* d, const char* ptr,
398
410
 
399
411
  // Unrecognized enum goes into unknown fields.
400
412
  // For packed fields the tag could be arbitrarily far in the past, so we
401
- // just re-encode the tag here.
402
- char buf[20];
403
- char* end = buf;
413
+ // just re-encode the tag and value here.
404
414
  uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Varint;
405
- end = encode_varint32(tag, end);
406
- end = encode_varint32(v, end);
407
-
408
- if (!_upb_Message_AddUnknown(msg, buf, end - buf, &d->arena)) {
409
- decode_err(d, kUpb_DecodeStatus_OutOfMemory);
410
- }
411
-
415
+ upb_Decode_AddUnknownVarints(d, msg, tag, v);
412
416
  return false;
413
417
  }
414
418
 
@@ -627,8 +631,20 @@ static const char* decode_tomap(upb_Decoder* d, const char* ptr,
627
631
  upb_value_ptr(_upb_Message_New(entry->subs[0].submsg, &d->arena));
628
632
  }
629
633
 
634
+ const char* start = ptr;
630
635
  ptr = decode_tosubmsg(d, ptr, &ent.k, subs, field, val->size);
631
- _upb_Map_Set(map, &ent.k, map->key_size, &ent.v, map->val_size, &d->arena);
636
+ // check if ent had any unknown fields
637
+ size_t size;
638
+ upb_Message_GetUnknown(&ent.k, &size);
639
+ if (size != 0) {
640
+ uint32_t tag = ((uint32_t)field->number << 3) | kUpb_WireType_Delimited;
641
+ upb_Decode_AddUnknownVarints(d, msg, tag, (uint32_t)(ptr - start));
642
+ if (!_upb_Message_AddUnknown(msg, start, ptr - start, &d->arena)) {
643
+ decode_err(d, kUpb_DecodeStatus_OutOfMemory);
644
+ }
645
+ } else {
646
+ _upb_Map_Set(map, &ent.k, map->key_size, &ent.v, map->val_size, &d->arena);
647
+ }
632
648
  return ptr;
633
649
  }
634
650
 
@@ -742,7 +758,7 @@ static const char* decode_msgset(upb_Decoder* d, const char* ptr,
742
758
  .fields = NULL,
743
759
  .size = 0,
744
760
  .field_count = 0,
745
- .ext = upb_ExtMode_IsMessageSet_ITEM,
761
+ .ext = kUpb_ExtMode_IsMessageSet_ITEM,
746
762
  .dense_below = 0,
747
763
  .table_mask = -1};
748
764
  return decode_group(d, ptr, msg, &item_layout, 1);
@@ -780,19 +796,19 @@ static const upb_MiniTable_Field* decode_findfield(upb_Decoder* d,
780
796
 
781
797
  if (d->extreg) {
782
798
  switch (l->ext) {
783
- case upb_ExtMode_Extendable: {
799
+ case kUpb_ExtMode_Extendable: {
784
800
  const upb_MiniTable_Extension* ext =
785
801
  _upb_extreg_get(d->extreg, l, field_number);
786
802
  if (ext) return &ext->field;
787
803
  break;
788
804
  }
789
- case upb_ExtMode_IsMessageSet:
805
+ case kUpb_ExtMode_IsMessageSet:
790
806
  if (field_number == _UPB_MSGSET_ITEM) {
791
807
  static upb_MiniTable_Field item = {0, 0, 0, 0, TYPE_MSGSET_ITEM, 0};
792
808
  return &item;
793
809
  }
794
810
  break;
795
- case upb_ExtMode_IsMessageSet_ITEM:
811
+ case kUpb_ExtMode_IsMessageSet_ITEM:
796
812
  switch (field_number) {
797
813
  case _UPB_MSGSET_TYPEID: {
798
814
  static upb_MiniTable_Field type_id = {
@@ -885,7 +901,7 @@ static const char* decode_known(upb_Decoder* d, const char* ptr,
885
901
  const upb_MiniTable_Sub* subs = layout->subs;
886
902
  uint8_t mode = field->mode;
887
903
 
888
- if (UPB_UNLIKELY(mode & upb_LabelFlags_IsExtension)) {
904
+ if (UPB_UNLIKELY(mode & kUpb_LabelFlags_IsExtension)) {
889
905
  const upb_MiniTable_Extension* ext_layout =
890
906
  (const upb_MiniTable_Extension*)field;
891
907
  upb_Message_Extension* ext =
@@ -86,6 +86,9 @@ struct upb_FieldDef {
86
86
  bool has_json_name_;
87
87
  upb_FieldType type_;
88
88
  upb_Label label_;
89
+ #if UINTPTR_MAX == 0xffffffff
90
+ uint32_t padding; // Increase size to a multiple of 8.
91
+ #endif
89
92
  };
90
93
 
91
94
  struct upb_ExtensionRange {
@@ -106,8 +109,8 @@ struct upb_MessageDef {
106
109
  upb_strtable ntof;
107
110
 
108
111
  /* All nested defs.
109
- * MEM: We could save some space here by putting nested defs in a contigous
110
- * region and calculating counts from offets or vice-versa. */
112
+ * MEM: We could save some space here by putting nested defs in a contiguous
113
+ * region and calculating counts from offsets or vice-versa. */
111
114
  const upb_FieldDef* fields;
112
115
  const upb_OneofDef* oneofs;
113
116
  const upb_ExtensionRange* ext_ranges;
@@ -123,6 +126,9 @@ struct upb_MessageDef {
123
126
  int nested_ext_count;
124
127
  bool in_message_set;
125
128
  upb_WellKnown well_known_type;
129
+ #if UINTPTR_MAX == 0xffffffff
130
+ uint32_t padding; // Increase size to a multiple of 8.
131
+ #endif
126
132
  };
127
133
 
128
134
  struct upb_EnumDef {
@@ -136,6 +142,9 @@ struct upb_EnumDef {
136
142
  const upb_EnumValueDef* values;
137
143
  int value_count;
138
144
  int32_t defaultval;
145
+ #if UINTPTR_MAX == 0xffffffff
146
+ uint32_t padding; // Increase size to a multiple of 8.
147
+ #endif
139
148
  };
140
149
 
141
150
  struct upb_EnumValueDef {
@@ -154,6 +163,9 @@ struct upb_OneofDef {
154
163
  const upb_FieldDef** fields;
155
164
  upb_strtable ntof;
156
165
  upb_inttable itof;
166
+ #if UINTPTR_MAX == 0xffffffff
167
+ uint32_t padding; // Increase size to a multiple of 8.
168
+ #endif
157
169
  };
158
170
 
159
171
  struct upb_FileDef {
@@ -188,6 +200,7 @@ struct upb_MethodDef {
188
200
  const char* full_name;
189
201
  const upb_MessageDef* input_type;
190
202
  const upb_MessageDef* output_type;
203
+ int index;
191
204
  bool client_streaming;
192
205
  bool server_streaming;
193
206
  };
@@ -246,6 +259,20 @@ static const void* unpack_def(upb_value v, upb_deftype_t type) {
246
259
  }
247
260
 
248
261
  static upb_value pack_def(const void* ptr, upb_deftype_t type) {
262
+ // Our 3-bit pointer tagging requires all pointers to be multiples of 8.
263
+ // The arena will always yield 8-byte-aligned addresses, however we put
264
+ // the defs into arrays. For each element in the array to be 8-byte-aligned,
265
+ // the sizes of each def type must also be a multiple of 8.
266
+ //
267
+ // If any of these asserts fail, we need to add or remove padding on 32-bit
268
+ // machines (64-bit machines will have 8-byte alignment already due to
269
+ // pointers, which all of these structs have).
270
+ UPB_ASSERT((sizeof(upb_FieldDef) & UPB_DEFTYPE_MASK) == 0);
271
+ UPB_ASSERT((sizeof(upb_MessageDef) & UPB_DEFTYPE_MASK) == 0);
272
+ UPB_ASSERT((sizeof(upb_EnumDef) & UPB_DEFTYPE_MASK) == 0);
273
+ UPB_ASSERT((sizeof(upb_EnumValueDef) & UPB_DEFTYPE_MASK) == 0);
274
+ UPB_ASSERT((sizeof(upb_ServiceDef) & UPB_DEFTYPE_MASK) == 0);
275
+ UPB_ASSERT((sizeof(upb_OneofDef) & UPB_DEFTYPE_MASK) == 0);
249
276
  uintptr_t num = (uintptr_t)ptr;
250
277
  UPB_ASSERT((num & UPB_DEFTYPE_MASK) == 0);
251
278
  num |= type;
@@ -980,6 +1007,8 @@ const char* upb_MethodDef_FullName(const upb_MethodDef* m) {
980
1007
  return m->full_name;
981
1008
  }
982
1009
 
1010
+ int upb_MethodDef_Index(const upb_MethodDef* m) { return m->index; }
1011
+
983
1012
  const char* upb_MethodDef_Name(const upb_MethodDef* m) {
984
1013
  return shortdefname(m->full_name);
985
1014
  }
@@ -1384,7 +1413,12 @@ static uint8_t map_descriptortype(const upb_FieldDef* f) {
1384
1413
  if (type == kUpb_FieldType_String && f->file->syntax == kUpb_Syntax_Proto2) {
1385
1414
  return kUpb_FieldType_Bytes;
1386
1415
  } else if (type == kUpb_FieldType_Enum &&
1387
- f->sub.enumdef->file->syntax == kUpb_Syntax_Proto3) {
1416
+ (f->sub.enumdef->file->syntax == kUpb_Syntax_Proto3 ||
1417
+ UPB_TREAT_PROTO2_ENUMS_LIKE_PROTO3 ||
1418
+ // TODO(https://github.com/protocolbuffers/upb/issues/541):
1419
+ // fix map enum values to check for unknown enum values and put
1420
+ // them in the unknown field set.
1421
+ upb_MessageDef_IsMapEntry(upb_FieldDef_ContainingType(f)))) {
1388
1422
  return kUpb_FieldType_Int32;
1389
1423
  }
1390
1424
  return type;
@@ -1397,43 +1431,43 @@ static void fill_fieldlayout(upb_MiniTable_Field* field,
1397
1431
 
1398
1432
  if (upb_FieldDef_IsMap(f)) {
1399
1433
  field->mode =
1400
- kUpb_FieldMode_Map | (upb_FieldRep_Pointer << upb_FieldRep_Shift);
1434
+ kUpb_FieldMode_Map | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift);
1401
1435
  } else if (upb_FieldDef_IsRepeated(f)) {
1402
1436
  field->mode =
1403
- kUpb_FieldMode_Array | (upb_FieldRep_Pointer << upb_FieldRep_Shift);
1437
+ kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift);
1404
1438
  } else {
1405
1439
  /* Maps descriptor type -> elem_size_lg2. */
1406
1440
  static const uint8_t sizes[] = {
1407
- -1, /* invalid descriptor type */
1408
- upb_FieldRep_8Byte, /* DOUBLE */
1409
- upb_FieldRep_4Byte, /* FLOAT */
1410
- upb_FieldRep_8Byte, /* INT64 */
1411
- upb_FieldRep_8Byte, /* UINT64 */
1412
- upb_FieldRep_4Byte, /* INT32 */
1413
- upb_FieldRep_8Byte, /* FIXED64 */
1414
- upb_FieldRep_4Byte, /* FIXED32 */
1415
- upb_FieldRep_1Byte, /* BOOL */
1416
- upb_FieldRep_StringView, /* STRING */
1417
- upb_FieldRep_Pointer, /* GROUP */
1418
- upb_FieldRep_Pointer, /* MESSAGE */
1419
- upb_FieldRep_StringView, /* BYTES */
1420
- upb_FieldRep_4Byte, /* UINT32 */
1421
- upb_FieldRep_4Byte, /* ENUM */
1422
- upb_FieldRep_4Byte, /* SFIXED32 */
1423
- upb_FieldRep_8Byte, /* SFIXED64 */
1424
- upb_FieldRep_4Byte, /* SINT32 */
1425
- upb_FieldRep_8Byte, /* SINT64 */
1441
+ -1, /* invalid descriptor type */
1442
+ kUpb_FieldRep_8Byte, /* DOUBLE */
1443
+ kUpb_FieldRep_4Byte, /* FLOAT */
1444
+ kUpb_FieldRep_8Byte, /* INT64 */
1445
+ kUpb_FieldRep_8Byte, /* UINT64 */
1446
+ kUpb_FieldRep_4Byte, /* INT32 */
1447
+ kUpb_FieldRep_8Byte, /* FIXED64 */
1448
+ kUpb_FieldRep_4Byte, /* FIXED32 */
1449
+ kUpb_FieldRep_1Byte, /* BOOL */
1450
+ kUpb_FieldRep_StringView, /* STRING */
1451
+ kUpb_FieldRep_Pointer, /* GROUP */
1452
+ kUpb_FieldRep_Pointer, /* MESSAGE */
1453
+ kUpb_FieldRep_StringView, /* BYTES */
1454
+ kUpb_FieldRep_4Byte, /* UINT32 */
1455
+ kUpb_FieldRep_4Byte, /* ENUM */
1456
+ kUpb_FieldRep_4Byte, /* SFIXED32 */
1457
+ kUpb_FieldRep_8Byte, /* SFIXED64 */
1458
+ kUpb_FieldRep_4Byte, /* SINT32 */
1459
+ kUpb_FieldRep_8Byte, /* SINT64 */
1426
1460
  };
1427
1461
  field->mode = kUpb_FieldMode_Scalar |
1428
- (sizes[field->descriptortype] << upb_FieldRep_Shift);
1462
+ (sizes[field->descriptortype] << kUpb_FieldRep_Shift);
1429
1463
  }
1430
1464
 
1431
1465
  if (upb_FieldDef_IsPacked(f)) {
1432
- field->mode |= upb_LabelFlags_IsPacked;
1466
+ field->mode |= kUpb_LabelFlags_IsPacked;
1433
1467
  }
1434
1468
 
1435
1469
  if (upb_FieldDef_IsExtension(f)) {
1436
- field->mode |= upb_LabelFlags_IsExtension;
1470
+ field->mode |= kUpb_LabelFlags_IsExtension;
1437
1471
  }
1438
1472
  }
1439
1473
 
@@ -1471,12 +1505,12 @@ static void make_layout(symtab_addctx* ctx, const upb_MessageDef* m) {
1471
1505
 
1472
1506
  if (upb_MessageDef_ExtensionRangeCount(m) > 0) {
1473
1507
  if (google_protobuf_MessageOptions_message_set_wire_format(m->opts)) {
1474
- l->ext = upb_ExtMode_IsMessageSet;
1508
+ l->ext = kUpb_ExtMode_IsMessageSet;
1475
1509
  } else {
1476
- l->ext = upb_ExtMode_Extendable;
1510
+ l->ext = kUpb_ExtMode_Extendable;
1477
1511
  }
1478
1512
  } else {
1479
- l->ext = upb_ExtMode_NonExtendable;
1513
+ l->ext = kUpb_ExtMode_NonExtendable;
1480
1514
  }
1481
1515
 
1482
1516
  /* TODO(haberman): initialize fast tables so that reflection-based parsing
@@ -1551,11 +1585,11 @@ static void make_layout(symtab_addctx* ctx, const upb_MessageDef* m) {
1551
1585
 
1552
1586
  fill_fieldlayout(field, f);
1553
1587
 
1554
- if (upb_FieldDef_IsSubMessage(f)) {
1588
+ if (field->descriptortype == kUpb_FieldType_Message ||
1589
+ field->descriptortype == kUpb_FieldType_Group) {
1555
1590
  field->submsg_index = sublayout_count++;
1556
1591
  subs[field->submsg_index].submsg = upb_FieldDef_MessageSubDef(f)->layout;
1557
- } else if (upb_FieldDef_CType(f) == kUpb_CType_Enum &&
1558
- f->file->syntax == kUpb_Syntax_Proto2) {
1592
+ } else if (field->descriptortype == kUpb_FieldType_Enum) {
1559
1593
  field->submsg_index = sublayout_count++;
1560
1594
  subs[field->submsg_index].subenum = upb_FieldDef_EnumSubDef(f)->layout;
1561
1595
  UPB_ASSERT(subs[field->submsg_index].subenum);
@@ -1601,6 +1635,10 @@ static void make_layout(symtab_addctx* ctx, const upb_MessageDef* m) {
1601
1635
 
1602
1636
  if (upb_OneofDef_IsSynthetic(o)) continue;
1603
1637
 
1638
+ if (o->field_count == 0) {
1639
+ symtab_errf(ctx, "Oneof must have at least one field (%s)", o->full_name);
1640
+ }
1641
+
1604
1642
  /* Calculate field size: the max of all field sizes. */
1605
1643
  for (int j = 0; j < o->field_count; j++) {
1606
1644
  const upb_FieldDef* f = o->fields[j];
@@ -1623,7 +1661,10 @@ static void make_layout(symtab_addctx* ctx, const upb_MessageDef* m) {
1623
1661
  l->size = UPB_ALIGN_UP(l->size, 8);
1624
1662
 
1625
1663
  /* Sort fields by number. */
1626
- qsort(fields, upb_MessageDef_numfields(m), sizeof(*fields), field_number_cmp);
1664
+ if (fields) {
1665
+ qsort(fields, upb_MessageDef_numfields(m), sizeof(*fields),
1666
+ field_number_cmp);
1667
+ }
1627
1668
  assign_layout_indices(m, l, fields);
1628
1669
  }
1629
1670
 
@@ -1784,8 +1825,8 @@ static const void* symtab_resolveany(symtab_addctx* ctx,
1784
1825
  }
1785
1826
  } else {
1786
1827
  /* Remove components from base until we find an entry or run out. */
1787
- size_t baselen = strlen(base);
1788
- char* tmp = malloc(sym.size + strlen(base) + 1);
1828
+ size_t baselen = base ? strlen(base) : 0;
1829
+ char* tmp = malloc(sym.size + baselen + 1);
1789
1830
  while (1) {
1790
1831
  char* p = tmp;
1791
1832
  if (baselen) {
@@ -1821,10 +1862,10 @@ static const void* symtab_resolve(symtab_addctx* ctx, const char* from_name_dbg,
1821
1862
  const void* ret =
1822
1863
  symtab_resolveany(ctx, from_name_dbg, base, sym, &found_type);
1823
1864
  if (ret && found_type != type) {
1824
- symtab_errf(
1825
- ctx,
1826
- "type mismatch when resolving %s: couldn't find name %s with type=%d",
1827
- from_name_dbg, sym.data, (int)type);
1865
+ symtab_errf(ctx,
1866
+ "type mismatch when resolving %s: couldn't find "
1867
+ "name " UPB_STRINGVIEW_FORMAT " with type=%d",
1868
+ from_name_dbg, UPB_STRINGVIEW_ARGS(sym), (int)type);
1828
1869
  }
1829
1870
  return ret;
1830
1871
  }
@@ -1844,6 +1885,11 @@ static void create_oneofdef(
1844
1885
 
1845
1886
  SET_OPTIONS(o->opts, OneofDescriptorProto, OneofOptions, oneof_proto);
1846
1887
 
1888
+ upb_value existing_v;
1889
+ if (upb_strtable_lookup2(&m->ntof, name.data, name.size, &existing_v)) {
1890
+ symtab_errf(ctx, "duplicate oneof name (%s)", o->full_name);
1891
+ }
1892
+
1847
1893
  v = pack_def(o, UPB_DEFTYPE_ONEOF);
1848
1894
  CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, v, ctx->arena));
1849
1895
 
@@ -2153,7 +2199,7 @@ static void create_fielddef(
2153
2199
  f->file = ctx->file; /* Must happen prior to symtab_add(). */
2154
2200
 
2155
2201
  if (!google_protobuf_FieldDescriptorProto_has_name(field_proto)) {
2156
- symtab_errf(ctx, "field has no name (%s)", upb_MessageDef_FullName(m));
2202
+ symtab_errf(ctx, "field has no name");
2157
2203
  }
2158
2204
 
2159
2205
  name = google_protobuf_FieldDescriptorProto_name(field_proto);
@@ -2370,6 +2416,7 @@ static void create_service(
2370
2416
 
2371
2417
  m->service = s;
2372
2418
  m->full_name = makefullname(ctx, s->full_name, name);
2419
+ m->index = i;
2373
2420
  m->client_streaming =
2374
2421
  google_protobuf_MethodDescriptorProto_client_streaming(method_proto);
2375
2422
  m->server_streaming =
@@ -2397,6 +2444,12 @@ static int count_bits_debug(uint64_t x) {
2397
2444
  return n;
2398
2445
  }
2399
2446
 
2447
+ static int compare_int32(const void* a_ptr, const void* b_ptr) {
2448
+ int32_t a = *(int32_t*)a_ptr;
2449
+ int32_t b = *(int32_t*)b_ptr;
2450
+ return a < b ? -1 : (a == b ? 0 : 1);
2451
+ }
2452
+
2400
2453
  upb_MiniTable_Enum* create_enumlayout(symtab_addctx* ctx,
2401
2454
  const upb_EnumDef* e) {
2402
2455
  int n = 0;
@@ -2405,7 +2458,7 @@ upb_MiniTable_Enum* create_enumlayout(symtab_addctx* ctx,
2405
2458
  for (int i = 0; i < e->value_count; i++) {
2406
2459
  uint32_t val = (uint32_t)e->values[i].number;
2407
2460
  if (val < 64) {
2408
- mask |= 1 << val;
2461
+ mask |= 1ULL << val;
2409
2462
  } else {
2410
2463
  n++;
2411
2464
  }
@@ -2427,6 +2480,17 @@ upb_MiniTable_Enum* create_enumlayout(symtab_addctx* ctx,
2427
2480
  UPB_ASSERT(p == values + n);
2428
2481
  }
2429
2482
 
2483
+ // Enums can have duplicate values; we must sort+uniq them.
2484
+ if (values) qsort(values, n, sizeof(*values), &compare_int32);
2485
+
2486
+ int dst = 0;
2487
+ for (int i = 0; i < n; dst++) {
2488
+ int32_t val = values[i];
2489
+ while (i < n && values[i] == val) i++; // Skip duplicates.
2490
+ values[dst] = val;
2491
+ }
2492
+ n = dst;
2493
+
2430
2494
  UPB_ASSERT(upb_inttable_count(&e->iton) == n + count_bits_debug(mask));
2431
2495
 
2432
2496
  upb_MiniTable_Enum* layout = symtab_alloc(ctx, sizeof(*layout));
@@ -2510,7 +2574,7 @@ static void create_enumdef(
2510
2574
  if (ctx->layout) {
2511
2575
  UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count);
2512
2576
  e->layout = ctx->layout->enums[ctx->enum_count++];
2513
- UPB_ASSERT(n ==
2577
+ UPB_ASSERT(upb_inttable_count(&e->iton) ==
2514
2578
  e->layout->value_count + count_bits_debug(e->layout->mask));
2515
2579
  } else {
2516
2580
  e->layout = create_enumlayout(ctx, e);
@@ -2781,15 +2845,10 @@ static void resolve_msgdef(symtab_addctx* ctx, upb_MessageDef* m) {
2781
2845
  resolve_fielddef(ctx, m->full_name, (upb_FieldDef*)&m->fields[i]);
2782
2846
  }
2783
2847
 
2784
- for (int i = 0; i < m->nested_ext_count; i++) {
2785
- resolve_fielddef(ctx, m->full_name, (upb_FieldDef*)&m->nested_exts[i]);
2786
- }
2787
-
2788
- if (!ctx->layout) make_layout(ctx, m);
2789
-
2790
2848
  m->in_message_set = false;
2791
- if (m->nested_ext_count == 1) {
2792
- const upb_FieldDef* ext = &m->nested_exts[0];
2849
+ for (int i = 0; i < m->nested_ext_count; i++) {
2850
+ upb_FieldDef* ext = (upb_FieldDef*)&m->nested_exts[i];
2851
+ resolve_fielddef(ctx, m->full_name, ext);
2793
2852
  if (ext->type_ == kUpb_FieldType_Message &&
2794
2853
  ext->label_ == kUpb_Label_Optional && ext->sub.msgdef == m &&
2795
2854
  google_protobuf_MessageOptions_message_set_wire_format(
@@ -2798,6 +2857,8 @@ static void resolve_msgdef(symtab_addctx* ctx, upb_MessageDef* m) {
2798
2857
  }
2799
2858
  }
2800
2859
 
2860
+ if (!ctx->layout) make_layout(ctx, m);
2861
+
2801
2862
  for (int i = 0; i < m->nested_msg_count; i++) {
2802
2863
  resolve_msgdef(ctx, (upb_MessageDef*)&m->nested_msgs[i]);
2803
2864
  }
@@ -2929,7 +2990,7 @@ static void build_filedef(
2929
2990
  int32_t* mutable_weak_deps = (int32_t*)file->weak_deps;
2930
2991
  for (i = 0; i < n; i++) {
2931
2992
  if (weak_deps[i] >= file->dep_count) {
2932
- symtab_errf(ctx, "public_dep %d is out of range", (int)public_deps[i]);
2993
+ symtab_errf(ctx, "weak_dep %d is out of range", (int)weak_deps[i]);
2933
2994
  }
2934
2995
  mutable_weak_deps[i] = weak_deps[i];
2935
2996
  }
@@ -3085,7 +3146,8 @@ const upb_FileDef* upb_DefPool_AddFile(
3085
3146
  /* Include here since we want most of this file to be stdio-free. */
3086
3147
  #include <stdio.h>
3087
3148
 
3088
- bool _upb_DefPool_LoadDefInit(upb_DefPool* s, const _upb_DefPool_Init* init) {
3149
+ bool _upb_DefPool_LoadDefInitEx(upb_DefPool* s, const _upb_DefPool_Init* init,
3150
+ bool rebuild_minitable) {
3089
3151
  /* Since this function should never fail (it would indicate a bug in upb) we
3090
3152
  * print errors to stderr instead of returning error status to the user. */
3091
3153
  _upb_DefPool_Init** deps = init->deps;
@@ -3102,7 +3164,7 @@ bool _upb_DefPool_LoadDefInit(upb_DefPool* s, const _upb_DefPool_Init* init) {
3102
3164
  arena = upb_Arena_New();
3103
3165
 
3104
3166
  for (; *deps; deps++) {
3105
- if (!_upb_DefPool_LoadDefInit(s, *deps)) goto err;
3167
+ if (!_upb_DefPool_LoadDefInitEx(s, *deps, rebuild_minitable)) goto err;
3106
3168
  }
3107
3169
 
3108
3170
  file = google_protobuf_FileDescriptorProto_parse_ex(
@@ -3119,7 +3181,8 @@ bool _upb_DefPool_LoadDefInit(upb_DefPool* s, const _upb_DefPool_Init* init) {
3119
3181
  goto err;
3120
3182
  }
3121
3183
 
3122
- if (!_upb_DefPool_AddFile(s, file, init->layout, &status)) {
3184
+ const upb_MiniTable_File* mt = rebuild_minitable ? NULL : init->layout;
3185
+ if (!_upb_DefPool_AddFile(s, file, mt, &status)) {
3123
3186
  goto err;
3124
3187
  }
3125
3188
 
@@ -164,11 +164,11 @@ const upb_FieldDef* upb_OneofDef_LookupNumber(const upb_OneofDef* o,
164
164
  #define kUpb_Any_TypeFieldNumber 1
165
165
  #define kUpb_Any_ValueFieldNumber 2
166
166
 
167
- /* Well-known field tag numbers for timestamp messages. */
167
+ /* Well-known field tag numbers for duration messages. */
168
168
  #define kUpb_Duration_SecondsFieldNumber 1
169
169
  #define kUpb_Duration_NanosFieldNumber 2
170
170
 
171
- /* Well-known field tag numbers for duration messages. */
171
+ /* Well-known field tag numbers for timestamp messages. */
172
172
  #define kUpb_Timestamp_SecondsFieldNumber 1
173
173
  #define kUpb_Timestamp_NanosFieldNumber 2
174
174
 
@@ -317,6 +317,7 @@ const google_protobuf_MethodOptions* upb_MethodDef_Options(
317
317
  const upb_MethodDef* m);
318
318
  bool upb_MethodDef_HasOptions(const upb_MethodDef* m);
319
319
  const char* upb_MethodDef_FullName(const upb_MethodDef* m);
320
+ int upb_MethodDef_Index(const upb_MethodDef* m);
320
321
  const char* upb_MethodDef_Name(const upb_MethodDef* m);
321
322
  const upb_ServiceDef* upb_MethodDef_Service(const upb_MethodDef* m);
322
323
  const upb_MessageDef* upb_MethodDef_InputType(const upb_MethodDef* m);
@@ -389,7 +390,15 @@ typedef struct _upb_DefPool_Init {
389
390
  upb_StringView descriptor; /* Serialized descriptor. */
390
391
  } _upb_DefPool_Init;
391
392
 
392
- bool _upb_DefPool_LoadDefInit(upb_DefPool* s, const _upb_DefPool_Init* init);
393
+ // Should only be directly called by tests. This variant lets us suppress
394
+ // the use of compiled-in tables, forcing a rebuild of the tables at runtime.
395
+ bool _upb_DefPool_LoadDefInitEx(upb_DefPool* s, const _upb_DefPool_Init* init,
396
+ bool rebuild_minitable);
397
+
398
+ UPB_INLINE bool _upb_DefPool_LoadDefInit(upb_DefPool* s,
399
+ const _upb_DefPool_Init* init) {
400
+ return _upb_DefPool_LoadDefInitEx(s, init, false);
401
+ }
393
402
 
394
403
  #include "upb/port_undef.inc"
395
404
 
@@ -288,7 +288,7 @@ static void encode_array(upb_encstate* e, const upb_Message* msg,
288
288
  const upb_MiniTable_Sub* subs,
289
289
  const upb_MiniTable_Field* f) {
290
290
  const upb_Array* arr = *UPB_PTR_AT(msg, f->offset, upb_Array*);
291
- bool packed = f->mode & upb_LabelFlags_IsPacked;
291
+ bool packed = f->mode & kUpb_LabelFlags_IsPacked;
292
292
  size_t pre_len = e->limit - e->ptr;
293
293
 
294
294
  if (arr == NULL || arr->len == 0) {
@@ -442,23 +442,29 @@ static bool encode_shouldencode(upb_encstate* e, const upb_Message* msg,
442
442
  if (f->presence == 0) {
443
443
  /* Proto3 presence or map/array. */
444
444
  const void* mem = UPB_PTR_AT(msg, f->offset, void);
445
- switch (f->mode >> upb_FieldRep_Shift) {
446
- case upb_FieldRep_1Byte: {
445
+ switch (f->mode >> kUpb_FieldRep_Shift) {
446
+ case kUpb_FieldRep_1Byte: {
447
447
  char ch;
448
448
  memcpy(&ch, mem, 1);
449
449
  return ch != 0;
450
450
  }
451
- case upb_FieldRep_4Byte: {
451
+ #if UINTPTR_MAX == 0xffffffff
452
+ case kUpb_FieldRep_Pointer:
453
+ #endif
454
+ case kUpb_FieldRep_4Byte: {
452
455
  uint32_t u32;
453
456
  memcpy(&u32, mem, 4);
454
457
  return u32 != 0;
455
458
  }
456
- case upb_FieldRep_8Byte: {
459
+ #if UINTPTR_MAX != 0xffffffff
460
+ case kUpb_FieldRep_Pointer:
461
+ #endif
462
+ case kUpb_FieldRep_8Byte: {
457
463
  uint64_t u64;
458
464
  memcpy(&u64, mem, 8);
459
465
  return u64 != 0;
460
466
  }
461
- case upb_FieldRep_StringView: {
467
+ case kUpb_FieldRep_StringView: {
462
468
  const upb_StringView* str = (const upb_StringView*)mem;
463
469
  return str->size != 0;
464
470
  }
@@ -532,7 +538,7 @@ static void encode_message(upb_encstate* e, const upb_Message* msg,
532
538
  }
533
539
  }
534
540
 
535
- if (m->ext != upb_ExtMode_NonExtendable) {
541
+ if (m->ext != kUpb_ExtMode_NonExtendable) {
536
542
  /* Encode all extensions together. Unlike C++, we do not attempt to keep
537
543
  * these in field number order relative to normal fields or even to each
538
544
  * other. */
@@ -541,7 +547,7 @@ static void encode_message(upb_encstate* e, const upb_Message* msg,
541
547
  if (ext_count) {
542
548
  const upb_Message_Extension* end = ext + ext_count;
543
549
  for (; ext != end; ext++) {
544
- if (UPB_UNLIKELY(m->ext == upb_ExtMode_IsMessageSet)) {
550
+ if (UPB_UNLIKELY(m->ext == kUpb_ExtMode_IsMessageSet)) {
545
551
  encode_msgset_item(e, ext);
546
552
  } else {
547
553
  encode_field(e, &ext->data, &ext->ext->sub, &ext->ext->field);