grpc 1.7.3 → 1.8.0
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.
- checksums.yaml +4 -4
- data/Makefile +2106 -2116
- data/include/grpc/census.h +1 -432
- data/include/grpc/compression.h +9 -9
- data/include/grpc/grpc.h +115 -98
- data/include/grpc/grpc_cronet.h +3 -3
- data/include/grpc/grpc_posix.h +4 -4
- data/include/grpc/grpc_security.h +160 -88
- data/include/grpc/grpc_security_constants.h +7 -0
- data/include/grpc/impl/codegen/atm.h +9 -1
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
- data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
- data/include/grpc/impl/codegen/atm_windows.h +23 -22
- data/include/grpc/impl/codegen/byte_buffer.h +14 -14
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
- data/include/grpc/impl/codegen/connectivity_state.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +32 -28
- data/include/grpc/impl/codegen/port_platform.h +48 -0
- data/include/grpc/impl/codegen/slice.h +10 -10
- data/include/grpc/impl/codegen/sync_generic.h +9 -3
- data/include/grpc/slice.h +16 -17
- data/include/grpc/slice_buffer.h +22 -22
- data/include/grpc/support/alloc.h +11 -11
- data/include/grpc/support/avl.h +28 -20
- data/include/grpc/support/cmdline.h +13 -13
- data/include/grpc/support/histogram.h +17 -17
- data/include/grpc/support/host_port.h +2 -2
- data/include/grpc/support/log.h +9 -9
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/string_util.h +2 -2
- data/include/grpc/support/subprocess.h +5 -5
- data/include/grpc/support/sync.h +43 -27
- data/include/grpc/support/thd.h +6 -6
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_pthread.h +1 -1
- data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
- data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
- data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
- data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
- data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
- data/src/core/ext/filters/client_channel/client_channel.h +16 -8
- data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
- data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
- data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
- data/src/core/ext/filters/client_channel/connector.h +29 -21
- data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
- data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
- data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
- data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
- data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
- data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
- data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
- data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
- data/src/core/ext/filters/client_channel/parse_address.h +14 -6
- data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
- data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
- data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
- data/src/core/ext/filters/client_channel/resolver.h +33 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
- data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
- data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
- data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
- data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
- data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
- data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
- data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
- data/src/core/ext/filters/client_channel/subchannel.h +68 -60
- data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
- data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
- data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
- data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
- data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
- data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
- data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
- data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
- data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
- data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
- data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
- data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
- data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
- data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
- data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
- data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
- data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
- data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
- data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
- data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
- data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
- data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
- data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
- data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
- data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
- data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
- data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
- data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
- data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
- data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
- data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
- data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
- data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
- data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
- data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
- data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
- data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
- data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
- data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
- data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
- data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
- data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
- data/src/core/lib/backoff/backoff.cc +80 -0
- data/src/core/lib/backoff/backoff.h +83 -0
- data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
- data/src/core/lib/channel/channel_args.h +45 -37
- data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
- data/src/core/lib/channel/channel_stack.h +76 -75
- data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
- data/src/core/lib/channel/channel_stack_builder.h +45 -45
- data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
- data/src/core/lib/channel/connected_channel.h +12 -4
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
- data/src/core/lib/channel/handshaker.h +9 -1
- data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
- data/src/core/lib/channel/handshaker_factory.h +18 -10
- data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
- data/src/core/lib/channel/handshaker_registry.h +8 -0
- data/src/core/lib/compression/algorithm_metadata.h +8 -0
- data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
- data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
- data/src/core/lib/compression/message_compress.h +8 -0
- data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
- data/src/core/lib/compression/stream_compression.h +27 -19
- data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
- data/src/core/lib/compression/stream_compression_gzip.h +8 -0
- data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
- data/src/core/lib/compression/stream_compression_identity.h +8 -0
- data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
- data/src/core/lib/debug/stats.h +17 -9
- data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
- data/src/core/lib/debug/stats_data.h +58 -19
- data/src/core/lib/debug/trace.cc +142 -0
- data/src/core/lib/debug/trace.h +74 -14
- data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
- data/src/core/lib/http/format_request.h +12 -4
- data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
- data/src/core/lib/http/httpcli.h +41 -33
- data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
- data/src/core/lib/http/{parser.c → parser.cc} +42 -42
- data/src/core/lib/http/parser.h +28 -20
- data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
- data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
- data/src/core/lib/iomgr/call_combiner.h +9 -1
- data/src/core/lib/iomgr/closure.h +220 -62
- data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
- data/src/core/lib/iomgr/combiner.h +16 -8
- data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
- data/src/core/lib/iomgr/endpoint.h +47 -32
- data/src/core/lib/iomgr/endpoint_pair.h +12 -4
- data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
- data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
- data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
- data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
- data/src/core/lib/iomgr/error.h +32 -27
- data/src/core/lib/iomgr/error_internal.h +11 -2
- data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
- data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
- data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
- data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
- data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
- data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
- data/src/core/lib/iomgr/ev_posix.cc +288 -0
- data/src/core/lib/iomgr/ev_posix.h +75 -67
- data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +177 -0
- data/src/core/lib/iomgr/exec_ctx.h +35 -13
- data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
- data/src/core/lib/iomgr/executor.h +12 -4
- data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
- data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
- data/src/core/lib/iomgr/gethostname.h +9 -1
- data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
- data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
- data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
- data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
- data/src/core/lib/iomgr/iocp_windows.h +17 -3
- data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
- data/src/core/lib/iomgr/iomgr.h +11 -3
- data/src/core/lib/iomgr/iomgr_internal.h +13 -5
- data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
- data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
- data/src/core/lib/iomgr/iomgr_uv.h +8 -0
- data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
- data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
- data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
- data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
- data/src/core/lib/iomgr/lockfree_event.h +30 -11
- data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
- data/src/core/lib/iomgr/network_status_tracker.h +2 -2
- data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
- data/src/core/lib/iomgr/polling_entity.h +21 -13
- data/src/core/lib/iomgr/pollset.h +17 -11
- data/src/core/lib/iomgr/pollset_set.h +23 -15
- data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
- data/src/core/lib/iomgr/pollset_uv.h +8 -0
- data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
- data/src/core/lib/iomgr/pollset_windows.h +17 -4
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.h +18 -10
- data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
- data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
- data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
- data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
- data/src/core/lib/iomgr/resource_quota.h +45 -37
- data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
- data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
- data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
- data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
- data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
- data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
- data/src/core/lib/iomgr/socket_mutator.h +11 -11
- data/src/core/lib/iomgr/socket_utils.h +9 -1
- data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
- data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
- data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
- data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
- data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
- data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
- data/src/core/lib/iomgr/socket_windows.h +26 -13
- data/src/core/lib/iomgr/tcp_client.h +14 -6
- data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
- data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
- data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
- data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
- data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
- data/src/core/lib/iomgr/tcp_posix.h +15 -7
- data/src/core/lib/iomgr/tcp_server.h +31 -23
- data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
- data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
- data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
- data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
- data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
- data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
- data/src/core/lib/iomgr/tcp_uv.cc +420 -0
- data/src/core/lib/iomgr/tcp_uv.h +18 -4
- data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
- data/src/core/lib/iomgr/tcp_windows.h +17 -4
- data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
- data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
- data/src/core/lib/iomgr/timer.h +16 -9
- data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
- data/src/core/lib/iomgr/timer_generic.h +4 -4
- data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
- data/src/core/lib/iomgr/timer_heap.h +16 -8
- data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
- data/src/core/lib/iomgr/timer_manager.h +8 -0
- data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
- data/src/core/lib/iomgr/timer_uv.h +2 -2
- data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
- data/src/core/lib/iomgr/udp_server.h +25 -17
- data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
- data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
- data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
- data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
- data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
- data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
- data/src/core/lib/json/{json.c → json.cc} +0 -0
- data/src/core/lib/json/json.h +8 -0
- data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
- data/src/core/lib/json/json_reader.h +26 -18
- data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
- data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
- data/src/core/lib/json/json_writer.h +23 -15
- data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
- data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
- data/src/core/lib/profiling/timers.h +6 -6
- data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
- data/src/core/lib/security/context/security_context.h +27 -29
- data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
- data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
- data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
- data/src/core/lib/security/credentials/credentials.h +83 -75
- data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
- data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
- data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
- data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
- data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
- data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
- data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
- data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
- data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
- data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
- data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
- data/src/core/lib/security/transport/auth_filters.h +16 -0
- data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
- data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
- data/src/core/lib/security/transport/lb_targets_info.h +11 -3
- data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
- data/src/core/lib/security/transport/secure_endpoint.h +13 -5
- data/src/core/lib/security/transport/security_connector.cc +1121 -0
- data/src/core/lib/security/transport/security_connector.h +97 -79
- data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
- data/src/core/lib/security/transport/security_handshaker.h +11 -3
- data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
- data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
- data/src/core/lib/security/transport/tsi_error.h +9 -1
- data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
- data/src/core/lib/security/util/json_util.h +12 -4
- data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
- data/src/core/lib/slice/b64.h +12 -4
- data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
- data/src/core/lib/slice/percent_encoding.h +11 -3
- data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
- data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
- data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
- data/src/core/lib/slice/slice_hash_table.h +19 -11
- data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
- data/src/core/lib/slice/slice_internal.h +17 -6
- data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
- data/src/core/lib/slice/slice_string_helpers.h +3 -3
- data/src/core/lib/support/abstract.h +29 -0
- data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
- data/src/core/lib/support/{arena.c → arena.cc} +12 -12
- data/src/core/lib/support/arena.h +11 -3
- data/src/core/lib/support/{atm.c → atm.cc} +1 -1
- data/src/core/lib/support/{avl.c → avl.cc} +71 -70
- data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
- data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
- data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
- data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
- data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
- data/src/core/lib/support/env.h +3 -3
- data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
- data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
- data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
- data/src/core/lib/support/{fork.c → fork.cc} +2 -2
- data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
- data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
- data/src/core/lib/support/{log.c → log.cc} +8 -8
- data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
- data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
- data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
- data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
- data/src/core/lib/support/manual_constructor.h +211 -0
- data/src/core/lib/support/memory.h +41 -0
- data/src/core/lib/support/mpscq.cc +114 -0
- data/src/core/lib/support/mpscq.h +45 -7
- data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
- data/src/core/lib/support/murmur_hash.h +9 -1
- data/src/core/lib/support/spinlock.h +8 -1
- data/src/core/lib/support/{string.c → string.cc} +56 -55
- data/src/core/lib/support/string.h +21 -21
- data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
- data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
- data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
- data/src/core/lib/support/string_windows.h +8 -0
- data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
- data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
- data/src/core/lib/support/{sync.c → sync.cc} +22 -22
- data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
- data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
- data/src/core/lib/support/{thd.c → thd.cc} +0 -0
- data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
- data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
- data/src/core/lib/support/{time.c → time.cc} +0 -0
- data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
- data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
- data/src/core/lib/support/time_precise.h +9 -1
- data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
- data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
- data/src/core/lib/support/tmpfile.h +1 -1
- data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
- data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
- data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
- data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
- data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
- data/src/core/lib/surface/alarm_internal.h +10 -2
- data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
- data/src/core/lib/surface/api_trace.h +2 -2
- data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
- data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
- data/src/core/lib/surface/{call.c → call.cc} +379 -372
- data/src/core/lib/surface/call.h +37 -38
- data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
- data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
- data/src/core/lib/surface/call_test_only.h +5 -5
- data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
- data/src/core/lib/surface/channel.h +29 -21
- data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
- data/src/core/lib/surface/channel_init.h +6 -6
- data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
- data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
- data/src/core/lib/surface/channel_stack_type.h +9 -1
- data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
- data/src/core/lib/surface/completion_queue.h +29 -29
- data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
- data/src/core/lib/surface/completion_queue_factory.h +8 -0
- data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
- data/src/core/lib/surface/event_string.h +9 -1
- data/src/core/lib/surface/{init.c → init.cc} +16 -39
- data/src/core/lib/surface/init.h +8 -0
- data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
- data/src/core/lib/surface/lame_client.cc +38 -40
- data/src/core/lib/surface/lame_client.h +8 -0
- data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
- data/src/core/lib/surface/{server.c → server.cc} +340 -404
- data/src/core/lib/surface/server.h +22 -14
- data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
- data/src/core/lib/surface/validate_metadata.h +10 -2
- data/src/core/lib/surface/{version.c → version.cc} +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +84 -0
- data/src/core/lib/transport/bdp_estimator.h +67 -42
- data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
- data/src/core/lib/transport/byte_stream.h +41 -33
- data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
- data/src/core/lib/transport/connectivity_state.h +29 -21
- data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
- data/src/core/lib/transport/error_utils.h +18 -6
- data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
- data/src/core/lib/transport/metadata.h +22 -20
- data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
- data/src/core/lib/transport/metadata_batch.h +46 -45
- data/src/core/lib/transport/pid_controller.cc +48 -0
- data/src/core/lib/transport/pid_controller.h +84 -32
- data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
- data/src/core/lib/transport/service_config.h +11 -2
- data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
- data/src/core/lib/transport/static_metadata.h +30 -23
- data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
- data/src/core/lib/transport/status_conversion.h +12 -2
- data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
- data/src/core/lib/transport/timeout_encoding.h +11 -2
- data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
- data/src/core/lib/transport/transport.h +78 -80
- data/src/core/lib/transport/transport_impl.h +27 -19
- data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
- data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
- data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
- data/src/core/tsi/fake_transport_security.h +5 -5
- data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
- data/src/core/tsi/gts_transport_security.h +11 -3
- data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
- data/src/core/tsi/ssl_transport_security.h +25 -25
- data/src/core/tsi/ssl_types.h +8 -0
- data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
- data/src/core/tsi/transport_security.h +55 -55
- data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
- data/src/core/tsi/transport_security_adapter.h +2 -2
- data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
- data/src/core/tsi/transport_security_grpc.h +19 -19
- data/src/core/tsi/transport_security_interface.h +41 -41
- data/src/ruby/ext/grpc/extconf.rb +4 -2
- data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
- data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
- data/src/ruby/ext/grpc/rb_call.c +41 -42
- data/src/ruby/ext/grpc/rb_call.h +6 -6
- data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
- data/src/ruby/ext/grpc/rb_channel.c +87 -87
- data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
- data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
- data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
- data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
- data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +8 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
- data/src/ruby/ext/grpc/rb_server.c +23 -23
- data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +14 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
- data/third_party/cares/config_freebsd/ares_config.h +502 -0
- data/third_party/cares/config_openbsd/ares_config.h +502 -0
- metadata +302 -328
- data/src/core/ext/census/aggregation.h +0 -51
- data/src/core/ext/census/base_resources.c +0 -56
- data/src/core/ext/census/base_resources.h +0 -24
- data/src/core/ext/census/census_interface.h +0 -61
- data/src/core/ext/census/census_rpc_stats.h +0 -86
- data/src/core/ext/census/context.c +0 -496
- data/src/core/ext/census/gen/census.pb.c +0 -161
- data/src/core/ext/census/gen/census.pb.h +0 -280
- data/src/core/ext/census/gen/trace_context.pb.c +0 -39
- data/src/core/ext/census/gen/trace_context.pb.h +0 -78
- data/src/core/ext/census/grpc_filter.c +0 -196
- data/src/core/ext/census/grpc_plugin.c +0 -70
- data/src/core/ext/census/initialize.c +0 -51
- data/src/core/ext/census/intrusive_hash_map.c +0 -305
- data/src/core/ext/census/intrusive_hash_map.h +0 -152
- data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
- data/src/core/ext/census/mlog.c +0 -586
- data/src/core/ext/census/mlog.h +0 -80
- data/src/core/ext/census/operation.c +0 -48
- data/src/core/ext/census/placeholders.c +0 -49
- data/src/core/ext/census/resource.c +0 -303
- data/src/core/ext/census/resource.h +0 -48
- data/src/core/ext/census/rpc_metric_id.h +0 -36
- data/src/core/ext/census/trace_context.c +0 -71
- data/src/core/ext/census/trace_context.h +0 -56
- data/src/core/ext/census/trace_label.h +0 -46
- data/src/core/ext/census/trace_propagation.h +0 -48
- data/src/core/ext/census/trace_status.h +0 -30
- data/src/core/ext/census/trace_string.h +0 -35
- data/src/core/ext/census/tracing.c +0 -55
- data/src/core/ext/census/tracing.h +0 -109
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
- data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
- data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
- data/src/core/lib/debug/trace.c +0 -146
- data/src/core/lib/iomgr/closure.c +0 -219
- data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
- data/src/core/lib/iomgr/ev_posix.c +0 -266
- data/src/core/lib/iomgr/exec_ctx.c +0 -113
- data/src/core/lib/iomgr/tcp_uv.c +0 -381
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
- data/src/core/lib/security/transport/security_connector.c +0 -914
- data/src/core/lib/support/backoff.c +0 -72
- data/src/core/lib/support/backoff.h +0 -56
- data/src/core/lib/support/mpscq.c +0 -79
- data/src/core/lib/support/stack_lockfree.c +0 -137
- data/src/core/lib/support/stack_lockfree.h +0 -38
- data/src/core/lib/transport/bdp_estimator.c +0 -110
- data/src/core/lib/transport/pid_controller.c +0 -63
@@ -1,152 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2017 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
#ifndef GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H
|
20
|
-
#define GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H
|
21
|
-
|
22
|
-
#include "src/core/ext/census/intrusive_hash_map_internal.h"
|
23
|
-
|
24
|
-
/* intrusive_hash_map is a fast chained hash table. This hash map is faster than
|
25
|
-
* a dense hash map when the application calls insert and erase more often than
|
26
|
-
* find. When the workload is dominated by find() a dense hash map may be
|
27
|
-
* faster.
|
28
|
-
*
|
29
|
-
* intrusive_hash_map uses an intrusive header placed within a user defined
|
30
|
-
* struct. The header field IHM_key MUST be set to a valid value before
|
31
|
-
* insertion into the hash map or undefined behavior may occur. The header field
|
32
|
-
* IHM_hash_link MUST to be set to NULL initially.
|
33
|
-
*
|
34
|
-
* EXAMPLE USAGE:
|
35
|
-
*
|
36
|
-
* typedef struct string_item {
|
37
|
-
* INTRUSIVE_HASH_MAP_HEADER;
|
38
|
-
* // User data.
|
39
|
-
* char *str_buf;
|
40
|
-
* uint16_t len;
|
41
|
-
* } string_item;
|
42
|
-
*
|
43
|
-
* static string_item *make_string_item(uint64_t key, const char *buf,
|
44
|
-
* uint16_t len) {
|
45
|
-
* string_item *item = (string_item *)gpr_malloc(sizeof(string_item));
|
46
|
-
* item->IHM_key = key;
|
47
|
-
* item->IHM_hash_link = NULL;
|
48
|
-
* item->len = len;
|
49
|
-
* item->str_buf = (char *)malloc(len);
|
50
|
-
* memcpy(item->str_buf, buf, len);
|
51
|
-
* return item;
|
52
|
-
* }
|
53
|
-
*
|
54
|
-
* intrusive_hash_map hash_map;
|
55
|
-
* intrusive_hash_map_init(&hash_map, 4);
|
56
|
-
* string_item *new_item1 = make_string_item(10, "test1", 5);
|
57
|
-
* bool ok = intrusive_hash_map_insert(&hash_map, (hm_item *)new_item1);
|
58
|
-
*
|
59
|
-
* string_item *item1 =
|
60
|
-
* (string_item *)intrusive_hash_map_find(&hash_map, 10);
|
61
|
-
*/
|
62
|
-
|
63
|
-
/* Hash map item. Stores key and a pointer to the actual object. A user defined
|
64
|
-
* version of this can be passed in provided the first 2 entries (key and
|
65
|
-
* hash_link) are the same. These entries must be first in the user defined
|
66
|
-
* struct. Pointer to struct will need to be cast as (hm_item *) when passed to
|
67
|
-
* hash map. This allows it to be intrusive. */
|
68
|
-
typedef struct hm_item {
|
69
|
-
uint64_t key;
|
70
|
-
struct hm_item *hash_link;
|
71
|
-
/* Optional user defined data after this. */
|
72
|
-
} hm_item;
|
73
|
-
|
74
|
-
/* Macro provided for ease of use. This must be first in the user defined
|
75
|
-
* struct (i.e. uint64_t key and hm_item * must be the first two elements in
|
76
|
-
* that order). */
|
77
|
-
#define INTRUSIVE_HASH_MAP_HEADER \
|
78
|
-
uint64_t IHM_key; \
|
79
|
-
struct hm_item *IHM_hash_link
|
80
|
-
|
81
|
-
/* Index struct which acts as a pseudo-iterator within the hash map. */
|
82
|
-
typedef struct hm_index {
|
83
|
-
uint32_t bucket_index; // hash map bucket index.
|
84
|
-
hm_item *item; // Pointer to hm_item within the hash map.
|
85
|
-
} hm_index;
|
86
|
-
|
87
|
-
/* Returns true if two hm_indices point to the same object within the hash map
|
88
|
-
* and false otherwise. */
|
89
|
-
__inline bool hm_index_compare(const hm_index *A, const hm_index *B) {
|
90
|
-
return (A->item == B->item && A->bucket_index == B->bucket_index);
|
91
|
-
}
|
92
|
-
|
93
|
-
/*
|
94
|
-
* Helper functions for iterating over the hash map.
|
95
|
-
*/
|
96
|
-
|
97
|
-
/* On return idx will contain an invalid index which is always equal to
|
98
|
-
* hash_map->buckets.size_ */
|
99
|
-
void intrusive_hash_map_end(const intrusive_hash_map *hash_map, hm_index *idx);
|
100
|
-
|
101
|
-
/* Iterates index to the next valid entry in the hash map and stores the
|
102
|
-
* index within idx. If end of table is reached, idx will contain the same
|
103
|
-
* values as if intrusive_hash_map_end() was called. */
|
104
|
-
void intrusive_hash_map_next(const intrusive_hash_map *hash_map, hm_index *idx);
|
105
|
-
|
106
|
-
/* On return, idx will contain the index of the first non-null entry in the hash
|
107
|
-
* map. If the hash map is empty, idx will contain the same values as if
|
108
|
-
* intrusive_hash_map_end() was called. */
|
109
|
-
void intrusive_hash_map_begin(const intrusive_hash_map *hash_map,
|
110
|
-
hm_index *idx);
|
111
|
-
|
112
|
-
/* Initialize intrusive hash map data structure. This must be called before
|
113
|
-
* the hash map can be used. The initial size of an intrusive hash map will be
|
114
|
-
* 2^initial_log2_map_size (valid range is [0, 31]). */
|
115
|
-
void intrusive_hash_map_init(intrusive_hash_map *hash_map,
|
116
|
-
uint32_t initial_log2_map_size);
|
117
|
-
|
118
|
-
/* Returns true if the hash map is empty and false otherwise. */
|
119
|
-
bool intrusive_hash_map_empty(const intrusive_hash_map *hash_map);
|
120
|
-
|
121
|
-
/* Returns the number of elements currently in the hash map. */
|
122
|
-
size_t intrusive_hash_map_size(const intrusive_hash_map *hash_map);
|
123
|
-
|
124
|
-
/* Find a hm_item within the hash map by key. Returns NULL if item was not
|
125
|
-
* found. */
|
126
|
-
hm_item *intrusive_hash_map_find(const intrusive_hash_map *hash_map,
|
127
|
-
uint64_t key);
|
128
|
-
|
129
|
-
/* Erase the hm_item that corresponds with key. If the hm_item is found, return
|
130
|
-
* the pointer to the hm_item. Else returns NULL. */
|
131
|
-
hm_item *intrusive_hash_map_erase(intrusive_hash_map *hash_map, uint64_t key);
|
132
|
-
|
133
|
-
/* Attempts to insert a new hm_item into the hash map. If an element with the
|
134
|
-
* same key already exists, it will not insert the new item and return false.
|
135
|
-
* Otherwise, it will insert the new item and return true. */
|
136
|
-
bool intrusive_hash_map_insert(intrusive_hash_map *hash_map, hm_item *item);
|
137
|
-
|
138
|
-
/* Clears entire contents of the hash map, but leaves internal data structure
|
139
|
-
* untouched. Second argument takes a function pointer to a function that will
|
140
|
-
* free the object designated by the user and pointed to by hash_map->value. */
|
141
|
-
void intrusive_hash_map_clear(intrusive_hash_map *hash_map,
|
142
|
-
void (*free_object)(void *));
|
143
|
-
|
144
|
-
/* Erase all contents of hash map and free the memory. Hash map is invalid
|
145
|
-
* after calling this function and cannot be used until it has been
|
146
|
-
* reinitialized (intrusive_hash_map_init()). This function takes a function
|
147
|
-
* pointer to a function that will free the object designated by the user and
|
148
|
-
* pointed to by hash_map->value. */
|
149
|
-
void intrusive_hash_map_free(intrusive_hash_map *hash_map,
|
150
|
-
void (*free_object)(void *));
|
151
|
-
|
152
|
-
#endif /* GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H */
|
@@ -1,48 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2017 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
#ifndef GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H
|
20
|
-
#define GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H
|
21
|
-
|
22
|
-
#include <grpc/support/alloc.h>
|
23
|
-
#include <grpc/support/log.h>
|
24
|
-
#include <grpc/support/useful.h>
|
25
|
-
#include <stdbool.h>
|
26
|
-
|
27
|
-
/* The chunked vector is a data structure that allocates buckets for use in the
|
28
|
-
* hash map. ChunkedVector is logically equivalent to T*[N] (cast void* as
|
29
|
-
* T*). It's internally implemented as an array of 1MB arrays to avoid
|
30
|
-
* allocating large consecutive memory chunks. This is an internal data
|
31
|
-
* structure that should never be accessed directly. */
|
32
|
-
typedef struct chunked_vector {
|
33
|
-
size_t size_;
|
34
|
-
void **first_;
|
35
|
-
void ***rest_;
|
36
|
-
} chunked_vector;
|
37
|
-
|
38
|
-
/* Core intrusive hash map data structure. All internal elements are managed by
|
39
|
-
* functions and should not be altered manually. */
|
40
|
-
typedef struct intrusive_hash_map {
|
41
|
-
uint32_t num_items;
|
42
|
-
uint32_t extend_threshold;
|
43
|
-
uint32_t log2_num_buckets;
|
44
|
-
uint32_t hash_mask;
|
45
|
-
chunked_vector buckets;
|
46
|
-
} intrusive_hash_map;
|
47
|
-
|
48
|
-
#endif /* GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H */
|
data/src/core/ext/census/mlog.c
DELETED
@@ -1,586 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2015 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
// Implements an efficient in-memory log, optimized for multiple writers and
|
20
|
-
// a single reader. Available log space is divided up in blocks of
|
21
|
-
// CENSUS_LOG_2_MAX_RECORD_SIZE bytes. A block can be in one of the following
|
22
|
-
// three data structures:
|
23
|
-
// - Free blocks (free_block_list)
|
24
|
-
// - Blocks with unread data (dirty_block_list)
|
25
|
-
// - Blocks currently attached to cores (core_local_blocks[])
|
26
|
-
//
|
27
|
-
// census_log_start_write() moves a block from core_local_blocks[] to the end of
|
28
|
-
// dirty_block_list when block:
|
29
|
-
// - is out-of-space OR
|
30
|
-
// - has an incomplete record (an incomplete record occurs when a thread calls
|
31
|
-
// census_log_start_write() and is context-switched before calling
|
32
|
-
// census_log_end_write()
|
33
|
-
// So, blocks in dirty_block_list are ordered, from oldest to newest, by the
|
34
|
-
// time when block is detached from the core.
|
35
|
-
//
|
36
|
-
// census_log_read_next() first iterates over dirty_block_list and then
|
37
|
-
// core_local_blocks[]. It moves completely read blocks from dirty_block_list
|
38
|
-
// to free_block_list. Blocks in core_local_blocks[] are not freed, even when
|
39
|
-
// completely read.
|
40
|
-
//
|
41
|
-
// If the log is configured to discard old records and free_block_list is empty,
|
42
|
-
// census_log_start_write() iterates over dirty_block_list to allocate a
|
43
|
-
// new block. It moves the oldest available block (no pending read/write) to
|
44
|
-
// core_local_blocks[].
|
45
|
-
//
|
46
|
-
// core_local_block_struct is used to implement a map from core id to the block
|
47
|
-
// associated with that core. This mapping is advisory. It is possible that the
|
48
|
-
// block returned by this mapping is no longer associated with that core. This
|
49
|
-
// mapping is updated, lazily, by census_log_start_write().
|
50
|
-
//
|
51
|
-
// Locking in block struct:
|
52
|
-
//
|
53
|
-
// Exclusive g_log.lock must be held before calling any functions operating on
|
54
|
-
// block structs except census_log_start_write() and census_log_end_write().
|
55
|
-
//
|
56
|
-
// Writes to a block are serialized via writer_lock. census_log_start_write()
|
57
|
-
// acquires this lock and census_log_end_write() releases it. On failure to
|
58
|
-
// acquire the lock, writer allocates a new block for the current core and
|
59
|
-
// updates core_local_block accordingly.
|
60
|
-
//
|
61
|
-
// Simultaneous read and write access is allowed. Readers can safely read up to
|
62
|
-
// committed bytes (bytes_committed).
|
63
|
-
//
|
64
|
-
// reader_lock protects the block, currently being read, from getting recycled.
|
65
|
-
// start_read() acquires reader_lock and end_read() releases the lock.
|
66
|
-
//
|
67
|
-
// Read/write access to a block is disabled via try_disable_access(). It returns
|
68
|
-
// with both writer_lock and reader_lock held. These locks are subsequently
|
69
|
-
// released by enable_access() to enable access to the block.
|
70
|
-
//
|
71
|
-
// A note on naming: Most function/struct names are prepended by cl_
|
72
|
-
// (shorthand for census_log). Further, functions that manipulate structures
|
73
|
-
// include the name of the structure, which will be passed as the first
|
74
|
-
// argument. E.g. cl_block_initialize() will initialize a cl_block.
|
75
|
-
|
76
|
-
#include "src/core/ext/census/mlog.h"
|
77
|
-
#include <grpc/support/alloc.h>
|
78
|
-
#include <grpc/support/atm.h>
|
79
|
-
#include <grpc/support/cpu.h>
|
80
|
-
#include <grpc/support/log.h>
|
81
|
-
#include <grpc/support/sync.h>
|
82
|
-
#include <grpc/support/useful.h>
|
83
|
-
#include <stdbool.h>
|
84
|
-
#include <string.h>
|
85
|
-
|
86
|
-
// End of platform specific code
|
87
|
-
|
88
|
-
typedef struct census_log_block_list_struct {
|
89
|
-
struct census_log_block_list_struct* next;
|
90
|
-
struct census_log_block_list_struct* prev;
|
91
|
-
struct census_log_block* block;
|
92
|
-
} cl_block_list_struct;
|
93
|
-
|
94
|
-
typedef struct census_log_block {
|
95
|
-
// Pointer to underlying buffer.
|
96
|
-
char* buffer;
|
97
|
-
gpr_atm writer_lock;
|
98
|
-
gpr_atm reader_lock;
|
99
|
-
// Keeps completely written bytes. Declared atomic because accessed
|
100
|
-
// simultaneously by reader and writer.
|
101
|
-
gpr_atm bytes_committed;
|
102
|
-
// Bytes already read.
|
103
|
-
size_t bytes_read;
|
104
|
-
// Links for list.
|
105
|
-
cl_block_list_struct link;
|
106
|
-
// We want this structure to be cacheline aligned. We assume the following
|
107
|
-
// sizes for the various parts on 32/64bit systems:
|
108
|
-
// type 32b size 64b size
|
109
|
-
// char* 4 8
|
110
|
-
// 3x gpr_atm 12 24
|
111
|
-
// size_t 4 8
|
112
|
-
// cl_block_list_struct 12 24
|
113
|
-
// TOTAL 32 64
|
114
|
-
//
|
115
|
-
// Depending on the size of our cacheline and the architecture, we
|
116
|
-
// selectively add char buffering to this structure. The size is checked
|
117
|
-
// via assert in census_log_initialize().
|
118
|
-
#if defined(GPR_ARCH_64)
|
119
|
-
#define CL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 64)
|
120
|
-
#else
|
121
|
-
#if defined(GPR_ARCH_32)
|
122
|
-
#define CL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 32)
|
123
|
-
#else
|
124
|
-
#error "Unknown architecture"
|
125
|
-
#endif
|
126
|
-
#endif
|
127
|
-
#if CL_BLOCK_PAD_SIZE > 0
|
128
|
-
char padding[CL_BLOCK_PAD_SIZE];
|
129
|
-
#endif
|
130
|
-
} cl_block;
|
131
|
-
|
132
|
-
// A list of cl_blocks, doubly-linked through cl_block::link.
|
133
|
-
typedef struct census_log_block_list {
|
134
|
-
int32_t count; // Number of items in list.
|
135
|
-
cl_block_list_struct ht; // head/tail of linked list.
|
136
|
-
} cl_block_list;
|
137
|
-
|
138
|
-
// Cacheline aligned block pointers to avoid false sharing. Block pointer must
|
139
|
-
// be initialized via set_block(), before calling other functions
|
140
|
-
typedef struct census_log_core_local_block {
|
141
|
-
gpr_atm block;
|
142
|
-
// Ensure cachline alignment: we assume sizeof(gpr_atm) == 4 or 8
|
143
|
-
#if defined(GPR_ARCH_64)
|
144
|
-
#define CL_CORE_LOCAL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 8)
|
145
|
-
#else
|
146
|
-
#if defined(GPR_ARCH_32)
|
147
|
-
#define CL_CORE_LOCAL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 4)
|
148
|
-
#else
|
149
|
-
#error "Unknown architecture"
|
150
|
-
#endif
|
151
|
-
#endif
|
152
|
-
#if CL_CORE_LOCAL_BLOCK_PAD_SIZE > 0
|
153
|
-
char padding[CL_CORE_LOCAL_BLOCK_PAD_SIZE];
|
154
|
-
#endif
|
155
|
-
} cl_core_local_block;
|
156
|
-
|
157
|
-
struct census_log {
|
158
|
-
int discard_old_records;
|
159
|
-
// Number of cores (aka hardware-contexts)
|
160
|
-
unsigned num_cores;
|
161
|
-
// number of CENSUS_LOG_2_MAX_RECORD_SIZE blocks in log
|
162
|
-
uint32_t num_blocks;
|
163
|
-
cl_block* blocks; // Block metadata.
|
164
|
-
cl_core_local_block* core_local_blocks; // Keeps core to block mappings.
|
165
|
-
gpr_mu lock;
|
166
|
-
int initialized; // has log been initialized?
|
167
|
-
// Keeps the state of the reader iterator. A value of 0 indicates that
|
168
|
-
// iterator has reached the end. census_log_init_reader() resets the value
|
169
|
-
// to num_core to restart iteration.
|
170
|
-
uint32_t read_iterator_state;
|
171
|
-
// Points to the block being read. If non-NULL, the block is locked for
|
172
|
-
// reading(block_being_read_->reader_lock is held).
|
173
|
-
cl_block* block_being_read;
|
174
|
-
char* buffer;
|
175
|
-
cl_block_list free_block_list;
|
176
|
-
cl_block_list dirty_block_list;
|
177
|
-
gpr_atm out_of_space_count;
|
178
|
-
};
|
179
|
-
|
180
|
-
// Single internal log.
|
181
|
-
static struct census_log g_log;
|
182
|
-
|
183
|
-
// Functions that operate on an atomic memory location used as a lock.
|
184
|
-
|
185
|
-
// Returns non-zero if lock is acquired.
|
186
|
-
static int cl_try_lock(gpr_atm* lock) { return gpr_atm_acq_cas(lock, 0, 1); }
|
187
|
-
|
188
|
-
static void cl_unlock(gpr_atm* lock) { gpr_atm_rel_store(lock, 0); }
|
189
|
-
|
190
|
-
// Functions that operate on cl_core_local_block's.
|
191
|
-
|
192
|
-
static void cl_core_local_block_set_block(cl_core_local_block* clb,
|
193
|
-
cl_block* block) {
|
194
|
-
gpr_atm_rel_store(&clb->block, (gpr_atm)block);
|
195
|
-
}
|
196
|
-
|
197
|
-
static cl_block* cl_core_local_block_get_block(cl_core_local_block* clb) {
|
198
|
-
return (cl_block*)gpr_atm_acq_load(&clb->block);
|
199
|
-
}
|
200
|
-
|
201
|
-
// Functions that operate on cl_block_list_struct's.
|
202
|
-
|
203
|
-
static void cl_block_list_struct_initialize(cl_block_list_struct* bls,
|
204
|
-
cl_block* block) {
|
205
|
-
bls->next = bls->prev = bls;
|
206
|
-
bls->block = block;
|
207
|
-
}
|
208
|
-
|
209
|
-
// Functions that operate on cl_block_list's.
|
210
|
-
|
211
|
-
static void cl_block_list_initialize(cl_block_list* list) {
|
212
|
-
list->count = 0;
|
213
|
-
cl_block_list_struct_initialize(&list->ht, NULL);
|
214
|
-
}
|
215
|
-
|
216
|
-
// Returns head of *this, or NULL if empty.
|
217
|
-
static cl_block* cl_block_list_head(cl_block_list* list) {
|
218
|
-
return list->ht.next->block;
|
219
|
-
}
|
220
|
-
|
221
|
-
// Insert element *e after *pos.
|
222
|
-
static void cl_block_list_insert(cl_block_list* list, cl_block_list_struct* pos,
|
223
|
-
cl_block_list_struct* e) {
|
224
|
-
list->count++;
|
225
|
-
e->next = pos->next;
|
226
|
-
e->prev = pos;
|
227
|
-
e->next->prev = e;
|
228
|
-
e->prev->next = e;
|
229
|
-
}
|
230
|
-
|
231
|
-
// Insert block at the head of the list
|
232
|
-
static void cl_block_list_insert_at_head(cl_block_list* list, cl_block* block) {
|
233
|
-
cl_block_list_insert(list, &list->ht, &block->link);
|
234
|
-
}
|
235
|
-
|
236
|
-
// Insert block at the tail of the list.
|
237
|
-
static void cl_block_list_insert_at_tail(cl_block_list* list, cl_block* block) {
|
238
|
-
cl_block_list_insert(list, list->ht.prev, &block->link);
|
239
|
-
}
|
240
|
-
|
241
|
-
// Removes block *b. Requires *b be in the list.
|
242
|
-
static void cl_block_list_remove(cl_block_list* list, cl_block* b) {
|
243
|
-
list->count--;
|
244
|
-
b->link.next->prev = b->link.prev;
|
245
|
-
b->link.prev->next = b->link.next;
|
246
|
-
}
|
247
|
-
|
248
|
-
// Functions that operate on cl_block's
|
249
|
-
|
250
|
-
static void cl_block_initialize(cl_block* block, char* buffer) {
|
251
|
-
block->buffer = buffer;
|
252
|
-
gpr_atm_rel_store(&block->writer_lock, 0);
|
253
|
-
gpr_atm_rel_store(&block->reader_lock, 0);
|
254
|
-
gpr_atm_rel_store(&block->bytes_committed, 0);
|
255
|
-
block->bytes_read = 0;
|
256
|
-
cl_block_list_struct_initialize(&block->link, block);
|
257
|
-
}
|
258
|
-
|
259
|
-
// Guards against exposing partially written buffer to the reader.
|
260
|
-
static void cl_block_set_bytes_committed(cl_block* block,
|
261
|
-
size_t bytes_committed) {
|
262
|
-
gpr_atm_rel_store(&block->bytes_committed, (gpr_atm)bytes_committed);
|
263
|
-
}
|
264
|
-
|
265
|
-
static size_t cl_block_get_bytes_committed(cl_block* block) {
|
266
|
-
return (size_t)gpr_atm_acq_load(&block->bytes_committed);
|
267
|
-
}
|
268
|
-
|
269
|
-
// Tries to disable future read/write access to this block. Succeeds if:
|
270
|
-
// - no in-progress write AND
|
271
|
-
// - no in-progress read AND
|
272
|
-
// - 'discard_data' set to true OR no unread data
|
273
|
-
// On success, clears the block state and returns with writer_lock_ and
|
274
|
-
// reader_lock_ held. These locks are released by a subsequent
|
275
|
-
// cl_block_access_enable() call.
|
276
|
-
static bool cl_block_try_disable_access(cl_block* block, int discard_data) {
|
277
|
-
if (!cl_try_lock(&block->writer_lock)) {
|
278
|
-
return false;
|
279
|
-
}
|
280
|
-
if (!cl_try_lock(&block->reader_lock)) {
|
281
|
-
cl_unlock(&block->writer_lock);
|
282
|
-
return false;
|
283
|
-
}
|
284
|
-
if (!discard_data &&
|
285
|
-
(block->bytes_read != cl_block_get_bytes_committed(block))) {
|
286
|
-
cl_unlock(&block->reader_lock);
|
287
|
-
cl_unlock(&block->writer_lock);
|
288
|
-
return false;
|
289
|
-
}
|
290
|
-
cl_block_set_bytes_committed(block, 0);
|
291
|
-
block->bytes_read = 0;
|
292
|
-
return true;
|
293
|
-
}
|
294
|
-
|
295
|
-
static void cl_block_enable_access(cl_block* block) {
|
296
|
-
cl_unlock(&block->reader_lock);
|
297
|
-
cl_unlock(&block->writer_lock);
|
298
|
-
}
|
299
|
-
|
300
|
-
// Returns with writer_lock held.
|
301
|
-
static void* cl_block_start_write(cl_block* block, size_t size) {
|
302
|
-
if (!cl_try_lock(&block->writer_lock)) {
|
303
|
-
return NULL;
|
304
|
-
}
|
305
|
-
size_t bytes_committed = cl_block_get_bytes_committed(block);
|
306
|
-
if (bytes_committed + size > CENSUS_LOG_MAX_RECORD_SIZE) {
|
307
|
-
cl_unlock(&block->writer_lock);
|
308
|
-
return NULL;
|
309
|
-
}
|
310
|
-
return block->buffer + bytes_committed;
|
311
|
-
}
|
312
|
-
|
313
|
-
// Releases writer_lock and increments committed bytes by 'bytes_written'.
|
314
|
-
// 'bytes_written' must be <= 'size' specified in the corresponding
|
315
|
-
// StartWrite() call. This function is thread-safe.
|
316
|
-
static void cl_block_end_write(cl_block* block, size_t bytes_written) {
|
317
|
-
cl_block_set_bytes_committed(
|
318
|
-
block, cl_block_get_bytes_committed(block) + bytes_written);
|
319
|
-
cl_unlock(&block->writer_lock);
|
320
|
-
}
|
321
|
-
|
322
|
-
// Returns a pointer to the first unread byte in buffer. The number of bytes
|
323
|
-
// available are returned in 'bytes_available'. Acquires reader lock that is
|
324
|
-
// released by a subsequent cl_block_end_read() call. Returns NULL if:
|
325
|
-
// - read in progress
|
326
|
-
// - no data available
|
327
|
-
static void* cl_block_start_read(cl_block* block, size_t* bytes_available) {
|
328
|
-
if (!cl_try_lock(&block->reader_lock)) {
|
329
|
-
return NULL;
|
330
|
-
}
|
331
|
-
// bytes_committed may change from under us. Use bytes_available to update
|
332
|
-
// bytes_read below.
|
333
|
-
size_t bytes_committed = cl_block_get_bytes_committed(block);
|
334
|
-
GPR_ASSERT(bytes_committed >= block->bytes_read);
|
335
|
-
*bytes_available = bytes_committed - block->bytes_read;
|
336
|
-
if (*bytes_available == 0) {
|
337
|
-
cl_unlock(&block->reader_lock);
|
338
|
-
return NULL;
|
339
|
-
}
|
340
|
-
void* record = block->buffer + block->bytes_read;
|
341
|
-
block->bytes_read += *bytes_available;
|
342
|
-
return record;
|
343
|
-
}
|
344
|
-
|
345
|
-
static void cl_block_end_read(cl_block* block) {
|
346
|
-
cl_unlock(&block->reader_lock);
|
347
|
-
}
|
348
|
-
|
349
|
-
// Internal functions operating on g_log
|
350
|
-
|
351
|
-
// Allocates a new free block (or recycles an available dirty block if log is
|
352
|
-
// configured to discard old records). Returns NULL if out-of-space.
|
353
|
-
static cl_block* cl_allocate_block(void) {
|
354
|
-
cl_block* block = cl_block_list_head(&g_log.free_block_list);
|
355
|
-
if (block != NULL) {
|
356
|
-
cl_block_list_remove(&g_log.free_block_list, block);
|
357
|
-
return block;
|
358
|
-
}
|
359
|
-
if (!g_log.discard_old_records) {
|
360
|
-
// No free block and log is configured to keep old records.
|
361
|
-
return NULL;
|
362
|
-
}
|
363
|
-
// Recycle dirty block. Start from the oldest.
|
364
|
-
for (block = cl_block_list_head(&g_log.dirty_block_list); block != NULL;
|
365
|
-
block = block->link.next->block) {
|
366
|
-
if (cl_block_try_disable_access(block, 1 /* discard data */)) {
|
367
|
-
cl_block_list_remove(&g_log.dirty_block_list, block);
|
368
|
-
return block;
|
369
|
-
}
|
370
|
-
}
|
371
|
-
return NULL;
|
372
|
-
}
|
373
|
-
|
374
|
-
// Allocates a new block and updates core id => block mapping. 'old_block'
|
375
|
-
// points to the block that the caller thinks is attached to
|
376
|
-
// 'core_id'. 'old_block' may be NULL. Returns true if:
|
377
|
-
// - allocated a new block OR
|
378
|
-
// - 'core_id' => 'old_block' mapping changed (another thread allocated a
|
379
|
-
// block before lock was acquired).
|
380
|
-
static bool cl_allocate_core_local_block(uint32_t core_id,
|
381
|
-
cl_block* old_block) {
|
382
|
-
// Now that we have the lock, check if core-local mapping has changed.
|
383
|
-
cl_core_local_block* core_local_block = &g_log.core_local_blocks[core_id];
|
384
|
-
cl_block* block = cl_core_local_block_get_block(core_local_block);
|
385
|
-
if ((block != NULL) && (block != old_block)) {
|
386
|
-
return true;
|
387
|
-
}
|
388
|
-
if (block != NULL) {
|
389
|
-
cl_core_local_block_set_block(core_local_block, NULL);
|
390
|
-
cl_block_list_insert_at_tail(&g_log.dirty_block_list, block);
|
391
|
-
}
|
392
|
-
block = cl_allocate_block();
|
393
|
-
if (block == NULL) {
|
394
|
-
return false;
|
395
|
-
}
|
396
|
-
cl_core_local_block_set_block(core_local_block, block);
|
397
|
-
cl_block_enable_access(block);
|
398
|
-
return true;
|
399
|
-
}
|
400
|
-
|
401
|
-
static cl_block* cl_get_block(void* record) {
|
402
|
-
uintptr_t p = (uintptr_t)((char*)record - g_log.buffer);
|
403
|
-
uintptr_t index = p >> CENSUS_LOG_2_MAX_RECORD_SIZE;
|
404
|
-
return &g_log.blocks[index];
|
405
|
-
}
|
406
|
-
|
407
|
-
// Gets the next block to read and tries to free 'prev' block (if not NULL).
|
408
|
-
// Returns NULL if reached the end.
|
409
|
-
static cl_block* cl_next_block_to_read(cl_block* prev) {
|
410
|
-
cl_block* block = NULL;
|
411
|
-
if (g_log.read_iterator_state == g_log.num_cores) {
|
412
|
-
// We are traversing dirty list; find the next dirty block.
|
413
|
-
if (prev != NULL) {
|
414
|
-
// Try to free the previous block if there is no unread data. This
|
415
|
-
// block
|
416
|
-
// may have unread data if previously incomplete record completed
|
417
|
-
// between
|
418
|
-
// read_next() calls.
|
419
|
-
block = prev->link.next->block;
|
420
|
-
if (cl_block_try_disable_access(prev, 0 /* do not discard data */)) {
|
421
|
-
cl_block_list_remove(&g_log.dirty_block_list, prev);
|
422
|
-
cl_block_list_insert_at_head(&g_log.free_block_list, prev);
|
423
|
-
}
|
424
|
-
} else {
|
425
|
-
block = cl_block_list_head(&g_log.dirty_block_list);
|
426
|
-
}
|
427
|
-
if (block != NULL) {
|
428
|
-
return block;
|
429
|
-
}
|
430
|
-
// We are done with the dirty list; moving on to core-local blocks.
|
431
|
-
}
|
432
|
-
while (g_log.read_iterator_state > 0) {
|
433
|
-
g_log.read_iterator_state--;
|
434
|
-
block = cl_core_local_block_get_block(
|
435
|
-
&g_log.core_local_blocks[g_log.read_iterator_state]);
|
436
|
-
if (block != NULL) {
|
437
|
-
return block;
|
438
|
-
}
|
439
|
-
}
|
440
|
-
return NULL;
|
441
|
-
}
|
442
|
-
|
443
|
-
#define CL_LOG_2_MB 20 // 2^20 = 1MB
|
444
|
-
|
445
|
-
// External functions: primary stats_log interface
|
446
|
-
void census_log_initialize(size_t size_in_mb, int discard_old_records) {
|
447
|
-
// Check cacheline alignment.
|
448
|
-
GPR_ASSERT(sizeof(cl_block) % GPR_CACHELINE_SIZE == 0);
|
449
|
-
GPR_ASSERT(sizeof(cl_core_local_block) % GPR_CACHELINE_SIZE == 0);
|
450
|
-
GPR_ASSERT(!g_log.initialized);
|
451
|
-
g_log.discard_old_records = discard_old_records;
|
452
|
-
g_log.num_cores = gpr_cpu_num_cores();
|
453
|
-
// Ensure that we will not get any overflow in calaculating num_blocks
|
454
|
-
GPR_ASSERT(CL_LOG_2_MB >= CENSUS_LOG_2_MAX_RECORD_SIZE);
|
455
|
-
GPR_ASSERT(size_in_mb < 1000);
|
456
|
-
// Ensure at least 2x as many blocks as there are cores.
|
457
|
-
g_log.num_blocks =
|
458
|
-
(uint32_t)GPR_MAX(2 * g_log.num_cores, (size_in_mb << CL_LOG_2_MB) >>
|
459
|
-
CENSUS_LOG_2_MAX_RECORD_SIZE);
|
460
|
-
gpr_mu_init(&g_log.lock);
|
461
|
-
g_log.read_iterator_state = 0;
|
462
|
-
g_log.block_being_read = NULL;
|
463
|
-
g_log.core_local_blocks = (cl_core_local_block*)gpr_malloc_aligned(
|
464
|
-
g_log.num_cores * sizeof(cl_core_local_block), GPR_CACHELINE_SIZE_LOG);
|
465
|
-
memset(g_log.core_local_blocks, 0,
|
466
|
-
g_log.num_cores * sizeof(cl_core_local_block));
|
467
|
-
g_log.blocks = (cl_block*)gpr_malloc_aligned(
|
468
|
-
g_log.num_blocks * sizeof(cl_block), GPR_CACHELINE_SIZE_LOG);
|
469
|
-
memset(g_log.blocks, 0, g_log.num_blocks * sizeof(cl_block));
|
470
|
-
g_log.buffer =
|
471
|
-
(char*)gpr_malloc(g_log.num_blocks * CENSUS_LOG_MAX_RECORD_SIZE);
|
472
|
-
memset(g_log.buffer, 0, g_log.num_blocks * CENSUS_LOG_MAX_RECORD_SIZE);
|
473
|
-
cl_block_list_initialize(&g_log.free_block_list);
|
474
|
-
cl_block_list_initialize(&g_log.dirty_block_list);
|
475
|
-
for (uint32_t i = 0; i < g_log.num_blocks; ++i) {
|
476
|
-
cl_block* block = g_log.blocks + i;
|
477
|
-
cl_block_initialize(block, g_log.buffer + (CENSUS_LOG_MAX_RECORD_SIZE * i));
|
478
|
-
cl_block_try_disable_access(block, 1 /* discard data */);
|
479
|
-
cl_block_list_insert_at_tail(&g_log.free_block_list, block);
|
480
|
-
}
|
481
|
-
gpr_atm_rel_store(&g_log.out_of_space_count, 0);
|
482
|
-
g_log.initialized = 1;
|
483
|
-
}
|
484
|
-
|
485
|
-
void census_log_shutdown(void) {
|
486
|
-
GPR_ASSERT(g_log.initialized);
|
487
|
-
gpr_mu_destroy(&g_log.lock);
|
488
|
-
gpr_free_aligned(g_log.core_local_blocks);
|
489
|
-
g_log.core_local_blocks = NULL;
|
490
|
-
gpr_free_aligned(g_log.blocks);
|
491
|
-
g_log.blocks = NULL;
|
492
|
-
gpr_free(g_log.buffer);
|
493
|
-
g_log.buffer = NULL;
|
494
|
-
g_log.initialized = 0;
|
495
|
-
}
|
496
|
-
|
497
|
-
void* census_log_start_write(size_t size) {
|
498
|
-
// Used to bound number of times block allocation is attempted.
|
499
|
-
GPR_ASSERT(size > 0);
|
500
|
-
GPR_ASSERT(g_log.initialized);
|
501
|
-
if (size > CENSUS_LOG_MAX_RECORD_SIZE) {
|
502
|
-
return NULL;
|
503
|
-
}
|
504
|
-
uint32_t attempts_remaining = g_log.num_blocks;
|
505
|
-
uint32_t core_id = gpr_cpu_current_cpu();
|
506
|
-
do {
|
507
|
-
void* record = NULL;
|
508
|
-
cl_block* block =
|
509
|
-
cl_core_local_block_get_block(&g_log.core_local_blocks[core_id]);
|
510
|
-
if (block && (record = cl_block_start_write(block, size))) {
|
511
|
-
return record;
|
512
|
-
}
|
513
|
-
// Need to allocate a new block. We are here if:
|
514
|
-
// - No block associated with the core OR
|
515
|
-
// - Write in-progress on the block OR
|
516
|
-
// - block is out of space
|
517
|
-
gpr_mu_lock(&g_log.lock);
|
518
|
-
bool allocated = cl_allocate_core_local_block(core_id, block);
|
519
|
-
gpr_mu_unlock(&g_log.lock);
|
520
|
-
if (!allocated) {
|
521
|
-
gpr_atm_no_barrier_fetch_add(&g_log.out_of_space_count, 1);
|
522
|
-
return NULL;
|
523
|
-
}
|
524
|
-
} while (attempts_remaining--);
|
525
|
-
// Give up.
|
526
|
-
gpr_atm_no_barrier_fetch_add(&g_log.out_of_space_count, 1);
|
527
|
-
return NULL;
|
528
|
-
}
|
529
|
-
|
530
|
-
void census_log_end_write(void* record, size_t bytes_written) {
|
531
|
-
GPR_ASSERT(g_log.initialized);
|
532
|
-
cl_block_end_write(cl_get_block(record), bytes_written);
|
533
|
-
}
|
534
|
-
|
535
|
-
void census_log_init_reader(void) {
|
536
|
-
GPR_ASSERT(g_log.initialized);
|
537
|
-
gpr_mu_lock(&g_log.lock);
|
538
|
-
// If a block is locked for reading unlock it.
|
539
|
-
if (g_log.block_being_read != NULL) {
|
540
|
-
cl_block_end_read(g_log.block_being_read);
|
541
|
-
g_log.block_being_read = NULL;
|
542
|
-
}
|
543
|
-
g_log.read_iterator_state = g_log.num_cores;
|
544
|
-
gpr_mu_unlock(&g_log.lock);
|
545
|
-
}
|
546
|
-
|
547
|
-
const void* census_log_read_next(size_t* bytes_available) {
|
548
|
-
GPR_ASSERT(g_log.initialized);
|
549
|
-
gpr_mu_lock(&g_log.lock);
|
550
|
-
if (g_log.block_being_read != NULL) {
|
551
|
-
cl_block_end_read(g_log.block_being_read);
|
552
|
-
}
|
553
|
-
do {
|
554
|
-
g_log.block_being_read = cl_next_block_to_read(g_log.block_being_read);
|
555
|
-
if (g_log.block_being_read != NULL) {
|
556
|
-
void* record =
|
557
|
-
cl_block_start_read(g_log.block_being_read, bytes_available);
|
558
|
-
if (record != NULL) {
|
559
|
-
gpr_mu_unlock(&g_log.lock);
|
560
|
-
return record;
|
561
|
-
}
|
562
|
-
}
|
563
|
-
} while (g_log.block_being_read != NULL);
|
564
|
-
gpr_mu_unlock(&g_log.lock);
|
565
|
-
return NULL;
|
566
|
-
}
|
567
|
-
|
568
|
-
size_t census_log_remaining_space(void) {
|
569
|
-
GPR_ASSERT(g_log.initialized);
|
570
|
-
size_t space = 0;
|
571
|
-
gpr_mu_lock(&g_log.lock);
|
572
|
-
if (g_log.discard_old_records) {
|
573
|
-
// Remaining space is not meaningful; just return the entire log space.
|
574
|
-
space = g_log.num_blocks << CENSUS_LOG_2_MAX_RECORD_SIZE;
|
575
|
-
} else {
|
576
|
-
GPR_ASSERT(g_log.free_block_list.count >= 0);
|
577
|
-
space = (size_t)g_log.free_block_list.count * CENSUS_LOG_MAX_RECORD_SIZE;
|
578
|
-
}
|
579
|
-
gpr_mu_unlock(&g_log.lock);
|
580
|
-
return space;
|
581
|
-
}
|
582
|
-
|
583
|
-
int64_t census_log_out_of_space_count(void) {
|
584
|
-
GPR_ASSERT(g_log.initialized);
|
585
|
-
return gpr_atm_acq_load(&g_log.out_of_space_count);
|
586
|
-
}
|