grpc 1.23.1 → 1.24.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +757 -477
- data/include/grpc/grpc.h +3 -1
- data/include/grpc/grpc_security.h +20 -4
- data/include/grpc/impl/codegen/grpc_types.h +6 -5
- data/include/grpc/impl/codegen/port_platform.h +25 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +78 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +16 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +325 -267
- data/src/core/ext/filters/client_channel/client_channel_factory.h +0 -4
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +23 -32
- data/src/core/ext/filters/client_channel/http_proxy.cc +7 -3
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +58 -34
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -50
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +35 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +130 -215
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +34 -21
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1120 -802
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +8 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +33 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +151 -40
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +184 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +389 -245
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +98 -60
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +3 -8
- data/src/core/ext/filters/client_channel/server_address.cc +1 -3
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel.h +2 -1
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +207 -29
- data/src/core/ext/filters/http/client/http_client_filter.cc +10 -8
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +10 -7
- data/src/core/ext/filters/http/server/http_server_filter.cc +52 -26
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -20
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +24 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +37 -24
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +237 -191
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +29 -27
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +19 -4
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +13 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +99 -71
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +222 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +818 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +314 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1142 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +158 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +49 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +240 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +110 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +324 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +235 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +661 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +84 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +274 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +175 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +572 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +150 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +596 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +95 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +308 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +128 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +392 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +236 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +324 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +23 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +50 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +130 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +39 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +87 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +39 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +85 -0
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +30 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
- data/src/core/ext/upb-generated/google/api/http.upb.h +190 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +58 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +485 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1690 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +58 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +50 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +215 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +58 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +238 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +126 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +209 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +681 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +109 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +84 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +133 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +359 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +144 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +443 -0
- data/src/core/ext/upb-generated/validate/validate.upb.h +2037 -0
- data/src/core/lib/channel/channel_args.cc +21 -0
- data/src/core/lib/channel/channel_args.h +16 -2
- data/src/core/lib/channel/channel_stack.h +2 -1
- data/src/core/lib/channel/channelz.cc +54 -56
- data/src/core/lib/channel/channelz.h +29 -12
- data/src/core/lib/compression/compression.cc +2 -1
- data/src/core/lib/compression/compression_internal.h +8 -0
- data/src/core/lib/gpr/log_linux.cc +2 -2
- data/src/core/lib/gpr/log_posix.cc +2 -2
- data/src/core/lib/gpr/time_precise.cc +123 -36
- data/src/core/lib/gpr/time_precise.h +37 -0
- data/src/core/lib/gprpp/abstract.h +10 -0
- data/src/core/lib/gprpp/atomic.h +4 -0
- data/src/core/lib/gprpp/inlined_vector.h +20 -4
- data/src/core/lib/gprpp/map.h +109 -6
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/iomgr/ev_epollex_linux.cc +29 -54
- data/src/core/lib/iomgr/exec_ctx.cc +27 -17
- data/src/core/lib/iomgr/exec_ctx.h +3 -0
- data/src/core/lib/iomgr/sockaddr_utils.cc +1 -3
- data/src/core/lib/iomgr/tcp_posix.cc +16 -25
- data/src/core/lib/iomgr/tcp_server_custom.cc +1 -1
- data/src/core/lib/iomgr/timer_manager.cc +8 -1
- data/src/core/lib/iomgr/timer_manager.h +2 -0
- data/src/core/lib/security/credentials/credentials.h +8 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -6
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
- data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +161 -49
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +34 -1
- data/src/core/lib/slice/slice_intern.cc +17 -9
- data/src/core/lib/slice/slice_internal.h +34 -7
- data/src/core/lib/slice/slice_utils.h +7 -3
- data/src/core/lib/surface/call.cc +97 -57
- data/src/core/lib/surface/channel.cc +2 -2
- data/src/core/lib/surface/completion_queue.cc +10 -16
- data/src/core/lib/surface/init.cc +3 -0
- data/src/core/lib/surface/server.cc +11 -14
- data/src/core/lib/surface/validate_metadata.cc +4 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/metadata.cc +4 -4
- data/src/core/lib/transport/metadata_batch.cc +72 -16
- data/src/core/lib/transport/metadata_batch.h +38 -0
- data/src/core/lib/transport/static_metadata.cc +814 -1023
- data/src/core/lib/transport/static_metadata.h +271 -213
- data/src/core/lib/transport/transport.h +12 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +104 -76
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +34 -16
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +10 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +74 -48
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +34 -26
- data/src/core/tsi/ssl_transport_security.cc +14 -6
- data/src/core/tsi/ssl_transport_security.h +4 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +6 -0
- data/src/ruby/ext/grpc/extconf.rb +5 -0
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
- data/src/ruby/ext/grpc/rb_grpc.c +1 -42
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc.rb +2 -0
- data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
- data/src/ruby/lib/grpc/errors.rb +4 -7
- data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
- data/src/ruby/lib/grpc/structs.rb +15 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/errors_spec.rb +1 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +34 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +53 -29
- data/third_party/upb/upb/decode.c +604 -0
- data/third_party/upb/upb/decode.h +21 -0
- data/third_party/upb/upb/encode.c +378 -0
- data/third_party/upb/upb/encode.h +21 -0
- data/third_party/upb/upb/generated_util.h +105 -0
- data/third_party/upb/upb/msg.c +111 -0
- data/third_party/upb/upb/msg.h +69 -0
- data/third_party/upb/upb/port.c +27 -0
- data/third_party/upb/upb/port_def.inc +152 -0
- data/third_party/upb/upb/port_undef.inc +21 -0
- data/third_party/upb/upb/table.c +911 -0
- data/third_party/upb/upb/table.int.h +507 -0
- data/third_party/upb/upb/upb.c +261 -0
- data/third_party/upb/upb/upb.h +364 -0
- metadata +134 -55
- data/src/core/ext/filters/client_channel/health/health.pb.c +0 -23
- data/src/core/ext/filters/client_channel/health/health.pb.h +0 -73
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -145
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
- data/third_party/nanopb/pb.h +0 -579
- data/third_party/nanopb/pb_common.c +0 -97
- data/third_party/nanopb/pb_common.h +0 -42
- data/third_party/nanopb/pb_decode.c +0 -1347
- data/third_party/nanopb/pb_decode.h +0 -149
- data/third_party/nanopb/pb_encode.c +0 -696
- data/third_party/nanopb/pb_encode.h +0 -154
@@ -21,9 +21,46 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <grpc/impl/codegen/gpr_types.h>
|
24
25
|
#include <grpc/support/time.h>
|
25
26
|
|
27
|
+
// Depending on the platform gpr_get_cycle_counter() can have a resolution as
|
28
|
+
// low as a usec. Use other clock sources or gpr_precise_clock_now(),
|
29
|
+
// where you need high resolution clocks.
|
30
|
+
//
|
31
|
+
// Using gpr_get_cycle_counter() is preferred to using ExecCtx::Get()->Now()
|
32
|
+
// whenever possible.
|
33
|
+
|
34
|
+
#if GPR_CYCLE_COUNTER_RDTSC_32
|
35
|
+
typedef int64_t gpr_cycle_counter;
|
36
|
+
inline gpr_cycle_counter gpr_get_cycle_counter() {
|
37
|
+
int64_t ret;
|
38
|
+
__asm__ volatile("rdtsc" : "=A"(ret));
|
39
|
+
return ret;
|
40
|
+
}
|
41
|
+
#elif GPR_CYCLE_COUNTER_RDTSC_64
|
42
|
+
typedef int64_t gpr_cycle_counter;
|
43
|
+
inline gpr_cycle_counter gpr_get_cycle_counter() {
|
44
|
+
uint64_t low, high;
|
45
|
+
__asm__ volatile("rdtsc" : "=a"(low), "=d"(high));
|
46
|
+
return (high << 32) | low;
|
47
|
+
}
|
48
|
+
#elif GPR_CYCLE_COUNTER_FALLBACK
|
49
|
+
// TODO(soheil): add support for mrs on Arm.
|
50
|
+
|
51
|
+
// Real time in micros.
|
52
|
+
typedef double gpr_cycle_counter;
|
53
|
+
gpr_cycle_counter gpr_get_cycle_counter();
|
54
|
+
#else
|
55
|
+
#error Must define exactly one of \
|
56
|
+
GPR_CYCLE_COUNTER_RDTSC_32, \
|
57
|
+
GPR_CYCLE_COUNTER_RDTSC_64, or \
|
58
|
+
GPR_CYCLE_COUNTER_FALLBACK
|
59
|
+
#endif
|
60
|
+
|
26
61
|
void gpr_precise_clock_init(void);
|
27
62
|
void gpr_precise_clock_now(gpr_timespec* clk);
|
63
|
+
gpr_timespec gpr_cycle_counter_to_time(gpr_cycle_counter cycles);
|
64
|
+
gpr_timespec gpr_cycle_counter_sub(gpr_cycle_counter a, gpr_cycle_counter b);
|
28
65
|
|
29
66
|
#endif /* GRPC_CORE_LIB_GPR_TIME_PRECISE_H */
|
@@ -19,6 +19,14 @@
|
|
19
19
|
#ifndef GRPC_CORE_LIB_GPRPP_ABSTRACT_H
|
20
20
|
#define GRPC_CORE_LIB_GPRPP_ABSTRACT_H
|
21
21
|
|
22
|
+
#if GRPC_USE_CPP_STD_LIB
|
23
|
+
|
24
|
+
#define GRPC_ABSTRACT_BASE_CLASS
|
25
|
+
|
26
|
+
#define GRPC_ABSTRACT = 0
|
27
|
+
|
28
|
+
#else
|
29
|
+
|
22
30
|
// This is needed to support abstract base classes in the c core. Since gRPC
|
23
31
|
// doesn't have a c++ runtime, it will hit a linker error on delete unless
|
24
32
|
// we define a virtual operator delete. See this blog for more info:
|
@@ -34,4 +42,6 @@
|
|
34
42
|
GPR_ASSERT(false); \
|
35
43
|
}
|
36
44
|
|
45
|
+
#endif // GRPC_USE_CPP_STD_LIB
|
46
|
+
|
37
47
|
#endif /* GRPC_CORE_LIB_GPRPP_ABSTRACT_H */
|
data/src/core/lib/gprpp/atomic.h
CHANGED
@@ -49,6 +49,10 @@ class Atomic {
|
|
49
49
|
storage_.store(val, static_cast<std::memory_order>(order));
|
50
50
|
}
|
51
51
|
|
52
|
+
T Exchange(T desired, MemoryOrder order) {
|
53
|
+
return storage_.exchange(desired, static_cast<std::memory_order>(order));
|
54
|
+
}
|
55
|
+
|
52
56
|
bool CompareExchangeWeak(T* expected, T desired, MemoryOrder success,
|
53
57
|
MemoryOrder failure) {
|
54
58
|
return GPR_ATM_INC_CAS_THEN(storage_.compare_exchange_weak(
|
@@ -100,16 +100,22 @@ class InlinedVector {
|
|
100
100
|
bool operator==(const InlinedVector& other) const {
|
101
101
|
if (size_ != other.size_) return false;
|
102
102
|
for (size_t i = 0; i < size_; ++i) {
|
103
|
-
|
103
|
+
// Note that this uses == instead of != so that the data class doesn't
|
104
|
+
// have to implement !=.
|
105
|
+
if (!(data()[i] == other.data()[i])) return false;
|
104
106
|
}
|
105
107
|
return true;
|
106
108
|
}
|
107
109
|
|
108
110
|
void reserve(size_t capacity) {
|
109
111
|
if (capacity > capacity_) {
|
110
|
-
T* new_dynamic =
|
112
|
+
T* new_dynamic =
|
113
|
+
std::alignment_of<T>::value == 0
|
114
|
+
? static_cast<T*>(gpr_malloc(sizeof(T) * capacity))
|
115
|
+
: static_cast<T*>(gpr_malloc_aligned(
|
116
|
+
sizeof(T) * capacity, std::alignment_of<T>::value));
|
111
117
|
move_elements(data(), new_dynamic, size_);
|
112
|
-
|
118
|
+
free_dynamic();
|
113
119
|
dynamic_ = new_dynamic;
|
114
120
|
capacity_ = capacity;
|
115
121
|
}
|
@@ -194,7 +200,17 @@ class InlinedVector {
|
|
194
200
|
T& value = data()[i];
|
195
201
|
value.~T();
|
196
202
|
}
|
197
|
-
|
203
|
+
free_dynamic();
|
204
|
+
}
|
205
|
+
|
206
|
+
void free_dynamic() {
|
207
|
+
if (dynamic_ != nullptr) {
|
208
|
+
if (std::alignment_of<T>::value == 0) {
|
209
|
+
gpr_free(dynamic_);
|
210
|
+
} else {
|
211
|
+
gpr_free_aligned(dynamic_);
|
212
|
+
}
|
213
|
+
}
|
198
214
|
}
|
199
215
|
|
200
216
|
typename std::aligned_storage<sizeof(T)>::type inline_[N];
|
data/src/core/lib/gprpp/map.h
CHANGED
@@ -27,28 +27,48 @@
|
|
27
27
|
#include <functional>
|
28
28
|
#include <iterator>
|
29
29
|
|
30
|
+
#if GRPC_USE_CPP_STD_LIB
|
31
|
+
#include <map>
|
32
|
+
#endif
|
33
|
+
|
30
34
|
#include "src/core/lib/gpr/useful.h"
|
31
35
|
#include "src/core/lib/gprpp/memory.h"
|
32
36
|
#include "src/core/lib/gprpp/pair.h"
|
33
37
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
38
|
+
#include "src/core/lib/gprpp/string_view.h"
|
34
39
|
|
35
40
|
namespace grpc_core {
|
41
|
+
|
36
42
|
struct StringLess {
|
37
43
|
bool operator()(const char* a, const char* b) const {
|
38
44
|
return strcmp(a, b) < 0;
|
39
45
|
}
|
40
|
-
bool operator()(const UniquePtr<char>&
|
41
|
-
return strcmp(
|
46
|
+
bool operator()(const UniquePtr<char>& a, const UniquePtr<char>& b) const {
|
47
|
+
return strcmp(a.get(), b.get()) < 0;
|
48
|
+
}
|
49
|
+
bool operator()(const StringView& a, const StringView& b) const {
|
50
|
+
const size_t min_size = std::min(a.size(), b.size());
|
51
|
+
int c = strncmp(a.data(), b.data(), min_size);
|
52
|
+
if (c != 0) return c < 0;
|
53
|
+
return a.size() < b.size();
|
42
54
|
}
|
43
55
|
};
|
44
56
|
|
45
57
|
template <typename T>
|
46
58
|
struct RefCountedPtrLess {
|
47
|
-
bool operator()(const RefCountedPtr<T>& p1,
|
59
|
+
bool operator()(const RefCountedPtr<T>& p1,
|
60
|
+
const RefCountedPtr<T>& p2) const {
|
48
61
|
return p1.get() < p2.get();
|
49
62
|
}
|
50
63
|
};
|
51
64
|
|
65
|
+
#if GRPC_USE_CPP_STD_LIB
|
66
|
+
|
67
|
+
template <class Key, class T, class Compare = std::less<Key>>
|
68
|
+
using Map = std::map<Key, T, Compare>;
|
69
|
+
|
70
|
+
#else // GRPC_USE_CPP_STD_LIB
|
71
|
+
|
52
72
|
namespace testing {
|
53
73
|
class MapTest;
|
54
74
|
}
|
@@ -62,6 +82,7 @@ class Map {
|
|
62
82
|
typedef Pair<key_type, mapped_type> value_type;
|
63
83
|
typedef Compare key_compare;
|
64
84
|
class iterator;
|
85
|
+
class const_iterator;
|
65
86
|
|
66
87
|
Map() = default;
|
67
88
|
~Map() { clear(); }
|
@@ -82,6 +103,22 @@ class Map {
|
|
82
103
|
return *this;
|
83
104
|
}
|
84
105
|
|
106
|
+
// Copyable.
|
107
|
+
Map(const Map& other) {
|
108
|
+
for (const auto& p : other) {
|
109
|
+
emplace(p);
|
110
|
+
}
|
111
|
+
}
|
112
|
+
Map& operator=(const Map& other) {
|
113
|
+
if (this != &other) {
|
114
|
+
clear();
|
115
|
+
for (const auto& p : other) {
|
116
|
+
emplace(p);
|
117
|
+
}
|
118
|
+
}
|
119
|
+
return *this;
|
120
|
+
}
|
121
|
+
|
85
122
|
T& operator[](key_type&& key);
|
86
123
|
T& operator[](const key_type& key);
|
87
124
|
iterator find(const key_type& k);
|
@@ -89,7 +126,7 @@ class Map {
|
|
89
126
|
// Removes the current entry and points to the next one
|
90
127
|
iterator erase(iterator iter);
|
91
128
|
|
92
|
-
size_t size() { return size_; }
|
129
|
+
size_t size() const { return size_; }
|
93
130
|
|
94
131
|
template <class... Args>
|
95
132
|
Pair<iterator, bool> emplace(Args&&... args);
|
@@ -116,8 +153,19 @@ class Map {
|
|
116
153
|
|
117
154
|
iterator end() { return iterator(this, nullptr); }
|
118
155
|
|
156
|
+
const_iterator begin() const {
|
157
|
+
Entry* curr = GetMinEntry(root_);
|
158
|
+
return const_iterator(this, curr);
|
159
|
+
}
|
160
|
+
|
161
|
+
const_iterator end() const { return const_iterator(this, nullptr); }
|
162
|
+
|
119
163
|
iterator lower_bound(const Key& k) {
|
120
|
-
key_compare compare;
|
164
|
+
// This is a workaround for "const key_compare compare;"
|
165
|
+
// because some versions of compilers cannot build this by requiring
|
166
|
+
// a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
|
167
|
+
key_compare compare_tmp;
|
168
|
+
const key_compare& compare = compare_tmp;
|
121
169
|
return std::find_if(begin(), end(), [&k, &compare](const value_type& v) {
|
122
170
|
return !compare(v.first, k);
|
123
171
|
});
|
@@ -204,6 +252,53 @@ class Map<Key, T, Compare>::iterator
|
|
204
252
|
GrpcMap* map_;
|
205
253
|
};
|
206
254
|
|
255
|
+
template <class Key, class T, class Compare>
|
256
|
+
class Map<Key, T, Compare>::const_iterator
|
257
|
+
: public std::iterator<std::input_iterator_tag, Pair<Key, T>, int32_t,
|
258
|
+
Pair<Key, T>*, Pair<Key, T>&> {
|
259
|
+
public:
|
260
|
+
const_iterator(const const_iterator& iter)
|
261
|
+
: curr_(iter.curr_), map_(iter.map_) {}
|
262
|
+
bool operator==(const const_iterator& rhs) const {
|
263
|
+
return (curr_ == rhs.curr_);
|
264
|
+
}
|
265
|
+
bool operator!=(const const_iterator& rhs) const {
|
266
|
+
return (curr_ != rhs.curr_);
|
267
|
+
}
|
268
|
+
|
269
|
+
const_iterator& operator++() {
|
270
|
+
curr_ = map_->InOrderSuccessor(curr_);
|
271
|
+
return *this;
|
272
|
+
}
|
273
|
+
|
274
|
+
const_iterator operator++(int) {
|
275
|
+
Entry* prev = curr_;
|
276
|
+
curr_ = map_->InOrderSuccessor(curr_);
|
277
|
+
return const_iterator(map_, prev);
|
278
|
+
}
|
279
|
+
|
280
|
+
const_iterator& operator=(const const_iterator& other) {
|
281
|
+
if (this != &other) {
|
282
|
+
this->curr_ = other.curr_;
|
283
|
+
this->map_ = other.map_;
|
284
|
+
}
|
285
|
+
return *this;
|
286
|
+
}
|
287
|
+
|
288
|
+
// operator*()
|
289
|
+
const value_type& operator*() const { return curr_->pair; }
|
290
|
+
|
291
|
+
// operator->()
|
292
|
+
const value_type* operator->() const { return &curr_->pair; }
|
293
|
+
|
294
|
+
private:
|
295
|
+
friend class Map<key_type, mapped_type, key_compare>;
|
296
|
+
using GrpcMap = typename ::grpc_core::Map<Key, T, Compare>;
|
297
|
+
const_iterator(const GrpcMap* map, Entry* curr) : curr_(curr), map_(map) {}
|
298
|
+
Entry* curr_;
|
299
|
+
const GrpcMap* map_;
|
300
|
+
};
|
301
|
+
|
207
302
|
template <class Key, class T, class Compare>
|
208
303
|
T& Map<Key, T, Compare>::operator[](key_type&& key) {
|
209
304
|
auto iter = find(key);
|
@@ -448,7 +543,11 @@ Map<Key, T, Compare>::RemoveRecursive(Entry* root, const key_type& k) {
|
|
448
543
|
template <class Key, class T, class Compare>
|
449
544
|
int Map<Key, T, Compare>::CompareKeys(const key_type& lhs,
|
450
545
|
const key_type& rhs) {
|
451
|
-
key_compare compare;
|
546
|
+
// This is a workaround for "const key_compare compare;"
|
547
|
+
// because some versions of compilers cannot build this by requiring
|
548
|
+
// a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
|
549
|
+
key_compare compare_tmp;
|
550
|
+
const key_compare& compare = compare_tmp;
|
452
551
|
bool left_comparison = compare(lhs, rhs);
|
453
552
|
bool right_comparison = compare(rhs, lhs);
|
454
553
|
// Both values are equal
|
@@ -457,5 +556,9 @@ int Map<Key, T, Compare>::CompareKeys(const key_type& lhs,
|
|
457
556
|
}
|
458
557
|
return left_comparison ? -1 : 1;
|
459
558
|
}
|
559
|
+
|
560
|
+
#endif // GRPC_USE_CPP_STD_LIB
|
561
|
+
|
460
562
|
} // namespace grpc_core
|
563
|
+
|
461
564
|
#endif /* GRPC_CORE_LIB_GPRPP_MAP_H */
|
data/src/core/lib/gprpp/memory.h
CHANGED
@@ -30,6 +30,9 @@
|
|
30
30
|
|
31
31
|
// Add this to a class that want to use Delete(), but has a private or
|
32
32
|
// protected destructor.
|
33
|
+
// Should not be used in new code.
|
34
|
+
// TODO(juanlishen): Remove this macro, and instead comment that the public dtor
|
35
|
+
// should not be used directly.
|
33
36
|
#define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE \
|
34
37
|
template <typename _Delete_T, bool _Delete_can_be_null> \
|
35
38
|
friend void ::grpc_core::Delete(_Delete_T*); \
|
@@ -38,6 +41,9 @@
|
|
38
41
|
|
39
42
|
// Add this to a class that want to use New(), but has a private or
|
40
43
|
// protected constructor.
|
44
|
+
// Should not be used in new code.
|
45
|
+
// TODO(juanlishen): Remove this macro, and instead comment that the public dtor
|
46
|
+
// should not be used directly.
|
41
47
|
#define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW \
|
42
48
|
template <typename _New_T, typename... _New_Args> \
|
43
49
|
friend _New_T* grpc_core::New(_New_Args&&...);
|
@@ -103,6 +103,8 @@ class RefCountedPtr {
|
|
103
103
|
if (value_ != nullptr) value_->Unref();
|
104
104
|
}
|
105
105
|
|
106
|
+
void swap(RefCountedPtr& other) { std::swap(value_, other.value_); }
|
107
|
+
|
106
108
|
// If value is non-null, we take ownership of a ref to it.
|
107
109
|
void reset(T* value = nullptr) {
|
108
110
|
if (value_ != nullptr) value_->Unref();
|
@@ -47,6 +47,7 @@
|
|
47
47
|
#include "src/core/lib/gpr/useful.h"
|
48
48
|
#include "src/core/lib/gprpp/inlined_vector.h"
|
49
49
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
50
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
50
51
|
#include "src/core/lib/gprpp/sync.h"
|
51
52
|
#include "src/core/lib/iomgr/block_annotate.h"
|
52
53
|
#include "src/core/lib/iomgr/iomgr_internal.h"
|
@@ -89,7 +90,7 @@ typedef struct pollable pollable;
|
|
89
90
|
/// - PO_MULTI - a pollable containing many fds
|
90
91
|
struct pollable {
|
91
92
|
pollable_type type; // immutable
|
92
|
-
|
93
|
+
grpc_core::RefCount refs;
|
93
94
|
|
94
95
|
int epfd;
|
95
96
|
grpc_wakeup_fd wakeup;
|
@@ -135,17 +136,26 @@ static char* pollable_desc(pollable* p) {
|
|
135
136
|
static pollable* g_empty_pollable;
|
136
137
|
|
137
138
|
static grpc_error* pollable_create(pollable_type type, pollable** p);
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
static
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
139
|
+
static pollable* pollable_ref(pollable* p,
|
140
|
+
const grpc_core::DebugLocation& dbg_loc,
|
141
|
+
const char* reason) {
|
142
|
+
p->refs.Ref(dbg_loc, reason);
|
143
|
+
return p;
|
144
|
+
}
|
145
|
+
static void pollable_unref(pollable* p, const grpc_core::DebugLocation& dbg_loc,
|
146
|
+
const char* reason) {
|
147
|
+
if (p == nullptr) return;
|
148
|
+
if (GPR_UNLIKELY(p != nullptr && p->refs.Unref(dbg_loc, reason))) {
|
149
|
+
GRPC_FD_TRACE("pollable_unref: Closing epfd: %d", p->epfd);
|
150
|
+
close(p->epfd);
|
151
|
+
grpc_wakeup_fd_destroy(&p->wakeup);
|
152
|
+
gpr_mu_destroy(&p->owner_orphan_mu);
|
153
|
+
gpr_mu_destroy(&p->mu);
|
154
|
+
gpr_free(p);
|
155
|
+
}
|
156
|
+
}
|
157
|
+
#define POLLABLE_REF(p, r) pollable_ref((p), DEBUG_LOCATION, (r))
|
158
|
+
#define POLLABLE_UNREF(p, r) pollable_unref((p), DEBUG_LOCATION, (r))
|
149
159
|
|
150
160
|
/*******************************************************************************
|
151
161
|
* Fd Declarations
|
@@ -283,7 +293,7 @@ struct grpc_pollset {
|
|
283
293
|
*/
|
284
294
|
|
285
295
|
struct grpc_pollset_set {
|
286
|
-
|
296
|
+
grpc_core::RefCount refs;
|
287
297
|
gpr_mu mu;
|
288
298
|
grpc_pollset_set* parent;
|
289
299
|
|
@@ -568,7 +578,7 @@ static grpc_error* pollable_create(pollable_type type, pollable** p) {
|
|
568
578
|
}
|
569
579
|
|
570
580
|
(*p)->type = type;
|
571
|
-
|
581
|
+
new (&(*p)->refs) grpc_core::RefCount(1, &grpc_trace_pollable_refcount);
|
572
582
|
gpr_mu_init(&(*p)->mu);
|
573
583
|
(*p)->epfd = epfd;
|
574
584
|
(*p)->owner_fd = nullptr;
|
@@ -582,41 +592,6 @@ static grpc_error* pollable_create(pollable_type type, pollable** p) {
|
|
582
592
|
return GRPC_ERROR_NONE;
|
583
593
|
}
|
584
594
|
|
585
|
-
#ifdef NDEBUG
|
586
|
-
static pollable* pollable_ref(pollable* p) {
|
587
|
-
#else
|
588
|
-
static pollable* pollable_ref(pollable* p, int line, const char* reason) {
|
589
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_pollable_refcount)) {
|
590
|
-
int r = static_cast<int> gpr_atm_no_barrier_load(&p->refs.count);
|
591
|
-
gpr_log(__FILE__, line, GPR_LOG_SEVERITY_DEBUG,
|
592
|
-
"POLLABLE:%p ref %d->%d %s", p, r, r + 1, reason);
|
593
|
-
}
|
594
|
-
#endif
|
595
|
-
gpr_ref(&p->refs);
|
596
|
-
return p;
|
597
|
-
}
|
598
|
-
|
599
|
-
#ifdef NDEBUG
|
600
|
-
static void pollable_unref(pollable* p) {
|
601
|
-
#else
|
602
|
-
static void pollable_unref(pollable* p, int line, const char* reason) {
|
603
|
-
if (p == nullptr) return;
|
604
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_pollable_refcount)) {
|
605
|
-
int r = static_cast<int> gpr_atm_no_barrier_load(&p->refs.count);
|
606
|
-
gpr_log(__FILE__, line, GPR_LOG_SEVERITY_DEBUG,
|
607
|
-
"POLLABLE:%p unref %d->%d %s", p, r, r - 1, reason);
|
608
|
-
}
|
609
|
-
#endif
|
610
|
-
if (p != nullptr && gpr_unref(&p->refs)) {
|
611
|
-
GRPC_FD_TRACE("pollable_unref: Closing epfd: %d", p->epfd);
|
612
|
-
close(p->epfd);
|
613
|
-
grpc_wakeup_fd_destroy(&p->wakeup);
|
614
|
-
gpr_mu_destroy(&p->owner_orphan_mu);
|
615
|
-
gpr_mu_destroy(&p->mu);
|
616
|
-
gpr_free(p);
|
617
|
-
}
|
618
|
-
}
|
619
|
-
|
620
595
|
static grpc_error* pollable_add_fd(pollable* p, grpc_fd* fd) {
|
621
596
|
grpc_error* error = GRPC_ERROR_NONE;
|
622
597
|
static const char* err_desc = "pollable_add_fd";
|
@@ -1102,7 +1077,7 @@ static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
|
|
1102
1077
|
}
|
1103
1078
|
|
1104
1079
|
#ifndef NDEBUG
|
1105
|
-
static long
|
1080
|
+
static long sys_gettid(void) { return syscall(__NR_gettid); }
|
1106
1081
|
#endif
|
1107
1082
|
|
1108
1083
|
/* pollset->mu lock must be held by the caller before calling this.
|
@@ -1122,7 +1097,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
|
|
1122
1097
|
#define WORKER_PTR (&worker)
|
1123
1098
|
#endif
|
1124
1099
|
#ifndef NDEBUG
|
1125
|
-
WORKER_PTR->originator =
|
1100
|
+
WORKER_PTR->originator = sys_gettid();
|
1126
1101
|
#endif
|
1127
1102
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
|
1128
1103
|
gpr_log(GPR_INFO,
|
@@ -1331,13 +1306,13 @@ static grpc_pollset_set* pollset_set_create(void) {
|
|
1331
1306
|
grpc_pollset_set* pss =
|
1332
1307
|
static_cast<grpc_pollset_set*>(gpr_zalloc(sizeof(*pss)));
|
1333
1308
|
gpr_mu_init(&pss->mu);
|
1334
|
-
|
1309
|
+
new (&pss->refs) grpc_core::RefCount();
|
1335
1310
|
return pss;
|
1336
1311
|
}
|
1337
1312
|
|
1338
1313
|
static void pollset_set_unref(grpc_pollset_set* pss) {
|
1339
1314
|
if (pss == nullptr) return;
|
1340
|
-
if (!
|
1315
|
+
if (GPR_LIKELY(!pss->refs.Unref())) return;
|
1341
1316
|
pollset_set_unref(pss->parent);
|
1342
1317
|
gpr_mu_destroy(&pss->mu);
|
1343
1318
|
for (size_t i = 0; i < pss->pollset_count; i++) {
|
@@ -1528,7 +1503,7 @@ static void pollset_set_add_pollset_set(grpc_pollset_set* a,
|
|
1528
1503
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
|
1529
1504
|
gpr_log(GPR_INFO, "PSS: parent %p to %p", b, a);
|
1530
1505
|
}
|
1531
|
-
|
1506
|
+
a->refs.Ref();
|
1532
1507
|
b->parent = a;
|
1533
1508
|
if (a->fd_capacity < a->fd_count + b->fd_count) {
|
1534
1509
|
a->fd_capacity = GPR_MAX(2 * a->fd_capacity, a->fd_count + b->fd_count);
|