diff --git a/.gitmodules b/.gitmodules index 008bc5fae809b9327614df4a432c2d3d894f2c61..c37d0abdf0bdf70f9b97f16bf7ae6010d16c6eb5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,3 +14,6 @@ [submodule "third_party/boringssl"] path = third_party/boringssl url = https://boringssl.googlesource.com/boringssl +[submodule "third_party/nanopb"] + path = third_party/nanopb + url = https://github.com/nanopb/nanopb.git diff --git a/BUILD b/BUILD index cbaad9bff278d05534f29ee3db9f0516eb97c997..91559ff98e15f4ea3c5919f0cc1d78e8aa0e5e8b 100644 --- a/BUILD +++ b/BUILD @@ -154,20 +154,6 @@ cc_library( cc_library( name = "grpc", srcs = [ - "src/core/security/auth_filters.h", - "src/core/security/base64.h", - "src/core/security/credentials.h", - "src/core/security/handshake.h", - "src/core/security/json_token.h", - "src/core/security/jwt_verifier.h", - "src/core/security/secure_endpoint.h", - "src/core/security/security_connector.h", - "src/core/security/security_context.h", - "src/core/tsi/fake_transport_security.h", - "src/core/tsi/ssl_transport_security.h", - "src/core/tsi/ssl_types.h", - "src/core/tsi/transport_security.h", - "src/core/tsi/transport_security_interface.h", "src/core/census/grpc_filter.h", "src/core/channel/channel_args.h", "src/core/channel/channel_stack.h", @@ -182,6 +168,7 @@ cc_library( "src/core/client_config/client_config.h", "src/core/client_config/connector.h", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.h", "src/core/client_config/lb_policy.h", @@ -242,6 +229,7 @@ cc_library( "src/core/json/json_common.h", "src/core/json/json_reader.h", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/statistics/census_interface.h", "src/core/statistics/census_rpc_stats.h", "src/core/surface/api_trace.h", @@ -281,30 +269,27 @@ cc_library( "src/core/transport/static_metadata.h", "src/core/transport/transport.h", "src/core/transport/transport_impl.h", + "src/core/security/auth_filters.h", + "src/core/security/base64.h", + "src/core/security/credentials.h", + "src/core/security/handshake.h", + "src/core/security/json_token.h", + "src/core/security/jwt_verifier.h", + "src/core/security/secure_endpoint.h", + "src/core/security/security_connector.h", + "src/core/security/security_context.h", + "src/core/tsi/fake_transport_security.h", + "src/core/tsi/ssl_transport_security.h", + "src/core/tsi/ssl_types.h", + "src/core/tsi/transport_security.h", + "src/core/tsi/transport_security_interface.h", "src/core/census/aggregation.h", - "src/core/census/log.h", + "src/core/census/mlog.h", "src/core/census/rpc_metric_id.h", - "src/core/httpcli/httpcli_security_connector.c", - "src/core/security/base64.c", - "src/core/security/client_auth_filter.c", - "src/core/security/credentials.c", - "src/core/security/credentials_metadata.c", - "src/core/security/credentials_posix.c", - "src/core/security/credentials_win32.c", - "src/core/security/google_default_credentials.c", - "src/core/security/handshake.c", - "src/core/security/json_token.c", - "src/core/security/jwt_verifier.c", - "src/core/security/secure_endpoint.c", - "src/core/security/security_connector.c", - "src/core/security/security_context.c", - "src/core/security/server_auth_filter.c", - "src/core/security/server_secure_chttp2.c", - "src/core/surface/init_secure.c", - "src/core/surface/secure_channel_create.c", - "src/core/tsi/fake_transport_security.c", - "src/core/tsi/ssl_transport_security.c", - "src/core/tsi/transport_security.c", + "third_party/nanopb/pb.h", + "third_party/nanopb/pb_common.h", + "third_party/nanopb/pb_decode.h", + "third_party/nanopb/pb_encode.h", "src/core/census/grpc_context.c", "src/core/census/grpc_filter.c", "src/core/channel/channel_args.c", @@ -320,6 +305,7 @@ cc_library( "src/core/client_config/connector.c", "src/core/client_config/default_initial_connect_string.c", "src/core/client_config/initial_connect_string.c", + "src/core/client_config/lb_policies/load_balancer_api.c", "src/core/client_config/lb_policies/pick_first.c", "src/core/client_config/lb_policies/round_robin.c", "src/core/client_config/lb_policy.c", @@ -384,6 +370,7 @@ cc_library( "src/core/json/json_reader.c", "src/core/json/json_string.c", "src/core/json/json_writer.c", + "src/core/proto/grpc/lb/v0/load_balancer.pb.c", "src/core/surface/alarm.c", "src/core/surface/api_trace.c", "src/core/surface/byte_buffer.c", @@ -433,12 +420,36 @@ cc_library( "src/core/transport/static_metadata.c", "src/core/transport/transport.c", "src/core/transport/transport_op_string.c", + "src/core/httpcli/httpcli_security_connector.c", + "src/core/security/base64.c", + "src/core/security/client_auth_filter.c", + "src/core/security/credentials.c", + "src/core/security/credentials_metadata.c", + "src/core/security/credentials_posix.c", + "src/core/security/credentials_win32.c", + "src/core/security/google_default_credentials.c", + "src/core/security/handshake.c", + "src/core/security/json_token.c", + "src/core/security/jwt_verifier.c", + "src/core/security/secure_endpoint.c", + "src/core/security/security_connector.c", + "src/core/security/security_context.c", + "src/core/security/server_auth_filter.c", + "src/core/security/server_secure_chttp2.c", + "src/core/surface/init_secure.c", + "src/core/surface/secure_channel_create.c", + "src/core/tsi/fake_transport_security.c", + "src/core/tsi/ssl_transport_security.c", + "src/core/tsi/transport_security.c", "src/core/census/context.c", "src/core/census/initialize.c", - "src/core/census/log.c", + "src/core/census/mlog.c", "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/tracing.c", + "third_party/nanopb/pb_common.c", + "third_party/nanopb/pb_decode.c", + "third_party/nanopb/pb_encode.c", ], hdrs = [ "include/grpc/grpc_security.h", @@ -487,6 +498,7 @@ cc_library( "src/core/client_config/client_config.h", "src/core/client_config/connector.h", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.h", "src/core/client_config/lb_policy.h", @@ -547,6 +559,7 @@ cc_library( "src/core/json/json_common.h", "src/core/json/json_reader.h", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/statistics/census_interface.h", "src/core/statistics/census_rpc_stats.h", "src/core/surface/api_trace.h", @@ -587,8 +600,12 @@ cc_library( "src/core/transport/transport.h", "src/core/transport/transport_impl.h", "src/core/census/aggregation.h", - "src/core/census/log.h", + "src/core/census/mlog.h", "src/core/census/rpc_metric_id.h", + "third_party/nanopb/pb.h", + "third_party/nanopb/pb_common.h", + "third_party/nanopb/pb_decode.h", + "third_party/nanopb/pb_encode.h", "src/core/surface/init_unsecure.c", "src/core/census/grpc_context.c", "src/core/census/grpc_filter.c", @@ -605,6 +622,7 @@ cc_library( "src/core/client_config/connector.c", "src/core/client_config/default_initial_connect_string.c", "src/core/client_config/initial_connect_string.c", + "src/core/client_config/lb_policies/load_balancer_api.c", "src/core/client_config/lb_policies/pick_first.c", "src/core/client_config/lb_policies/round_robin.c", "src/core/client_config/lb_policy.c", @@ -669,6 +687,7 @@ cc_library( "src/core/json/json_reader.c", "src/core/json/json_string.c", "src/core/json/json_writer.c", + "src/core/proto/grpc/lb/v0/load_balancer.pb.c", "src/core/surface/alarm.c", "src/core/surface/api_trace.c", "src/core/surface/byte_buffer.c", @@ -720,10 +739,13 @@ cc_library( "src/core/transport/transport_op_string.c", "src/core/census/context.c", "src/core/census/initialize.c", - "src/core/census/log.c", + "src/core/census/mlog.c", "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/tracing.c", + "third_party/nanopb/pb_common.c", + "third_party/nanopb/pb_decode.c", + "third_party/nanopb/pb_encode.c", ], hdrs = [ "include/grpc/byte_buffer.h", @@ -1247,27 +1269,6 @@ objc_library( objc_library( name = "grpc_objc", srcs = [ - "src/core/httpcli/httpcli_security_connector.c", - "src/core/security/base64.c", - "src/core/security/client_auth_filter.c", - "src/core/security/credentials.c", - "src/core/security/credentials_metadata.c", - "src/core/security/credentials_posix.c", - "src/core/security/credentials_win32.c", - "src/core/security/google_default_credentials.c", - "src/core/security/handshake.c", - "src/core/security/json_token.c", - "src/core/security/jwt_verifier.c", - "src/core/security/secure_endpoint.c", - "src/core/security/security_connector.c", - "src/core/security/security_context.c", - "src/core/security/server_auth_filter.c", - "src/core/security/server_secure_chttp2.c", - "src/core/surface/init_secure.c", - "src/core/surface/secure_channel_create.c", - "src/core/tsi/fake_transport_security.c", - "src/core/tsi/ssl_transport_security.c", - "src/core/tsi/transport_security.c", "src/core/census/grpc_context.c", "src/core/census/grpc_filter.c", "src/core/channel/channel_args.c", @@ -1283,6 +1284,7 @@ objc_library( "src/core/client_config/connector.c", "src/core/client_config/default_initial_connect_string.c", "src/core/client_config/initial_connect_string.c", + "src/core/client_config/lb_policies/load_balancer_api.c", "src/core/client_config/lb_policies/pick_first.c", "src/core/client_config/lb_policies/round_robin.c", "src/core/client_config/lb_policy.c", @@ -1347,6 +1349,7 @@ objc_library( "src/core/json/json_reader.c", "src/core/json/json_string.c", "src/core/json/json_writer.c", + "src/core/proto/grpc/lb/v0/load_balancer.pb.c", "src/core/surface/alarm.c", "src/core/surface/api_trace.c", "src/core/surface/byte_buffer.c", @@ -1396,12 +1399,36 @@ objc_library( "src/core/transport/static_metadata.c", "src/core/transport/transport.c", "src/core/transport/transport_op_string.c", + "src/core/httpcli/httpcli_security_connector.c", + "src/core/security/base64.c", + "src/core/security/client_auth_filter.c", + "src/core/security/credentials.c", + "src/core/security/credentials_metadata.c", + "src/core/security/credentials_posix.c", + "src/core/security/credentials_win32.c", + "src/core/security/google_default_credentials.c", + "src/core/security/handshake.c", + "src/core/security/json_token.c", + "src/core/security/jwt_verifier.c", + "src/core/security/secure_endpoint.c", + "src/core/security/security_connector.c", + "src/core/security/security_context.c", + "src/core/security/server_auth_filter.c", + "src/core/security/server_secure_chttp2.c", + "src/core/surface/init_secure.c", + "src/core/surface/secure_channel_create.c", + "src/core/tsi/fake_transport_security.c", + "src/core/tsi/ssl_transport_security.c", + "src/core/tsi/transport_security.c", "src/core/census/context.c", "src/core/census/initialize.c", - "src/core/census/log.c", + "src/core/census/mlog.c", "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/tracing.c", + "third_party/nanopb/pb_common.c", + "third_party/nanopb/pb_decode.c", + "third_party/nanopb/pb_encode.c", ], hdrs = [ "include/grpc/grpc_security.h", @@ -1417,20 +1444,6 @@ objc_library( "include/grpc/grpc.h", "include/grpc/status.h", "include/grpc/census.h", - "src/core/security/auth_filters.h", - "src/core/security/base64.h", - "src/core/security/credentials.h", - "src/core/security/handshake.h", - "src/core/security/json_token.h", - "src/core/security/jwt_verifier.h", - "src/core/security/secure_endpoint.h", - "src/core/security/security_connector.h", - "src/core/security/security_context.h", - "src/core/tsi/fake_transport_security.h", - "src/core/tsi/ssl_transport_security.h", - "src/core/tsi/ssl_types.h", - "src/core/tsi/transport_security.h", - "src/core/tsi/transport_security_interface.h", "src/core/census/grpc_filter.h", "src/core/channel/channel_args.h", "src/core/channel/channel_stack.h", @@ -1445,6 +1458,7 @@ objc_library( "src/core/client_config/client_config.h", "src/core/client_config/connector.h", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.h", "src/core/client_config/lb_policy.h", @@ -1505,6 +1519,7 @@ objc_library( "src/core/json/json_common.h", "src/core/json/json_reader.h", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/statistics/census_interface.h", "src/core/statistics/census_rpc_stats.h", "src/core/surface/api_trace.h", @@ -1544,9 +1559,27 @@ objc_library( "src/core/transport/static_metadata.h", "src/core/transport/transport.h", "src/core/transport/transport_impl.h", + "src/core/security/auth_filters.h", + "src/core/security/base64.h", + "src/core/security/credentials.h", + "src/core/security/handshake.h", + "src/core/security/json_token.h", + "src/core/security/jwt_verifier.h", + "src/core/security/secure_endpoint.h", + "src/core/security/security_connector.h", + "src/core/security/security_context.h", + "src/core/tsi/fake_transport_security.h", + "src/core/tsi/ssl_transport_security.h", + "src/core/tsi/ssl_types.h", + "src/core/tsi/transport_security.h", + "src/core/tsi/transport_security_interface.h", "src/core/census/aggregation.h", - "src/core/census/log.h", + "src/core/census/mlog.h", "src/core/census/rpc_metric_id.h", + "third_party/nanopb/pb.h", + "third_party/nanopb/pb_common.h", + "third_party/nanopb/pb_decode.h", + "third_party/nanopb/pb_encode.h", ], includes = [ "include", diff --git a/Makefile b/Makefile index 6c7febdabc32763474cb93d6e4a152ee950b49de..6ba96815e76b4bae0c4522dc6205e4ebec724f90 100644 --- a/Makefile +++ b/Makefile @@ -121,7 +121,7 @@ LD_asan-noleaks = clang LDXX_asan-noleaks = clang++ CPPFLAGS_asan-noleaks = -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_asan-noleaks = -fsanitize=address -DEFINES_asan-noleaks += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5 +DEFINES_asan-noleaks += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=3 VALID_CONFIG_ubsan = 1 REQUIRE_CUSTOM_LIBRARIES_ubsan = 1 @@ -177,7 +177,7 @@ LD_asan = clang LDXX_asan = clang++ CPPFLAGS_asan = -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_asan = -fsanitize=address -DEFINES_asan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=1.5 +DEFINES_asan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=3 VALID_CONFIG_tsan = 1 REQUIRE_CUSTOM_LIBRARIES_tsan = 1 @@ -187,7 +187,7 @@ LD_tsan = clang LDXX_tsan = clang++ CPPFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_tsan = -fsanitize=thread -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) -DEFINES_tsan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=2 +DEFINES_tsan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=5 VALID_CONFIG_msan = 1 REQUIRE_CUSTOM_LIBRARIES_msan = 1 @@ -198,7 +198,7 @@ LDXX_msan = clang++ CPPFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) DEFINES_msan = NDEBUG -DEFINES_msan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=2 +DEFINES_msan += GRPC_TEST_SLOWDOWN_BUILD_FACTOR=4 VALID_CONFIG_mutrace = 1 CC_mutrace = $(DEFAULT_CC) @@ -247,7 +247,7 @@ STRIP ?= strip --strip-unneeded else ifeq ($(SYSTEM),Darwin) ifeq ($(origin AR), default) -AR = libtool -o +AR = libtool -no_warning_for_no_symbols -o endif STRIP ?= strip -x else @@ -941,6 +941,7 @@ grpc_csharp_plugin: $(BINDIR)/$(CONFIG)/grpc_csharp_plugin grpc_objective_c_plugin: $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin grpc_python_plugin: $(BINDIR)/$(CONFIG)/grpc_python_plugin grpc_ruby_plugin: $(BINDIR)/$(CONFIG)/grpc_ruby_plugin +grpclb_api_test: $(BINDIR)/$(CONFIG)/grpclb_api_test hybrid_end2end_test: $(BINDIR)/$(CONFIG)/hybrid_end2end_test interop_client: $(BINDIR)/$(CONFIG)/interop_client interop_server: $(BINDIR)/$(CONFIG)/interop_server @@ -1285,6 +1286,7 @@ buildtests_cxx: buildtests_zookeeper privatelibs_cxx \ $(BINDIR)/$(CONFIG)/generic_async_streaming_ping_pong_test \ $(BINDIR)/$(CONFIG)/generic_end2end_test \ $(BINDIR)/$(CONFIG)/grpc_cli \ + $(BINDIR)/$(CONFIG)/grpclb_api_test \ $(BINDIR)/$(CONFIG)/hybrid_end2end_test \ $(BINDIR)/$(CONFIG)/interop_client \ $(BINDIR)/$(CONFIG)/interop_server \ @@ -1595,6 +1597,8 @@ test_cxx: test_zookeeper buildtests_cxx $(Q) $(BINDIR)/$(CONFIG)/generic_async_streaming_ping_pong_test || ( echo test generic_async_streaming_ping_pong_test failed ; exit 1 ) $(E) "[RUN] Testing generic_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/generic_end2end_test || ( echo test generic_end2end_test failed ; exit 1 ) + $(E) "[RUN] Testing grpclb_api_test" + $(Q) $(BINDIR)/$(CONFIG)/grpclb_api_test || ( echo test grpclb_api_test failed ; exit 1 ) $(E) "[RUN] Testing hybrid_end2end_test" $(Q) $(BINDIR)/$(CONFIG)/hybrid_end2end_test || ( echo test hybrid_end2end_test failed ; exit 1 ) $(E) "[RUN] Testing interop_test" @@ -1746,6 +1750,21 @@ $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc: $(Q) mkdir -p $(@D) $(Q) echo "$(GRPCXX_UNSECURE_PC_FILE)" | tr , '\n' >$@ +ifeq ($(NO_PROTOC),true) +$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc: protoc_dep_error +$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc: protoc_dep_error +else +$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc: src/proto/grpc/lb/v0/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) + $(E) "[PROTOC] Generating protobuf CC file from $<" + $(Q) mkdir -p `dirname $@` + $(Q) $(PROTOC) --cpp_out=$(GENDIR) $< + +$(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc: src/proto/grpc/lb/v0/load_balancer.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS) + $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<" + $(Q) mkdir -p `dirname $@` + $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $< +endif + ifeq ($(NO_PROTOC),true) $(GENDIR)/src/proto/grpc/testing/control.pb.cc: protoc_dep_error $(GENDIR)/src/proto/grpc/testing/control.grpc.pb.cc: protoc_dep_error @@ -2265,7 +2284,7 @@ $(LIBDIR)/$(CONFIG)/libgpr.a: $(ZLIB_DEP) $(LIBGPR_OBJS) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBGPR_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgpr.a endif @@ -2306,7 +2325,7 @@ $(LIBDIR)/$(CONFIG)/libgpr_test_util.a: $(ZLIB_DEP) $(LIBGPR_TEST_UTIL_OBJS) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBGPR_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr_test_util.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgpr_test_util.a endif @@ -2318,27 +2337,6 @@ endif LIBGRPC_SRC = \ - src/core/httpcli/httpcli_security_connector.c \ - src/core/security/base64.c \ - src/core/security/client_auth_filter.c \ - src/core/security/credentials.c \ - src/core/security/credentials_metadata.c \ - src/core/security/credentials_posix.c \ - src/core/security/credentials_win32.c \ - src/core/security/google_default_credentials.c \ - src/core/security/handshake.c \ - src/core/security/json_token.c \ - src/core/security/jwt_verifier.c \ - src/core/security/secure_endpoint.c \ - src/core/security/security_connector.c \ - src/core/security/security_context.c \ - src/core/security/server_auth_filter.c \ - src/core/security/server_secure_chttp2.c \ - src/core/surface/init_secure.c \ - src/core/surface/secure_channel_create.c \ - src/core/tsi/fake_transport_security.c \ - src/core/tsi/ssl_transport_security.c \ - src/core/tsi/transport_security.c \ src/core/census/grpc_context.c \ src/core/census/grpc_filter.c \ src/core/channel/channel_args.c \ @@ -2354,6 +2352,7 @@ LIBGRPC_SRC = \ src/core/client_config/connector.c \ src/core/client_config/default_initial_connect_string.c \ src/core/client_config/initial_connect_string.c \ + src/core/client_config/lb_policies/load_balancer_api.c \ src/core/client_config/lb_policies/pick_first.c \ src/core/client_config/lb_policies/round_robin.c \ src/core/client_config/lb_policy.c \ @@ -2418,6 +2417,7 @@ LIBGRPC_SRC = \ src/core/json/json_reader.c \ src/core/json/json_string.c \ src/core/json/json_writer.c \ + src/core/proto/grpc/lb/v0/load_balancer.pb.c \ src/core/surface/alarm.c \ src/core/surface/api_trace.c \ src/core/surface/byte_buffer.c \ @@ -2467,12 +2467,36 @@ LIBGRPC_SRC = \ src/core/transport/static_metadata.c \ src/core/transport/transport.c \ src/core/transport/transport_op_string.c \ + src/core/httpcli/httpcli_security_connector.c \ + src/core/security/base64.c \ + src/core/security/client_auth_filter.c \ + src/core/security/credentials.c \ + src/core/security/credentials_metadata.c \ + src/core/security/credentials_posix.c \ + src/core/security/credentials_win32.c \ + src/core/security/google_default_credentials.c \ + src/core/security/handshake.c \ + src/core/security/json_token.c \ + src/core/security/jwt_verifier.c \ + src/core/security/secure_endpoint.c \ + src/core/security/security_connector.c \ + src/core/security/security_context.c \ + src/core/security/server_auth_filter.c \ + src/core/security/server_secure_chttp2.c \ + src/core/surface/init_secure.c \ + src/core/surface/secure_channel_create.c \ + src/core/tsi/fake_transport_security.c \ + src/core/tsi/ssl_transport_security.c \ + src/core/tsi/transport_security.c \ src/core/census/context.c \ src/core/census/initialize.c \ - src/core/census/log.c \ + src/core/census/mlog.c \ src/core/census/operation.c \ src/core/census/placeholders.c \ src/core/census/tracing.c \ + third_party/nanopb/pb_common.c \ + third_party/nanopb/pb_decode.c \ + third_party/nanopb/pb_encode.c \ PUBLIC_HEADERS_C += \ include/grpc/grpc_security.h \ @@ -2509,7 +2533,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_OBJS) $(LIB $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) $(OPENSSL_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc.a endif @@ -2576,7 +2600,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_TE $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a endif @@ -2612,7 +2636,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_TEST_UT $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a $(LIBGRPC_TEST_UTIL_UNSECURE_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_test_util_unsecure.a endif @@ -2640,6 +2664,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/client_config/connector.c \ src/core/client_config/default_initial_connect_string.c \ src/core/client_config/initial_connect_string.c \ + src/core/client_config/lb_policies/load_balancer_api.c \ src/core/client_config/lb_policies/pick_first.c \ src/core/client_config/lb_policies/round_robin.c \ src/core/client_config/lb_policy.c \ @@ -2704,6 +2729,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/json/json_reader.c \ src/core/json/json_string.c \ src/core/json/json_writer.c \ + src/core/proto/grpc/lb/v0/load_balancer.pb.c \ src/core/surface/alarm.c \ src/core/surface/api_trace.c \ src/core/surface/byte_buffer.c \ @@ -2755,10 +2781,13 @@ LIBGRPC_UNSECURE_SRC = \ src/core/transport/transport_op_string.c \ src/core/census/context.c \ src/core/census/initialize.c \ - src/core/census/log.c \ + src/core/census/mlog.c \ src/core/census/operation.c \ src/core/census/placeholders.c \ src/core/census/tracing.c \ + third_party/nanopb/pb_common.c \ + third_party/nanopb/pb_decode.c \ + third_party/nanopb/pb_encode.c \ PUBLIC_HEADERS_C += \ include/grpc/byte_buffer.h \ @@ -2783,7 +2812,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a: $(ZLIB_DEP) $(LIBGRPC_UNSECURE_OBJS) $ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a endif @@ -2826,7 +2855,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a: $(ZLIB_DEP) $(LIBGRPC_ZOOKEEPER_OBJS) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBGRPC_ZOOKEEPER_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a endif @@ -2877,7 +2906,7 @@ $(LIBDIR)/$(CONFIG)/libreconnect_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBRECON $(Q) rm -f $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libreconnect_server.a $(LIBRECONNECT_SERVER_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libreconnect_server.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libreconnect_server.a endif @@ -2915,7 +2944,7 @@ $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBTEST_T $(Q) rm -f $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBTEST_TCP_SERVER_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a endif @@ -3070,7 +3099,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LI $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++.a endif @@ -3135,7 +3164,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOB $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LIBGRPC++_TEST_CONFIG_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a endif @@ -3162,6 +3191,7 @@ LIBGRPC++_TEST_UTIL_SRC = \ test/cpp/util/create_test_channel.cc \ test/cpp/util/string_ref_helper.cc \ test/cpp/util/subprocess.cc \ + test/cpp/util/test_credentials_provider.cc \ LIBGRPC++_TEST_UTIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_TEST_UTIL_SRC)))) @@ -3191,7 +3221,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a endif @@ -3212,6 +3242,7 @@ $(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(GENDIR)/src/proto/grpc/testing/e $(OBJDIR)/$(CONFIG)/test/cpp/util/create_test_channel.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc $(OBJDIR)/$(CONFIG)/test/cpp/util/subprocess.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc +$(OBJDIR)/$(CONFIG)/test/cpp/util/test_credentials_provider.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.pb.cc $(GENDIR)/src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.cc LIBGRPC++_UNSECURE_SRC = \ @@ -3339,7 +3370,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBGRPC $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a $(LIBGRPC++_UNSECURE_OBJS) $(LIBGPR_OBJS) $(ZLIB_MERGE_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure.a endif @@ -3447,7 +3478,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIB $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(LIBGRPC_PLUGIN_SUPPORT_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a endif @@ -3492,7 +3523,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PRO $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a $(LIBINTEROP_CLIENT_HELPER_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_client_helper.a endif @@ -3545,7 +3576,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_client_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTO $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_client_main.a $(LIBINTEROP_CLIENT_MAIN_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_client_main.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_client_main.a endif @@ -3595,7 +3626,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PRO $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a $(LIBINTEROP_SERVER_HELPER_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_server_helper.a endif @@ -3646,7 +3677,7 @@ $(LIBDIR)/$(CONFIG)/libinterop_server_main.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTO $(Q) rm -f $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libinterop_server_main.a $(LIBINTEROP_SERVER_MAIN_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libinterop_server_main.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libinterop_server_main.a endif @@ -3711,7 +3742,7 @@ $(LIBDIR)/$(CONFIG)/libqps.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBQP $(Q) rm -f $(LIBDIR)/$(CONFIG)/libqps.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libqps.a $(LIBQPS_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libqps.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libqps.a endif @@ -3763,7 +3794,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_C $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a endif @@ -4103,7 +4134,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl.a: $(ZLIB_DEP) $(LIBBORINGSSL_OBJS) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl.a $(LIBBORINGSSL_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl.a endif @@ -4140,7 +4171,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIB $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a $(LIBBORINGSSL_TEST_UTIL_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_test_util.a endif @@ -4177,7 +4208,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $( $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a $(LIBBORINGSSL_AES_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_aes_test_lib.a endif @@ -4214,7 +4245,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a $(LIBBORINGSSL_BASE64_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_base64_test_lib.a endif @@ -4251,7 +4282,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $( $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a $(LIBBORINGSSL_BIO_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_bio_test_lib.a endif @@ -4288,7 +4319,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(L $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a $(LIBBORINGSSL_BN_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_bn_test_lib.a endif @@ -4325,7 +4356,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a $(LIBBORINGSSL_BYTESTRING_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_bytestring_test_lib.a endif @@ -4362,7 +4393,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a $(LIBBORINGSSL_AEAD_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_aead_test_lib.a endif @@ -4399,7 +4430,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a $(LIBBORINGSSL_CIPHER_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_cipher_test_lib.a endif @@ -4436,7 +4467,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a $(LIBBORINGSSL_CMAC_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_cmac_test_lib.a endif @@ -4464,7 +4495,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a: $(ZLIB_DEP) $(LIBBOR $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a $(LIBBORINGSSL_CONSTANT_TIME_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_constant_time_test_lib.a endif @@ -4499,7 +4530,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a $(LIBBORINGSSL_ED25519_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ed25519_test_lib.a endif @@ -4536,7 +4567,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a $(LIBBORINGSSL_X25519_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_x25519_test_lib.a endif @@ -4573,7 +4604,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(L $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a $(LIBBORINGSSL_DH_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_dh_test_lib.a endif @@ -4610,7 +4641,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a $(LIBBORINGSSL_DIGEST_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_digest_test_lib.a endif @@ -4638,7 +4669,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_DSA $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a $(LIBBORINGSSL_DSA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_dsa_test_lib.a endif @@ -4673,7 +4704,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(L $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a $(LIBBORINGSSL_EC_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ec_test_lib.a endif @@ -4701,7 +4732,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a $(LIBBORINGSSL_EXAMPLE_MUL_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_example_mul_lib.a endif @@ -4736,7 +4767,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a $(LIBBORINGSSL_ECDSA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ecdsa_test_lib.a endif @@ -4773,7 +4804,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $( $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a $(LIBBORINGSSL_ERR_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_err_test_lib.a endif @@ -4810,7 +4841,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_D $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a $(LIBBORINGSSL_EVP_EXTRA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_evp_extra_test_lib.a endif @@ -4847,7 +4878,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $( $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a $(LIBBORINGSSL_EVP_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_evp_test_lib.a endif @@ -4884,7 +4915,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a $(LIBBORINGSSL_PBKDF_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pbkdf_test_lib.a endif @@ -4912,7 +4943,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_HK $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a $(LIBBORINGSSL_HKDF_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_hkdf_test_lib.a endif @@ -4947,7 +4978,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a $(LIBBORINGSSL_HMAC_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_hmac_test_lib.a endif @@ -4975,7 +5006,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_L $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a $(LIBBORINGSSL_LHASH_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_lhash_test_lib.a endif @@ -5001,7 +5032,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_GCM $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a $(LIBBORINGSSL_GCM_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_gcm_test_lib.a endif @@ -5036,7 +5067,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a $(LIBBORINGSSL_PKCS12_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pkcs12_test_lib.a endif @@ -5073,7 +5104,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a $(LIBBORINGSSL_PKCS8_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pkcs8_test_lib.a endif @@ -5110,7 +5141,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DE $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a $(LIBBORINGSSL_POLY1305_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_poly1305_test_lib.a endif @@ -5138,7 +5169,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSS $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a $(LIBBORINGSSL_REFCOUNT_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_refcount_test_lib.a endif @@ -5173,7 +5204,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $( $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a $(LIBBORINGSSL_RSA_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_rsa_test_lib.a endif @@ -5201,7 +5232,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a $(LIBBORINGSSL_THREAD_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_thread_test_lib.a endif @@ -5227,7 +5258,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_P $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a $(LIBBORINGSSL_PKCS7_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pkcs7_test_lib.a endif @@ -5253,7 +5284,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_TAB $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a $(LIBBORINGSSL_TAB_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_tab_test_lib.a endif @@ -5279,7 +5310,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a $(LIBBORINGSSL_V3NAME_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_v3name_test_lib.a endif @@ -5305,7 +5336,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a: $(ZLIB_DEP) $(LIBBORINGSSL_ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a $(LIBBORINGSSL_PQUEUE_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_pqueue_test_lib.a endif @@ -5340,7 +5371,7 @@ $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a: $(ZLIB_DEP) $(PROTOBUF_DEP) $( $(Q) rm -f $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a $(LIBBORINGSSL_SSL_TEST_LIB_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libboringssl_ssl_test_lib.a endif @@ -5381,7 +5412,7 @@ $(LIBDIR)/$(CONFIG)/libz.a: $(LIBZ_OBJS) $(Q) rm -f $(LIBDIR)/$(CONFIG)/libz.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libz.a $(LIBZ_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libz.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libz.a endif @@ -5415,7 +5446,7 @@ $(LIBDIR)/$(CONFIG)/libbad_client_test.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBAD_CL $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_client_test.a $(LIBBAD_CLIENT_TEST_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libbad_client_test.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libbad_client_test.a endif @@ -5453,7 +5484,7 @@ $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBBA $(Q) rm -f $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a $(LIBBAD_SSL_TEST_SERVER_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libbad_ssl_test_server.a endif @@ -5527,7 +5558,7 @@ $(LIBDIR)/$(CONFIG)/libend2end_tests.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_tests.a $(LIBEND2END_TESTS_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_tests.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_tests.a endif @@ -5590,7 +5621,7 @@ $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a: $(ZLIB_DEP) $(LIBEND2END_NOSEC_TE $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a $(LIBEND2END_NOSEC_TESTS_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_nosec_tests.a endif @@ -5626,7 +5657,7 @@ $(LIBDIR)/$(CONFIG)/libend2end_certs.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBEND2END_ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(Q) $(AR) $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBEND2END_CERTS_OBJS) ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_certs.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libend2end_certs.a endif @@ -5838,7 +5869,7 @@ endif CENSUS_LOG_TEST_SRC = \ - test/core/census/log_test.c \ + test/core/census/mlog_test.c \ CENSUS_LOG_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CENSUS_LOG_TEST_SRC)))) ifeq ($(NO_SECURE),true) @@ -5858,7 +5889,7 @@ $(BINDIR)/$(CONFIG)/census_log_test: $(CENSUS_LOG_TEST_OBJS) $(LIBDIR)/$(CONFIG) endif -$(OBJDIR)/$(CONFIG)/test/core/census/log_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a +$(OBJDIR)/$(CONFIG)/test/core/census/mlog_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a deps_census_log_test: $(CENSUS_LOG_TEST_OBJS:.o=.dep) @@ -9710,6 +9741,53 @@ ifneq ($(NO_DEPS),true) endif +GRPCLB_API_TEST_SRC = \ + $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc \ + test/cpp/grpclb/grpclb_api_test.cc \ + +GRPCLB_API_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPCLB_API_TEST_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/grpclb_api_test: openssl_dep_error + +else + + + + +ifeq ($(NO_PROTOBUF),true) + +# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+. + +$(BINDIR)/$(CONFIG)/grpclb_api_test: protobuf_dep_error + +else + +$(BINDIR)/$(CONFIG)/grpclb_api_test: $(PROTOBUF_DEP) $(GRPCLB_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a + $(E) "[LD] Linking $@" + $(Q) mkdir -p `dirname $@` + $(Q) $(LDXX) $(LDFLAGS) $(GRPCLB_API_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/grpclb_api_test + +endif + +endif + +$(OBJDIR)/$(CONFIG)/src/proto/grpc/lb/v0/load_balancer.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a + +$(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a + +deps_grpclb_api_test: $(GRPCLB_API_TEST_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(GRPCLB_API_TEST_OBJS:.o=.dep) +endif +endif +$(OBJDIR)/$(CONFIG)/test/cpp/grpclb/grpclb_api_test.o: $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.pb.cc $(GENDIR)/src/proto/grpc/lb/v0/load_balancer.grpc.pb.cc + + HYBRID_END2END_TEST_SRC = \ test/cpp/end2end/hybrid_end2end_test.cc \ @@ -13015,6 +13093,7 @@ test/cpp/util/create_test_channel.cc: $(OPENSSL_DEP) test/cpp/util/string_ref_helper.cc: $(OPENSSL_DEP) test/cpp/util/subprocess.cc: $(OPENSSL_DEP) test/cpp/util/test_config.cc: $(OPENSSL_DEP) +test/cpp/util/test_credentials_provider.cc: $(OPENSSL_DEP) endif .PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean diff --git a/binding.gyp b/binding.gyp index 950e0dfe22abfb2093cdacd5609d502904d1d26c..35eede15d7a28131d85b488c9cd586f2464d296c 100644 --- a/binding.gyp +++ b/binding.gyp @@ -557,27 +557,6 @@ 'gpr', ], 'sources': [ - 'src/core/httpcli/httpcli_security_connector.c', - 'src/core/security/base64.c', - 'src/core/security/client_auth_filter.c', - 'src/core/security/credentials.c', - 'src/core/security/credentials_metadata.c', - 'src/core/security/credentials_posix.c', - 'src/core/security/credentials_win32.c', - 'src/core/security/google_default_credentials.c', - 'src/core/security/handshake.c', - 'src/core/security/json_token.c', - 'src/core/security/jwt_verifier.c', - 'src/core/security/secure_endpoint.c', - 'src/core/security/security_connector.c', - 'src/core/security/security_context.c', - 'src/core/security/server_auth_filter.c', - 'src/core/security/server_secure_chttp2.c', - 'src/core/surface/init_secure.c', - 'src/core/surface/secure_channel_create.c', - 'src/core/tsi/fake_transport_security.c', - 'src/core/tsi/ssl_transport_security.c', - 'src/core/tsi/transport_security.c', 'src/core/census/grpc_context.c', 'src/core/census/grpc_filter.c', 'src/core/channel/channel_args.c', @@ -593,6 +572,7 @@ 'src/core/client_config/connector.c', 'src/core/client_config/default_initial_connect_string.c', 'src/core/client_config/initial_connect_string.c', + 'src/core/client_config/lb_policies/load_balancer_api.c', 'src/core/client_config/lb_policies/pick_first.c', 'src/core/client_config/lb_policies/round_robin.c', 'src/core/client_config/lb_policy.c', @@ -657,6 +637,7 @@ 'src/core/json/json_reader.c', 'src/core/json/json_string.c', 'src/core/json/json_writer.c', + 'src/core/proto/grpc/lb/v0/load_balancer.pb.c', 'src/core/surface/alarm.c', 'src/core/surface/api_trace.c', 'src/core/surface/byte_buffer.c', @@ -706,12 +687,36 @@ 'src/core/transport/static_metadata.c', 'src/core/transport/transport.c', 'src/core/transport/transport_op_string.c', + 'src/core/httpcli/httpcli_security_connector.c', + 'src/core/security/base64.c', + 'src/core/security/client_auth_filter.c', + 'src/core/security/credentials.c', + 'src/core/security/credentials_metadata.c', + 'src/core/security/credentials_posix.c', + 'src/core/security/credentials_win32.c', + 'src/core/security/google_default_credentials.c', + 'src/core/security/handshake.c', + 'src/core/security/json_token.c', + 'src/core/security/jwt_verifier.c', + 'src/core/security/secure_endpoint.c', + 'src/core/security/security_connector.c', + 'src/core/security/security_context.c', + 'src/core/security/server_auth_filter.c', + 'src/core/security/server_secure_chttp2.c', + 'src/core/surface/init_secure.c', + 'src/core/surface/secure_channel_create.c', + 'src/core/tsi/fake_transport_security.c', + 'src/core/tsi/ssl_transport_security.c', + 'src/core/tsi/transport_security.c', 'src/core/census/context.c', 'src/core/census/initialize.c', - 'src/core/census/log.c', + 'src/core/census/mlog.c', 'src/core/census/operation.c', 'src/core/census/placeholders.c', 'src/core/census/tracing.c', + 'third_party/nanopb/pb_common.c', + 'third_party/nanopb/pb_decode.c', + 'third_party/nanopb/pb_encode.c', ], "conditions": [ ['OS == "mac"', { diff --git a/build.yaml b/build.yaml index f899f8524dd302e67ec05202585fbcf255f2d529..b16cb162d4d51632fdad1d9bcf62f5756b1ac340 100644 --- a/build.yaml +++ b/build.yaml @@ -14,12 +14,12 @@ filegroups: - include/grpc/census.h headers: - src/core/census/aggregation.h - - src/core/census/log.h + - src/core/census/mlog.h - src/core/census/rpc_metric_id.h src: - src/core/census/context.c - src/core/census/initialize.c - - src/core/census/log.c + - src/core/census/mlog.c - src/core/census/operation.c - src/core/census/placeholders.c - src/core/census/tracing.c @@ -258,6 +258,7 @@ filegroups: - src/core/client_config/client_config.h - src/core/client_config/connector.h - src/core/client_config/initial_connect_string.h + - src/core/client_config/lb_policies/load_balancer_api.h - src/core/client_config/lb_policies/pick_first.h - src/core/client_config/lb_policies/round_robin.h - src/core/client_config/lb_policy.h @@ -318,6 +319,7 @@ filegroups: - src/core/json/json_common.h - src/core/json/json_reader.h - src/core/json/json_writer.h + - src/core/proto/grpc/lb/v0/load_balancer.pb.h - src/core/statistics/census_interface.h - src/core/statistics/census_rpc_stats.h - src/core/surface/api_trace.h @@ -373,6 +375,7 @@ filegroups: - src/core/client_config/connector.c - src/core/client_config/default_initial_connect_string.c - src/core/client_config/initial_connect_string.c + - src/core/client_config/lb_policies/load_balancer_api.c - src/core/client_config/lb_policies/pick_first.c - src/core/client_config/lb_policies/round_robin.c - src/core/client_config/lb_policy.c @@ -437,6 +440,7 @@ filegroups: - src/core/json/json_reader.c - src/core/json/json_string.c - src/core/json/json_writer.c + - src/core/proto/grpc/lb/v0/load_balancer.pb.c - src/core/surface/alarm.c - src/core/surface/api_trace.c - src/core/surface/byte_buffer.c @@ -494,6 +498,44 @@ filegroups: - include/grpc/impl/codegen/grpc_types.h - include/grpc/impl/codegen/propagation_bits.h - include/grpc/impl/codegen/status.h +- name: grpc_secure + headers: + - src/core/security/auth_filters.h + - src/core/security/base64.h + - src/core/security/credentials.h + - src/core/security/handshake.h + - src/core/security/json_token.h + - src/core/security/jwt_verifier.h + - src/core/security/secure_endpoint.h + - src/core/security/security_connector.h + - src/core/security/security_context.h + - src/core/tsi/fake_transport_security.h + - src/core/tsi/ssl_transport_security.h + - src/core/tsi/ssl_types.h + - src/core/tsi/transport_security.h + - src/core/tsi/transport_security_interface.h + src: + - src/core/httpcli/httpcli_security_connector.c + - src/core/security/base64.c + - src/core/security/client_auth_filter.c + - src/core/security/credentials.c + - src/core/security/credentials_metadata.c + - src/core/security/credentials_posix.c + - src/core/security/credentials_win32.c + - src/core/security/google_default_credentials.c + - src/core/security/handshake.c + - src/core/security/json_token.c + - src/core/security/jwt_verifier.c + - src/core/security/secure_endpoint.c + - src/core/security/security_connector.c + - src/core/security/security_context.c + - src/core/security/server_auth_filter.c + - src/core/security/server_secure_chttp2.c + - src/core/surface/init_secure.c + - src/core/surface/secure_channel_create.c + - src/core/tsi/fake_transport_security.c + - src/core/tsi/ssl_transport_security.c + - src/core/tsi/transport_security.c - name: grpc_test_util_base headers: - test/core/end2end/cq_verifier.h @@ -512,6 +554,16 @@ filegroups: - test/core/util/port_posix.c - test/core/util/port_windows.c - test/core/util/slice_splitter.c +- name: nanopb + headers: + - third_party/nanopb/pb.h + - third_party/nanopb/pb_common.h + - third_party/nanopb/pb_decode.h + - third_party/nanopb/pb_encode.h + src: + - third_party/nanopb/pb_common.c + - third_party/nanopb/pb_decode.c + - third_party/nanopb/pb_encode.c libs: - name: gpr build: all @@ -537,43 +589,6 @@ libs: language: c public_headers: - include/grpc/grpc_security.h - headers: - - src/core/security/auth_filters.h - - src/core/security/base64.h - - src/core/security/credentials.h - - src/core/security/handshake.h - - src/core/security/json_token.h - - src/core/security/jwt_verifier.h - - src/core/security/secure_endpoint.h - - src/core/security/security_connector.h - - src/core/security/security_context.h - - src/core/tsi/fake_transport_security.h - - src/core/tsi/ssl_transport_security.h - - src/core/tsi/ssl_types.h - - src/core/tsi/transport_security.h - - src/core/tsi/transport_security_interface.h - src: - - src/core/httpcli/httpcli_security_connector.c - - src/core/security/base64.c - - src/core/security/client_auth_filter.c - - src/core/security/credentials.c - - src/core/security/credentials_metadata.c - - src/core/security/credentials_posix.c - - src/core/security/credentials_win32.c - - src/core/security/google_default_credentials.c - - src/core/security/handshake.c - - src/core/security/json_token.c - - src/core/security/jwt_verifier.c - - src/core/security/secure_endpoint.c - - src/core/security/security_connector.c - - src/core/security/security_context.c - - src/core/security/server_auth_filter.c - - src/core/security/server_secure_chttp2.c - - src/core/surface/init_secure.c - - src/core/surface/secure_channel_create.c - - src/core/tsi/fake_transport_security.c - - src/core/tsi/ssl_transport_security.c - - src/core/tsi/transport_security.c deps: - gpr baselib: true @@ -582,12 +597,35 @@ libs: filegroups: - grpc_codegen - grpc_base + - grpc_secure - census + - nanopb secure: true vs_packages: - grpc.dependencies.openssl - grpc.dependencies.zlib vs_project_guid: '{29D16885-7228-4C31-81ED-5F9187C7F2A9}' +- name: grpc_dll + build: private + language: c + src: [] + deps: + - gpr + - grpc + build_system: + - visual_studio + deps_linkage: static + dll_def: grpc.def + vs_config_type: DynamicLibrary + vs_packages: + - grpc.dependencies.openssl + - grpc.dependencies.zlib + vs_project_guid: '{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}' + vs_props: + - zlib + - openssl + - winsock + - global - name: grpc_test_util build: private language: c @@ -631,6 +669,7 @@ libs: - grpc_base - grpc_codegen - census + - nanopb secure: false vs_project_guid: '{46CEDFFF-9692-456A-AA24-38B5D6BCF4C5}' - name: grpc_zookeeper @@ -715,6 +754,7 @@ libs: - test/cpp/util/create_test_channel.h - test/cpp/util/string_ref_helper.h - test/cpp/util/subprocess.h + - test/cpp/util/test_credentials_provider.h src: - src/proto/grpc/testing/echo_messages.proto - src/proto/grpc/testing/echo.proto @@ -725,6 +765,7 @@ libs: - test/cpp/util/create_test_channel.cc - test/cpp/util/string_ref_helper.cc - test/cpp/util/subprocess.cc + - test/cpp/util/test_credentials_provider.cc deps: - grpc++ - grpc_test_util @@ -775,6 +816,8 @@ libs: - gpr_codegen secure: false vs_project_guid: '{B6E81D84-2ACB-41B8-8781-493A944C7817}' + vs_props: + - protoc - name: interop_client_helper build: private language: c++ @@ -958,7 +1001,7 @@ targets: build: test language: c src: - - test/core/census/log_test.c + - test/core/census/mlog_test.c deps: - grpc_test_util - grpc @@ -2185,6 +2228,17 @@ targets: secure: false vs_config_type: Application vs_project_guid: '{069E9D05-B78B-4751-9252-D21EBAE7DE8E}' +- name: grpclb_api_test + build: test + language: c++ + src: + - src/proto/grpc/lb/v0/load_balancer.proto + - test/cpp/grpclb/grpclb_api_test.cc + deps: + - grpc++_test_util + - grpc_test_util + - grpc++ + - grpc - name: hybrid_end2end_test build: test language: c++ @@ -2309,6 +2363,7 @@ targets: - linux - posix - name: qps_openloop_test + cpu_cost: 10 build: test language: c++ src: @@ -2341,8 +2396,6 @@ targets: - gpr_test_util - gpr - grpc++_test_config - exclude_configs: - - tsan platforms: - mac - linux @@ -2630,7 +2683,7 @@ configs: test_environ: ASAN_OPTIONS: detect_leaks=1:color=always LSAN_OPTIONS: suppressions=tools/lsan_suppressions.txt:report_objects=1 - timeout_multiplier: 1.5 + timeout_multiplier: 3 asan-noleaks: CC: clang CPPFLAGS: -O0 -fsanitize=address -fno-omit-frame-pointer -Wno-unused-command-line-argument @@ -2642,7 +2695,7 @@ configs: compile_the_world: true test_environ: ASAN_OPTIONS: detect_leaks=0:color=always - timeout_multiplier: 1.5 + timeout_multiplier: 3 basicprof: CPPFLAGS: -O2 -DGRPC_BASIC_PROFILER -DGRPC_TIMERS_RDTSC DEFINES: NDEBUG @@ -2681,7 +2734,7 @@ configs: -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) LDXX: clang++ compile_the_world: true - timeout_multiplier: 2 + timeout_multiplier: 4 mutrace: CPPFLAGS: -O0 DEFINES: _DEBUG DEBUG @@ -2703,7 +2756,7 @@ configs: compile_the_world: true test_environ: TSAN_OPTIONS: suppressions=tools/tsan_suppressions.txt:halt_on_error=1:second_deadlock_stack=1 - timeout_multiplier: 2 + timeout_multiplier: 5 ubsan: CC: clang CPPFLAGS: -O1 -fsanitize=undefined -fno-omit-frame-pointer -Wno-unused-command-line-argument @@ -2762,6 +2815,34 @@ node_modules: - src/node/ext/server.cc - src/node/ext/server_credentials.cc - src/node/ext/timeval.cc +php_config_m4: + deps: + - grpc + - gpr + - boringssl + - z + headers: + - src/php/ext/grpc/byte_buffer.h + - src/php/ext/grpc/call.h + - src/php/ext/grpc/call_credentials.h + - src/php/ext/grpc/channel.h + - src/php/ext/grpc/channel_credentials.h + - src/php/ext/grpc/completion_queue.h + - src/php/ext/grpc/php_grpc.h + - src/php/ext/grpc/server.h + - src/php/ext/grpc/server_credentials.h + - src/php/ext/grpc/timeval.h + src: + - src/php/ext/grpc/byte_buffer.c + - src/php/ext/grpc/call.c + - src/php/ext/grpc/call_credentials.c + - src/php/ext/grpc/channel.c + - src/php/ext/grpc/channel_credentials.c + - src/php/ext/grpc/completion_queue.c + - src/php/ext/grpc/php_grpc.c + - src/php/ext/grpc/server.c + - src/php/ext/grpc/server_credentials.c + - src/php/ext/grpc/timeval.c python_dependencies: deps: - grpc diff --git a/config.m4 b/config.m4 new file mode 100644 index 0000000000000000000000000000000000000000..0323d5d2ad3b65392989b1ca104317b44fcd3747 --- /dev/null +++ b/config.m4 @@ -0,0 +1,554 @@ +PHP_ARG_ENABLE(grpc, whether to enable grpc support, +[ --enable-grpc Enable grpc support]) + +if test "$PHP_GRPC" != "no"; then + dnl Write more examples of tests here... + + dnl # --with-grpc -> add include path + PHP_ADD_INCLUDE(../../grpc/include) + PHP_ADD_INCLUDE(../../grpc/src/php/ext/grpc) + PHP_ADD_INCLUDE(../../grpc/third_party/boringssl/include) + + LIBS="-lpthread $LIBS" + + GRPC_SHARED_LIBADD="-lpthread $GRPC_SHARED_LIBADD" + PHP_ADD_LIBRARY(pthread) + + PHP_ADD_LIBRARY(dl,,GRPC_SHARED_LIBADD) + PHP_ADD_LIBRARY(dl) + + case $host in + *darwin*) ;; + *) + PHP_ADD_LIBRARY(rt,,GRPC_SHARED_LIBADD) + PHP_ADD_LIBRARY(rt) + ;; + esac + + PHP_NEW_EXTENSION(grpc, + src/php/ext/grpc/byte_buffer.c \ + src/php/ext/grpc/call.c \ + src/php/ext/grpc/call_credentials.c \ + src/php/ext/grpc/channel.c \ + src/php/ext/grpc/channel_credentials.c \ + src/php/ext/grpc/completion_queue.c \ + src/php/ext/grpc/php_grpc.c \ + src/php/ext/grpc/server.c \ + src/php/ext/grpc/server_credentials.c \ + src/php/ext/grpc/timeval.c \ + src/core/profiling/basic_timers.c \ + src/core/profiling/stap_timers.c \ + src/core/support/alloc.c \ + src/core/support/avl.c \ + src/core/support/cmdline.c \ + src/core/support/cpu_iphone.c \ + src/core/support/cpu_linux.c \ + src/core/support/cpu_posix.c \ + src/core/support/cpu_windows.c \ + src/core/support/env_linux.c \ + src/core/support/env_posix.c \ + src/core/support/env_win32.c \ + src/core/support/file.c \ + src/core/support/file_posix.c \ + src/core/support/file_win32.c \ + src/core/support/histogram.c \ + src/core/support/host_port.c \ + src/core/support/log.c \ + src/core/support/log_android.c \ + src/core/support/log_linux.c \ + src/core/support/log_posix.c \ + src/core/support/log_win32.c \ + src/core/support/murmur_hash.c \ + src/core/support/slice.c \ + src/core/support/slice_buffer.c \ + src/core/support/stack_lockfree.c \ + src/core/support/string.c \ + src/core/support/string_posix.c \ + src/core/support/string_win32.c \ + src/core/support/subprocess_posix.c \ + src/core/support/subprocess_windows.c \ + src/core/support/sync.c \ + src/core/support/sync_posix.c \ + src/core/support/sync_win32.c \ + src/core/support/thd.c \ + src/core/support/thd_posix.c \ + src/core/support/thd_win32.c \ + src/core/support/time.c \ + src/core/support/time_posix.c \ + src/core/support/time_precise.c \ + src/core/support/time_win32.c \ + src/core/support/tls_pthread.c \ + src/core/support/wrap_memcpy.c \ + src/core/census/grpc_context.c \ + src/core/census/grpc_filter.c \ + src/core/channel/channel_args.c \ + src/core/channel/channel_stack.c \ + src/core/channel/client_channel.c \ + src/core/channel/client_uchannel.c \ + src/core/channel/compress_filter.c \ + src/core/channel/connected_channel.c \ + src/core/channel/http_client_filter.c \ + src/core/channel/http_server_filter.c \ + src/core/channel/subchannel_call_holder.c \ + src/core/client_config/client_config.c \ + src/core/client_config/connector.c \ + src/core/client_config/default_initial_connect_string.c \ + src/core/client_config/initial_connect_string.c \ + src/core/client_config/lb_policies/load_balancer_api.c \ + src/core/client_config/lb_policies/pick_first.c \ + src/core/client_config/lb_policies/round_robin.c \ + src/core/client_config/lb_policy.c \ + src/core/client_config/lb_policy_factory.c \ + src/core/client_config/lb_policy_registry.c \ + src/core/client_config/resolver.c \ + src/core/client_config/resolver_factory.c \ + src/core/client_config/resolver_registry.c \ + src/core/client_config/resolvers/dns_resolver.c \ + src/core/client_config/resolvers/sockaddr_resolver.c \ + src/core/client_config/subchannel.c \ + src/core/client_config/subchannel_factory.c \ + src/core/client_config/subchannel_index.c \ + src/core/client_config/uri_parser.c \ + src/core/compression/algorithm.c \ + src/core/compression/message_compress.c \ + src/core/debug/trace.c \ + src/core/httpcli/format_request.c \ + src/core/httpcli/httpcli.c \ + src/core/httpcli/parser.c \ + src/core/iomgr/closure.c \ + src/core/iomgr/endpoint.c \ + src/core/iomgr/endpoint_pair_posix.c \ + src/core/iomgr/endpoint_pair_windows.c \ + src/core/iomgr/exec_ctx.c \ + src/core/iomgr/executor.c \ + src/core/iomgr/fd_posix.c \ + src/core/iomgr/iocp_windows.c \ + src/core/iomgr/iomgr.c \ + src/core/iomgr/iomgr_posix.c \ + src/core/iomgr/iomgr_windows.c \ + src/core/iomgr/pollset_multipoller_with_epoll.c \ + src/core/iomgr/pollset_multipoller_with_poll_posix.c \ + src/core/iomgr/pollset_posix.c \ + src/core/iomgr/pollset_set_posix.c \ + src/core/iomgr/pollset_set_windows.c \ + src/core/iomgr/pollset_windows.c \ + src/core/iomgr/resolve_address_posix.c \ + src/core/iomgr/resolve_address_windows.c \ + src/core/iomgr/sockaddr_utils.c \ + src/core/iomgr/socket_utils_common_posix.c \ + src/core/iomgr/socket_utils_linux.c \ + src/core/iomgr/socket_utils_posix.c \ + src/core/iomgr/socket_windows.c \ + src/core/iomgr/tcp_client_posix.c \ + src/core/iomgr/tcp_client_windows.c \ + src/core/iomgr/tcp_posix.c \ + src/core/iomgr/tcp_server_posix.c \ + src/core/iomgr/tcp_server_windows.c \ + src/core/iomgr/tcp_windows.c \ + src/core/iomgr/time_averaged_stats.c \ + src/core/iomgr/timer.c \ + src/core/iomgr/timer_heap.c \ + src/core/iomgr/udp_server.c \ + src/core/iomgr/wakeup_fd_eventfd.c \ + src/core/iomgr/wakeup_fd_nospecial.c \ + src/core/iomgr/wakeup_fd_pipe.c \ + src/core/iomgr/wakeup_fd_posix.c \ + src/core/iomgr/workqueue_posix.c \ + src/core/iomgr/workqueue_windows.c \ + src/core/json/json.c \ + src/core/json/json_reader.c \ + src/core/json/json_string.c \ + src/core/json/json_writer.c \ + src/core/proto/grpc/lb/v0/load_balancer.pb.c \ + src/core/surface/alarm.c \ + src/core/surface/api_trace.c \ + src/core/surface/byte_buffer.c \ + src/core/surface/byte_buffer_reader.c \ + src/core/surface/call.c \ + src/core/surface/call_details.c \ + src/core/surface/call_log_batch.c \ + src/core/surface/channel.c \ + src/core/surface/channel_connectivity.c \ + src/core/surface/channel_create.c \ + src/core/surface/channel_ping.c \ + src/core/surface/completion_queue.c \ + src/core/surface/event_string.c \ + src/core/surface/init.c \ + src/core/surface/lame_client.c \ + src/core/surface/metadata_array.c \ + src/core/surface/server.c \ + src/core/surface/server_chttp2.c \ + src/core/surface/server_create.c \ + src/core/surface/validate_metadata.c \ + src/core/surface/version.c \ + src/core/transport/byte_stream.c \ + src/core/transport/chttp2/alpn.c \ + src/core/transport/chttp2/bin_encoder.c \ + src/core/transport/chttp2/frame_data.c \ + src/core/transport/chttp2/frame_goaway.c \ + src/core/transport/chttp2/frame_ping.c \ + src/core/transport/chttp2/frame_rst_stream.c \ + src/core/transport/chttp2/frame_settings.c \ + src/core/transport/chttp2/frame_window_update.c \ + src/core/transport/chttp2/hpack_encoder.c \ + src/core/transport/chttp2/hpack_parser.c \ + src/core/transport/chttp2/hpack_table.c \ + src/core/transport/chttp2/huffsyms.c \ + src/core/transport/chttp2/incoming_metadata.c \ + src/core/transport/chttp2/parsing.c \ + src/core/transport/chttp2/status_conversion.c \ + src/core/transport/chttp2/stream_lists.c \ + src/core/transport/chttp2/stream_map.c \ + src/core/transport/chttp2/timeout_encoding.c \ + src/core/transport/chttp2/varint.c \ + src/core/transport/chttp2/writing.c \ + src/core/transport/chttp2_transport.c \ + src/core/transport/connectivity_state.c \ + src/core/transport/metadata.c \ + src/core/transport/metadata_batch.c \ + src/core/transport/static_metadata.c \ + src/core/transport/transport.c \ + src/core/transport/transport_op_string.c \ + src/core/httpcli/httpcli_security_connector.c \ + src/core/security/base64.c \ + src/core/security/client_auth_filter.c \ + src/core/security/credentials.c \ + src/core/security/credentials_metadata.c \ + src/core/security/credentials_posix.c \ + src/core/security/credentials_win32.c \ + src/core/security/google_default_credentials.c \ + src/core/security/handshake.c \ + src/core/security/json_token.c \ + src/core/security/jwt_verifier.c \ + src/core/security/secure_endpoint.c \ + src/core/security/security_connector.c \ + src/core/security/security_context.c \ + src/core/security/server_auth_filter.c \ + src/core/security/server_secure_chttp2.c \ + src/core/surface/init_secure.c \ + src/core/surface/secure_channel_create.c \ + src/core/tsi/fake_transport_security.c \ + src/core/tsi/ssl_transport_security.c \ + src/core/tsi/transport_security.c \ + src/core/census/context.c \ + src/core/census/initialize.c \ + src/core/census/mlog.c \ + src/core/census/operation.c \ + src/core/census/placeholders.c \ + src/core/census/tracing.c \ + third_party/nanopb/pb_common.c \ + third_party/nanopb/pb_decode.c \ + third_party/nanopb/pb_encode.c \ + src/boringssl/err_data.c \ + third_party/boringssl/crypto/aes/aes.c \ + third_party/boringssl/crypto/aes/mode_wrappers.c \ + third_party/boringssl/crypto/asn1/a_bitstr.c \ + third_party/boringssl/crypto/asn1/a_bool.c \ + third_party/boringssl/crypto/asn1/a_bytes.c \ + third_party/boringssl/crypto/asn1/a_d2i_fp.c \ + third_party/boringssl/crypto/asn1/a_dup.c \ + third_party/boringssl/crypto/asn1/a_enum.c \ + third_party/boringssl/crypto/asn1/a_gentm.c \ + third_party/boringssl/crypto/asn1/a_i2d_fp.c \ + third_party/boringssl/crypto/asn1/a_int.c \ + third_party/boringssl/crypto/asn1/a_mbstr.c \ + third_party/boringssl/crypto/asn1/a_object.c \ + third_party/boringssl/crypto/asn1/a_octet.c \ + third_party/boringssl/crypto/asn1/a_print.c \ + third_party/boringssl/crypto/asn1/a_strnid.c \ + third_party/boringssl/crypto/asn1/a_time.c \ + third_party/boringssl/crypto/asn1/a_type.c \ + third_party/boringssl/crypto/asn1/a_utctm.c \ + third_party/boringssl/crypto/asn1/a_utf8.c \ + third_party/boringssl/crypto/asn1/asn1_lib.c \ + third_party/boringssl/crypto/asn1/asn1_par.c \ + third_party/boringssl/crypto/asn1/asn_pack.c \ + third_party/boringssl/crypto/asn1/bio_asn1.c \ + third_party/boringssl/crypto/asn1/bio_ndef.c \ + third_party/boringssl/crypto/asn1/f_enum.c \ + third_party/boringssl/crypto/asn1/f_int.c \ + third_party/boringssl/crypto/asn1/f_string.c \ + third_party/boringssl/crypto/asn1/t_bitst.c \ + third_party/boringssl/crypto/asn1/t_pkey.c \ + third_party/boringssl/crypto/asn1/tasn_dec.c \ + third_party/boringssl/crypto/asn1/tasn_enc.c \ + third_party/boringssl/crypto/asn1/tasn_fre.c \ + third_party/boringssl/crypto/asn1/tasn_new.c \ + third_party/boringssl/crypto/asn1/tasn_prn.c \ + third_party/boringssl/crypto/asn1/tasn_typ.c \ + third_party/boringssl/crypto/asn1/tasn_utl.c \ + third_party/boringssl/crypto/asn1/x_bignum.c \ + third_party/boringssl/crypto/asn1/x_long.c \ + third_party/boringssl/crypto/base64/base64.c \ + third_party/boringssl/crypto/bio/bio.c \ + third_party/boringssl/crypto/bio/bio_mem.c \ + third_party/boringssl/crypto/bio/buffer.c \ + third_party/boringssl/crypto/bio/connect.c \ + third_party/boringssl/crypto/bio/fd.c \ + third_party/boringssl/crypto/bio/file.c \ + third_party/boringssl/crypto/bio/hexdump.c \ + third_party/boringssl/crypto/bio/pair.c \ + third_party/boringssl/crypto/bio/printf.c \ + third_party/boringssl/crypto/bio/socket.c \ + third_party/boringssl/crypto/bio/socket_helper.c \ + third_party/boringssl/crypto/bn/add.c \ + third_party/boringssl/crypto/bn/asm/x86_64-gcc.c \ + third_party/boringssl/crypto/bn/bn.c \ + third_party/boringssl/crypto/bn/bn_asn1.c \ + third_party/boringssl/crypto/bn/cmp.c \ + third_party/boringssl/crypto/bn/convert.c \ + third_party/boringssl/crypto/bn/ctx.c \ + third_party/boringssl/crypto/bn/div.c \ + third_party/boringssl/crypto/bn/exponentiation.c \ + third_party/boringssl/crypto/bn/gcd.c \ + third_party/boringssl/crypto/bn/generic.c \ + third_party/boringssl/crypto/bn/kronecker.c \ + third_party/boringssl/crypto/bn/montgomery.c \ + third_party/boringssl/crypto/bn/mul.c \ + third_party/boringssl/crypto/bn/prime.c \ + third_party/boringssl/crypto/bn/random.c \ + third_party/boringssl/crypto/bn/rsaz_exp.c \ + third_party/boringssl/crypto/bn/shift.c \ + third_party/boringssl/crypto/bn/sqrt.c \ + third_party/boringssl/crypto/buf/buf.c \ + third_party/boringssl/crypto/bytestring/ber.c \ + third_party/boringssl/crypto/bytestring/cbb.c \ + third_party/boringssl/crypto/bytestring/cbs.c \ + third_party/boringssl/crypto/chacha/chacha_generic.c \ + third_party/boringssl/crypto/chacha/chacha_vec.c \ + third_party/boringssl/crypto/cipher/aead.c \ + third_party/boringssl/crypto/cipher/cipher.c \ + third_party/boringssl/crypto/cipher/derive_key.c \ + third_party/boringssl/crypto/cipher/e_aes.c \ + third_party/boringssl/crypto/cipher/e_chacha20poly1305.c \ + third_party/boringssl/crypto/cipher/e_des.c \ + third_party/boringssl/crypto/cipher/e_null.c \ + third_party/boringssl/crypto/cipher/e_rc2.c \ + third_party/boringssl/crypto/cipher/e_rc4.c \ + third_party/boringssl/crypto/cipher/e_ssl3.c \ + third_party/boringssl/crypto/cipher/e_tls.c \ + third_party/boringssl/crypto/cipher/tls_cbc.c \ + third_party/boringssl/crypto/cmac/cmac.c \ + third_party/boringssl/crypto/conf/conf.c \ + third_party/boringssl/crypto/cpu-arm.c \ + third_party/boringssl/crypto/cpu-intel.c \ + third_party/boringssl/crypto/crypto.c \ + third_party/boringssl/crypto/curve25519/curve25519.c \ + third_party/boringssl/crypto/des/des.c \ + third_party/boringssl/crypto/dh/check.c \ + third_party/boringssl/crypto/dh/dh.c \ + third_party/boringssl/crypto/dh/dh_asn1.c \ + third_party/boringssl/crypto/dh/params.c \ + third_party/boringssl/crypto/digest/digest.c \ + third_party/boringssl/crypto/digest/digests.c \ + third_party/boringssl/crypto/directory_posix.c \ + third_party/boringssl/crypto/directory_win.c \ + third_party/boringssl/crypto/dsa/dsa.c \ + third_party/boringssl/crypto/dsa/dsa_asn1.c \ + third_party/boringssl/crypto/ec/ec.c \ + third_party/boringssl/crypto/ec/ec_asn1.c \ + third_party/boringssl/crypto/ec/ec_key.c \ + third_party/boringssl/crypto/ec/ec_montgomery.c \ + third_party/boringssl/crypto/ec/oct.c \ + third_party/boringssl/crypto/ec/p224-64.c \ + third_party/boringssl/crypto/ec/p256-64.c \ + third_party/boringssl/crypto/ec/p256-x86_64.c \ + third_party/boringssl/crypto/ec/simple.c \ + third_party/boringssl/crypto/ec/util-64.c \ + third_party/boringssl/crypto/ec/wnaf.c \ + third_party/boringssl/crypto/ecdh/ecdh.c \ + third_party/boringssl/crypto/ecdsa/ecdsa.c \ + third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c \ + third_party/boringssl/crypto/engine/engine.c \ + third_party/boringssl/crypto/err/err.c \ + third_party/boringssl/crypto/evp/algorithm.c \ + third_party/boringssl/crypto/evp/digestsign.c \ + third_party/boringssl/crypto/evp/evp.c \ + third_party/boringssl/crypto/evp/evp_asn1.c \ + third_party/boringssl/crypto/evp/evp_ctx.c \ + third_party/boringssl/crypto/evp/p_dsa_asn1.c \ + third_party/boringssl/crypto/evp/p_ec.c \ + third_party/boringssl/crypto/evp/p_ec_asn1.c \ + third_party/boringssl/crypto/evp/p_rsa.c \ + third_party/boringssl/crypto/evp/p_rsa_asn1.c \ + third_party/boringssl/crypto/evp/pbkdf.c \ + third_party/boringssl/crypto/evp/sign.c \ + third_party/boringssl/crypto/ex_data.c \ + third_party/boringssl/crypto/hkdf/hkdf.c \ + third_party/boringssl/crypto/hmac/hmac.c \ + third_party/boringssl/crypto/lhash/lhash.c \ + third_party/boringssl/crypto/md4/md4.c \ + third_party/boringssl/crypto/md5/md5.c \ + third_party/boringssl/crypto/mem.c \ + third_party/boringssl/crypto/modes/cbc.c \ + third_party/boringssl/crypto/modes/cfb.c \ + third_party/boringssl/crypto/modes/ctr.c \ + third_party/boringssl/crypto/modes/gcm.c \ + third_party/boringssl/crypto/modes/ofb.c \ + third_party/boringssl/crypto/obj/obj.c \ + third_party/boringssl/crypto/obj/obj_xref.c \ + third_party/boringssl/crypto/pem/pem_all.c \ + third_party/boringssl/crypto/pem/pem_info.c \ + third_party/boringssl/crypto/pem/pem_lib.c \ + third_party/boringssl/crypto/pem/pem_oth.c \ + third_party/boringssl/crypto/pem/pem_pk8.c \ + third_party/boringssl/crypto/pem/pem_pkey.c \ + third_party/boringssl/crypto/pem/pem_x509.c \ + third_party/boringssl/crypto/pem/pem_xaux.c \ + third_party/boringssl/crypto/pkcs8/p5_pbe.c \ + third_party/boringssl/crypto/pkcs8/p5_pbev2.c \ + third_party/boringssl/crypto/pkcs8/p8_pkey.c \ + third_party/boringssl/crypto/pkcs8/pkcs8.c \ + third_party/boringssl/crypto/poly1305/poly1305.c \ + third_party/boringssl/crypto/poly1305/poly1305_arm.c \ + third_party/boringssl/crypto/poly1305/poly1305_vec.c \ + third_party/boringssl/crypto/rand/rand.c \ + third_party/boringssl/crypto/rand/urandom.c \ + third_party/boringssl/crypto/rand/windows.c \ + third_party/boringssl/crypto/rc4/rc4.c \ + third_party/boringssl/crypto/refcount_c11.c \ + third_party/boringssl/crypto/refcount_lock.c \ + third_party/boringssl/crypto/rsa/blinding.c \ + third_party/boringssl/crypto/rsa/padding.c \ + third_party/boringssl/crypto/rsa/rsa.c \ + third_party/boringssl/crypto/rsa/rsa_asn1.c \ + third_party/boringssl/crypto/rsa/rsa_impl.c \ + third_party/boringssl/crypto/sha/sha1.c \ + third_party/boringssl/crypto/sha/sha256.c \ + third_party/boringssl/crypto/sha/sha512.c \ + third_party/boringssl/crypto/stack/stack.c \ + third_party/boringssl/crypto/thread.c \ + third_party/boringssl/crypto/thread_none.c \ + third_party/boringssl/crypto/thread_pthread.c \ + third_party/boringssl/crypto/thread_win.c \ + third_party/boringssl/crypto/time_support.c \ + third_party/boringssl/crypto/x509/a_digest.c \ + third_party/boringssl/crypto/x509/a_sign.c \ + third_party/boringssl/crypto/x509/a_strex.c \ + third_party/boringssl/crypto/x509/a_verify.c \ + third_party/boringssl/crypto/x509/asn1_gen.c \ + third_party/boringssl/crypto/x509/by_dir.c \ + third_party/boringssl/crypto/x509/by_file.c \ + third_party/boringssl/crypto/x509/i2d_pr.c \ + third_party/boringssl/crypto/x509/pkcs7.c \ + third_party/boringssl/crypto/x509/t_crl.c \ + third_party/boringssl/crypto/x509/t_req.c \ + third_party/boringssl/crypto/x509/t_x509.c \ + third_party/boringssl/crypto/x509/t_x509a.c \ + third_party/boringssl/crypto/x509/x509.c \ + third_party/boringssl/crypto/x509/x509_att.c \ + third_party/boringssl/crypto/x509/x509_cmp.c \ + third_party/boringssl/crypto/x509/x509_d2.c \ + third_party/boringssl/crypto/x509/x509_def.c \ + third_party/boringssl/crypto/x509/x509_ext.c \ + third_party/boringssl/crypto/x509/x509_lu.c \ + third_party/boringssl/crypto/x509/x509_obj.c \ + third_party/boringssl/crypto/x509/x509_r2x.c \ + third_party/boringssl/crypto/x509/x509_req.c \ + third_party/boringssl/crypto/x509/x509_set.c \ + third_party/boringssl/crypto/x509/x509_trs.c \ + third_party/boringssl/crypto/x509/x509_txt.c \ + third_party/boringssl/crypto/x509/x509_v3.c \ + third_party/boringssl/crypto/x509/x509_vfy.c \ + third_party/boringssl/crypto/x509/x509_vpm.c \ + third_party/boringssl/crypto/x509/x509cset.c \ + third_party/boringssl/crypto/x509/x509name.c \ + third_party/boringssl/crypto/x509/x509rset.c \ + third_party/boringssl/crypto/x509/x509spki.c \ + third_party/boringssl/crypto/x509/x509type.c \ + third_party/boringssl/crypto/x509/x_algor.c \ + third_party/boringssl/crypto/x509/x_all.c \ + third_party/boringssl/crypto/x509/x_attrib.c \ + third_party/boringssl/crypto/x509/x_crl.c \ + third_party/boringssl/crypto/x509/x_exten.c \ + third_party/boringssl/crypto/x509/x_info.c \ + third_party/boringssl/crypto/x509/x_name.c \ + third_party/boringssl/crypto/x509/x_pkey.c \ + third_party/boringssl/crypto/x509/x_pubkey.c \ + third_party/boringssl/crypto/x509/x_req.c \ + third_party/boringssl/crypto/x509/x_sig.c \ + third_party/boringssl/crypto/x509/x_spki.c \ + third_party/boringssl/crypto/x509/x_val.c \ + third_party/boringssl/crypto/x509/x_x509.c \ + third_party/boringssl/crypto/x509/x_x509a.c \ + third_party/boringssl/crypto/x509v3/pcy_cache.c \ + third_party/boringssl/crypto/x509v3/pcy_data.c \ + third_party/boringssl/crypto/x509v3/pcy_lib.c \ + third_party/boringssl/crypto/x509v3/pcy_map.c \ + third_party/boringssl/crypto/x509v3/pcy_node.c \ + third_party/boringssl/crypto/x509v3/pcy_tree.c \ + third_party/boringssl/crypto/x509v3/v3_akey.c \ + third_party/boringssl/crypto/x509v3/v3_akeya.c \ + third_party/boringssl/crypto/x509v3/v3_alt.c \ + third_party/boringssl/crypto/x509v3/v3_bcons.c \ + third_party/boringssl/crypto/x509v3/v3_bitst.c \ + third_party/boringssl/crypto/x509v3/v3_conf.c \ + third_party/boringssl/crypto/x509v3/v3_cpols.c \ + third_party/boringssl/crypto/x509v3/v3_crld.c \ + third_party/boringssl/crypto/x509v3/v3_enum.c \ + third_party/boringssl/crypto/x509v3/v3_extku.c \ + third_party/boringssl/crypto/x509v3/v3_genn.c \ + third_party/boringssl/crypto/x509v3/v3_ia5.c \ + third_party/boringssl/crypto/x509v3/v3_info.c \ + third_party/boringssl/crypto/x509v3/v3_int.c \ + third_party/boringssl/crypto/x509v3/v3_lib.c \ + third_party/boringssl/crypto/x509v3/v3_ncons.c \ + third_party/boringssl/crypto/x509v3/v3_pci.c \ + third_party/boringssl/crypto/x509v3/v3_pcia.c \ + third_party/boringssl/crypto/x509v3/v3_pcons.c \ + third_party/boringssl/crypto/x509v3/v3_pku.c \ + third_party/boringssl/crypto/x509v3/v3_pmaps.c \ + third_party/boringssl/crypto/x509v3/v3_prn.c \ + third_party/boringssl/crypto/x509v3/v3_purp.c \ + third_party/boringssl/crypto/x509v3/v3_skey.c \ + third_party/boringssl/crypto/x509v3/v3_sxnet.c \ + third_party/boringssl/crypto/x509v3/v3_utl.c \ + third_party/boringssl/ssl/custom_extensions.c \ + third_party/boringssl/ssl/d1_both.c \ + third_party/boringssl/ssl/d1_clnt.c \ + third_party/boringssl/ssl/d1_lib.c \ + third_party/boringssl/ssl/d1_meth.c \ + third_party/boringssl/ssl/d1_pkt.c \ + third_party/boringssl/ssl/d1_srtp.c \ + third_party/boringssl/ssl/d1_srvr.c \ + third_party/boringssl/ssl/dtls_record.c \ + third_party/boringssl/ssl/pqueue/pqueue.c \ + third_party/boringssl/ssl/s3_both.c \ + third_party/boringssl/ssl/s3_clnt.c \ + third_party/boringssl/ssl/s3_enc.c \ + third_party/boringssl/ssl/s3_lib.c \ + third_party/boringssl/ssl/s3_meth.c \ + third_party/boringssl/ssl/s3_pkt.c \ + third_party/boringssl/ssl/s3_srvr.c \ + third_party/boringssl/ssl/ssl_aead_ctx.c \ + third_party/boringssl/ssl/ssl_asn1.c \ + third_party/boringssl/ssl/ssl_buffer.c \ + third_party/boringssl/ssl/ssl_cert.c \ + third_party/boringssl/ssl/ssl_cipher.c \ + third_party/boringssl/ssl/ssl_file.c \ + third_party/boringssl/ssl/ssl_lib.c \ + third_party/boringssl/ssl/ssl_rsa.c \ + third_party/boringssl/ssl/ssl_session.c \ + third_party/boringssl/ssl/ssl_stat.c \ + third_party/boringssl/ssl/t1_enc.c \ + third_party/boringssl/ssl/t1_lib.c \ + third_party/boringssl/ssl/tls_record.c \ + third_party/zlib/adler32.c \ + third_party/zlib/compress.c \ + third_party/zlib/crc32.c \ + third_party/zlib/deflate.c \ + third_party/zlib/gzclose.c \ + third_party/zlib/gzlib.c \ + third_party/zlib/gzread.c \ + third_party/zlib/gzwrite.c \ + third_party/zlib/infback.c \ + third_party/zlib/inffast.c \ + third_party/zlib/inflate.c \ + third_party/zlib/inftrees.c \ + third_party/zlib/trees.c \ + third_party/zlib/uncompr.c \ + third_party/zlib/zutil.c \ + , $ext_shared, , -Wall -Werror -std=c11 \ + -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN \ + -D_HAS_EXCEPTIONS=0 -DNOMINMAX) +fi diff --git a/doc/load-balancing.md b/doc/load-balancing.md new file mode 100644 index 0000000000000000000000000000000000000000..681be02a72f04b5d8fbab2dc44095e299927b741 --- /dev/null +++ b/doc/load-balancing.md @@ -0,0 +1,97 @@ +Load Balancing in gRPC +======================= + +# Objective + +To design a load balancing API between a gRPC client and a Load Balancer to +instruct the client how to send load to multiple backend servers. + +# Background + +Prior to any gRPC specifics, we explore some usual ways to approach load +balancing. + +### Proxy Model + +Using a proxy provides a solid trustable client that can report load to the load +balancing system. Proxies typically require more resources to operate since they +have temporary copies of the RPC request and response. This model also increases +latency to the RPCs. + +The proxy model was deemed inefficient when considering request heavy services +like storage. + +### Balancing-aware Client + +This thicker client places more of the load balancing logic in the client. For +example, the client could contain many load balancing policies (Round Robin, +Random, etc) used to select servers from a list. In this model, a list of +servers would be either statically configured in the client, provided by the +name resolution system, an external load balancer, etc. In any case, the client +is responsible for choosing the preferred server from the list. + +One of the drawbacks of this approach is writing and maintaining the load +balancing policies in multiple languages and/or versions of the clients. These +policies can be fairly complicated. Some of the algorithms also require client +to server communication so the client would need to get thicker to support +additional RPCs to get health or load information in addition to sending RPCs +for user requests. + +It would also significantly complicate the client's code: the new design hides +the load balancing complexity of multiple layers and presents it as a simple +list of servers to the client. + +### External Load Balancing Service + +The client load balancing code is kept simple and portable, implementing +well-known algorithms (ie, Round Robin) for server selection. +Complex load balancing algorithms are instead provided by the load balancer. The +client relies on the load balancer to provide _load balancing configuration_ and +_the list of servers_ to which the client should send requests. The balancer +updates the server list as needed to balance the load as well as handle server +unavailability or health issues. The load balancer will make any necessary +complex decisions and inform the client. The load balancer may communicate with +the backend servers to collect load and health information. + +# Proposed Architecture + +The gRPC load balancing approach follows the third approach, by having an +external load balancer which provides simple clients with a list of servers. + +## Client + +When establishing a gRPC stream to the balancer, the client will send an initial +request to the load balancer (via a regular gRPC message). The load balancer +will respond with client config (including, for example, settings for flow +control, RPC deadlines, etc.) or a redirect to another load balancer. If the +balancer did not redirect the client, it will then send a list of servers to the +client. The client will contain simple load balancing logic for choosing the +next server when it needs to send a request. + +## Load Balancer + +The Load Balancer is responsible for providing the client with a list of servers +and client RPC parameters. The balancer chooses when to update the list of +servers and can decide whether to provide a complete list, a subset, or a +specific list of “picked†servers in a particular order. The balancer can +optionally provide an expiration interval after which the server list should no +longer be trusted and should be updated by the balancer. + +The load balancer may open reporting streams to each server contained in the +server list. These streams are primarily used for load reporting. For example, +Weighted Round Robin requires that the servers report utilization to the load +balancer in order to compute the next list of servers. + +## Server + +The gRPC Server is responsible for answering RPC requests and providing +responses to the client. The server will also report load to the load balancer +if a reporting stream was opened for this purpose. + +### Security + +The load balancer may be separate from the actual server backends and a +compromise of the load balancer should only lead to a compromise of the +loadbalancing functionality. In other words, a compromised load balancer should +not be able to cause a client to trust a (potentially malicious) backend server +any more than in a comparable situation without loadbalancing. diff --git a/gRPC.podspec b/gRPC.podspec index 2c12403e5abc3ca752a1e6927402c58fe36b4c9b..d9c81ef88bd666aa1329960015cab4b562fcc815 100644 --- a/gRPC.podspec +++ b/gRPC.podspec @@ -158,20 +158,6 @@ Pod::Spec.new do |s| 'src/core/support/time_win32.c', 'src/core/support/tls_pthread.c', 'src/core/support/wrap_memcpy.c', - 'src/core/security/auth_filters.h', - 'src/core/security/base64.h', - 'src/core/security/credentials.h', - 'src/core/security/handshake.h', - 'src/core/security/json_token.h', - 'src/core/security/jwt_verifier.h', - 'src/core/security/secure_endpoint.h', - 'src/core/security/security_connector.h', - 'src/core/security/security_context.h', - 'src/core/tsi/fake_transport_security.h', - 'src/core/tsi/ssl_transport_security.h', - 'src/core/tsi/ssl_types.h', - 'src/core/tsi/transport_security.h', - 'src/core/tsi/transport_security_interface.h', 'src/core/census/grpc_filter.h', 'src/core/channel/channel_args.h', 'src/core/channel/channel_stack.h', @@ -186,6 +172,7 @@ Pod::Spec.new do |s| 'src/core/client_config/client_config.h', 'src/core/client_config/connector.h', 'src/core/client_config/initial_connect_string.h', + 'src/core/client_config/lb_policies/load_balancer_api.h', 'src/core/client_config/lb_policies/pick_first.h', 'src/core/client_config/lb_policies/round_robin.h', 'src/core/client_config/lb_policy.h', @@ -246,6 +233,7 @@ Pod::Spec.new do |s| 'src/core/json/json_common.h', 'src/core/json/json_reader.h', 'src/core/json/json_writer.h', + 'src/core/proto/grpc/lb/v0/load_balancer.pb.h', 'src/core/statistics/census_interface.h', 'src/core/statistics/census_rpc_stats.h', 'src/core/surface/api_trace.h', @@ -285,9 +273,27 @@ Pod::Spec.new do |s| 'src/core/transport/static_metadata.h', 'src/core/transport/transport.h', 'src/core/transport/transport_impl.h', + 'src/core/security/auth_filters.h', + 'src/core/security/base64.h', + 'src/core/security/credentials.h', + 'src/core/security/handshake.h', + 'src/core/security/json_token.h', + 'src/core/security/jwt_verifier.h', + 'src/core/security/secure_endpoint.h', + 'src/core/security/security_connector.h', + 'src/core/security/security_context.h', + 'src/core/tsi/fake_transport_security.h', + 'src/core/tsi/ssl_transport_security.h', + 'src/core/tsi/ssl_types.h', + 'src/core/tsi/transport_security.h', + 'src/core/tsi/transport_security_interface.h', 'src/core/census/aggregation.h', - 'src/core/census/log.h', + 'src/core/census/mlog.h', 'src/core/census/rpc_metric_id.h', + 'third_party/nanopb/pb.h', + 'third_party/nanopb/pb_common.h', + 'third_party/nanopb/pb_decode.h', + 'third_party/nanopb/pb_encode.h', 'include/grpc/grpc_security.h', 'include/grpc/impl/codegen/byte_buffer.h', 'include/grpc/impl/codegen/compression_types.h', @@ -301,27 +307,6 @@ Pod::Spec.new do |s| 'include/grpc/grpc.h', 'include/grpc/status.h', 'include/grpc/census.h', - 'src/core/httpcli/httpcli_security_connector.c', - 'src/core/security/base64.c', - 'src/core/security/client_auth_filter.c', - 'src/core/security/credentials.c', - 'src/core/security/credentials_metadata.c', - 'src/core/security/credentials_posix.c', - 'src/core/security/credentials_win32.c', - 'src/core/security/google_default_credentials.c', - 'src/core/security/handshake.c', - 'src/core/security/json_token.c', - 'src/core/security/jwt_verifier.c', - 'src/core/security/secure_endpoint.c', - 'src/core/security/security_connector.c', - 'src/core/security/security_context.c', - 'src/core/security/server_auth_filter.c', - 'src/core/security/server_secure_chttp2.c', - 'src/core/surface/init_secure.c', - 'src/core/surface/secure_channel_create.c', - 'src/core/tsi/fake_transport_security.c', - 'src/core/tsi/ssl_transport_security.c', - 'src/core/tsi/transport_security.c', 'src/core/census/grpc_context.c', 'src/core/census/grpc_filter.c', 'src/core/channel/channel_args.c', @@ -337,6 +322,7 @@ Pod::Spec.new do |s| 'src/core/client_config/connector.c', 'src/core/client_config/default_initial_connect_string.c', 'src/core/client_config/initial_connect_string.c', + 'src/core/client_config/lb_policies/load_balancer_api.c', 'src/core/client_config/lb_policies/pick_first.c', 'src/core/client_config/lb_policies/round_robin.c', 'src/core/client_config/lb_policy.c', @@ -401,6 +387,7 @@ Pod::Spec.new do |s| 'src/core/json/json_reader.c', 'src/core/json/json_string.c', 'src/core/json/json_writer.c', + 'src/core/proto/grpc/lb/v0/load_balancer.pb.c', 'src/core/surface/alarm.c', 'src/core/surface/api_trace.c', 'src/core/surface/byte_buffer.c', @@ -450,12 +437,36 @@ Pod::Spec.new do |s| 'src/core/transport/static_metadata.c', 'src/core/transport/transport.c', 'src/core/transport/transport_op_string.c', + 'src/core/httpcli/httpcli_security_connector.c', + 'src/core/security/base64.c', + 'src/core/security/client_auth_filter.c', + 'src/core/security/credentials.c', + 'src/core/security/credentials_metadata.c', + 'src/core/security/credentials_posix.c', + 'src/core/security/credentials_win32.c', + 'src/core/security/google_default_credentials.c', + 'src/core/security/handshake.c', + 'src/core/security/json_token.c', + 'src/core/security/jwt_verifier.c', + 'src/core/security/secure_endpoint.c', + 'src/core/security/security_connector.c', + 'src/core/security/security_context.c', + 'src/core/security/server_auth_filter.c', + 'src/core/security/server_secure_chttp2.c', + 'src/core/surface/init_secure.c', + 'src/core/surface/secure_channel_create.c', + 'src/core/tsi/fake_transport_security.c', + 'src/core/tsi/ssl_transport_security.c', + 'src/core/tsi/transport_security.c', 'src/core/census/context.c', 'src/core/census/initialize.c', - 'src/core/census/log.c', + 'src/core/census/mlog.c', 'src/core/census/operation.c', 'src/core/census/placeholders.c', - 'src/core/census/tracing.c' + 'src/core/census/tracing.c', + 'third_party/nanopb/pb_common.c', + 'third_party/nanopb/pb_decode.c', + 'third_party/nanopb/pb_encode.c' ss.private_header_files = 'src/core/profiling/timers.h', 'src/core/support/block_annotate.h', @@ -467,20 +478,6 @@ Pod::Spec.new do |s| 'src/core/support/string_win32.h', 'src/core/support/thd_internal.h', 'src/core/support/time_precise.h', - 'src/core/security/auth_filters.h', - 'src/core/security/base64.h', - 'src/core/security/credentials.h', - 'src/core/security/handshake.h', - 'src/core/security/json_token.h', - 'src/core/security/jwt_verifier.h', - 'src/core/security/secure_endpoint.h', - 'src/core/security/security_connector.h', - 'src/core/security/security_context.h', - 'src/core/tsi/fake_transport_security.h', - 'src/core/tsi/ssl_transport_security.h', - 'src/core/tsi/ssl_types.h', - 'src/core/tsi/transport_security.h', - 'src/core/tsi/transport_security_interface.h', 'src/core/census/grpc_filter.h', 'src/core/channel/channel_args.h', 'src/core/channel/channel_stack.h', @@ -495,6 +492,7 @@ Pod::Spec.new do |s| 'src/core/client_config/client_config.h', 'src/core/client_config/connector.h', 'src/core/client_config/initial_connect_string.h', + 'src/core/client_config/lb_policies/load_balancer_api.h', 'src/core/client_config/lb_policies/pick_first.h', 'src/core/client_config/lb_policies/round_robin.h', 'src/core/client_config/lb_policy.h', @@ -555,6 +553,7 @@ Pod::Spec.new do |s| 'src/core/json/json_common.h', 'src/core/json/json_reader.h', 'src/core/json/json_writer.h', + 'src/core/proto/grpc/lb/v0/load_balancer.pb.h', 'src/core/statistics/census_interface.h', 'src/core/statistics/census_rpc_stats.h', 'src/core/surface/api_trace.h', @@ -594,9 +593,27 @@ Pod::Spec.new do |s| 'src/core/transport/static_metadata.h', 'src/core/transport/transport.h', 'src/core/transport/transport_impl.h', + 'src/core/security/auth_filters.h', + 'src/core/security/base64.h', + 'src/core/security/credentials.h', + 'src/core/security/handshake.h', + 'src/core/security/json_token.h', + 'src/core/security/jwt_verifier.h', + 'src/core/security/secure_endpoint.h', + 'src/core/security/security_connector.h', + 'src/core/security/security_context.h', + 'src/core/tsi/fake_transport_security.h', + 'src/core/tsi/ssl_transport_security.h', + 'src/core/tsi/ssl_types.h', + 'src/core/tsi/transport_security.h', + 'src/core/tsi/transport_security_interface.h', 'src/core/census/aggregation.h', - 'src/core/census/log.h', - 'src/core/census/rpc_metric_id.h' + 'src/core/census/mlog.h', + 'src/core/census/rpc_metric_id.h', + 'third_party/nanopb/pb.h', + 'third_party/nanopb/pb_common.h', + 'third_party/nanopb/pb_decode.h', + 'third_party/nanopb/pb_encode.h' ss.header_mappings_dir = '.' # This isn't officially supported in Cocoapods. We've asked for an alternative: diff --git a/grpc.gemspec b/grpc.gemspec index 1c20932641a717a622cf60d9becedccc00132891..6a0cd6a93436c8a1f118579c011ce74430d4349c 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -154,20 +154,6 @@ Gem::Specification.new do |s| s.files += %w( include/grpc/grpc.h ) s.files += %w( include/grpc/status.h ) s.files += %w( include/grpc/census.h ) - s.files += %w( src/core/security/auth_filters.h ) - s.files += %w( src/core/security/base64.h ) - s.files += %w( src/core/security/credentials.h ) - s.files += %w( src/core/security/handshake.h ) - s.files += %w( src/core/security/json_token.h ) - s.files += %w( src/core/security/jwt_verifier.h ) - s.files += %w( src/core/security/secure_endpoint.h ) - s.files += %w( src/core/security/security_connector.h ) - s.files += %w( src/core/security/security_context.h ) - s.files += %w( src/core/tsi/fake_transport_security.h ) - s.files += %w( src/core/tsi/ssl_transport_security.h ) - s.files += %w( src/core/tsi/ssl_types.h ) - s.files += %w( src/core/tsi/transport_security.h ) - s.files += %w( src/core/tsi/transport_security_interface.h ) s.files += %w( src/core/census/grpc_filter.h ) s.files += %w( src/core/channel/channel_args.h ) s.files += %w( src/core/channel/channel_stack.h ) @@ -182,6 +168,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/client_config/client_config.h ) s.files += %w( src/core/client_config/connector.h ) s.files += %w( src/core/client_config/initial_connect_string.h ) + s.files += %w( src/core/client_config/lb_policies/load_balancer_api.h ) s.files += %w( src/core/client_config/lb_policies/pick_first.h ) s.files += %w( src/core/client_config/lb_policies/round_robin.h ) s.files += %w( src/core/client_config/lb_policy.h ) @@ -242,6 +229,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/json/json_common.h ) s.files += %w( src/core/json/json_reader.h ) s.files += %w( src/core/json/json_writer.h ) + s.files += %w( src/core/proto/grpc/lb/v0/load_balancer.pb.h ) s.files += %w( src/core/statistics/census_interface.h ) s.files += %w( src/core/statistics/census_rpc_stats.h ) s.files += %w( src/core/surface/api_trace.h ) @@ -281,30 +269,27 @@ Gem::Specification.new do |s| s.files += %w( src/core/transport/static_metadata.h ) s.files += %w( src/core/transport/transport.h ) s.files += %w( src/core/transport/transport_impl.h ) + s.files += %w( src/core/security/auth_filters.h ) + s.files += %w( src/core/security/base64.h ) + s.files += %w( src/core/security/credentials.h ) + s.files += %w( src/core/security/handshake.h ) + s.files += %w( src/core/security/json_token.h ) + s.files += %w( src/core/security/jwt_verifier.h ) + s.files += %w( src/core/security/secure_endpoint.h ) + s.files += %w( src/core/security/security_connector.h ) + s.files += %w( src/core/security/security_context.h ) + s.files += %w( src/core/tsi/fake_transport_security.h ) + s.files += %w( src/core/tsi/ssl_transport_security.h ) + s.files += %w( src/core/tsi/ssl_types.h ) + s.files += %w( src/core/tsi/transport_security.h ) + s.files += %w( src/core/tsi/transport_security_interface.h ) s.files += %w( src/core/census/aggregation.h ) - s.files += %w( src/core/census/log.h ) + s.files += %w( src/core/census/mlog.h ) s.files += %w( src/core/census/rpc_metric_id.h ) - s.files += %w( src/core/httpcli/httpcli_security_connector.c ) - s.files += %w( src/core/security/base64.c ) - s.files += %w( src/core/security/client_auth_filter.c ) - s.files += %w( src/core/security/credentials.c ) - s.files += %w( src/core/security/credentials_metadata.c ) - s.files += %w( src/core/security/credentials_posix.c ) - s.files += %w( src/core/security/credentials_win32.c ) - s.files += %w( src/core/security/google_default_credentials.c ) - s.files += %w( src/core/security/handshake.c ) - s.files += %w( src/core/security/json_token.c ) - s.files += %w( src/core/security/jwt_verifier.c ) - s.files += %w( src/core/security/secure_endpoint.c ) - s.files += %w( src/core/security/security_connector.c ) - s.files += %w( src/core/security/security_context.c ) - s.files += %w( src/core/security/server_auth_filter.c ) - s.files += %w( src/core/security/server_secure_chttp2.c ) - s.files += %w( src/core/surface/init_secure.c ) - s.files += %w( src/core/surface/secure_channel_create.c ) - s.files += %w( src/core/tsi/fake_transport_security.c ) - s.files += %w( src/core/tsi/ssl_transport_security.c ) - s.files += %w( src/core/tsi/transport_security.c ) + s.files += %w( third_party/nanopb/pb.h ) + s.files += %w( third_party/nanopb/pb_common.h ) + s.files += %w( third_party/nanopb/pb_decode.h ) + s.files += %w( third_party/nanopb/pb_encode.h ) s.files += %w( src/core/census/grpc_context.c ) s.files += %w( src/core/census/grpc_filter.c ) s.files += %w( src/core/channel/channel_args.c ) @@ -320,6 +305,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/client_config/connector.c ) s.files += %w( src/core/client_config/default_initial_connect_string.c ) s.files += %w( src/core/client_config/initial_connect_string.c ) + s.files += %w( src/core/client_config/lb_policies/load_balancer_api.c ) s.files += %w( src/core/client_config/lb_policies/pick_first.c ) s.files += %w( src/core/client_config/lb_policies/round_robin.c ) s.files += %w( src/core/client_config/lb_policy.c ) @@ -384,6 +370,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/json/json_reader.c ) s.files += %w( src/core/json/json_string.c ) s.files += %w( src/core/json/json_writer.c ) + s.files += %w( src/core/proto/grpc/lb/v0/load_balancer.pb.c ) s.files += %w( src/core/surface/alarm.c ) s.files += %w( src/core/surface/api_trace.c ) s.files += %w( src/core/surface/byte_buffer.c ) @@ -433,12 +420,36 @@ Gem::Specification.new do |s| s.files += %w( src/core/transport/static_metadata.c ) s.files += %w( src/core/transport/transport.c ) s.files += %w( src/core/transport/transport_op_string.c ) + s.files += %w( src/core/httpcli/httpcli_security_connector.c ) + s.files += %w( src/core/security/base64.c ) + s.files += %w( src/core/security/client_auth_filter.c ) + s.files += %w( src/core/security/credentials.c ) + s.files += %w( src/core/security/credentials_metadata.c ) + s.files += %w( src/core/security/credentials_posix.c ) + s.files += %w( src/core/security/credentials_win32.c ) + s.files += %w( src/core/security/google_default_credentials.c ) + s.files += %w( src/core/security/handshake.c ) + s.files += %w( src/core/security/json_token.c ) + s.files += %w( src/core/security/jwt_verifier.c ) + s.files += %w( src/core/security/secure_endpoint.c ) + s.files += %w( src/core/security/security_connector.c ) + s.files += %w( src/core/security/security_context.c ) + s.files += %w( src/core/security/server_auth_filter.c ) + s.files += %w( src/core/security/server_secure_chttp2.c ) + s.files += %w( src/core/surface/init_secure.c ) + s.files += %w( src/core/surface/secure_channel_create.c ) + s.files += %w( src/core/tsi/fake_transport_security.c ) + s.files += %w( src/core/tsi/ssl_transport_security.c ) + s.files += %w( src/core/tsi/transport_security.c ) s.files += %w( src/core/census/context.c ) s.files += %w( src/core/census/initialize.c ) - s.files += %w( src/core/census/log.c ) + s.files += %w( src/core/census/mlog.c ) s.files += %w( src/core/census/operation.c ) s.files += %w( src/core/census/placeholders.c ) s.files += %w( src/core/census/tracing.c ) + s.files += %w( third_party/nanopb/pb_common.c ) + s.files += %w( third_party/nanopb/pb_decode.c ) + s.files += %w( third_party/nanopb/pb_encode.c ) s.files += %w( third_party/boringssl/crypto/aes/internal.h ) s.files += %w( third_party/boringssl/crypto/asn1/asn1_locl.h ) s.files += %w( third_party/boringssl/crypto/bio/internal.h ) diff --git a/include/grpc++/impl/codegen/call.h b/include/grpc++/impl/codegen/call.h index e65349ddd3a2d94ede564683edd4cbb0a86d3924..5e450b0d248a3253f16ab7ebadf30c890d496717 100644 --- a/include/grpc++/impl/codegen/call.h +++ b/include/grpc++/impl/codegen/call.h @@ -272,6 +272,7 @@ namespace CallOpGenericRecvMessageHelper { class DeserializeFunc { public: virtual Status Deserialize(grpc_byte_buffer* buf, int max_message_size) = 0; + virtual ~DeserializeFunc() {} }; template <class R> @@ -283,6 +284,8 @@ class DeserializeFuncType GRPC_FINAL : public DeserializeFunc { return SerializationTraits<R>::Deserialize(buf, message_, max_message_size); } + ~DeserializeFuncType() override {} + private: R* message_; // Not a managed pointer because management is external to this }; diff --git a/include/grpc++/server.h b/include/grpc++/server.h index 2a71073a7e2f89852e6bc9342417420c702b6228..c177805236b62f50c50cdd31f56494ee5e682132 100644 --- a/include/grpc++/server.h +++ b/include/grpc++/server.h @@ -79,6 +79,8 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibrary { class GlobalCallbacks { public: virtual ~GlobalCallbacks() {} + /// Called before server is created. + virtual void UpdateArguments(ChannelArguments* args) {} /// Called before application callback for each synchronous server request virtual void PreSynchronousRequest(ServerContext* context) = 0; /// Called after application callback for each synchronous server request @@ -108,7 +110,7 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibrary { /// \param max_message_size Maximum message length that the channel can /// receive. Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, - int max_message_size, const ChannelArguments& args); + int max_message_size, ChannelArguments* args); /// Register a service. This call does not take ownership of the service. /// The service must exist for the lifetime of the Server instance. @@ -177,7 +179,7 @@ class Server GRPC_FINAL : public ServerInterface, private GrpcLibrary { bool has_generic_service_; // Pointer to the c grpc server. - grpc_server* const server_; + grpc_server* server_; ThreadPoolInterface* thread_pool_; // Whether the thread pool is created and owned by the server. diff --git a/package.json b/package.json index 76c0ffea468cbb57b54575b657e67f18b0944dde..bc58e3d337010662ef39881c54c189b2ec90a8bc 100644 --- a/package.json +++ b/package.json @@ -99,20 +99,6 @@ "include/grpc/grpc.h", "include/grpc/status.h", "include/grpc/census.h", - "src/core/security/auth_filters.h", - "src/core/security/base64.h", - "src/core/security/credentials.h", - "src/core/security/handshake.h", - "src/core/security/json_token.h", - "src/core/security/jwt_verifier.h", - "src/core/security/secure_endpoint.h", - "src/core/security/security_connector.h", - "src/core/security/security_context.h", - "src/core/tsi/fake_transport_security.h", - "src/core/tsi/ssl_transport_security.h", - "src/core/tsi/ssl_types.h", - "src/core/tsi/transport_security.h", - "src/core/tsi/transport_security_interface.h", "src/core/census/grpc_filter.h", "src/core/channel/channel_args.h", "src/core/channel/channel_stack.h", @@ -127,6 +113,7 @@ "src/core/client_config/client_config.h", "src/core/client_config/connector.h", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.h", "src/core/client_config/lb_policy.h", @@ -187,6 +174,7 @@ "src/core/json/json_common.h", "src/core/json/json_reader.h", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/statistics/census_interface.h", "src/core/statistics/census_rpc_stats.h", "src/core/surface/api_trace.h", @@ -226,30 +214,27 @@ "src/core/transport/static_metadata.h", "src/core/transport/transport.h", "src/core/transport/transport_impl.h", + "src/core/security/auth_filters.h", + "src/core/security/base64.h", + "src/core/security/credentials.h", + "src/core/security/handshake.h", + "src/core/security/json_token.h", + "src/core/security/jwt_verifier.h", + "src/core/security/secure_endpoint.h", + "src/core/security/security_connector.h", + "src/core/security/security_context.h", + "src/core/tsi/fake_transport_security.h", + "src/core/tsi/ssl_transport_security.h", + "src/core/tsi/ssl_types.h", + "src/core/tsi/transport_security.h", + "src/core/tsi/transport_security_interface.h", "src/core/census/aggregation.h", - "src/core/census/log.h", + "src/core/census/mlog.h", "src/core/census/rpc_metric_id.h", - "src/core/httpcli/httpcli_security_connector.c", - "src/core/security/base64.c", - "src/core/security/client_auth_filter.c", - "src/core/security/credentials.c", - "src/core/security/credentials_metadata.c", - "src/core/security/credentials_posix.c", - "src/core/security/credentials_win32.c", - "src/core/security/google_default_credentials.c", - "src/core/security/handshake.c", - "src/core/security/json_token.c", - "src/core/security/jwt_verifier.c", - "src/core/security/secure_endpoint.c", - "src/core/security/security_connector.c", - "src/core/security/security_context.c", - "src/core/security/server_auth_filter.c", - "src/core/security/server_secure_chttp2.c", - "src/core/surface/init_secure.c", - "src/core/surface/secure_channel_create.c", - "src/core/tsi/fake_transport_security.c", - "src/core/tsi/ssl_transport_security.c", - "src/core/tsi/transport_security.c", + "third_party/nanopb/pb.h", + "third_party/nanopb/pb_common.h", + "third_party/nanopb/pb_decode.h", + "third_party/nanopb/pb_encode.h", "src/core/census/grpc_context.c", "src/core/census/grpc_filter.c", "src/core/channel/channel_args.c", @@ -265,6 +250,7 @@ "src/core/client_config/connector.c", "src/core/client_config/default_initial_connect_string.c", "src/core/client_config/initial_connect_string.c", + "src/core/client_config/lb_policies/load_balancer_api.c", "src/core/client_config/lb_policies/pick_first.c", "src/core/client_config/lb_policies/round_robin.c", "src/core/client_config/lb_policy.c", @@ -329,6 +315,7 @@ "src/core/json/json_reader.c", "src/core/json/json_string.c", "src/core/json/json_writer.c", + "src/core/proto/grpc/lb/v0/load_balancer.pb.c", "src/core/surface/alarm.c", "src/core/surface/api_trace.c", "src/core/surface/byte_buffer.c", @@ -378,12 +365,36 @@ "src/core/transport/static_metadata.c", "src/core/transport/transport.c", "src/core/transport/transport_op_string.c", + "src/core/httpcli/httpcli_security_connector.c", + "src/core/security/base64.c", + "src/core/security/client_auth_filter.c", + "src/core/security/credentials.c", + "src/core/security/credentials_metadata.c", + "src/core/security/credentials_posix.c", + "src/core/security/credentials_win32.c", + "src/core/security/google_default_credentials.c", + "src/core/security/handshake.c", + "src/core/security/json_token.c", + "src/core/security/jwt_verifier.c", + "src/core/security/secure_endpoint.c", + "src/core/security/security_connector.c", + "src/core/security/security_context.c", + "src/core/security/server_auth_filter.c", + "src/core/security/server_secure_chttp2.c", + "src/core/surface/init_secure.c", + "src/core/surface/secure_channel_create.c", + "src/core/tsi/fake_transport_security.c", + "src/core/tsi/ssl_transport_security.c", + "src/core/tsi/transport_security.c", "src/core/census/context.c", "src/core/census/initialize.c", - "src/core/census/log.c", + "src/core/census/mlog.c", "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/tracing.c", + "third_party/nanopb/pb_common.c", + "third_party/nanopb/pb_decode.c", + "third_party/nanopb/pb_encode.c", "third_party/zlib/crc32.h", "third_party/zlib/deflate.h", "third_party/zlib/gzguts.h", diff --git a/package.xml b/package.xml new file mode 100644 index 0000000000000000000000000000000000000000..99109ada8fd2eed100f4bdc8bb8b70175fec76bd --- /dev/null +++ b/package.xml @@ -0,0 +1,998 @@ +<?xml version="1.0" encoding="UTF-8"?> +<package packagerversion="1.9.5" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd"> + <name>grpc</name> + <channel>pecl.php.net</channel> + <summary>A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.</summary> + <description>Remote Procedure Calls (RPCs) provide a useful abstraction for building distributed applications and services. The libraries in this repository provide a concrete implementation of the gRPC protocol, layered over HTTP/2. These libraries enable communication between clients and servers using any combination of the supported languages.</description> + <lead> + <name>Stanley Cheung</name> + <user>stanleycheung</user> + <email>grpc-packages@google.com</email> + <active>yes</active> + </lead> + <date>2016-02-23</date> + <time>16:06:07</time> + <version> + <release>0.8.0</release> + <api>0.8.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <license>BSD</license> + <notes> +- Simplify gRPC PHP installation #4517 + </notes> + <contents> + <dir baseinstalldir="/" name="/"> + <file baseinstalldir="/" name="config.m4" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/CREDITS" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/LICENSE" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/README.md" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/byte_buffer.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/call.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/call_credentials.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/channel.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/channel_credentials.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/completion_queue.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/php_grpc.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/server.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/server_credentials.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/timeval.c" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/byte_buffer.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/call.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/call_credentials.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/channel.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/channel_credentials.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/completion_queue.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/php_grpc.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/server.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/server_credentials.h" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/timeval.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/alloc.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/atm.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/atm_gcc_atomic.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/atm_gcc_sync.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/atm_win32.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/avl.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/cmdline.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/cpu.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/histogram.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/host_port.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/log.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/log_win32.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/port_platform.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/slice.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/slice_buffer.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/string_util.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/subprocess.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/sync.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/sync_generic.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/sync_posix.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/sync_win32.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/thd.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/time.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/tls.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/tls_gcc.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/tls_msvc.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/tls_pthread.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/support/useful.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/alloc.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/atm.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/atm_gcc_atomic.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/atm_gcc_sync.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/atm_win32.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/log.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/port_platform.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/slice.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/slice_buffer.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/sync.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_generic.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_posix.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_win32.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/time.h" role="src" /> + <file baseinstalldir="/" name="src/core/profiling/timers.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/block_annotate.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/env.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/file.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/murmur_hash.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/stack_lockfree.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/string.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/string_win32.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/thd_internal.h" role="src" /> + <file baseinstalldir="/" name="src/core/support/time_precise.h" role="src" /> + <file baseinstalldir="/" name="src/core/profiling/basic_timers.c" role="src" /> + <file baseinstalldir="/" name="src/core/profiling/stap_timers.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/alloc.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/avl.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/cmdline.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/cpu_iphone.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/cpu_linux.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/cpu_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/cpu_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/env_linux.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/env_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/env_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/file.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/file_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/file_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/histogram.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/host_port.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/log.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/log_android.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/log_linux.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/log_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/log_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/murmur_hash.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/slice.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/slice_buffer.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/stack_lockfree.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/string.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/string_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/string_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/subprocess_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/subprocess_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/sync.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/sync_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/sync_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/thd.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/thd_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/thd_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/time.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/time_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/time_precise.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/time_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/tls_pthread.c" role="src" /> + <file baseinstalldir="/" name="src/core/support/wrap_memcpy.c" role="src" /> + <file baseinstalldir="/" name="include/grpc/grpc_security.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/byte_buffer.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/compression_types.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/connectivity_state.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/grpc_types.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/propagation_bits.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/impl/codegen/status.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/byte_buffer.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/byte_buffer_reader.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/compression.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/grpc.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/status.h" role="src" /> + <file baseinstalldir="/" name="include/grpc/census.h" role="src" /> + <file baseinstalldir="/" name="src/core/census/grpc_filter.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/channel_args.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/channel_stack.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/client_channel.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/client_uchannel.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/compress_filter.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/connected_channel.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/context.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/http_client_filter.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/http_server_filter.h" role="src" /> + <file baseinstalldir="/" name="src/core/channel/subchannel_call_holder.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/client_config.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/connector.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/initial_connect_string.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policies/load_balancer_api.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policies/pick_first.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policies/round_robin.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policy.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policy_factory.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policy_registry.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolver.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolver_factory.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolver_registry.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolvers/dns_resolver.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolvers/sockaddr_resolver.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/subchannel.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/subchannel_factory.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/subchannel_index.h" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/uri_parser.h" role="src" /> + <file baseinstalldir="/" name="src/core/compression/algorithm_metadata.h" role="src" /> + <file baseinstalldir="/" name="src/core/compression/message_compress.h" role="src" /> + <file baseinstalldir="/" name="src/core/debug/trace.h" role="src" /> + <file baseinstalldir="/" name="src/core/httpcli/format_request.h" role="src" /> + <file baseinstalldir="/" name="src/core/httpcli/httpcli.h" role="src" /> + <file baseinstalldir="/" name="src/core/httpcli/parser.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/closure.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/endpoint.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/endpoint_pair.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/exec_ctx.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/executor.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/fd_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iocp_windows.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iomgr.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iomgr_internal.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iomgr_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_set.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_set_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_set_windows.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_windows.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/resolve_address.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/sockaddr.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/sockaddr_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/sockaddr_utils.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/sockaddr_win32.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/socket_utils_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/socket_windows.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_client.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_server.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_windows.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/time_averaged_stats.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/timer.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/timer_heap.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/udp_server.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_pipe.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/workqueue.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/workqueue_posix.h" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/workqueue_windows.h" role="src" /> + <file baseinstalldir="/" name="src/core/json/json.h" role="src" /> + <file baseinstalldir="/" name="src/core/json/json_common.h" role="src" /> + <file baseinstalldir="/" name="src/core/json/json_reader.h" role="src" /> + <file baseinstalldir="/" name="src/core/json/json_writer.h" role="src" /> + <file baseinstalldir="/" name="src/core/proto/grpc/lb/v0/load_balancer.pb.h" role="src" /> + <file baseinstalldir="/" name="src/core/statistics/census_interface.h" role="src" /> + <file baseinstalldir="/" name="src/core/statistics/census_rpc_stats.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/api_trace.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/call.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/call_test_only.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/channel.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/completion_queue.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/event_string.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/init.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/server.h" role="src" /> + <file baseinstalldir="/" name="src/core/surface/surface_trace.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/byte_stream.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/alpn.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/bin_encoder.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_data.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_goaway.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_ping.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_rst_stream.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_settings.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_window_update.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/hpack_encoder.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/hpack_parser.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/hpack_table.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/http2_errors.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/huffsyms.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/incoming_metadata.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/internal.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/status_conversion.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/stream_map.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/timeout_encoding.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/varint.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2_transport.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/connectivity_state.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/metadata.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/metadata_batch.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/static_metadata.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/transport.h" role="src" /> + <file baseinstalldir="/" name="src/core/transport/transport_impl.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/auth_filters.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/base64.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/credentials.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/handshake.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/json_token.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/jwt_verifier.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/secure_endpoint.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/security_connector.h" role="src" /> + <file baseinstalldir="/" name="src/core/security/security_context.h" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.h" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.h" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/ssl_types.h" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/transport_security.h" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/transport_security_interface.h" role="src" /> + <file baseinstalldir="/" name="src/core/census/aggregation.h" role="src" /> + <file baseinstalldir="/" name="src/core/census/mlog.h" role="src" /> + <file baseinstalldir="/" name="src/core/census/rpc_metric_id.h" role="src" /> + <file baseinstalldir="/" name="third_party/nanopb/pb.h" role="src" /> + <file baseinstalldir="/" name="third_party/nanopb/pb_common.h" role="src" /> + <file baseinstalldir="/" name="third_party/nanopb/pb_decode.h" role="src" /> + <file baseinstalldir="/" name="third_party/nanopb/pb_encode.h" role="src" /> + <file baseinstalldir="/" name="src/core/census/grpc_context.c" role="src" /> + <file baseinstalldir="/" name="src/core/census/grpc_filter.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/channel_args.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/channel_stack.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/client_channel.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/client_uchannel.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/compress_filter.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/connected_channel.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/http_client_filter.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/http_server_filter.c" role="src" /> + <file baseinstalldir="/" name="src/core/channel/subchannel_call_holder.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/client_config.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/connector.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/default_initial_connect_string.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/initial_connect_string.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policies/load_balancer_api.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policies/pick_first.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policies/round_robin.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policy.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policy_factory.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/lb_policy_registry.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolver.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolver_factory.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolver_registry.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolvers/dns_resolver.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/resolvers/sockaddr_resolver.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/subchannel.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/subchannel_factory.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/subchannel_index.c" role="src" /> + <file baseinstalldir="/" name="src/core/client_config/uri_parser.c" role="src" /> + <file baseinstalldir="/" name="src/core/compression/algorithm.c" role="src" /> + <file baseinstalldir="/" name="src/core/compression/message_compress.c" role="src" /> + <file baseinstalldir="/" name="src/core/debug/trace.c" role="src" /> + <file baseinstalldir="/" name="src/core/httpcli/format_request.c" role="src" /> + <file baseinstalldir="/" name="src/core/httpcli/httpcli.c" role="src" /> + <file baseinstalldir="/" name="src/core/httpcli/parser.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/closure.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/endpoint.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/endpoint_pair_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/endpoint_pair_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/exec_ctx.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/executor.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/fd_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iocp_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iomgr.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iomgr_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/iomgr_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_multipoller_with_epoll.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_multipoller_with_poll_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_set_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_set_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/pollset_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/resolve_address_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/resolve_address_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/sockaddr_utils.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/socket_utils_common_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/socket_utils_linux.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/socket_utils_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/socket_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_client_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_client_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_server_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_server_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/tcp_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/time_averaged_stats.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/timer.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/timer_heap.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/udp_server.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_eventfd.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_nospecial.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_pipe.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/wakeup_fd_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/workqueue_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/iomgr/workqueue_windows.c" role="src" /> + <file baseinstalldir="/" name="src/core/json/json.c" role="src" /> + <file baseinstalldir="/" name="src/core/json/json_reader.c" role="src" /> + <file baseinstalldir="/" name="src/core/json/json_string.c" role="src" /> + <file baseinstalldir="/" name="src/core/json/json_writer.c" role="src" /> + <file baseinstalldir="/" name="src/core/proto/grpc/lb/v0/load_balancer.pb.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/alarm.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/api_trace.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/byte_buffer.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/byte_buffer_reader.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/call.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/call_details.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/call_log_batch.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/channel.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/channel_connectivity.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/channel_create.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/channel_ping.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/completion_queue.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/event_string.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/init.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/lame_client.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/metadata_array.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/server.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/server_chttp2.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/server_create.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/validate_metadata.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/version.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/byte_stream.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/alpn.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/bin_encoder.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_data.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_goaway.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_ping.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_rst_stream.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_settings.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/frame_window_update.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/hpack_encoder.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/hpack_parser.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/hpack_table.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/huffsyms.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/incoming_metadata.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/parsing.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/status_conversion.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/stream_lists.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/stream_map.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/timeout_encoding.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/varint.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2/writing.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/chttp2_transport.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/connectivity_state.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/metadata.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/metadata_batch.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/static_metadata.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/transport.c" role="src" /> + <file baseinstalldir="/" name="src/core/transport/transport_op_string.c" role="src" /> + <file baseinstalldir="/" name="src/core/httpcli/httpcli_security_connector.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/base64.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/client_auth_filter.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/credentials.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/credentials_metadata.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/credentials_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/credentials_win32.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/google_default_credentials.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/handshake.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/json_token.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/jwt_verifier.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/secure_endpoint.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/security_connector.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/security_context.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/server_auth_filter.c" role="src" /> + <file baseinstalldir="/" name="src/core/security/server_secure_chttp2.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/init_secure.c" role="src" /> + <file baseinstalldir="/" name="src/core/surface/secure_channel_create.c" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.c" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.c" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/transport_security.c" role="src" /> + <file baseinstalldir="/" name="src/core/census/context.c" role="src" /> + <file baseinstalldir="/" name="src/core/census/initialize.c" role="src" /> + <file baseinstalldir="/" name="src/core/census/mlog.c" role="src" /> + <file baseinstalldir="/" name="src/core/census/operation.c" role="src" /> + <file baseinstalldir="/" name="src/core/census/placeholders.c" role="src" /> + <file baseinstalldir="/" name="src/core/census/tracing.c" role="src" /> + <file baseinstalldir="/" name="third_party/nanopb/pb_common.c" role="src" /> + <file baseinstalldir="/" name="third_party/nanopb/pb_decode.c" role="src" /> + <file baseinstalldir="/" name="third_party/nanopb/pb_encode.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/aes/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn1_locl.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/rsaz_exp.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/conf/conf_def.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/conf/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/des/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dh/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/digest/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/digest/md32_common.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/directory.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dsa/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/p256-x86_64-table.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/modes/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/obj/obj_dat.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/obj/obj_xref.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rand/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rsa/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/test/scoped_types.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/test/test_util.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/charmap.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/vpm_int.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/ext_dat.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_int.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/aead.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/aes.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/arm_arch.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/asn1.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/asn1_mac.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/asn1t.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/base.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/base64.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/bio.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/blowfish.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/bn.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/buf.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/buffer.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/bytestring.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/cast.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/chacha.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/cipher.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/cmac.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/conf.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/cpu.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/crypto.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/curve25519.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/des.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/dh.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/digest.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/dsa.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/dtls1.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ec.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ec_key.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ecdh.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ecdsa.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/engine.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/err.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/evp.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ex_data.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/hkdf.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/hmac.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/lhash.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/lhash_macros.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/md4.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/md5.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/mem.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/obj.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/obj_mac.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/objects.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/opensslfeatures.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/opensslv.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ossl_typ.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/pem.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/pkcs12.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/pkcs7.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/pkcs8.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/poly1305.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/pqueue.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/rand.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/rc4.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/rsa.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/safestack.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/sha.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/srtp.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ssl.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/ssl3.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/stack.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/stack_macros.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/thread.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/time_support.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/tls1.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/type_check.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/x509.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/x509_vfy.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/include/openssl/x509v3.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/internal.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/test/async_bio.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/test/packeted_bio.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/test/scoped_types.h" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/test/test_config.h" role="src" /> + <file baseinstalldir="/" name="src/boringssl/err_data.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/aes/aes.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/aes/mode_wrappers.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_bitstr.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_bool.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_bytes.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_d2i_fp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_dup.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_enum.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_gentm.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_i2d_fp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_int.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_mbstr.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_object.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_octet.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_print.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_strnid.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_time.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_type.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_utctm.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/a_utf8.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn1_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn1_par.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/asn_pack.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/bio_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/bio_ndef.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/f_enum.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/f_int.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/f_string.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/t_bitst.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/t_pkey.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_dec.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_enc.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_fre.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_new.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_prn.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_typ.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/tasn_utl.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/x_bignum.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/asn1/x_long.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/base64/base64.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/bio.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/bio_mem.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/buffer.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/connect.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/fd.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/file.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/hexdump.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/pair.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/printf.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/socket.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bio/socket_helper.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/add.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/asm/x86_64-gcc.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/bn.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/bn_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/cmp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/convert.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/ctx.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/div.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/exponentiation.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/gcd.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/generic.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/kronecker.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/montgomery.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/mul.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/prime.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/random.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/rsaz_exp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/shift.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bn/sqrt.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/buf/buf.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/ber.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/cbb.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/bytestring/cbs.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/chacha/chacha_generic.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/chacha/chacha_vec.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/aead.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/cipher.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/derive_key.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_aes.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_chacha20poly1305.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_des.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_null.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_rc2.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_rc4.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_ssl3.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/e_tls.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cipher/tls_cbc.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cmac/cmac.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/conf/conf.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-arm.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/cpu-intel.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/crypto.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/curve25519/curve25519.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/des/des.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dh/check.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dh/dh.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dh/dh_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dh/params.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/digest/digest.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/digest/digests.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/directory_posix.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/directory_win.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dsa/dsa.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/dsa/dsa_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/ec.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/ec_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/ec_key.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/ec_montgomery.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/oct.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/p224-64.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/p256-64.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/p256-x86_64.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/simple.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/util-64.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ec/wnaf.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ecdh/ecdh.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ecdsa/ecdsa.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/engine/engine.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/err/err.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/algorithm.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/digestsign.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/evp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/evp_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/evp_ctx.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_dsa_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_ec.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_ec_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_rsa.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/p_rsa_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/pbkdf.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/evp/sign.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/ex_data.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/hkdf/hkdf.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/hmac/hmac.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/lhash/lhash.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/md4/md4.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/md5/md5.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/mem.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/modes/cbc.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/modes/cfb.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/modes/ctr.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/modes/gcm.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/modes/ofb.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/obj/obj.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/obj/obj_xref.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_all.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_info.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_oth.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_pk8.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_pkey.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_x509.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pem/pem_xaux.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/p5_pbe.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/p5_pbev2.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/p8_pkey.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/pkcs8/pkcs8.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/poly1305/poly1305.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/poly1305/poly1305_arm.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/poly1305/poly1305_vec.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rand/rand.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rand/urandom.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rand/windows.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rc4/rc4.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/refcount_c11.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/refcount_lock.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rsa/blinding.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rsa/padding.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rsa/rsa.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rsa/rsa_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/rsa/rsa_impl.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/sha/sha1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/sha/sha256.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/sha/sha512.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/stack/stack.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/thread.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/thread_none.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/thread_pthread.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/thread_win.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/time_support.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_digest.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_sign.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_strex.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/a_verify.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/asn1_gen.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/by_dir.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/by_file.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/i2d_pr.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/pkcs7.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_crl.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_req.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_x509.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/t_x509a.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_att.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_cmp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_d2.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_def.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_ext.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_lu.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_obj.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_r2x.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_req.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_set.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_trs.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_txt.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_v3.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_vfy.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509_vpm.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509cset.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509name.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509rset.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509spki.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x509type.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_algor.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_all.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_attrib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_crl.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_exten.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_info.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_name.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_pkey.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_pubkey.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_req.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_sig.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_spki.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_val.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_x509.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509/x_x509a.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_cache.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_data.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_map.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_node.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/pcy_tree.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_akey.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_akeya.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_alt.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_bcons.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_bitst.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_conf.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_cpols.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_crld.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_enum.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_extku.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_genn.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_ia5.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_info.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_int.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_ncons.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pci.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pcia.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pcons.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pku.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_pmaps.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_prn.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_purp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_skey.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_sxnet.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/crypto/x509v3/v3_utl.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/custom_extensions.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/d1_both.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/d1_clnt.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/d1_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/d1_meth.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/d1_pkt.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/d1_srtp.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/d1_srvr.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/dtls_record.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/pqueue/pqueue.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/s3_both.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/s3_clnt.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/s3_enc.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/s3_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/s3_meth.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/s3_pkt.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/s3_srvr.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_aead_ctx.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_asn1.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_buffer.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_cert.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_cipher.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_file.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_rsa.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_session.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/ssl_stat.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/t1_enc.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/t1_lib.c" role="src" /> + <file baseinstalldir="/" name="third_party/boringssl/ssl/tls_record.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/crc32.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/deflate.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/gzguts.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/inffast.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/inffixed.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/inflate.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/inftrees.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/trees.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/zconf.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/zlib.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/zutil.h" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/adler32.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/compress.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/crc32.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/deflate.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/gzclose.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/gzlib.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/gzread.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/gzwrite.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/infback.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/inffast.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/inflate.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/inftrees.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/trees.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/uncompr.c" role="src" /> + <file baseinstalldir="/" name="third_party/zlib/zutil.c" role="src" /> + </dir> + </contents> + <dependencies> + <required> + <php> + <min>5.5.0</min> + </php> + <pearinstaller> + <min>1.4.0</min> + </pearinstaller> + </required> + </dependencies> + <providesextension>grpc</providesextension> + <extsrcrelease /> + <changelog> + <release> + <version> + <release>0.5.0</release> + <api>0.5.0</api> + </version> + <stability> + <release>alpha</release> + <api>alpha</api> + </stability> + <date>2015-06-16</date> + <license>BSD</license> + <notes> +First alpha release + </notes> + </release> + <release> + <version> + <release>0.5.1</release> + <api>0.5.1</api> + </version> + <stability> + <release>alpha</release> + <api>alpha</api> + </stability> + <date>2015-07-09</date> + <license>BSD</license> + <notes> +Update to wrap gRPC C Core version 0.10.0 + </notes> + </release> + <release> + <version> + <release>0.6.0</release> + <api>0.6.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2015-09-24</date> + <license>BSD</license> + <notes> +- support per message compression disable +- expose per-call host override option +- expose connectivity API +- expose channel target and call peer +- add user-agent +- update to wrap gRPC C core library beta version 0.11.0 + </notes> + </release> + <release> + <version> + <release>0.6.1</release> + <api>0.6.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2015-10-21</date> + <license>BSD</license> + <notes> +- fixed undefined constant fatal error when run with apache/nginx #2275 + </notes> + </release> + <release> + <version> + <release>0.7.0</release> + <api>0.7.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2016-01-13</date> + <license>BSD</license> + <notes> +- Breaking change to Credentials class (removed) #3765 +- Replaced by ChannelCredentials and CallCredentials class #3765 +- New plugin based metadata auth API #4394 +- Explicit ChannelCredentials::createInsecure() call + </notes> + </release> + <release> + <version> + <release>0.8.0</release> + <api>0.8.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2016-02-23</date> + <license>BSD</license> + <notes> +- Simplify gRPC PHP installation #4517 + </notes> + </release> + </changelog> +</package> diff --git a/src/core/census/log.c b/src/core/census/mlog.c similarity index 99% rename from src/core/census/log.c rename to src/core/census/mlog.c index 91b26941b83a38ac8ff3518717b471306d7abfc8..a2cc46d3f261c06df0446567807fdc6a7163eb51 100644 --- a/src/core/census/log.c +++ b/src/core/census/mlog.c @@ -88,7 +88,7 @@ // include the name of the structure, which will be passed as the first // argument. E.g. cl_block_initialize() will initialize a cl_block. -#include "src/core/census/log.h" +#include "src/core/census/mlog.h" #include <grpc/support/alloc.h> #include <grpc/support/atm.h> #include <grpc/support/cpu.h> diff --git a/src/core/census/log.h b/src/core/census/mlog.h similarity index 96% rename from src/core/census/log.h rename to src/core/census/mlog.h index 05daea066f597d8905fa2d60b8f2e3061ccbd904..aaba9e15356223b466b97f32de4af96fd17ec71f 100644 --- a/src/core/census/log.h +++ b/src/core/census/mlog.h @@ -31,8 +31,10 @@ * */ -#ifndef GRPC_INTERNAL_CORE_CENSUS_LOG_H -#define GRPC_INTERNAL_CORE_CENSUS_LOG_H +/* A very fast in-memory log, optimized for multiple writers. */ + +#ifndef GRPC_INTERNAL_CORE_CENSUS_MLOG_H +#define GRPC_INTERNAL_CORE_CENSUS_MLOG_H #include <grpc/support/port_platform.h> #include <stddef.h> diff --git a/src/core/client_config/lb_policies/load_balancer_api.c b/src/core/client_config/lb_policies/load_balancer_api.c new file mode 100644 index 0000000000000000000000000000000000000000..a6b5785fe4ed088eeacb0d19154facdf809760ba --- /dev/null +++ b/src/core/client_config/lb_policies/load_balancer_api.c @@ -0,0 +1,163 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/client_config/lb_policies/load_balancer_api.h" +#include "third_party/nanopb/pb_decode.h" +#include "third_party/nanopb/pb_encode.h" + +#include <grpc/support/alloc.h> + +typedef struct decode_serverlist_arg { + int first_pass; + int i; + size_t num_servers; + grpc_grpclb_server **servers; +} decode_serverlist_arg; + +/* invoked once for every Server in ServerList */ +static bool decode_serverlist(pb_istream_t *stream, const pb_field_t *field, + void **arg) { + decode_serverlist_arg *dec_arg = *arg; + if (dec_arg->first_pass != 0) { /* first pass */ + grpc_grpclb_server server; + if (!pb_decode(stream, grpc_lb_v0_Server_fields, &server)) { + return false; + } + dec_arg->num_servers++; + } else { /* second pass */ + grpc_grpclb_server *server = gpr_malloc(sizeof(grpc_grpclb_server)); + GPR_ASSERT(dec_arg->num_servers > 0); + if (dec_arg->i == 0) { /* first iteration of second pass */ + dec_arg->servers = + gpr_malloc(sizeof(grpc_grpclb_server *) * dec_arg->num_servers); + } + if (!pb_decode(stream, grpc_lb_v0_Server_fields, server)) { + return false; + } + dec_arg->servers[dec_arg->i++] = server; + } + + return true; +} + +grpc_grpclb_request *grpc_grpclb_request_create(const char *lb_service_name) { + grpc_grpclb_request *req = gpr_malloc(sizeof(grpc_grpclb_request)); + + req->has_client_stats = 0; /* TODO(dgq): add support for stats once defined */ + req->has_initial_request = 1; + req->initial_request.has_name = 1; + strncpy(req->initial_request.name, lb_service_name, + GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH); + return req; +} + +gpr_slice grpc_grpclb_request_encode(const grpc_grpclb_request *request) { + size_t encoded_length; + pb_ostream_t sizestream; + pb_ostream_t outputstream; + gpr_slice slice; + memset(&sizestream, 0, sizeof(pb_ostream_t)); + pb_encode(&sizestream, grpc_lb_v0_LoadBalanceRequest_fields, request); + encoded_length = sizestream.bytes_written; + + slice = gpr_slice_malloc(encoded_length); + outputstream = + pb_ostream_from_buffer(GPR_SLICE_START_PTR(slice), encoded_length); + GPR_ASSERT(pb_encode(&outputstream, grpc_lb_v0_LoadBalanceRequest_fields, + request) != 0); + return slice; +} + +void grpc_grpclb_request_destroy(grpc_grpclb_request *request) { + gpr_free(request); +} + +grpc_grpclb_response *grpc_grpclb_response_parse(gpr_slice encoded_response) { + bool status; + pb_istream_t stream = + pb_istream_from_buffer(GPR_SLICE_START_PTR(encoded_response), + GPR_SLICE_LENGTH(encoded_response)); + grpc_grpclb_response *res = gpr_malloc(sizeof(grpc_grpclb_response)); + memset(res, 0, sizeof(*res)); + status = pb_decode(&stream, grpc_lb_v0_LoadBalanceResponse_fields, res); + GPR_ASSERT(status == true); + return res; +} + +grpc_grpclb_serverlist *grpc_grpclb_response_parse_serverlist( + gpr_slice encoded_response) { + grpc_grpclb_serverlist *sl = gpr_malloc(sizeof(grpc_grpclb_serverlist)); + bool status; + decode_serverlist_arg arg; + pb_istream_t stream = + pb_istream_from_buffer(GPR_SLICE_START_PTR(encoded_response), + GPR_SLICE_LENGTH(encoded_response)); + pb_istream_t stream_at_start = stream; + grpc_grpclb_response *res = gpr_malloc(sizeof(grpc_grpclb_response)); + memset(res, 0, sizeof(*res)); + memset(&arg, 0, sizeof(decode_serverlist_arg)); + + res->server_list.servers.funcs.decode = decode_serverlist; + res->server_list.servers.arg = &arg; + arg.first_pass = 1; + status = pb_decode(&stream, grpc_lb_v0_LoadBalanceResponse_fields, res); + GPR_ASSERT(status == true); + GPR_ASSERT(arg.num_servers > 0); + + arg.first_pass = 0; + status = + pb_decode(&stream_at_start, grpc_lb_v0_LoadBalanceResponse_fields, res); + GPR_ASSERT(status == true); + GPR_ASSERT(arg.servers != NULL); + + sl->num_servers = arg.num_servers; + sl->servers = arg.servers; + if (res->server_list.has_expiration_interval) { + sl->expiration_interval = res->server_list.expiration_interval; + } + grpc_grpclb_response_destroy(res); + return sl; +} + +void grpc_grpclb_destroy_serverlist(grpc_grpclb_serverlist *serverlist) { + size_t i; + for (i = 0; i < serverlist->num_servers; i++) { + gpr_free(serverlist->servers[i]); + } + gpr_free(serverlist->servers); + gpr_free(serverlist); +} + +void grpc_grpclb_response_destroy(grpc_grpclb_response *response) { + gpr_free(response); +} diff --git a/src/core/client_config/lb_policies/load_balancer_api.h b/src/core/client_config/lb_policies/load_balancer_api.h new file mode 100644 index 0000000000000000000000000000000000000000..4dbe1d6c224ef595fe82cf3812c25f0293ae78c9 --- /dev/null +++ b/src/core/client_config/lb_policies/load_balancer_api.h @@ -0,0 +1,85 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICIES_LOAD_BALANCER_API_H +#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICIES_LOAD_BALANCER_API_H + +#include <grpc/support/slice_buffer.h> + +#include "src/core/client_config/lb_policy_factory.h" +#include "src/core/proto/grpc/lb/v0/load_balancer.pb.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define GRPC_GRPCLB_SERVICE_NAME_MAX_LENGTH 128 + +typedef grpc_lb_v0_LoadBalanceRequest grpc_grpclb_request; +typedef grpc_lb_v0_LoadBalanceResponse grpc_grpclb_response; +typedef grpc_lb_v0_Server grpc_grpclb_server; +typedef grpc_lb_v0_Duration grpc_grpclb_duration; +typedef struct grpc_grpclb_serverlist { + grpc_grpclb_server **servers; + size_t num_servers; + grpc_grpclb_duration expiration_interval; +} grpc_grpclb_serverlist; + +/** Create a request for a gRPC LB service under \a lb_service_name */ +grpc_grpclb_request *grpc_grpclb_request_create(const char *lb_service_name); + +/** Protocol Buffers v3-encode \a request */ +gpr_slice grpc_grpclb_request_encode(const grpc_grpclb_request *request); + +/** Destroy \a request */ +void grpc_grpclb_request_destroy(grpc_grpclb_request *request); + +/** Parse (ie, decode) the bytes in \a encoded_response as a \a + * grpc_grpclb_response */ +grpc_grpclb_response *grpc_grpclb_response_parse(gpr_slice encoded_response); + +/** Destroy \a serverlist */ +void grpc_grpclb_destroy_serverlist(grpc_grpclb_serverlist *serverlist); + +/** Parse the list of servers from an encoded \a grpc_grpclb_response */ +grpc_grpclb_serverlist *grpc_grpclb_response_parse_serverlist( + gpr_slice encoded_response); + +/** Destroy \a response */ +void grpc_grpclb_response_destroy(grpc_grpclb_response *response); + +#ifdef __cplusplus +} +#endif + +#endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_LB_POLICIES_LOAD_BALANCER_API_H */ diff --git a/src/core/iomgr/pollset_posix.h b/src/core/iomgr/pollset_posix.h index 58158e3d46a4cce94a5dbb30af26be1e6b58f861..ed7eb5cb7dbdd6ef325d69f098115f11327c9ba2 100644 --- a/src/core/iomgr/pollset_posix.h +++ b/src/core/iomgr/pollset_posix.h @@ -142,6 +142,10 @@ int grpc_pollset_has_workers(grpc_pollset *pollset); void grpc_remove_fd_from_all_epoll_sets(int fd); /* override to allow tests to hook poll() usage */ +/* NOTE: Any changes to grpc_poll_function must take place when the gRPC + is certainly not doing any polling anywhere. + Otherwise, there might be a race between changing the variable and actually + doing a polling operation */ typedef int (*grpc_poll_function_type)(struct pollfd *, nfds_t, int); extern grpc_poll_function_type grpc_poll_function; extern grpc_wakeup_fd grpc_global_wakeup_fd; diff --git a/src/core/iomgr/pollset_windows.c b/src/core/iomgr/pollset_windows.c index 8f35a465091e521db88db60627f50d5cbb0b280e..bbce23b46a76d6c1dc2bf21bc84a39b22d9da1e6 100644 --- a/src/core/iomgr/pollset_windows.c +++ b/src/core/iomgr/pollset_windows.c @@ -192,7 +192,7 @@ done: remove_worker(&worker, GRPC_POLLSET_WORKER_LINK_GLOBAL); remove_worker(&worker, GRPC_POLLSET_WORKER_LINK_POLLSET); } - gpr_cv_destroy(&worker->cv); + gpr_cv_destroy(&worker.cv); *worker_hdl = NULL; } diff --git a/src/core/proto/grpc/lb/v0/load_balancer.pb.c b/src/core/proto/grpc/lb/v0/load_balancer.pb.c new file mode 100644 index 0000000000000000000000000000000000000000..59aae30cff97c35d1b98b7bb7613199b53c725f7 --- /dev/null +++ b/src/core/proto/grpc/lb/v0/load_balancer.pb.c @@ -0,0 +1,119 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +/* Automatically generated nanopb constant definitions */ +/* Generated by nanopb-0.3.5-dev */ + +#include "src/core/proto/grpc/lb/v0/load_balancer.pb.h" + +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + + + +const pb_field_t grpc_lb_v0_Duration_fields[3] = { + PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, grpc_lb_v0_Duration, seconds, seconds, 0), + PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Duration, nanos, seconds, 0), + PB_LAST_FIELD +}; + +const pb_field_t grpc_lb_v0_LoadBalanceRequest_fields[3] = { + PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v0_LoadBalanceRequest, initial_request, initial_request, &grpc_lb_v0_InitialLoadBalanceRequest_fields), + PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_LoadBalanceRequest, client_stats, initial_request, &grpc_lb_v0_ClientStats_fields), + PB_LAST_FIELD +}; + +const pb_field_t grpc_lb_v0_InitialLoadBalanceRequest_fields[2] = { + PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v0_InitialLoadBalanceRequest, name, name, 0), + PB_LAST_FIELD +}; + +const pb_field_t grpc_lb_v0_ClientStats_fields[4] = { + PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, grpc_lb_v0_ClientStats, total_requests, total_requests, 0), + PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_ClientStats, client_rpc_errors, total_requests, 0), + PB_FIELD( 3, INT64 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_ClientStats, dropped_requests, client_rpc_errors, 0), + PB_LAST_FIELD +}; + +const pb_field_t grpc_lb_v0_LoadBalanceResponse_fields[3] = { + PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, grpc_lb_v0_LoadBalanceResponse, initial_response, initial_response, &grpc_lb_v0_InitialLoadBalanceResponse_fields), + PB_FIELD( 2, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_LoadBalanceResponse, server_list, initial_response, &grpc_lb_v0_ServerList_fields), + PB_LAST_FIELD +}; + +const pb_field_t grpc_lb_v0_InitialLoadBalanceResponse_fields[4] = { + PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v0_InitialLoadBalanceResponse, client_config, client_config, 0), + PB_FIELD( 2, STRING , OPTIONAL, STATIC , OTHER, grpc_lb_v0_InitialLoadBalanceResponse, load_balancer_delegate, client_config, 0), + PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval, load_balancer_delegate, &grpc_lb_v0_Duration_fields), + PB_LAST_FIELD +}; + +const pb_field_t grpc_lb_v0_ServerList_fields[3] = { + PB_FIELD( 1, MESSAGE , REPEATED, CALLBACK, FIRST, grpc_lb_v0_ServerList, servers, servers, &grpc_lb_v0_Server_fields), + PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, grpc_lb_v0_ServerList, expiration_interval, servers, &grpc_lb_v0_Duration_fields), + PB_LAST_FIELD +}; + +const pb_field_t grpc_lb_v0_Server_fields[5] = { + PB_FIELD( 1, STRING , OPTIONAL, STATIC , FIRST, grpc_lb_v0_Server, ip_address, ip_address, 0), + PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Server, port, ip_address, 0), + PB_FIELD( 3, BYTES , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Server, load_balance_token, port, 0), + PB_FIELD( 4, BOOL , OPTIONAL, STATIC , OTHER, grpc_lb_v0_Server, drop_request, load_balance_token, 0), + PB_LAST_FIELD +}; + + +/* Check that field information fits in pb_field_t */ +#if !defined(PB_FIELD_32BIT) +/* If you get an error here, it means that you need to define PB_FIELD_32BIT + * compile-time option. You can do that in pb.h or on compiler command line. + * + * The reason you need to do this is that some of your messages contain tag + * numbers or field sizes that are larger than what can fit in 8 or 16 bit + * field descriptors. + */ +PB_STATIC_ASSERT((pb_membersize(grpc_lb_v0_LoadBalanceRequest, initial_request) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceRequest, client_stats) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, initial_response) < 65536 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, server_list) < 65536 && pb_membersize(grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval) < 65536 && pb_membersize(grpc_lb_v0_ServerList, servers) < 65536 && pb_membersize(grpc_lb_v0_ServerList, expiration_interval) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_grpc_lb_v0_Duration_grpc_lb_v0_LoadBalanceRequest_grpc_lb_v0_InitialLoadBalanceRequest_grpc_lb_v0_ClientStats_grpc_lb_v0_LoadBalanceResponse_grpc_lb_v0_InitialLoadBalanceResponse_grpc_lb_v0_ServerList_grpc_lb_v0_Server) +#endif + +#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) +/* If you get an error here, it means that you need to define PB_FIELD_16BIT + * compile-time option. You can do that in pb.h or on compiler command line. + * + * The reason you need to do this is that some of your messages contain tag + * numbers or field sizes that are larger than what can fit in the default + * 8 bit descriptors. + */ +PB_STATIC_ASSERT((pb_membersize(grpc_lb_v0_LoadBalanceRequest, initial_request) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceRequest, client_stats) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, initial_response) < 256 && pb_membersize(grpc_lb_v0_LoadBalanceResponse, server_list) < 256 && pb_membersize(grpc_lb_v0_InitialLoadBalanceResponse, client_stats_report_interval) < 256 && pb_membersize(grpc_lb_v0_ServerList, servers) < 256 && pb_membersize(grpc_lb_v0_ServerList, expiration_interval) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_grpc_lb_v0_Duration_grpc_lb_v0_LoadBalanceRequest_grpc_lb_v0_InitialLoadBalanceRequest_grpc_lb_v0_ClientStats_grpc_lb_v0_LoadBalanceResponse_grpc_lb_v0_InitialLoadBalanceResponse_grpc_lb_v0_ServerList_grpc_lb_v0_Server) +#endif + + diff --git a/src/core/proto/grpc/lb/v0/load_balancer.pb.h b/src/core/proto/grpc/lb/v0/load_balancer.pb.h new file mode 100644 index 0000000000000000000000000000000000000000..3599f881bb17e328389f01ce9493cd42f4184490 --- /dev/null +++ b/src/core/proto/grpc/lb/v0/load_balancer.pb.h @@ -0,0 +1,182 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +/* Automatically generated nanopb header */ +/* Generated by nanopb-0.3.5-dev */ + +#ifndef PB_LOAD_BALANCER_PB_H_INCLUDED +#define PB_LOAD_BALANCER_PB_H_INCLUDED +#include "third_party/nanopb/pb.h" +#if PB_PROTO_HEADER_VERSION != 30 +#error Regenerate this file with the current version of nanopb generator. +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Struct definitions */ +typedef struct _grpc_lb_v0_ClientStats { + bool has_total_requests; + int64_t total_requests; + bool has_client_rpc_errors; + int64_t client_rpc_errors; + bool has_dropped_requests; + int64_t dropped_requests; +} grpc_lb_v0_ClientStats; + +typedef struct _grpc_lb_v0_Duration { + bool has_seconds; + int64_t seconds; + bool has_nanos; + int32_t nanos; +} grpc_lb_v0_Duration; + +typedef struct _grpc_lb_v0_InitialLoadBalanceRequest { + bool has_name; + char name[128]; +} grpc_lb_v0_InitialLoadBalanceRequest; + +typedef PB_BYTES_ARRAY_T(64) grpc_lb_v0_Server_load_balance_token_t; +typedef struct _grpc_lb_v0_Server { + bool has_ip_address; + char ip_address[46]; + bool has_port; + int32_t port; + bool has_load_balance_token; + grpc_lb_v0_Server_load_balance_token_t load_balance_token; + bool has_drop_request; + bool drop_request; +} grpc_lb_v0_Server; + +typedef struct _grpc_lb_v0_InitialLoadBalanceResponse { + bool has_client_config; + char client_config[64]; + bool has_load_balancer_delegate; + char load_balancer_delegate[64]; + bool has_client_stats_report_interval; + grpc_lb_v0_Duration client_stats_report_interval; +} grpc_lb_v0_InitialLoadBalanceResponse; + +typedef struct _grpc_lb_v0_LoadBalanceRequest { + bool has_initial_request; + grpc_lb_v0_InitialLoadBalanceRequest initial_request; + bool has_client_stats; + grpc_lb_v0_ClientStats client_stats; +} grpc_lb_v0_LoadBalanceRequest; + +typedef struct _grpc_lb_v0_ServerList { + pb_callback_t servers; + bool has_expiration_interval; + grpc_lb_v0_Duration expiration_interval; +} grpc_lb_v0_ServerList; + +typedef struct _grpc_lb_v0_LoadBalanceResponse { + bool has_initial_response; + grpc_lb_v0_InitialLoadBalanceResponse initial_response; + bool has_server_list; + grpc_lb_v0_ServerList server_list; +} grpc_lb_v0_LoadBalanceResponse; + +/* Default values for struct fields */ + +/* Initializer values for message structs */ +#define grpc_lb_v0_Duration_init_default {false, 0, false, 0} +#define grpc_lb_v0_LoadBalanceRequest_init_default {false, grpc_lb_v0_InitialLoadBalanceRequest_init_default, false, grpc_lb_v0_ClientStats_init_default} +#define grpc_lb_v0_InitialLoadBalanceRequest_init_default {false, ""} +#define grpc_lb_v0_ClientStats_init_default {false, 0, false, 0, false, 0} +#define grpc_lb_v0_LoadBalanceResponse_init_default {false, grpc_lb_v0_InitialLoadBalanceResponse_init_default, false, grpc_lb_v0_ServerList_init_default} +#define grpc_lb_v0_InitialLoadBalanceResponse_init_default {false, "", false, "", false, grpc_lb_v0_Duration_init_default} +#define grpc_lb_v0_ServerList_init_default {{{NULL}, NULL}, false, grpc_lb_v0_Duration_init_default} +#define grpc_lb_v0_Server_init_default {false, "", false, 0, false, {0, {0}}, false, 0} +#define grpc_lb_v0_Duration_init_zero {false, 0, false, 0} +#define grpc_lb_v0_LoadBalanceRequest_init_zero {false, grpc_lb_v0_InitialLoadBalanceRequest_init_zero, false, grpc_lb_v0_ClientStats_init_zero} +#define grpc_lb_v0_InitialLoadBalanceRequest_init_zero {false, ""} +#define grpc_lb_v0_ClientStats_init_zero {false, 0, false, 0, false, 0} +#define grpc_lb_v0_LoadBalanceResponse_init_zero {false, grpc_lb_v0_InitialLoadBalanceResponse_init_zero, false, grpc_lb_v0_ServerList_init_zero} +#define grpc_lb_v0_InitialLoadBalanceResponse_init_zero {false, "", false, "", false, grpc_lb_v0_Duration_init_zero} +#define grpc_lb_v0_ServerList_init_zero {{{NULL}, NULL}, false, grpc_lb_v0_Duration_init_zero} +#define grpc_lb_v0_Server_init_zero {false, "", false, 0, false, {0, {0}}, false, 0} + +/* Field tags (for use in manual encoding/decoding) */ +#define grpc_lb_v0_ClientStats_total_requests_tag 1 +#define grpc_lb_v0_ClientStats_client_rpc_errors_tag 2 +#define grpc_lb_v0_ClientStats_dropped_requests_tag 3 +#define grpc_lb_v0_Duration_seconds_tag 1 +#define grpc_lb_v0_Duration_nanos_tag 2 +#define grpc_lb_v0_InitialLoadBalanceRequest_name_tag 1 +#define grpc_lb_v0_Server_ip_address_tag 1 +#define grpc_lb_v0_Server_port_tag 2 +#define grpc_lb_v0_Server_load_balance_token_tag 3 +#define grpc_lb_v0_Server_drop_request_tag 4 +#define grpc_lb_v0_InitialLoadBalanceResponse_client_config_tag 1 +#define grpc_lb_v0_InitialLoadBalanceResponse_load_balancer_delegate_tag 2 +#define grpc_lb_v0_InitialLoadBalanceResponse_client_stats_report_interval_tag 3 +#define grpc_lb_v0_LoadBalanceRequest_initial_request_tag 1 +#define grpc_lb_v0_LoadBalanceRequest_client_stats_tag 2 +#define grpc_lb_v0_ServerList_servers_tag 1 +#define grpc_lb_v0_ServerList_expiration_interval_tag 3 +#define grpc_lb_v0_LoadBalanceResponse_initial_response_tag 1 +#define grpc_lb_v0_LoadBalanceResponse_server_list_tag 2 + +/* Struct field encoding specification for nanopb */ +extern const pb_field_t grpc_lb_v0_Duration_fields[3]; +extern const pb_field_t grpc_lb_v0_LoadBalanceRequest_fields[3]; +extern const pb_field_t grpc_lb_v0_InitialLoadBalanceRequest_fields[2]; +extern const pb_field_t grpc_lb_v0_ClientStats_fields[4]; +extern const pb_field_t grpc_lb_v0_LoadBalanceResponse_fields[3]; +extern const pb_field_t grpc_lb_v0_InitialLoadBalanceResponse_fields[4]; +extern const pb_field_t grpc_lb_v0_ServerList_fields[3]; +extern const pb_field_t grpc_lb_v0_Server_fields[5]; + +/* Maximum encoded size of messages (where known) */ +#define grpc_lb_v0_Duration_size 22 +#define grpc_lb_v0_LoadBalanceRequest_size 169 +#define grpc_lb_v0_InitialLoadBalanceRequest_size 131 +#define grpc_lb_v0_ClientStats_size 33 +#define grpc_lb_v0_LoadBalanceResponse_size (165 + grpc_lb_v0_ServerList_size) +#define grpc_lb_v0_InitialLoadBalanceResponse_size 156 +#define grpc_lb_v0_Server_size 127 + +/* Message IDs (where set with "msgid" option) */ +#ifdef PB_MSGID + +#define LOAD_BALANCER_MESSAGES \ + + +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/src/core/surface/completion_queue.c b/src/core/surface/completion_queue.c index d0659c7e5226206a43a18d3c31915ce5a1a82eed..41449fb4a6b3f8d9e66deb489fe8ae4e05ca277e 100644 --- a/src/core/surface/completion_queue.c +++ b/src/core/surface/completion_queue.c @@ -339,9 +339,10 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc, grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(&cc->mu); continue; + } else { + grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), &worker, now, + iteration_deadline); } - grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), &worker, now, - iteration_deadline); } GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret); GRPC_CQ_INTERNAL_UNREF(cc, "next"); @@ -456,9 +457,10 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag, grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(&cc->mu); continue; + } else { + grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), &worker, now, + iteration_deadline); } - grpc_pollset_work(&exec_ctx, POLLSET_FROM_CQ(cc), &worker, now, - iteration_deadline); del_plucker(cc, tag, &worker); } done: diff --git a/src/core/transport/chttp2/internal.h b/src/core/transport/chttp2/internal.h index 0e1e2c42650f855f6d12b5b131cab3fc842d6221..d76d31be23f2f4f31c8aec172b580a8a8741d8fe 100644 --- a/src/core/transport/chttp2/internal.h +++ b/src/core/transport/chttp2/internal.h @@ -485,7 +485,8 @@ struct grpc_chttp2_stream { /** Someone is unlocking the transport mutex: check to see if writes are required, and schedule them if so */ -int grpc_chttp2_unlocking_check_writes(grpc_chttp2_transport_global *global, +int grpc_chttp2_unlocking_check_writes(grpc_exec_ctx *exec_ctx, + grpc_chttp2_transport_global *global, grpc_chttp2_transport_writing *writing, int is_parsing); void grpc_chttp2_perform_writes( @@ -568,8 +569,12 @@ void grpc_chttp2_list_add_writing_stalled_by_transport( grpc_chttp2_transport_writing *transport_writing, grpc_chttp2_stream_writing *stream_writing); void grpc_chttp2_list_flush_writing_stalled_by_transport( - grpc_chttp2_transport_writing *transport_writing, bool is_window_available); + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing, + bool is_window_available); +void grpc_chttp2_list_add_stalled_by_transport( + grpc_chttp2_transport_writing *transport_writing, + grpc_chttp2_stream_writing *stream_writing); int grpc_chttp2_list_pop_stalled_by_transport( grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global **stream_global); diff --git a/src/core/transport/chttp2/stream_lists.c b/src/core/transport/chttp2/stream_lists.c index 2f31a47cb3df6a177edcc567f618426532757fc4..b284c7881838174ea878075cc4bc547a59e3cc94 100644 --- a/src/core/transport/chttp2/stream_lists.c +++ b/src/core/transport/chttp2/stream_lists.c @@ -316,13 +316,16 @@ int grpc_chttp2_list_pop_check_read_ops( void grpc_chttp2_list_add_writing_stalled_by_transport( grpc_chttp2_transport_writing *transport_writing, grpc_chttp2_stream_writing *stream_writing) { - stream_list_add(TRANSPORT_FROM_WRITING(transport_writing), - STREAM_FROM_WRITING(stream_writing), + grpc_chttp2_stream *stream = STREAM_FROM_WRITING(stream_writing); + if (!stream->included[GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT]) { + GRPC_CHTTP2_STREAM_REF(&stream->global, "chttp2_writing_stalled"); + } + stream_list_add(TRANSPORT_FROM_WRITING(transport_writing), stream, GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT); } void grpc_chttp2_list_flush_writing_stalled_by_transport( - grpc_chttp2_transport_writing *transport_writing, + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing, bool is_window_available) { grpc_chttp2_stream *stream; grpc_chttp2_transport *transport = TRANSPORT_FROM_WRITING(transport_writing); @@ -331,11 +334,22 @@ void grpc_chttp2_list_flush_writing_stalled_by_transport( if (is_window_available) { grpc_chttp2_list_add_writable_stream(&transport->global, &stream->global); } else { - stream_list_add(transport, stream, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT); + grpc_chttp2_list_add_stalled_by_transport(transport_writing, + &stream->writing); } + GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &stream->global, + "chttp2_writing_stalled"); } } +void grpc_chttp2_list_add_stalled_by_transport( + grpc_chttp2_transport_writing *transport_writing, + grpc_chttp2_stream_writing *stream_writing) { + stream_list_add(TRANSPORT_FROM_WRITING(transport_writing), + STREAM_FROM_WRITING(stream_writing), + GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT); +} + int grpc_chttp2_list_pop_stalled_by_transport( grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global **stream_global) { diff --git a/src/core/transport/chttp2/writing.c b/src/core/transport/chttp2/writing.c index cafecf10465818fd93c63e0cccd1fb4604b3f289..356fd8174a76942b20e65409b63d049a0bcdacac 100644 --- a/src/core/transport/chttp2/writing.c +++ b/src/core/transport/chttp2/writing.c @@ -44,7 +44,7 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing); int grpc_chttp2_unlocking_check_writes( - grpc_chttp2_transport_global *transport_global, + grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global, grpc_chttp2_transport_writing *transport_writing, int is_parsing) { grpc_chttp2_stream_global *stream_global; grpc_chttp2_stream_writing *stream_writing; @@ -76,8 +76,8 @@ int grpc_chttp2_unlocking_check_writes( GRPC_CHTTP2_FLOW_MOVE_TRANSPORT("write", transport_writing, outgoing_window, transport_global, outgoing_window); bool is_window_available = transport_writing->outgoing_window > 0; - grpc_chttp2_list_flush_writing_stalled_by_transport(transport_writing, - is_window_available); + grpc_chttp2_list_flush_writing_stalled_by_transport( + exec_ctx, transport_writing, is_window_available); /* for each grpc_chttp2_stream that's become writable, frame it's data (according to available window sizes) and add to the output buffer */ @@ -133,8 +133,8 @@ int grpc_chttp2_unlocking_check_writes( GRPC_CHTTP2_STREAM_REF(stream_global, "chttp2_writing"); } } else { - grpc_chttp2_list_add_writing_stalled_by_transport(transport_writing, - stream_writing); + grpc_chttp2_list_add_stalled_by_transport(transport_writing, + stream_writing); } } if (stream_global->send_trailing_metadata) { diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c index 617d98875c301e2eb5a381d9dc6cd3837b3a4d20..b9f511e9460fc1d1fc9c7c32d39a340ee58961f2 100644 --- a/src/core/transport/chttp2_transport.c +++ b/src/core/transport/chttp2_transport.c @@ -598,7 +598,7 @@ static void lock(grpc_chttp2_transport *t) { gpr_mu_lock(&t->mu); } static void unlock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) { GPR_TIMER_BEGIN("unlock", 0); if (!t->writing_active && !t->closed && - grpc_chttp2_unlocking_check_writes(&t->global, &t->writing, + grpc_chttp2_unlocking_check_writes(exec_ctx, &t->global, &t->writing, t->parsing_active)) { t->writing_active = 1; REF_TRANSPORT(t, "writing"); @@ -1019,6 +1019,11 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, stream_global->recv_initial_metadata_ready = NULL; } if (stream_global->recv_message_ready != NULL) { + while (stream_global->seen_error && + (bs = grpc_chttp2_incoming_frame_queue_pop( + &stream_global->incoming_frames)) != NULL) { + grpc_byte_stream_destroy(exec_ctx, bs); + } if (stream_global->incoming_frames.head != NULL) { *stream_global->recv_message = grpc_chttp2_incoming_frame_queue_pop( &stream_global->incoming_frames); diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 0d31140924bfcc8286a0b5c9467f06cc89af7801..6d31a608c803ded3b473e1a9ba8e9fa60e277bf1 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -272,27 +272,25 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { grpc_completion_queue* cq_; }; -static grpc_server* CreateServer(const ChannelArguments& args) { - grpc_channel_args channel_args; - args.SetChannelArgs(&channel_args); - return grpc_server_create(&channel_args, nullptr); -} - static internal::GrpcLibraryInitializer g_gli_initializer; Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, - int max_message_size, const ChannelArguments& args) + int max_message_size, ChannelArguments* args) : max_message_size_(max_message_size), started_(false), shutdown_(false), num_running_cb_(0), sync_methods_(new std::list<SyncRequest>), has_generic_service_(false), - server_(CreateServer(args)), + server_(nullptr), thread_pool_(thread_pool), thread_pool_owned_(thread_pool_owned) { g_gli_initializer.summon(); gpr_once_init(&g_once_init_callbacks, InitGlobalCallbacks); global_callbacks_ = g_callbacks; + global_callbacks_->UpdateArguments(args); + grpc_channel_args channel_args; + args->SetChannelArgs(&channel_args); + server_ = grpc_server_create(&channel_args, nullptr); grpc_server_register_completion_queue(server_, cq_.cq(), nullptr); } diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index c54cf6474f1af1116d6de72c305424d2559c948a..134e5f1d5ff2e4fd08029413a6e5c6a189583c76 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -103,7 +103,7 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { args.SetInt(GRPC_COMPRESSION_ALGORITHM_STATE_ARG, compression_options_.enabled_algorithms_bitset); std::unique_ptr<Server> server( - new Server(thread_pool.release(), true, max_message_size_, args)); + new Server(thread_pool.release(), true, max_message_size_, &args)); for (auto cq = cqs_.begin(); cq != cqs_.end(); ++cq) { grpc_server_register_completion_queue(server->server_, (*cq)->cq(), nullptr); diff --git a/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs b/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs index f77e9c6573d824857f501d41e49d995c40756216..1837f5c74bd03d79a174b68222be765ccc558471 100644 --- a/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs +++ b/src/csharp/Grpc.Auth/GoogleAuthInterceptors.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -71,7 +71,7 @@ namespace Grpc.Auth /// <returns>The interceptor.</returns> public static AsyncAuthInterceptor FromAccessToken(string accessToken) { - Preconditions.CheckNotNull(accessToken); + GrpcPreconditions.CheckNotNull(accessToken); return new AsyncAuthInterceptor(async (context, metadata) => { metadata.Add(CreateBearerTokenHeader(accessToken)); diff --git a/src/csharp/Grpc.Core/AsyncAuthInterceptor.cs b/src/csharp/Grpc.Core/AsyncAuthInterceptor.cs index 5c9ab048120b6d0b5346cb54de515620c87d7b32..5ba06d6509741551f5c25f18cbd7be06c98e28a3 100644 --- a/src/csharp/Grpc.Core/AsyncAuthInterceptor.cs +++ b/src/csharp/Grpc.Core/AsyncAuthInterceptor.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -61,8 +61,8 @@ namespace Grpc.Core /// </summary> public AuthInterceptorContext(string serviceUrl, string methodName) { - this.serviceUrl = Preconditions.CheckNotNull(serviceUrl); - this.methodName = Preconditions.CheckNotNull(methodName); + this.serviceUrl = GrpcPreconditions.CheckNotNull(serviceUrl); + this.methodName = GrpcPreconditions.CheckNotNull(methodName); } /// <summary> diff --git a/src/csharp/Grpc.Core/CallCredentials.cs b/src/csharp/Grpc.Core/CallCredentials.cs index a71c8904fe76aeca8f8eae751f90a7b22b7eaafe..7cd41d04806a67e99037c6355c94fec42debf299 100644 --- a/src/csharp/Grpc.Core/CallCredentials.cs +++ b/src/csharp/Grpc.Core/CallCredentials.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -87,7 +87,7 @@ namespace Grpc.Core /// <param name="interceptor">authentication interceptor</param> public MetadataCredentials(AsyncAuthInterceptor interceptor) { - this.interceptor = Preconditions.CheckNotNull(interceptor); + this.interceptor = GrpcPreconditions.CheckNotNull(interceptor); } internal override CallCredentialsSafeHandle ToNativeCredentials() @@ -111,7 +111,7 @@ namespace Grpc.Core /// <param name="credentials">credentials to compose</param> public CompositeCallCredentials(params CallCredentials[] credentials) { - Preconditions.CheckArgument(credentials.Length >= 2, "Composite credentials object can only be created from 2 or more credentials."); + GrpcPreconditions.CheckArgument(credentials.Length >= 2, "Composite credentials object can only be created from 2 or more credentials."); this.credentials = new List<CallCredentials>(credentials); } diff --git a/src/csharp/Grpc.Core/CallInvocationDetails.cs b/src/csharp/Grpc.Core/CallInvocationDetails.cs index 8228b8f317f92ea8aa65485e7ed79a360d7cac5c..52bfbe6edbe1f765f111f7a41d5003df2fe28ea0 100644 --- a/src/csharp/Grpc.Core/CallInvocationDetails.cs +++ b/src/csharp/Grpc.Core/CallInvocationDetails.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -85,11 +85,11 @@ namespace Grpc.Core /// <param name="options">Call options.</param> public CallInvocationDetails(Channel channel, string method, string host, Marshaller<TRequest> requestMarshaller, Marshaller<TResponse> responseMarshaller, CallOptions options) { - this.channel = Preconditions.CheckNotNull(channel, "channel"); - this.method = Preconditions.CheckNotNull(method, "method"); + this.channel = GrpcPreconditions.CheckNotNull(channel, "channel"); + this.method = GrpcPreconditions.CheckNotNull(method, "method"); this.host = host; - this.requestMarshaller = Preconditions.CheckNotNull(requestMarshaller, "requestMarshaller"); - this.responseMarshaller = Preconditions.CheckNotNull(responseMarshaller, "responseMarshaller"); + this.requestMarshaller = GrpcPreconditions.CheckNotNull(requestMarshaller, "requestMarshaller"); + this.responseMarshaller = GrpcPreconditions.CheckNotNull(responseMarshaller, "responseMarshaller"); this.options = options; } diff --git a/src/csharp/Grpc.Core/CallOptions.cs b/src/csharp/Grpc.Core/CallOptions.cs index 1fda80cb901b18f2af267695c2830cae947d6b5c..7bd95d4ba80e22ba9eab466ee6f0fb4bc4701aba 100644 --- a/src/csharp/Grpc.Core/CallOptions.cs +++ b/src/csharp/Grpc.Core/CallOptions.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -176,13 +176,13 @@ namespace Grpc.Core { if (propagationToken.Options.IsPropagateDeadline) { - Preconditions.CheckArgument(!newOptions.deadline.HasValue, + GrpcPreconditions.CheckArgument(!newOptions.deadline.HasValue, "Cannot propagate deadline from parent call. The deadline has already been set explicitly."); newOptions.deadline = propagationToken.ParentDeadline; } if (propagationToken.Options.IsPropagateCancellation) { - Preconditions.CheckArgument(!newOptions.cancellationToken.CanBeCanceled, + GrpcPreconditions.CheckArgument(!newOptions.cancellationToken.CanBeCanceled, "Cannot propagate cancellation token from parent call. The cancellation token has already been set to a non-default value."); newOptions.cancellationToken = propagationToken.ParentCancellationToken; } diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs index d8d43c7998d1b84c6cbfcbf394a85662991f5ef5..d7a482d86ffdc6edcd43e0a9d13c83eefa1fcd39 100644 --- a/src/csharp/Grpc.Core/Channel.cs +++ b/src/csharp/Grpc.Core/Channel.cs @@ -1,5 +1,5 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -68,7 +68,7 @@ namespace Grpc.Core /// <param name="options">Channel options.</param> public Channel(string target, ChannelCredentials credentials, IEnumerable<ChannelOption> options = null) { - this.target = Preconditions.CheckNotNull(target, "target"); + this.target = GrpcPreconditions.CheckNotNull(target, "target"); this.options = CreateOptionsDictionary(options); EnsureUserAgentChannelOption(this.options); this.environment = GrpcEnvironment.AddRef(); @@ -117,7 +117,7 @@ namespace Grpc.Core /// </summary> public Task WaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null) { - Preconditions.CheckArgument(lastObservedState != ChannelState.FatalFailure, + GrpcPreconditions.CheckArgument(lastObservedState != ChannelState.FatalFailure, "FatalFailure is a terminal state. No further state changes can occur."); var tcs = new TaskCompletionSource<object>(); var deadlineTimespec = deadline.HasValue ? Timespec.FromDateTime(deadline.Value) : Timespec.InfFuture; @@ -184,7 +184,7 @@ namespace Grpc.Core { lock (myLock) { - Preconditions.CheckState(!shutdownRequested); + GrpcPreconditions.CheckState(!shutdownRequested); shutdownRequested = true; } @@ -221,7 +221,7 @@ namespace Grpc.Core bool success = false; handle.DangerousAddRef(ref success); - Preconditions.CheckState(success); + GrpcPreconditions.CheckState(success); } internal void RemoveCallReference(object call) diff --git a/src/csharp/Grpc.Core/ChannelCredentials.cs b/src/csharp/Grpc.Core/ChannelCredentials.cs index 5d96958e7c082f1871f585a29af91883b7276022..03cda284008a93d163cfa396e5664052be26356c 100644 --- a/src/csharp/Grpc.Core/ChannelCredentials.cs +++ b/src/csharp/Grpc.Core/ChannelCredentials.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -183,9 +183,9 @@ namespace Grpc.Core /// <param name="callCredentials">channelCredentials to compose</param> public CompositeChannelCredentials(ChannelCredentials channelCredentials, CallCredentials callCredentials) { - this.channelCredentials = Preconditions.CheckNotNull(channelCredentials); - this.callCredentials = Preconditions.CheckNotNull(callCredentials); - Preconditions.CheckArgument(channelCredentials.IsComposable, "Supplied channel credentials do not allow composition."); + this.channelCredentials = GrpcPreconditions.CheckNotNull(channelCredentials); + this.callCredentials = GrpcPreconditions.CheckNotNull(callCredentials); + GrpcPreconditions.CheckArgument(channelCredentials.IsComposable, "Supplied channel credentials do not allow composition."); } internal override ChannelCredentialsSafeHandle ToNativeCredentials() diff --git a/src/csharp/Grpc.Core/ChannelOptions.cs b/src/csharp/Grpc.Core/ChannelOptions.cs index d70673cf781f3dce1ab20c07af13488e8e2d9835..65e15e21e9974aef8d485839f187e3b9828c2c12 100644 --- a/src/csharp/Grpc.Core/ChannelOptions.cs +++ b/src/csharp/Grpc.Core/ChannelOptions.cs @@ -1,5 +1,5 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -73,8 +73,8 @@ namespace Grpc.Core public ChannelOption(string name, string stringValue) { this.type = OptionType.String; - this.name = Preconditions.CheckNotNull(name, "name"); - this.stringValue = Preconditions.CheckNotNull(stringValue, "stringValue"); + this.name = GrpcPreconditions.CheckNotNull(name, "name"); + this.stringValue = GrpcPreconditions.CheckNotNull(stringValue, "stringValue"); } /// <summary> @@ -85,7 +85,7 @@ namespace Grpc.Core public ChannelOption(string name, int intValue) { this.type = OptionType.Integer; - this.name = Preconditions.CheckNotNull(name, "name"); + this.name = GrpcPreconditions.CheckNotNull(name, "name"); this.intValue = intValue; } @@ -118,7 +118,7 @@ namespace Grpc.Core { get { - Preconditions.CheckState(type == OptionType.Integer); + GrpcPreconditions.CheckState(type == OptionType.Integer); return intValue; } } @@ -130,7 +130,7 @@ namespace Grpc.Core { get { - Preconditions.CheckState(type == OptionType.String); + GrpcPreconditions.CheckState(type == OptionType.String); return stringValue; } } diff --git a/src/csharp/Grpc.Core/ContextPropagationToken.cs b/src/csharp/Grpc.Core/ContextPropagationToken.cs index 1d899b97fd55d7d78159f9e5d13148d4178efa2c..c0f638f837d18f67946769f59af829e5da698ab0 100644 --- a/src/csharp/Grpc.Core/ContextPropagationToken.cs +++ b/src/csharp/Grpc.Core/ContextPropagationToken.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -68,7 +68,7 @@ namespace Grpc.Core internal ContextPropagationToken(CallSafeHandle parentCall, DateTime deadline, CancellationToken cancellationToken, ContextPropagationOptions options) { - this.parentCall = Preconditions.CheckNotNull(parentCall); + this.parentCall = GrpcPreconditions.CheckNotNull(parentCall); this.deadline = deadline; this.cancellationToken = cancellationToken; this.options = options ?? ContextPropagationOptions.Default; diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj index 8d7d2cae0deff1dea392232fb4c1dc632473457e..3189835ccd913e7a533eab5dbecbe7aa65ce8136 100644 --- a/src/csharp/Grpc.Core/Grpc.Core.csproj +++ b/src/csharp/Grpc.Core/Grpc.Core.csproj @@ -39,8 +39,7 @@ </PropertyGroup> <ItemGroup> <Reference Include="System" /> - <Reference Include="System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> + <Reference Include="System.Interactive.Async"> <HintPath>..\packages\Ix-Async.1.2.5\lib\net45\System.Interactive.Async.dll</HintPath> </Reference> </ItemGroup> @@ -91,7 +90,6 @@ <Compile Include="Internal\AsyncCallBase.cs" /> <Compile Include="Internal\AsyncCallServer.cs" /> <Compile Include="Internal\AsyncCall.cs" /> - <Compile Include="Utils\Preconditions.cs" /> <Compile Include="Internal\ServerCredentialsSafeHandle.cs" /> <Compile Include="ServerCredentials.cs" /> <Compile Include="Metadata.cs" /> @@ -130,6 +128,7 @@ <Compile Include="Profiling\IProfiler.cs" /> <Compile Include="Profiling\Profilers.cs" /> <Compile Include="Internal\DefaultSslRootsOverride.cs" /> + <Compile Include="Utils\GrpcPreconditions.cs" /> </ItemGroup> <ItemGroup> <None Include="Grpc.Core.nuspec" /> diff --git a/src/csharp/Grpc.Core/GrpcEnvironment.cs b/src/csharp/Grpc.Core/GrpcEnvironment.cs index f3aa3d79de629f6353d685d83d597ad371e69d32..86b37b8660196b5b6a7f6746e0ed661efdfd4069 100644 --- a/src/csharp/Grpc.Core/GrpcEnvironment.cs +++ b/src/csharp/Grpc.Core/GrpcEnvironment.cs @@ -83,7 +83,7 @@ namespace Grpc.Core { lock (staticLock) { - Preconditions.CheckState(refCount > 0); + GrpcPreconditions.CheckState(refCount > 0); refCount--; if (refCount == 0) { @@ -118,7 +118,7 @@ namespace Grpc.Core /// </summary> public static void SetLogger(ILogger customLogger) { - Preconditions.CheckNotNull(customLogger, "customLogger"); + GrpcPreconditions.CheckNotNull(customLogger, "customLogger"); logger = customLogger; } diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs index 7dc4490281d046a1e125b7d03312dc5548f320be..2caba260b3a243d43bf9fe72ff627ed5a474acd7 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs @@ -99,7 +99,7 @@ namespace Grpc.Core.Internal lock (myLock) { - Preconditions.CheckState(!started); + GrpcPreconditions.CheckState(!started); started = true; Initialize(cq); @@ -141,7 +141,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckState(!started); + GrpcPreconditions.CheckState(!started); started = true; Initialize(environment.CompletionQueue); @@ -168,7 +168,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckState(!started); + GrpcPreconditions.CheckState(!started); started = true; Initialize(environment.CompletionQueue); @@ -192,7 +192,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckState(!started); + GrpcPreconditions.CheckState(!started); started = true; Initialize(environment.CompletionQueue); @@ -217,7 +217,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckState(!started); + GrpcPreconditions.CheckState(!started); started = true; Initialize(environment.CompletionQueue); @@ -257,7 +257,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); + GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); CheckSendingAllowed(); call.StartSendCloseFromClient(HandleHalfclosed); @@ -297,7 +297,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckState(finishedStatus.HasValue, "Status can only be accessed once the call has finished."); + GrpcPreconditions.CheckState(finishedStatus.HasValue, "Status can only be accessed once the call has finished."); return finishedStatus.Value.Status; } } @@ -310,7 +310,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckState(finishedStatus.HasValue, "Trailers can only be accessed once the call has finished."); + GrpcPreconditions.CheckState(finishedStatus.HasValue, "Trailers can only be accessed once the call has finished."); return finishedStatus.Value.Trailers; } } diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs index 81a9a40fcc3825aad2a13e71cabdd1daba55d8db..45d4c3e078c4102996dbaae693a7c10c20457efd 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs @@ -79,9 +79,9 @@ namespace Grpc.Core.Internal public AsyncCallBase(Func<TWrite, byte[]> serializer, Func<byte[], TRead> deserializer, GrpcEnvironment environment) { - this.serializer = Preconditions.CheckNotNull(serializer); - this.deserializer = Preconditions.CheckNotNull(deserializer); - this.environment = Preconditions.CheckNotNull(environment); + this.serializer = GrpcPreconditions.CheckNotNull(serializer); + this.deserializer = GrpcPreconditions.CheckNotNull(deserializer); + this.environment = GrpcPreconditions.CheckNotNull(environment); } /// <summary> @@ -91,7 +91,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckState(started); + GrpcPreconditions.CheckState(started); cancelRequested = true; if (!disposed) @@ -135,7 +135,7 @@ namespace Grpc.Core.Internal lock (myLock) { - Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); + GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); CheckSendingAllowed(); call.StartSendMessage(HandleSendFinished, payload, writeFlags, !initialMetadataSent); @@ -154,7 +154,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); + GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); CheckReadingAllowed(); call.StartReceiveMessage(HandleReadFinished); @@ -204,22 +204,22 @@ namespace Grpc.Core.Internal protected void CheckSendingAllowed() { - Preconditions.CheckState(started); + GrpcPreconditions.CheckState(started); CheckNotCancelled(); - Preconditions.CheckState(!disposed); + GrpcPreconditions.CheckState(!disposed); - Preconditions.CheckState(!halfcloseRequested, "Already halfclosed."); - Preconditions.CheckState(!finished, "Already finished."); - Preconditions.CheckState(sendCompletionDelegate == null, "Only one write can be pending at a time"); + GrpcPreconditions.CheckState(!halfcloseRequested, "Already halfclosed."); + GrpcPreconditions.CheckState(!finished, "Already finished."); + GrpcPreconditions.CheckState(sendCompletionDelegate == null, "Only one write can be pending at a time"); } protected virtual void CheckReadingAllowed() { - Preconditions.CheckState(started); - Preconditions.CheckState(!disposed); + GrpcPreconditions.CheckState(started); + GrpcPreconditions.CheckState(!disposed); - Preconditions.CheckState(!readingDone, "Stream has already been closed."); - Preconditions.CheckState(readCompletionDelegate == null, "Only one read can be pending at a time"); + GrpcPreconditions.CheckState(!readingDone, "Stream has already been closed."); + GrpcPreconditions.CheckState(readCompletionDelegate == null, "Only one read can be pending at a time"); } protected void CheckNotCancelled() diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs index 6752d3fab330a7ed073698de8e2698c80a8b4150..b72cbd795f639f5737eb941a792dc01aab59a271 100644 --- a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs +++ b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs @@ -53,7 +53,7 @@ namespace Grpc.Core.Internal public AsyncCallServer(Func<TResponse, byte[]> serializer, Func<byte[], TRequest> deserializer, GrpcEnvironment environment, Server server) : base(serializer, deserializer, environment) { - this.server = Preconditions.CheckNotNull(server); + this.server = GrpcPreconditions.CheckNotNull(server); } public void Initialize(CallSafeHandle call) @@ -71,7 +71,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckNotNull(call); + GrpcPreconditions.CheckNotNull(call); started = true; @@ -108,14 +108,14 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckNotNull(headers, "metadata"); - Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); + GrpcPreconditions.CheckNotNull(headers, "metadata"); + GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); - Preconditions.CheckState(!initialMetadataSent, "Response headers can only be sent once per call."); - Preconditions.CheckState(streamingWritesCounter == 0, "Response headers can only be sent before the first write starts."); + GrpcPreconditions.CheckState(!initialMetadataSent, "Response headers can only be sent once per call."); + GrpcPreconditions.CheckState(streamingWritesCounter == 0, "Response headers can only be sent before the first write starts."); CheckSendingAllowed(); - Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); + GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); using (var metadataArray = MetadataArraySafeHandle.Create(headers)) { @@ -136,7 +136,7 @@ namespace Grpc.Core.Internal { lock (myLock) { - Preconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); + GrpcPreconditions.CheckNotNull(completionDelegate, "Completion delegate cannot be null"); CheckSendingAllowed(); using (var metadataArray = MetadataArraySafeHandle.Create(trailers)) @@ -177,7 +177,7 @@ namespace Grpc.Core.Internal protected override void CheckReadingAllowed() { base.CheckReadingAllowed(); - Preconditions.CheckArgument(!cancelRequested); + GrpcPreconditions.CheckArgument(!cancelRequested); } protected override void OnAfterReleaseResources() diff --git a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs index 9d7a990c427386b3a2128171bcc607ec15e193d1..5c75b52e2359fce92d4845bd8a53fd14a31f3b7c 100644 --- a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs @@ -101,7 +101,7 @@ namespace Grpc.Core.Internal { bool success = false; shutdownRefcount.IncrementIfNonzero(ref success); - Preconditions.CheckState(success, "Shutdown has already been called"); + GrpcPreconditions.CheckState(success, "Shutdown has already been called"); } private void EndOp() diff --git a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs index 2796c959a389c52485b3db8fd566b9ee15ccb394..3a293e162621a9be95941a27d37b2033f1cababe 100644 --- a/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs +++ b/src/csharp/Grpc.Core/Internal/CompletionRegistry.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -59,7 +59,7 @@ namespace Grpc.Core.Internal public void Register(IntPtr key, OpCompletionDelegate callback) { environment.DebugStats.PendingBatchCompletions.Increment(); - Preconditions.CheckState(dict.TryAdd(key, callback)); + GrpcPreconditions.CheckState(dict.TryAdd(key, callback)); } public void RegisterBatchCompletion(BatchContextSafeHandle ctx, BatchCompletionDelegate callback) @@ -71,7 +71,7 @@ namespace Grpc.Core.Internal public OpCompletionDelegate Extract(IntPtr key) { OpCompletionDelegate value; - Preconditions.CheckState(dict.TryRemove(key, out value)); + GrpcPreconditions.CheckState(dict.TryRemove(key, out value)); environment.DebugStats.PendingBatchCompletions.Decrement(); return value; } diff --git a/src/csharp/Grpc.Core/Internal/Enums.cs b/src/csharp/Grpc.Core/Internal/Enums.cs index b0eab2001bc5b1e70dc22d6b2b4de0b88a0e4945..098e7c0e99e570e9e2edd121a7ae20283b054a41 100644 --- a/src/csharp/Grpc.Core/Internal/Enums.cs +++ b/src/csharp/Grpc.Core/Internal/Enums.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -72,7 +72,7 @@ namespace Grpc.Core.Internal /// </summary> public static void CheckOk(this GRPCCallError callError) { - Preconditions.CheckState(callError == GRPCCallError.OK, "Call error: " + callError); + GrpcPreconditions.CheckState(callError == GRPCCallError.OK, "Call error: " + callError); } } diff --git a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs index 36b865c09cc2ec6f6076389166eac595e6065cb8..e810ffcdd03d565aedc853bda0757a8397cf9ff0 100644 --- a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs +++ b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs @@ -53,7 +53,7 @@ namespace Grpc.Core.Internal public NativeMetadataCredentialsPlugin(AsyncAuthInterceptor interceptor) { - this.interceptor = Preconditions.CheckNotNull(interceptor, "interceptor"); + this.interceptor = GrpcPreconditions.CheckNotNull(interceptor, "interceptor"); this.nativeInterceptor = NativeMetadataInterceptorHandler; // Make sure the callback doesn't get garbage collected until it is destroyed. diff --git a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs index de66759b94bdee24efa26d6209b663f401a5953c..ccf144de2def6e31819a88331f08c25998ad1459 100644 --- a/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs +++ b/src/csharp/Grpc.Core/Internal/ServerCallHandler.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -78,10 +78,10 @@ namespace Grpc.Core.Internal var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); try { - Preconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); + GrpcPreconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); var request = requestStream.Current; // TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated. - Preconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false)); + GrpcPreconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false)); var result = await handler(request, context).ConfigureAwait(false); status = context.Status; await responseStream.WriteAsync(result).ConfigureAwait(false); @@ -134,10 +134,10 @@ namespace Grpc.Core.Internal var context = HandlerUtils.NewContext(newRpc, asyncCall.Peer, responseStream, asyncCall.CancellationToken); try { - Preconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); + GrpcPreconditions.CheckArgument(await requestStream.MoveNext().ConfigureAwait(false)); var request = requestStream.Current; // TODO(jtattermusch): we need to read the full stream so that native callhandle gets deallocated. - Preconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false)); + GrpcPreconditions.CheckArgument(!await requestStream.MoveNext().ConfigureAwait(false)); await handler(request, responseStream, context).ConfigureAwait(false); status = context.Status; } diff --git a/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs index a1d080c7f1c7041368d2355a0a69edfceda8cd71..a50f35799028ec9b901d64166f7a810799967ddd 100644 --- a/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs +++ b/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs @@ -49,7 +49,7 @@ namespace Grpc.Core.Internal public static ServerCredentialsSafeHandle CreateSslCredentials(string pemRootCerts, string[] keyCertPairCertChainArray, string[] keyCertPairPrivateKeyArray, bool forceClientAuth) { - Preconditions.CheckArgument(keyCertPairCertChainArray.Length == keyCertPairPrivateKeyArray.Length); + GrpcPreconditions.CheckArgument(keyCertPairCertChainArray.Length == keyCertPairPrivateKeyArray.Length); return Native.grpcsharp_ssl_server_credentials_create(pemRootCerts, keyCertPairCertChainArray, keyCertPairPrivateKeyArray, new UIntPtr((ulong)keyCertPairCertChainArray.Length), diff --git a/src/csharp/Grpc.Core/Internal/Timespec.cs b/src/csharp/Grpc.Core/Internal/Timespec.cs index 148d877da5a2e1cb8c00c5d99834339aa2f1bb37..754be4e03531e85851ec51ffa61270b8c5a0d1b7 100644 --- a/src/csharp/Grpc.Core/Internal/Timespec.cs +++ b/src/csharp/Grpc.Core/Internal/Timespec.cs @@ -141,8 +141,8 @@ namespace Grpc.Core.Internal /// </summary> public DateTime ToDateTime() { - Preconditions.CheckState(tv_nsec >= 0 && tv_nsec < NanosPerSecond); - Preconditions.CheckState(clock_type == GPRClockType.Realtime); + GrpcPreconditions.CheckState(tv_nsec >= 0 && tv_nsec < NanosPerSecond); + GrpcPreconditions.CheckState(clock_type == GPRClockType.Realtime); // fast path for InfFuture if (this.Equals(InfFuture)) @@ -195,7 +195,7 @@ namespace Grpc.Core.Internal return Timespec.InfPast; } - Preconditions.CheckArgument(dateTime.Kind == DateTimeKind.Utc, "dateTime needs of kind DateTimeKind.Utc or be equal to DateTime.MaxValue or DateTime.MinValue."); + GrpcPreconditions.CheckArgument(dateTime.Kind == DateTimeKind.Utc, "dateTime needs of kind DateTimeKind.Utc or be equal to DateTime.MaxValue or DateTime.MinValue."); try { diff --git a/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs b/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs index 95a8797e3eefde879cc645f798b87de8d7cc9380..e763c1502575a3026822fcdcb7c90b0a9fb16d14 100644 --- a/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs +++ b/src/csharp/Grpc.Core/Internal/UnmanagedLibrary.cs @@ -65,7 +65,7 @@ namespace Grpc.Core.Internal public UnmanagedLibrary(string libraryPath) { - this.libraryPath = Preconditions.CheckNotNull(libraryPath); + this.libraryPath = GrpcPreconditions.CheckNotNull(libraryPath); if (!File.Exists(this.libraryPath)) { diff --git a/src/csharp/Grpc.Core/KeyCertificatePair.cs b/src/csharp/Grpc.Core/KeyCertificatePair.cs index 6f691975e997f2d5ef3adfd50ce7df918ffee9a4..0fb6817986f8390a20ab4c363ef2e0baa8d13e69 100644 --- a/src/csharp/Grpc.Core/KeyCertificatePair.cs +++ b/src/csharp/Grpc.Core/KeyCertificatePair.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -54,8 +54,8 @@ namespace Grpc.Core /// <param name="privateKey">PEM encoded private key.</param> public KeyCertificatePair(string certificateChain, string privateKey) { - this.certificateChain = Preconditions.CheckNotNull(certificateChain, "certificateChain"); - this.privateKey = Preconditions.CheckNotNull(privateKey, "privateKey"); + this.certificateChain = GrpcPreconditions.CheckNotNull(certificateChain, "certificateChain"); + this.privateKey = GrpcPreconditions.CheckNotNull(privateKey, "privateKey"); } /// <summary> diff --git a/src/csharp/Grpc.Core/Marshaller.cs b/src/csharp/Grpc.Core/Marshaller.cs index 3493d2d38f05b1886531991e6f3addece16de670..5847248c1aaea0069bc8027ffd560349709254f4 100644 --- a/src/csharp/Grpc.Core/Marshaller.cs +++ b/src/csharp/Grpc.Core/Marshaller.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -51,8 +51,8 @@ namespace Grpc.Core /// <param name="deserializer">Function that will be used to deserialize messages.</param> public Marshaller(Func<T, byte[]> serializer, Func<byte[], T> deserializer) { - this.serializer = Preconditions.CheckNotNull(serializer, "serializer"); - this.deserializer = Preconditions.CheckNotNull(deserializer, "deserializer"); + this.serializer = GrpcPreconditions.CheckNotNull(serializer, "serializer"); + this.deserializer = GrpcPreconditions.CheckNotNull(deserializer, "deserializer"); } /// <summary> diff --git a/src/csharp/Grpc.Core/Metadata.cs b/src/csharp/Grpc.Core/Metadata.cs index 21bdf4f114507752ddcf13bd3ad6a7cf78d12c14..aa22f840d6c31a03dc7fc690ab99900067b05272 100644 --- a/src/csharp/Grpc.Core/Metadata.cs +++ b/src/csharp/Grpc.Core/Metadata.cs @@ -1,5 +1,5 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -179,7 +179,7 @@ namespace Grpc.Core private void CheckWriteable() { - Preconditions.CheckState(!readOnly, "Object is read only"); + GrpcPreconditions.CheckState(!readOnly, "Object is read only"); } #endregion @@ -211,10 +211,10 @@ namespace Grpc.Core public Entry(string key, byte[] valueBytes) { this.key = NormalizeKey(key); - Preconditions.CheckArgument(this.key.EndsWith(BinaryHeaderSuffix), + GrpcPreconditions.CheckArgument(this.key.EndsWith(BinaryHeaderSuffix), "Key for binary valued metadata entry needs to have suffix indicating binary value."); this.value = null; - Preconditions.CheckNotNull(valueBytes, "valueBytes"); + GrpcPreconditions.CheckNotNull(valueBytes, "valueBytes"); this.valueBytes = new byte[valueBytes.Length]; Buffer.BlockCopy(valueBytes, 0, this.valueBytes, 0, valueBytes.Length); // defensive copy to guarantee immutability } @@ -227,9 +227,9 @@ namespace Grpc.Core public Entry(string key, string value) { this.key = NormalizeKey(key); - Preconditions.CheckArgument(!this.key.EndsWith(BinaryHeaderSuffix), + GrpcPreconditions.CheckArgument(!this.key.EndsWith(BinaryHeaderSuffix), "Key for ASCII valued metadata entry cannot have suffix indicating binary value."); - this.value = Preconditions.CheckNotNull(value, "value"); + this.value = GrpcPreconditions.CheckNotNull(value, "value"); this.valueBytes = null; } @@ -270,7 +270,7 @@ namespace Grpc.Core { get { - Preconditions.CheckState(!IsBinary, "Cannot access string value of a binary metadata entry"); + GrpcPreconditions.CheckState(!IsBinary, "Cannot access string value of a binary metadata entry"); return value ?? Encoding.GetString(valueBytes); } } @@ -323,8 +323,8 @@ namespace Grpc.Core private static string NormalizeKey(string key) { - var normalized = Preconditions.CheckNotNull(key, "key").ToLower(CultureInfo.InvariantCulture); - Preconditions.CheckArgument(ValidKeyRegex.IsMatch(normalized), + var normalized = GrpcPreconditions.CheckNotNull(key, "key").ToLower(CultureInfo.InvariantCulture); + GrpcPreconditions.CheckArgument(ValidKeyRegex.IsMatch(normalized), "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores and hyphens."); return normalized; } diff --git a/src/csharp/Grpc.Core/Method.cs b/src/csharp/Grpc.Core/Method.cs index 99162a7d5dd065fa3a89b955836a3cfbcc1c00ce..3870076f7f9c7816cd0f035ac4bfa938471d1223 100644 --- a/src/csharp/Grpc.Core/Method.cs +++ b/src/csharp/Grpc.Core/Method.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -106,10 +106,10 @@ namespace Grpc.Core public Method(MethodType type, string serviceName, string name, Marshaller<TRequest> requestMarshaller, Marshaller<TResponse> responseMarshaller) { this.type = type; - this.serviceName = Preconditions.CheckNotNull(serviceName, "serviceName"); - this.name = Preconditions.CheckNotNull(name, "name"); - this.requestMarshaller = Preconditions.CheckNotNull(requestMarshaller, "requestMarshaller"); - this.responseMarshaller = Preconditions.CheckNotNull(responseMarshaller, "responseMarshaller"); + this.serviceName = GrpcPreconditions.CheckNotNull(serviceName, "serviceName"); + this.name = GrpcPreconditions.CheckNotNull(name, "name"); + this.requestMarshaller = GrpcPreconditions.CheckNotNull(requestMarshaller, "requestMarshaller"); + this.responseMarshaller = GrpcPreconditions.CheckNotNull(responseMarshaller, "responseMarshaller"); this.fullName = GetFullName(serviceName, name); } diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs index d120f95fdf98e46db385378ccfa10ff117114929..5d0fc6b1f0c81e6f88895bb47f367a02ae296d70 100644 --- a/src/csharp/Grpc.Core/Server.cs +++ b/src/csharp/Grpc.Core/Server.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -125,7 +125,7 @@ namespace Grpc.Core { lock (myLock) { - Preconditions.CheckState(!startRequested); + GrpcPreconditions.CheckState(!startRequested); startRequested = true; handle.Start(); @@ -142,8 +142,8 @@ namespace Grpc.Core { lock (myLock) { - Preconditions.CheckState(startRequested); - Preconditions.CheckState(!shutdownRequested); + GrpcPreconditions.CheckState(startRequested); + GrpcPreconditions.CheckState(!shutdownRequested); shutdownRequested = true; } @@ -162,8 +162,8 @@ namespace Grpc.Core { lock (myLock) { - Preconditions.CheckState(startRequested); - Preconditions.CheckState(!shutdownRequested); + GrpcPreconditions.CheckState(startRequested); + GrpcPreconditions.CheckState(!shutdownRequested); shutdownRequested = true; } @@ -181,7 +181,7 @@ namespace Grpc.Core bool success = false; handle.DangerousAddRef(ref success); - Preconditions.CheckState(success); + GrpcPreconditions.CheckState(success); } internal void RemoveCallReference(object call) @@ -197,7 +197,7 @@ namespace Grpc.Core { lock (myLock) { - Preconditions.CheckState(!startRequested); + GrpcPreconditions.CheckState(!startRequested); foreach (var entry in serviceDefinition.CallHandlers) { callHandlers.Add(entry.Key, entry.Value); @@ -213,8 +213,8 @@ namespace Grpc.Core { lock (myLock) { - Preconditions.CheckNotNull(serverPort.Credentials, "serverPort"); - Preconditions.CheckState(!startRequested); + GrpcPreconditions.CheckNotNull(serverPort.Credentials, "serverPort"); + GrpcPreconditions.CheckState(!startRequested); var address = string.Format("{0}:{1}", serverPort.Host, serverPort.Port); int boundPort; using (var nativeCredentials = serverPort.Credentials.ToNativeCredentials()) diff --git a/src/csharp/Grpc.Core/ServerCredentials.cs b/src/csharp/Grpc.Core/ServerCredentials.cs index 3c6703d30e518fd398318bbddd523861e7e920d9..456d331c9c317b5d0e2f402f7dfb0298bdb542f0 100644 --- a/src/csharp/Grpc.Core/ServerCredentials.cs +++ b/src/csharp/Grpc.Core/ServerCredentials.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -90,11 +90,11 @@ namespace Grpc.Core public SslServerCredentials(IEnumerable<KeyCertificatePair> keyCertificatePairs, string rootCertificates, bool forceClientAuth) { this.keyCertificatePairs = new List<KeyCertificatePair>(keyCertificatePairs).AsReadOnly(); - Preconditions.CheckArgument(this.keyCertificatePairs.Count > 0, + GrpcPreconditions.CheckArgument(this.keyCertificatePairs.Count > 0, "At least one KeyCertificatePair needs to be provided."); if (forceClientAuth) { - Preconditions.CheckNotNull(rootCertificates, + GrpcPreconditions.CheckNotNull(rootCertificates, "Cannot force client authentication unless you provide rootCertificates."); } this.rootCertificates = rootCertificates; diff --git a/src/csharp/Grpc.Core/ServerPort.cs b/src/csharp/Grpc.Core/ServerPort.cs index 598404d04592f12d7f542588da425f6b9ab8d190..10ddcb782fc342c3f8fde6b803aae885d0eb8b02 100644 --- a/src/csharp/Grpc.Core/ServerPort.cs +++ b/src/csharp/Grpc.Core/ServerPort.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -62,9 +62,9 @@ namespace Grpc.Core /// <param name="credentials">credentials to use to secure this port.</param> public ServerPort(string host, int port, ServerCredentials credentials) { - this.host = Preconditions.CheckNotNull(host, "host"); + this.host = GrpcPreconditions.CheckNotNull(host, "host"); this.port = port; - this.credentials = Preconditions.CheckNotNull(credentials, "credentials"); + this.credentials = GrpcPreconditions.CheckNotNull(credentials, "credentials"); } /// <summary> diff --git a/src/csharp/Grpc.Core/Utils/Preconditions.cs b/src/csharp/Grpc.Core/Utils/GrpcPreconditions.cs similarity index 98% rename from src/csharp/Grpc.Core/Utils/Preconditions.cs rename to src/csharp/Grpc.Core/Utils/GrpcPreconditions.cs index a8ab603391fc8dd59b2751fc4782ffa091d2625a..76bf04ce8b2091c56b00d5104db26757dc2caf77 100644 --- a/src/csharp/Grpc.Core/Utils/Preconditions.cs +++ b/src/csharp/Grpc.Core/Utils/GrpcPreconditions.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -38,7 +38,7 @@ namespace Grpc.Core.Utils /// <summary> /// Utility methods to simplify checking preconditions in the code. /// </summary> - public static class Preconditions + public static class GrpcPreconditions { /// <summary> /// Throws <see cref="ArgumentException"/> if condition is false. diff --git a/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs b/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs index 26c6445c357e5ebfebbaae2790aced9a1000663c..e2ad1a834bfd57c9943c369e8c7dd91e476f5802 100644 --- a/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs +++ b/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs @@ -1,5 +1,5 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -127,8 +127,8 @@ namespace Grpc.HealthCheck { public Key(string host, string service) { - this.Host = Preconditions.CheckNotNull(host); - this.Service = Preconditions.CheckNotNull(service); + this.Host = GrpcPreconditions.CheckNotNull(host); + this.Service = GrpcPreconditions.CheckNotNull(service); } readonly string Host; diff --git a/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs b/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs index e9e659cb1fb188b930cde1394cc97c2af7bbfe2b..c4016012cbb63face4aeb366578e1f4f4f46c3b3 100644 --- a/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs +++ b/src/csharp/Grpc.IntegrationTesting/ClientRunners.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -58,7 +58,7 @@ namespace Grpc.IntegrationTesting public static IClientRunner CreateStarted(ClientConfig config) { string target = config.ServerTargets.Single(); - Grpc.Core.Utils.Preconditions.CheckArgument(config.LoadParams.LoadCase == LoadParams.LoadOneofCase.ClosedLoop); + GrpcPreconditions.CheckArgument(config.LoadParams.LoadCase == LoadParams.LoadOneofCase.ClosedLoop); var credentials = config.SecurityParams != null ? TestCredentials.CreateSslCredentials() : ChannelCredentials.Insecure; var channel = new Channel(target, credentials); @@ -95,7 +95,7 @@ namespace Grpc.IntegrationTesting public SyncUnaryClientRunner(Channel channel, int payloadSize, HistogramParams histogramParams) { - this.channel = Grpc.Core.Utils.Preconditions.CheckNotNull(channel); + this.channel = GrpcPreconditions.CheckNotNull(channel); this.payloadSize = payloadSize; this.histogram = new Histogram(histogramParams.Resolution, histogramParams.MaxPossible); diff --git a/src/csharp/Grpc.IntegrationTesting/Control.cs b/src/csharp/Grpc.IntegrationTesting/Control.cs index b90243c2bd501c49c89e0d1e0b45d9bb131213c5..291bc753978b74a1466b9d97fb6bb32e5cb53c71 100644 --- a/src/csharp/Grpc.IntegrationTesting/Control.cs +++ b/src/csharp/Grpc.IntegrationTesting/Control.cs @@ -38,7 +38,7 @@ namespace Grpc.Testing { "LmdycGMudGVzdGluZy5EZXRlcm1pbmlzdGljUGFyYW1zSAASLAoGcGFyZXRv", "GAUgASgLMhouZ3JwYy50ZXN0aW5nLlBhcmV0b1BhcmFtc0gAQgYKBGxvYWQi", "QwoOU2VjdXJpdHlQYXJhbXMSEwoLdXNlX3Rlc3RfY2EYASABKAgSHAoUc2Vy", - "dmVyX2hvc3Rfb3ZlcnJpZGUYAiABKAkirwMKDENsaWVudENvbmZpZxIWCg5z", + "dmVyX2hvc3Rfb3ZlcnJpZGUYAiABKAki1gMKDENsaWVudENvbmZpZxIWCg5z", "ZXJ2ZXJfdGFyZ2V0cxgBIAMoCRItCgtjbGllbnRfdHlwZRgCIAEoDjIYLmdy", "cGMudGVzdGluZy5DbGllbnRUeXBlEjUKD3NlY3VyaXR5X3BhcmFtcxgDIAEo", "CzIcLmdycGMudGVzdGluZy5TZWN1cml0eVBhcmFtcxIkChxvdXRzdGFuZGlu", @@ -48,24 +48,27 @@ namespace Grpc.Testing { "GAogASgLMhguZ3JwYy50ZXN0aW5nLkxvYWRQYXJhbXMSMwoOcGF5bG9hZF9j", "b25maWcYCyABKAsyGy5ncnBjLnRlc3RpbmcuUGF5bG9hZENvbmZpZxI3ChBo", "aXN0b2dyYW1fcGFyYW1zGAwgASgLMh0uZ3JwYy50ZXN0aW5nLkhpc3RvZ3Jh", - "bVBhcmFtcyI4CgxDbGllbnRTdGF0dXMSKAoFc3RhdHMYASABKAsyGS5ncnBj", - "LnRlc3RpbmcuQ2xpZW50U3RhdHMiFQoETWFyaxINCgVyZXNldBgBIAEoCCJo", - "CgpDbGllbnRBcmdzEisKBXNldHVwGAEgASgLMhouZ3JwYy50ZXN0aW5nLkNs", - "aWVudENvbmZpZ0gAEiIKBG1hcmsYAiABKAsyEi5ncnBjLnRlc3RpbmcuTWFy", - "a0gAQgkKB2FyZ3R5cGUi9wEKDFNlcnZlckNvbmZpZxItCgtzZXJ2ZXJfdHlw", - "ZRgBIAEoDjIYLmdycGMudGVzdGluZy5TZXJ2ZXJUeXBlEjUKD3NlY3VyaXR5", - "X3BhcmFtcxgCIAEoCzIcLmdycGMudGVzdGluZy5TZWN1cml0eVBhcmFtcxIM", - "CgRob3N0GAMgASgJEgwKBHBvcnQYBCABKAUSHAoUYXN5bmNfc2VydmVyX3Ro", - "cmVhZHMYByABKAUSEgoKY29yZV9saW1pdBgIIAEoBRIzCg5wYXlsb2FkX2Nv", - "bmZpZxgJIAEoCzIbLmdycGMudGVzdGluZy5QYXlsb2FkQ29uZmlnImgKClNl", - "cnZlckFyZ3MSKwoFc2V0dXAYASABKAsyGi5ncnBjLnRlc3RpbmcuU2VydmVy", - "Q29uZmlnSAASIgoEbWFyaxgCIAEoCzISLmdycGMudGVzdGluZy5NYXJrSABC", - "CQoHYXJndHlwZSJVCgxTZXJ2ZXJTdGF0dXMSKAoFc3RhdHMYASABKAsyGS5n", - "cnBjLnRlc3RpbmcuU2VydmVyU3RhdHMSDAoEcG9ydBgCIAEoBRINCgVjb3Jl", - "cxgDIAEoBSovCgpDbGllbnRUeXBlEg8KC1NZTkNfQ0xJRU5UEAASEAoMQVNZ", - "TkNfQ0xJRU5UEAEqLwoKU2VydmVyVHlwZRIPCgtTWU5DX1NFUlZFUhAAEhAK", - "DEFTWU5DX1NFUlZFUhABKiMKB1JwY1R5cGUSCQoFVU5BUlkQABINCglTVFJF", - "QU1JTkcQAWIGcHJvdG8z")); + "bVBhcmFtcxIRCgljb3JlX2xpc3QYDSADKAUSEgoKY29yZV9saW1pdBgOIAEo", + "BSI4CgxDbGllbnRTdGF0dXMSKAoFc3RhdHMYASABKAsyGS5ncnBjLnRlc3Rp", + "bmcuQ2xpZW50U3RhdHMiFQoETWFyaxINCgVyZXNldBgBIAEoCCJoCgpDbGll", + "bnRBcmdzEisKBXNldHVwGAEgASgLMhouZ3JwYy50ZXN0aW5nLkNsaWVudENv", + "bmZpZ0gAEiIKBG1hcmsYAiABKAsyEi5ncnBjLnRlc3RpbmcuTWFya0gAQgkK", + "B2FyZ3R5cGUi/AEKDFNlcnZlckNvbmZpZxItCgtzZXJ2ZXJfdHlwZRgBIAEo", + "DjIYLmdycGMudGVzdGluZy5TZXJ2ZXJUeXBlEjUKD3NlY3VyaXR5X3BhcmFt", + "cxgCIAEoCzIcLmdycGMudGVzdGluZy5TZWN1cml0eVBhcmFtcxIMCgRwb3J0", + "GAQgASgFEhwKFGFzeW5jX3NlcnZlcl90aHJlYWRzGAcgASgFEhIKCmNvcmVf", + "bGltaXQYCCABKAUSMwoOcGF5bG9hZF9jb25maWcYCSABKAsyGy5ncnBjLnRl", + "c3RpbmcuUGF5bG9hZENvbmZpZxIRCgljb3JlX2xpc3QYCiADKAUiaAoKU2Vy", + "dmVyQXJncxIrCgVzZXR1cBgBIAEoCzIaLmdycGMudGVzdGluZy5TZXJ2ZXJD", + "b25maWdIABIiCgRtYXJrGAIgASgLMhIuZ3JwYy50ZXN0aW5nLk1hcmtIAEIJ", + "Cgdhcmd0eXBlIlUKDFNlcnZlclN0YXR1cxIoCgVzdGF0cxgBIAEoCzIZLmdy", + "cGMudGVzdGluZy5TZXJ2ZXJTdGF0cxIMCgRwb3J0GAIgASgFEg0KBWNvcmVz", + "GAMgASgFIg0KC0NvcmVSZXF1ZXN0Ih0KDENvcmVSZXNwb25zZRINCgVjb3Jl", + "cxgBIAEoBSIGCgRWb2lkKi8KCkNsaWVudFR5cGUSDwoLU1lOQ19DTElFTlQQ", + "ABIQCgxBU1lOQ19DTElFTlQQASpJCgpTZXJ2ZXJUeXBlEg8KC1NZTkNfU0VS", + "VkVSEAASEAoMQVNZTkNfU0VSVkVSEAESGAoUQVNZTkNfR0VORVJJQ19TRVJW", + "RVIQAiojCgdScGNUeXBlEgkKBVVOQVJZEAASDQoJU1RSRUFNSU5HEAFiBnBy", + "b3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Grpc.Testing.PayloadsReflection.Descriptor, global::Grpc.Testing.StatsReflection.Descriptor, }, new pbr::GeneratedCodeInfo(new[] {typeof(global::Grpc.Testing.ClientType), typeof(global::Grpc.Testing.ServerType), typeof(global::Grpc.Testing.RpcType), }, new pbr::GeneratedCodeInfo[] { @@ -76,13 +79,16 @@ namespace Grpc.Testing { new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClosedLoopParams), global::Grpc.Testing.ClosedLoopParams.Parser, null, null, null, null), new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.LoadParams), global::Grpc.Testing.LoadParams.Parser, new[]{ "ClosedLoop", "Poisson", "Uniform", "Determ", "Pareto" }, new[]{ "Load" }, null, null), new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.SecurityParams), global::Grpc.Testing.SecurityParams.Parser, new[]{ "UseTestCa", "ServerHostOverride" }, null, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientConfig), global::Grpc.Testing.ClientConfig.Parser, new[]{ "ServerTargets", "ClientType", "SecurityParams", "OutstandingRpcsPerChannel", "ClientChannels", "AsyncClientThreads", "RpcType", "LoadParams", "PayloadConfig", "HistogramParams" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientConfig), global::Grpc.Testing.ClientConfig.Parser, new[]{ "ServerTargets", "ClientType", "SecurityParams", "OutstandingRpcsPerChannel", "ClientChannels", "AsyncClientThreads", "RpcType", "LoadParams", "PayloadConfig", "HistogramParams", "CoreList", "CoreLimit" }, null, null, null), new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientStatus), global::Grpc.Testing.ClientStatus.Parser, new[]{ "Stats" }, null, null, null), new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Mark), global::Grpc.Testing.Mark.Parser, new[]{ "Reset" }, null, null, null), new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ClientArgs), global::Grpc.Testing.ClientArgs.Parser, new[]{ "Setup", "Mark" }, new[]{ "Argtype" }, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerConfig), global::Grpc.Testing.ServerConfig.Parser, new[]{ "ServerType", "SecurityParams", "Host", "Port", "AsyncServerThreads", "CoreLimit", "PayloadConfig" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerConfig), global::Grpc.Testing.ServerConfig.Parser, new[]{ "ServerType", "SecurityParams", "Port", "AsyncServerThreads", "CoreLimit", "PayloadConfig", "CoreList" }, null, null, null), new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerArgs), global::Grpc.Testing.ServerArgs.Parser, new[]{ "Setup", "Mark" }, new[]{ "Argtype" }, null, null), - new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerStatus), global::Grpc.Testing.ServerStatus.Parser, new[]{ "Stats", "Port", "Cores" }, null, null, null) + new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ServerStatus), global::Grpc.Testing.ServerStatus.Parser, new[]{ "Stats", "Port", "Cores" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.CoreRequest), global::Grpc.Testing.CoreRequest.Parser, null, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.CoreResponse), global::Grpc.Testing.CoreResponse.Parser, new[]{ "Cores" }, null, null, null), + new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Void), global::Grpc.Testing.Void.Parser, null, null, null, null) })); } #endregion @@ -97,6 +103,7 @@ namespace Grpc.Testing { public enum ServerType { SYNC_SERVER = 0, ASYNC_SERVER = 1, + ASYNC_GENERIC_SERVER = 2, } public enum RpcType { @@ -1097,6 +1104,8 @@ namespace Grpc.Testing { LoadParams = other.loadParams_ != null ? other.LoadParams.Clone() : null; PayloadConfig = other.payloadConfig_ != null ? other.PayloadConfig.Clone() : null; HistogramParams = other.histogramParams_ != null ? other.HistogramParams.Clone() : null; + coreList_ = other.coreList_.Clone(); + coreLimit_ = other.coreLimit_; } public ClientConfig Clone() { @@ -1219,6 +1228,28 @@ namespace Grpc.Testing { } } + /// <summary>Field number for the "core_list" field.</summary> + public const int CoreListFieldNumber = 13; + private static readonly pb::FieldCodec<int> _repeated_coreList_codec + = pb::FieldCodec.ForInt32(106); + private readonly pbc::RepeatedField<int> coreList_ = new pbc::RepeatedField<int>(); + /// <summary> + /// Specify the cores we should run the client on, if desired + /// </summary> + public pbc::RepeatedField<int> CoreList { + get { return coreList_; } + } + + /// <summary>Field number for the "core_limit" field.</summary> + public const int CoreLimitFieldNumber = 14; + private int coreLimit_; + public int CoreLimit { + get { return coreLimit_; } + set { + coreLimit_ = value; + } + } + public override bool Equals(object other) { return Equals(other as ClientConfig); } @@ -1240,6 +1271,8 @@ namespace Grpc.Testing { if (!object.Equals(LoadParams, other.LoadParams)) return false; if (!object.Equals(PayloadConfig, other.PayloadConfig)) return false; if (!object.Equals(HistogramParams, other.HistogramParams)) return false; + if(!coreList_.Equals(other.coreList_)) return false; + if (CoreLimit != other.CoreLimit) return false; return true; } @@ -1255,6 +1288,8 @@ namespace Grpc.Testing { if (loadParams_ != null) hash ^= LoadParams.GetHashCode(); if (payloadConfig_ != null) hash ^= PayloadConfig.GetHashCode(); if (histogramParams_ != null) hash ^= HistogramParams.GetHashCode(); + hash ^= coreList_.GetHashCode(); + if (CoreLimit != 0) hash ^= CoreLimit.GetHashCode(); return hash; } @@ -1300,6 +1335,11 @@ namespace Grpc.Testing { output.WriteRawTag(98); output.WriteMessage(HistogramParams); } + coreList_.WriteTo(output, _repeated_coreList_codec); + if (CoreLimit != 0) { + output.WriteRawTag(112); + output.WriteInt32(CoreLimit); + } } public int CalculateSize() { @@ -1332,6 +1372,10 @@ namespace Grpc.Testing { if (histogramParams_ != null) { size += 1 + pb::CodedOutputStream.ComputeMessageSize(HistogramParams); } + size += coreList_.CalculateSize(_repeated_coreList_codec); + if (CoreLimit != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(CoreLimit); + } return size; } @@ -1379,6 +1423,10 @@ namespace Grpc.Testing { } HistogramParams.MergeFrom(other.HistogramParams); } + coreList_.Add(other.coreList_); + if (other.CoreLimit != 0) { + CoreLimit = other.CoreLimit; + } } public void MergeFrom(pb::CodedInputStream input) { @@ -1440,6 +1488,15 @@ namespace Grpc.Testing { input.ReadMessage(histogramParams_); break; } + case 106: + case 104: { + coreList_.AddEntriesFrom(input, _repeated_coreList_codec); + break; + } + case 112: { + CoreLimit = input.ReadInt32(); + break; + } } } } @@ -1855,11 +1912,11 @@ namespace Grpc.Testing { public ServerConfig(ServerConfig other) : this() { serverType_ = other.serverType_; SecurityParams = other.securityParams_ != null ? other.SecurityParams.Clone() : null; - host_ = other.host_; port_ = other.port_; asyncServerThreads_ = other.asyncServerThreads_; coreLimit_ = other.coreLimit_; PayloadConfig = other.payloadConfig_ != null ? other.PayloadConfig.Clone() : null; + coreList_ = other.coreList_.Clone(); } public ServerConfig Clone() { @@ -1886,19 +1943,6 @@ namespace Grpc.Testing { } } - /// <summary>Field number for the "host" field.</summary> - public const int HostFieldNumber = 3; - private string host_ = ""; - /// <summary> - /// Host on which to listen. - /// </summary> - public string Host { - get { return host_; } - set { - host_ = pb::Preconditions.CheckNotNull(value, "value"); - } - } - /// <summary>Field number for the "port" field.</summary> public const int PortFieldNumber = 4; private int port_; @@ -1929,7 +1973,7 @@ namespace Grpc.Testing { public const int CoreLimitFieldNumber = 8; private int coreLimit_; /// <summary> - /// restrict core usage, currently unused + /// Specify the number of cores to limit server to, if desired /// </summary> public int CoreLimit { get { return coreLimit_; } @@ -1941,6 +1985,9 @@ namespace Grpc.Testing { /// <summary>Field number for the "payload_config" field.</summary> public const int PayloadConfigFieldNumber = 9; private global::Grpc.Testing.PayloadConfig payloadConfig_; + /// <summary> + /// payload config, used in generic server + /// </summary> public global::Grpc.Testing.PayloadConfig PayloadConfig { get { return payloadConfig_; } set { @@ -1948,6 +1995,18 @@ namespace Grpc.Testing { } } + /// <summary>Field number for the "core_list" field.</summary> + public const int CoreListFieldNumber = 10; + private static readonly pb::FieldCodec<int> _repeated_coreList_codec + = pb::FieldCodec.ForInt32(82); + private readonly pbc::RepeatedField<int> coreList_ = new pbc::RepeatedField<int>(); + /// <summary> + /// Specify the cores we should run the server on, if desired + /// </summary> + public pbc::RepeatedField<int> CoreList { + get { return coreList_; } + } + public override bool Equals(object other) { return Equals(other as ServerConfig); } @@ -1961,11 +2020,11 @@ namespace Grpc.Testing { } if (ServerType != other.ServerType) return false; if (!object.Equals(SecurityParams, other.SecurityParams)) return false; - if (Host != other.Host) return false; if (Port != other.Port) return false; if (AsyncServerThreads != other.AsyncServerThreads) return false; if (CoreLimit != other.CoreLimit) return false; if (!object.Equals(PayloadConfig, other.PayloadConfig)) return false; + if(!coreList_.Equals(other.coreList_)) return false; return true; } @@ -1973,11 +2032,11 @@ namespace Grpc.Testing { int hash = 1; if (ServerType != global::Grpc.Testing.ServerType.SYNC_SERVER) hash ^= ServerType.GetHashCode(); if (securityParams_ != null) hash ^= SecurityParams.GetHashCode(); - if (Host.Length != 0) hash ^= Host.GetHashCode(); if (Port != 0) hash ^= Port.GetHashCode(); if (AsyncServerThreads != 0) hash ^= AsyncServerThreads.GetHashCode(); if (CoreLimit != 0) hash ^= CoreLimit.GetHashCode(); if (payloadConfig_ != null) hash ^= PayloadConfig.GetHashCode(); + hash ^= coreList_.GetHashCode(); return hash; } @@ -1994,10 +2053,6 @@ namespace Grpc.Testing { output.WriteRawTag(18); output.WriteMessage(SecurityParams); } - if (Host.Length != 0) { - output.WriteRawTag(26); - output.WriteString(Host); - } if (Port != 0) { output.WriteRawTag(32); output.WriteInt32(Port); @@ -2014,6 +2069,7 @@ namespace Grpc.Testing { output.WriteRawTag(74); output.WriteMessage(PayloadConfig); } + coreList_.WriteTo(output, _repeated_coreList_codec); } public int CalculateSize() { @@ -2024,9 +2080,6 @@ namespace Grpc.Testing { if (securityParams_ != null) { size += 1 + pb::CodedOutputStream.ComputeMessageSize(SecurityParams); } - if (Host.Length != 0) { - size += 1 + pb::CodedOutputStream.ComputeStringSize(Host); - } if (Port != 0) { size += 1 + pb::CodedOutputStream.ComputeInt32Size(Port); } @@ -2039,6 +2092,7 @@ namespace Grpc.Testing { if (payloadConfig_ != null) { size += 1 + pb::CodedOutputStream.ComputeMessageSize(PayloadConfig); } + size += coreList_.CalculateSize(_repeated_coreList_codec); return size; } @@ -2055,9 +2109,6 @@ namespace Grpc.Testing { } SecurityParams.MergeFrom(other.SecurityParams); } - if (other.Host.Length != 0) { - Host = other.Host; - } if (other.Port != 0) { Port = other.Port; } @@ -2073,6 +2124,7 @@ namespace Grpc.Testing { } PayloadConfig.MergeFrom(other.PayloadConfig); } + coreList_.Add(other.coreList_); } public void MergeFrom(pb::CodedInputStream input) { @@ -2093,10 +2145,6 @@ namespace Grpc.Testing { input.ReadMessage(securityParams_); break; } - case 26: { - Host = input.ReadString(); - break; - } case 32: { Port = input.ReadInt32(); break; @@ -2116,6 +2164,11 @@ namespace Grpc.Testing { input.ReadMessage(payloadConfig_); break; } + case 82: + case 80: { + coreList_.AddEntriesFrom(input, _repeated_coreList_codec); + break; + } } } } @@ -2347,7 +2400,7 @@ namespace Grpc.Testing { public const int CoresFieldNumber = 3; private int cores_; /// <summary> - /// Number of cores on the server. See gpr_cpu_num_cores. + /// Number of cores available to the server /// </summary> public int Cores { get { return cores_; } @@ -2460,6 +2513,264 @@ namespace Grpc.Testing { } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public sealed partial class CoreRequest : pb::IMessage<CoreRequest> { + private static readonly pb::MessageParser<CoreRequest> _parser = new pb::MessageParser<CoreRequest>(() => new CoreRequest()); + public static pb::MessageParser<CoreRequest> Parser { get { return _parser; } } + + public static pbr::MessageDescriptor Descriptor { + get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[14]; } + } + + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + public CoreRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + public CoreRequest(CoreRequest other) : this() { + } + + public CoreRequest Clone() { + return new CoreRequest(this); + } + + public override bool Equals(object other) { + return Equals(other as CoreRequest); + } + + public bool Equals(CoreRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + return true; + } + + public override int GetHashCode() { + int hash = 1; + return hash; + } + + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + public void WriteTo(pb::CodedOutputStream output) { + } + + public int CalculateSize() { + int size = 0; + return size; + } + + public void MergeFrom(CoreRequest other) { + if (other == null) { + return; + } + } + + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + } + } + } + + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public sealed partial class CoreResponse : pb::IMessage<CoreResponse> { + private static readonly pb::MessageParser<CoreResponse> _parser = new pb::MessageParser<CoreResponse>(() => new CoreResponse()); + public static pb::MessageParser<CoreResponse> Parser { get { return _parser; } } + + public static pbr::MessageDescriptor Descriptor { + get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[15]; } + } + + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + public CoreResponse() { + OnConstruction(); + } + + partial void OnConstruction(); + + public CoreResponse(CoreResponse other) : this() { + cores_ = other.cores_; + } + + public CoreResponse Clone() { + return new CoreResponse(this); + } + + /// <summary>Field number for the "cores" field.</summary> + public const int CoresFieldNumber = 1; + private int cores_; + /// <summary> + /// Number of cores available on the server + /// </summary> + public int Cores { + get { return cores_; } + set { + cores_ = value; + } + } + + public override bool Equals(object other) { + return Equals(other as CoreResponse); + } + + public bool Equals(CoreResponse other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Cores != other.Cores) return false; + return true; + } + + public override int GetHashCode() { + int hash = 1; + if (Cores != 0) hash ^= Cores.GetHashCode(); + return hash; + } + + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + public void WriteTo(pb::CodedOutputStream output) { + if (Cores != 0) { + output.WriteRawTag(8); + output.WriteInt32(Cores); + } + } + + public int CalculateSize() { + int size = 0; + if (Cores != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32Size(Cores); + } + return size; + } + + public void MergeFrom(CoreResponse other) { + if (other == null) { + return; + } + if (other.Cores != 0) { + Cores = other.Cores; + } + } + + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + case 8: { + Cores = input.ReadInt32(); + break; + } + } + } + } + + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public sealed partial class Void : pb::IMessage<Void> { + private static readonly pb::MessageParser<Void> _parser = new pb::MessageParser<Void>(() => new Void()); + public static pb::MessageParser<Void> Parser { get { return _parser; } } + + public static pbr::MessageDescriptor Descriptor { + get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[16]; } + } + + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + public Void() { + OnConstruction(); + } + + partial void OnConstruction(); + + public Void(Void other) : this() { + } + + public Void Clone() { + return new Void(this); + } + + public override bool Equals(object other) { + return Equals(other as Void); + } + + public bool Equals(Void other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + return true; + } + + public override int GetHashCode() { + int hash = 1; + return hash; + } + + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + public void WriteTo(pb::CodedOutputStream output) { + } + + public int CalculateSize() { + int size = 0; + return size; + } + + public void MergeFrom(Void other) { + if (other == null) { + return; + } + } + + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + } + } + } + + } + #endregion } diff --git a/src/csharp/Grpc.IntegrationTesting/Histogram.cs b/src/csharp/Grpc.IntegrationTesting/Histogram.cs index 7e7cb2c4de0d59fe6a971d0320072afa7504f4fe..08a674d8178dc13e30bd49645c7757827b52325c 100644 --- a/src/csharp/Grpc.IntegrationTesting/Histogram.cs +++ b/src/csharp/Grpc.IntegrationTesting/Histogram.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -66,8 +66,8 @@ namespace Grpc.IntegrationTesting public Histogram(double resolution, double maxPossible) { - Grpc.Core.Utils.Preconditions.CheckArgument(resolution > 0); - Grpc.Core.Utils.Preconditions.CheckArgument(maxPossible > 0); + GrpcPreconditions.CheckArgument(resolution > 0); + GrpcPreconditions.CheckArgument(maxPossible > 0); this.maxPossible = maxPossible; this.multiplier = 1.0 + resolution; this.oneOnLogMultiplier = 1.0 / Math.Log(1.0 + resolution); diff --git a/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs b/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs index 686b48434537ceef3967d121f0e27d989ad9f7cb..e407792c4b58ffa4f7d34e51c82212a8a2fd888e 100644 --- a/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs +++ b/src/csharp/Grpc.IntegrationTesting/QpsWorker.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -85,24 +85,27 @@ namespace Grpc.IntegrationTesting } var workerServer = new QpsWorker(options); - workerServer.Run(); + workerServer.RunAsync().Wait(); } - private void Run() + private async Task RunAsync() { string host = "0.0.0.0"; int port = options.DriverPort; + var tcs = new TaskCompletionSource<object>(); + var workerServiceImpl = new WorkerServiceImpl(() => { Task.Run(() => tcs.SetResult(null)); }); + var server = new Server { - Services = { WorkerService.BindService(new WorkerServiceImpl()) }, + Services = { WorkerService.BindService(workerServiceImpl) }, Ports = { new ServerPort(host, options.DriverPort, ServerCredentials.Insecure )} }; int boundPort = server.Ports.Single().BoundPort; Console.WriteLine("Running qps worker server on " + string.Format("{0}:{1}", host, boundPort)); server.Start(); - - server.ShutdownTask.Wait(); + await tcs.Task; + await server.ShutdownAsync(); } } } diff --git a/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs b/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs index 3dd91b794851b325523ec544599fa5331a202300..06d5ee93d8843167a31728fbcc0ced1ff50a51cb 100644 --- a/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs +++ b/src/csharp/Grpc.IntegrationTesting/RunnerClientServerTest.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -48,7 +48,6 @@ namespace Grpc.IntegrationTesting /// </summary> public class RunnerClientServerTest { - const string Host = "localhost"; IServerRunner serverRunner; [TestFixtureSetUp] @@ -57,7 +56,6 @@ namespace Grpc.IntegrationTesting var serverConfig = new ServerConfig { ServerType = ServerType.ASYNC_SERVER, - Host = Host, PayloadConfig = new PayloadConfig { SimpleParams = new SimpleProtoParams @@ -83,7 +81,7 @@ namespace Grpc.IntegrationTesting { var config = new ClientConfig { - ServerTargets = { string.Format("{0}:{1}", Host, serverRunner.BoundPort) }, + ServerTargets = { string.Format("{0}:{1}", "localhost", serverRunner.BoundPort) }, RpcType = RpcType.UNARY, LoadParams = new LoadParams { ClosedLoop = new ClosedLoopParams() }, PayloadConfig = new PayloadConfig diff --git a/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs b/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs index e8be7758cee6f508e296a37d8ab2015e5decf42a..4a73645e6ca85369770fccb68ee874ed4cb54954 100644 --- a/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs +++ b/src/csharp/Grpc.IntegrationTesting/ServerRunners.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -57,7 +57,7 @@ namespace Grpc.IntegrationTesting /// </summary> public static IServerRunner CreateStarted(ServerConfig config) { - Grpc.Core.Utils.Preconditions.CheckArgument(config.ServerType == ServerType.ASYNC_SERVER); + GrpcPreconditions.CheckArgument(config.ServerType == ServerType.ASYNC_SERVER); var credentials = config.SecurityParams != null ? TestCredentials.CreateSslServerCredentials() : ServerCredentials.Insecure; // TODO: qps_driver needs to setup payload properly... @@ -65,7 +65,7 @@ namespace Grpc.IntegrationTesting var server = new Server { Services = { BenchmarkService.BindService(new BenchmarkServiceImpl(responseSize)) }, - Ports = { new ServerPort(config.Host, config.Port, credentials) } + Ports = { new ServerPort("[::]", config.Port, credentials) } }; server.Start(); @@ -83,7 +83,7 @@ namespace Grpc.IntegrationTesting public ServerRunnerImpl(Server server) { - this.server = Grpc.Core.Utils.Preconditions.CheckNotNull(server); + this.server = GrpcPreconditions.CheckNotNull(server); } public int BoundPort diff --git a/src/csharp/Grpc.IntegrationTesting/Services.cs b/src/csharp/Grpc.IntegrationTesting/Services.cs index 04a092ccd79cb1a3c68c624ba5ce1ff8974b9fe6..a8475c181720de6e4014bd05598d5313a21028c3 100644 --- a/src/csharp/Grpc.IntegrationTesting/Services.cs +++ b/src/csharp/Grpc.IntegrationTesting/Services.cs @@ -29,11 +29,14 @@ namespace Grpc.Testing { "QmVuY2htYXJrU2VydmljZRJGCglVbmFyeUNhbGwSGy5ncnBjLnRlc3Rpbmcu", "U2ltcGxlUmVxdWVzdBocLmdycGMudGVzdGluZy5TaW1wbGVSZXNwb25zZRJO", "Cg1TdHJlYW1pbmdDYWxsEhsuZ3JwYy50ZXN0aW5nLlNpbXBsZVJlcXVlc3Qa", - "HC5ncnBjLnRlc3RpbmcuU2ltcGxlUmVzcG9uc2UoATABMp0BCg1Xb3JrZXJT", + "HC5ncnBjLnRlc3RpbmcuU2ltcGxlUmVzcG9uc2UoATABMpcCCg1Xb3JrZXJT", "ZXJ2aWNlEkUKCVJ1blNlcnZlchIYLmdycGMudGVzdGluZy5TZXJ2ZXJBcmdz", "GhouZ3JwYy50ZXN0aW5nLlNlcnZlclN0YXR1cygBMAESRQoJUnVuQ2xpZW50", "EhguZ3JwYy50ZXN0aW5nLkNsaWVudEFyZ3MaGi5ncnBjLnRlc3RpbmcuQ2xp", - "ZW50U3RhdHVzKAEwAWIGcHJvdG8z")); + "ZW50U3RhdHVzKAEwARJCCglDb3JlQ291bnQSGS5ncnBjLnRlc3RpbmcuQ29y", + "ZVJlcXVlc3QaGi5ncnBjLnRlc3RpbmcuQ29yZVJlc3BvbnNlEjQKClF1aXRX", + "b3JrZXISEi5ncnBjLnRlc3RpbmcuVm9pZBoSLmdycGMudGVzdGluZy5Wb2lk", + "YgZwcm90bzM=")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Grpc.Testing.MessagesReflection.Descriptor, global::Grpc.Testing.ControlReflection.Descriptor, }, new pbr::GeneratedCodeInfo(null, null)); diff --git a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs index dd30afb427f8c6eeb9c7cc43f3d039c3dc1e76b4..996439afbf1395f4d8f64ae3a47d20a43ef6998d 100644 --- a/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs +++ b/src/csharp/Grpc.IntegrationTesting/ServicesGrpc.cs @@ -114,6 +114,9 @@ namespace Grpc.Testing { static readonly Marshaller<global::Grpc.Testing.ServerStatus> __Marshaller_ServerStatus = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.ServerStatus.Parser.ParseFrom); static readonly Marshaller<global::Grpc.Testing.ClientArgs> __Marshaller_ClientArgs = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.ClientArgs.Parser.ParseFrom); static readonly Marshaller<global::Grpc.Testing.ClientStatus> __Marshaller_ClientStatus = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.ClientStatus.Parser.ParseFrom); + static readonly Marshaller<global::Grpc.Testing.CoreRequest> __Marshaller_CoreRequest = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.CoreRequest.Parser.ParseFrom); + static readonly Marshaller<global::Grpc.Testing.CoreResponse> __Marshaller_CoreResponse = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.CoreResponse.Parser.ParseFrom); + static readonly Marshaller<global::Grpc.Testing.Void> __Marshaller_Void = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.Void.Parser.ParseFrom); static readonly Method<global::Grpc.Testing.ServerArgs, global::Grpc.Testing.ServerStatus> __Method_RunServer = new Method<global::Grpc.Testing.ServerArgs, global::Grpc.Testing.ServerStatus>( MethodType.DuplexStreaming, @@ -129,6 +132,20 @@ namespace Grpc.Testing { __Marshaller_ClientArgs, __Marshaller_ClientStatus); + static readonly Method<global::Grpc.Testing.CoreRequest, global::Grpc.Testing.CoreResponse> __Method_CoreCount = new Method<global::Grpc.Testing.CoreRequest, global::Grpc.Testing.CoreResponse>( + MethodType.Unary, + __ServiceName, + "CoreCount", + __Marshaller_CoreRequest, + __Marshaller_CoreResponse); + + static readonly Method<global::Grpc.Testing.Void, global::Grpc.Testing.Void> __Method_QuitWorker = new Method<global::Grpc.Testing.Void, global::Grpc.Testing.Void>( + MethodType.Unary, + __ServiceName, + "QuitWorker", + __Marshaller_Void, + __Marshaller_Void); + // service descriptor public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor { @@ -142,6 +159,14 @@ namespace Grpc.Testing { AsyncDuplexStreamingCall<global::Grpc.Testing.ServerArgs, global::Grpc.Testing.ServerStatus> RunServer(CallOptions options); AsyncDuplexStreamingCall<global::Grpc.Testing.ClientArgs, global::Grpc.Testing.ClientStatus> RunClient(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); AsyncDuplexStreamingCall<global::Grpc.Testing.ClientArgs, global::Grpc.Testing.ClientStatus> RunClient(CallOptions options); + global::Grpc.Testing.CoreResponse CoreCount(global::Grpc.Testing.CoreRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + global::Grpc.Testing.CoreResponse CoreCount(global::Grpc.Testing.CoreRequest request, CallOptions options); + AsyncUnaryCall<global::Grpc.Testing.CoreResponse> CoreCountAsync(global::Grpc.Testing.CoreRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + AsyncUnaryCall<global::Grpc.Testing.CoreResponse> CoreCountAsync(global::Grpc.Testing.CoreRequest request, CallOptions options); + global::Grpc.Testing.Void QuitWorker(global::Grpc.Testing.Void request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + global::Grpc.Testing.Void QuitWorker(global::Grpc.Testing.Void request, CallOptions options); + AsyncUnaryCall<global::Grpc.Testing.Void> QuitWorkerAsync(global::Grpc.Testing.Void request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)); + AsyncUnaryCall<global::Grpc.Testing.Void> QuitWorkerAsync(global::Grpc.Testing.Void request, CallOptions options); } // server-side interface @@ -149,6 +174,8 @@ namespace Grpc.Testing { { Task RunServer(IAsyncStreamReader<global::Grpc.Testing.ServerArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ServerStatus> responseStream, ServerCallContext context); Task RunClient(IAsyncStreamReader<global::Grpc.Testing.ClientArgs> requestStream, IServerStreamWriter<global::Grpc.Testing.ClientStatus> responseStream, ServerCallContext context); + Task<global::Grpc.Testing.CoreResponse> CoreCount(global::Grpc.Testing.CoreRequest request, ServerCallContext context); + Task<global::Grpc.Testing.Void> QuitWorker(global::Grpc.Testing.Void request, ServerCallContext context); } // client stub @@ -177,6 +204,46 @@ namespace Grpc.Testing { var call = CreateCall(__Method_RunClient, options); return Calls.AsyncDuplexStreamingCall(call); } + public global::Grpc.Testing.CoreResponse CoreCount(global::Grpc.Testing.CoreRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + { + var call = CreateCall(__Method_CoreCount, new CallOptions(headers, deadline, cancellationToken)); + return Calls.BlockingUnaryCall(call, request); + } + public global::Grpc.Testing.CoreResponse CoreCount(global::Grpc.Testing.CoreRequest request, CallOptions options) + { + var call = CreateCall(__Method_CoreCount, options); + return Calls.BlockingUnaryCall(call, request); + } + public AsyncUnaryCall<global::Grpc.Testing.CoreResponse> CoreCountAsync(global::Grpc.Testing.CoreRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + { + var call = CreateCall(__Method_CoreCount, new CallOptions(headers, deadline, cancellationToken)); + return Calls.AsyncUnaryCall(call, request); + } + public AsyncUnaryCall<global::Grpc.Testing.CoreResponse> CoreCountAsync(global::Grpc.Testing.CoreRequest request, CallOptions options) + { + var call = CreateCall(__Method_CoreCount, options); + return Calls.AsyncUnaryCall(call, request); + } + public global::Grpc.Testing.Void QuitWorker(global::Grpc.Testing.Void request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + { + var call = CreateCall(__Method_QuitWorker, new CallOptions(headers, deadline, cancellationToken)); + return Calls.BlockingUnaryCall(call, request); + } + public global::Grpc.Testing.Void QuitWorker(global::Grpc.Testing.Void request, CallOptions options) + { + var call = CreateCall(__Method_QuitWorker, options); + return Calls.BlockingUnaryCall(call, request); + } + public AsyncUnaryCall<global::Grpc.Testing.Void> QuitWorkerAsync(global::Grpc.Testing.Void request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken)) + { + var call = CreateCall(__Method_QuitWorker, new CallOptions(headers, deadline, cancellationToken)); + return Calls.AsyncUnaryCall(call, request); + } + public AsyncUnaryCall<global::Grpc.Testing.Void> QuitWorkerAsync(global::Grpc.Testing.Void request, CallOptions options) + { + var call = CreateCall(__Method_QuitWorker, options); + return Calls.AsyncUnaryCall(call, request); + } } // creates service definition that can be registered with a server @@ -184,7 +251,9 @@ namespace Grpc.Testing { { return ServerServiceDefinition.CreateBuilder(__ServiceName) .AddMethod(__Method_RunServer, serviceImpl.RunServer) - .AddMethod(__Method_RunClient, serviceImpl.RunClient).Build(); + .AddMethod(__Method_RunClient, serviceImpl.RunClient) + .AddMethod(__Method_CoreCount, serviceImpl.CoreCount) + .AddMethod(__Method_QuitWorker, serviceImpl.QuitWorker).Build(); } // creates a new client diff --git a/src/csharp/Grpc.IntegrationTesting/WorkerServiceImpl.cs b/src/csharp/Grpc.IntegrationTesting/WorkerServiceImpl.cs index bb2918bf463dc0e527d24b2cfd7766c285957d70..cab299a137357a3b3506a1ff44bfc11402648a40 100644 --- a/src/csharp/Grpc.IntegrationTesting/WorkerServiceImpl.cs +++ b/src/csharp/Grpc.IntegrationTesting/WorkerServiceImpl.cs @@ -1,6 +1,6 @@ #region Copyright notice and license -// Copyright 2015, Google Inc. +// Copyright 2015-2016, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without @@ -47,9 +47,16 @@ namespace Grpc.Testing /// </summary> public class WorkerServiceImpl : WorkerService.IWorkerService { + readonly Action stopRequestHandler; + + public WorkerServiceImpl(Action stopRequestHandler) + { + this.stopRequestHandler = GrpcPreconditions.CheckNotNull(stopRequestHandler); + } + public async Task RunServer(IAsyncStreamReader<ServerArgs> requestStream, IServerStreamWriter<ServerStatus> responseStream, ServerCallContext context) { - Grpc.Core.Utils.Preconditions.CheckState(await requestStream.MoveNext()); + GrpcPreconditions.CheckState(await requestStream.MoveNext()); var serverConfig = requestStream.Current.Setup; var runner = ServerRunners.CreateStarted(serverConfig); @@ -73,7 +80,7 @@ namespace Grpc.Testing public async Task RunClient(IAsyncStreamReader<ClientArgs> requestStream, IServerStreamWriter<ClientStatus> responseStream, ServerCallContext context) { - Grpc.Core.Utils.Preconditions.CheckState(await requestStream.MoveNext()); + GrpcPreconditions.CheckState(await requestStream.MoveNext()); var clientConfig = requestStream.Current.Setup; var runner = ClientRunners.CreateStarted(clientConfig); @@ -92,5 +99,16 @@ namespace Grpc.Testing } await runner.StopAsync(); } + + public Task<CoreResponse> CoreCount(CoreRequest request, ServerCallContext context) + { + return Task.FromResult(new CoreResponse { Cores = Environment.ProcessorCount }); + } + + public Task<Void> QuitWorker(Void request, ServerCallContext context) + { + stopRequestHandler(); + return Task.FromResult(new Void()); + } } } diff --git a/src/node/ext/call_credentials.cc b/src/node/ext/call_credentials.cc index 91acb8625477dbee6b3b81d2a5e7cdcec592b080..98696db23254c66ff3df08a1e5ecbe090e6edd7b 100644 --- a/src/node/ext/call_credentials.cc +++ b/src/node/ext/call_credentials.cc @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -187,7 +187,8 @@ NAN_METHOD(PluginCallback) { shared_ptr<Resources> resources(new Resources); grpc_status_code code = static_cast<grpc_status_code>( Nan::To<uint32_t>(info[0]).FromJust()); - char *details = *Utf8String(info[1]); + Utf8String details_utf8_str(info[1]); + char *details = *details_utf8_str; grpc_metadata_array array; if (!CreateMetadataArray(Nan::To<Object>(info[2]).ToLocalChecked(), &array, resources)){ diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc index 654c5aed09bcd75b4cfaf8bf7186cc73352a2cec..0c71b2d610d446e2438b3759275c21d76cfc79db 100644 --- a/src/node/ext/node_grpc.cc +++ b/src/node/ext/node_grpc.cc @@ -237,7 +237,8 @@ NAN_METHOD(MetadataKeyIsLegal) { "headerKeyIsLegal's argument must be a string"); } Local<String> key = Nan::To<String>(info[0]).ToLocalChecked(); - char *key_str = *Nan::Utf8String(key); + Nan::Utf8String key_utf8_str(key); + char *key_str = *key_utf8_str; info.GetReturnValue().Set(static_cast<bool>( grpc_header_key_is_legal(key_str, static_cast<size_t>(key->Length())))); } @@ -248,7 +249,8 @@ NAN_METHOD(MetadataNonbinValueIsLegal) { "metadataNonbinValueIsLegal's argument must be a string"); } Local<String> value = Nan::To<String>(info[0]).ToLocalChecked(); - char *value_str = *Nan::Utf8String(value); + Nan::Utf8String value_utf8_str(value); + char *value_str = *value_utf8_str; info.GetReturnValue().Set(static_cast<bool>( grpc_header_nonbin_value_is_legal( value_str, static_cast<size_t>(value->Length())))); @@ -260,7 +262,8 @@ NAN_METHOD(MetadataKeyIsBinary) { "metadataKeyIsLegal's argument must be a string"); } Local<String> key = Nan::To<String>(info[0]).ToLocalChecked(); - char *key_str = *Nan::Utf8String(key); + Nan::Utf8String key_utf8_str(key); + char *key_str = *key_utf8_str; info.GetReturnValue().Set(static_cast<bool>( grpc_is_binary_header(key_str, static_cast<size_t>(key->Length())))); } diff --git a/src/node/index.js b/src/node/index.js index 7eacdc67b1d6ae0b460f8e747ac8f4d879a5aeac..1c197729d776fc352ffbc38b9ff85506bf5f4a13 100644 --- a/src/node/index.js +++ b/src/node/index.js @@ -56,17 +56,18 @@ var grpc = require('./src/grpc_extension'); /** * Load a gRPC object from an existing ProtoBuf.Reflect object. * @param {ProtoBuf.Reflect.Namespace} value The ProtoBuf object to load. + * @param {Object=} options Options to apply to the loaded object * @return {Object<string, *>} The resulting gRPC object */ -exports.loadObject = function loadObject(value) { +exports.loadObject = function loadObject(value, options) { var result = {}; if (value.className === 'Namespace') { _.each(value.children, function(child) { - result[child.name] = loadObject(child); + result[child.name] = loadObject(child, options); }); return result; } else if (value.className === 'Service') { - return client.makeProtobufClientConstructor(value); + return client.makeProtobufClientConstructor(value, options); } else if (value.className === 'Message' || value.className === 'Enum') { return value.build(); } else { @@ -77,28 +78,45 @@ exports.loadObject = function loadObject(value) { var loadObject = exports.loadObject; /** - * Load a gRPC object from a .proto file. - * @param {string} filename The file to load + * Load a gRPC object from a .proto file. The options object can provide the + * following options: + * - convertFieldsToCamelCase: Loads this file with that option on protobuf.js + * set as specified. See + * https://github.com/dcodeIO/protobuf.js/wiki/Advanced-options for details + * - binaryAsBase64: deserialize bytes values as base64 strings instead of + * Buffers. Defaults to false + * - longsAsStrings: deserialize long values as strings instead of objects. + * Defaults to true + * @param {string|{root: string, file: string}} filename The file to load * @param {string=} format The file format to expect. Must be either 'proto' or * 'json'. Defaults to 'proto' + * @param {Object=} options Options to apply to the loaded file * @return {Object<string, *>} The resulting gRPC object */ -exports.load = function load(filename, format) { +exports.load = function load(filename, format, options) { if (!format) { format = 'proto'; } + var convertFieldsToCamelCaseOriginal = ProtoBuf.convertFieldsToCamelCase; + if(options && options.hasOwnProperty('convertFieldsToCamelCase')) { + ProtoBuf.convertFieldsToCamelCase = options.convertFieldsToCamelCase; + } var builder; - switch(format) { - case 'proto': - builder = ProtoBuf.loadProtoFile(filename); - break; - case 'json': - builder = ProtoBuf.loadJsonFile(filename); - break; - default: - throw new Error('Unrecognized format "' + format + '"'); + try { + switch(format) { + case 'proto': + builder = ProtoBuf.loadProtoFile(filename); + break; + case 'json': + builder = ProtoBuf.loadJsonFile(filename); + break; + default: + throw new Error('Unrecognized format "' + format + '"'); + } + } finally { + ProtoBuf.convertFieldsToCamelCase = convertFieldsToCamelCaseOriginal; } - return loadObject(builder.ns); + return loadObject(builder.ns, options); }; /** diff --git a/src/node/src/client.js b/src/node/src/client.js index b5247a69ee01610313aab95dda1df1dbffa07283..c65dd7365037a00c2f001132788824bf70196890 100644 --- a/src/node/src/client.js +++ b/src/node/src/client.js @@ -648,8 +648,8 @@ exports.makeClientConstructor = function(methods, serviceName) { var deserialize = attrs.responseDeserialize; Client.prototype[name] = requester_makers[method_type]( attrs.path, serialize, deserialize); - Client.prototype[name].serialize = serialize; - Client.prototype[name].deserialize = deserialize; + // Associate all provided attributes with the method + _.assign(Client.prototype[name], attrs); }); return Client; @@ -698,13 +698,16 @@ exports.waitForClientReady = function(client, deadline, callback) { * Creates a constructor for clients for the given service * @param {ProtoBuf.Reflect.Service} service The service to generate a client * for + * @param {Object=} options Options to apply to the client * @return {function(string, Object)} New client constructor */ -exports.makeProtobufClientConstructor = function(service) { - var method_attrs = common.getProtobufServiceAttrs(service, service.name); +exports.makeProtobufClientConstructor = function(service, options) { + var method_attrs = common.getProtobufServiceAttrs(service, service.name, + options); var Client = exports.makeClientConstructor( method_attrs, common.fullyQualifiedName(service)); Client.service = service; + Client.service.grpc_options = options; return Client; }; diff --git a/src/node/src/common.js b/src/node/src/common.js index 2e6c01c4d744a16234796ae07f7beb46da8b4b9b..7705a275fcee23169cc5f5c875d08202e9046813 100644 --- a/src/node/src/common.js +++ b/src/node/src/common.js @@ -44,9 +44,20 @@ var _ = require('lodash'); /** * Get a function that deserializes a specific type of protobuf. * @param {function()} cls The constructor of the message type to deserialize + * @param {bool=} binaryAsBase64 Deserialize bytes fields as base64 strings + * instead of Buffers. Defaults to false + * @param {bool=} longsAsStrings Deserialize long values as strings instead of + * objects. Defaults to true * @return {function(Buffer):cls} The deserialization function */ -exports.deserializeCls = function deserializeCls(cls) { +exports.deserializeCls = function deserializeCls(cls, binaryAsBase64, + longsAsStrings) { + if (binaryAsBase64 === undefined || binaryAsBase64 === null) { + binaryAsBase64 = false; + } + if (longsAsStrings === undefined || longsAsStrings === null) { + longsAsStrings = true; + } /** * Deserialize a buffer to a message object * @param {Buffer} arg_buf The buffer to deserialize @@ -55,7 +66,7 @@ exports.deserializeCls = function deserializeCls(cls) { return function deserialize(arg_buf) { // Convert to a native object with binary fields as Buffers (first argument) // and longs as strings (second argument) - return cls.decode(arg_buf).toRaw(false, true); + return cls.decode(arg_buf).toRaw(binaryAsBase64, longsAsStrings); }; }; @@ -119,19 +130,30 @@ exports.wrapIgnoreNull = function wrapIgnoreNull(func) { /** * Return a map from method names to method attributes for the service. * @param {ProtoBuf.Reflect.Service} service The service to get attributes for + * @param {Object=} options Options to apply to these attributes * @return {Object} The attributes map */ -exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service) { +exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service, + options) { var prefix = '/' + fullyQualifiedName(service) + '/'; + var binaryAsBase64, longsAsStrings; + if (options) { + binaryAsBase64 = options.binaryAsBase64; + longsAsStrings = options.longsAsStrings; + } return _.object(_.map(service.children, function(method) { return [_.camelCase(method.name), { path: prefix + method.name, requestStream: method.requestStream, responseStream: method.responseStream, + requestType: method.resolvedRequestType, + responseType: method.resolvedResponseType, requestSerialize: serializeCls(method.resolvedRequestType.build()), - requestDeserialize: deserializeCls(method.resolvedRequestType.build()), + requestDeserialize: deserializeCls(method.resolvedRequestType.build(), + binaryAsBase64, longsAsStrings), responseSerialize: serializeCls(method.resolvedResponseType.build()), - responseDeserialize: deserializeCls(method.resolvedResponseType.build()) + responseDeserialize: deserializeCls(method.resolvedResponseType.build(), + binaryAsBase64, longsAsStrings) }]; })); }; diff --git a/src/node/src/credentials.js b/src/node/src/credentials.js index 710ab6d879cd36c8e13da6523de5d888919699a2..1d73723cc064501d38fb97ad9cf21710779fce34 100644 --- a/src/node/src/credentials.js +++ b/src/node/src/credentials.js @@ -98,6 +98,8 @@ exports.createFromMetadataGenerator = function(metadata_generator) { message = error.message; if (error.hasOwnProperty('code')) { code = error.code; + } else { + code = grpc.status.UNAUTHENTICATED; } if (!metadata) { metadata = new Metadata(); @@ -116,13 +118,16 @@ exports.createFromMetadataGenerator = function(metadata_generator) { exports.createFromGoogleCredential = function(google_credential) { return exports.createFromMetadataGenerator(function(auth_context, callback) { var service_url = auth_context.service_url; + console.log('Service URL:', service_url); google_credential.getRequestMetadata(service_url, function(err, header) { if (err) { + console.log('Auth error:', err); callback(err); return; } var metadata = new Metadata(); metadata.add('authorization', header.Authorization); + console.log(header.Authorization); callback(null, metadata); }); }); diff --git a/src/node/src/metadata.js b/src/node/src/metadata.js index 51a9f8a21622d71296a8000efcc6f7eefc772ed1..33d7ea1cf7a82a3dcabbed68187ab5c8292e3f62 100644 --- a/src/node/src/metadata.js +++ b/src/node/src/metadata.js @@ -64,7 +64,7 @@ function normalizeKey(key) { if (grpc.metadataKeyIsLegal(key)) { return key; } else { - throw new Error('Metadata key contains illegal characters'); + throw new Error('Metadata key"' + key + '" contains illegal characters'); } } @@ -79,7 +79,8 @@ function validate(key, value) { 'keys that don\'t end with \'-bin\' must have String values'); } if (!grpc.metadataNonbinValueIsLegal(value)) { - throw new Error('Metadata string value contains illegal characters'); + throw new Error('Metadata string value "' + value + + '" contains illegal characters'); } } } diff --git a/src/node/src/server.js b/src/node/src/server.js index e5aadcd5658e05652f14c4045ad5faa9abe66af6..0cf7ba34246564ac529e866ba97bea9006c4dc66 100644 --- a/src/node/src/server.js +++ b/src/node/src/server.js @@ -737,7 +737,12 @@ Server.prototype.addService = function(service, implementation) { * method implementation for the provided service. */ Server.prototype.addProtoService = function(service, implementation) { - this.addService(common.getProtobufServiceAttrs(service), implementation); + var options; + if (service.grpc_options) { + options = service.grpc_options; + } + this.addService(common.getProtobufServiceAttrs(service, options), + implementation); }; /** diff --git a/src/node/test/common_test.js b/src/node/test/common_test.js index 08ba429ed7f012672b714d8b1c1b119eb6c0edf3..66a4205f82c79e79cd1dd3682c50a035c14f268c 100644 --- a/src/node/test/common_test.js +++ b/src/node/test/common_test.js @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -42,7 +42,7 @@ var ProtoBuf = require('protobufjs'); var messages_proto = ProtoBuf.loadProtoFile( __dirname + '/test_messages.proto').build(); -describe('Proto message serialize and deserialize', function() { +describe('Proto message long int serialize and deserialize', function() { var longSerialize = common.serializeCls(messages_proto.LongValues); var longDeserialize = common.deserializeCls(messages_proto.LongValues); var pos_value = '314159265358979'; @@ -87,4 +87,52 @@ describe('Proto message serialize and deserialize', function() { assert.strictEqual(longDeserialize(serialized).sfixed_64.toString(), neg_value); }); + it('should deserialize as a number with the right option set', function() { + var longNumDeserialize = common.deserializeCls(messages_proto.LongValues, + false, false); + var serialized = longSerialize({int_64: pos_value}); + assert.strictEqual(typeof longDeserialize(serialized).int_64, 'string'); + /* With the longsAsStrings option disabled, long values are represented as + * objects with 3 keys: low, high, and unsigned */ + assert.strictEqual(typeof longNumDeserialize(serialized).int_64, 'object'); + }); +}); +describe('Proto message bytes serialize and deserialize', function() { + var sequenceSerialize = common.serializeCls(messages_proto.SequenceValues); + var sequenceDeserialize = common.deserializeCls( + messages_proto.SequenceValues); + var sequenceBase64Deserialize = common.deserializeCls( + messages_proto.SequenceValues, true); + var buffer_val = new Buffer([0x69, 0xb7]); + var base64_val = 'abc='; + it('should preserve a buffer', function() { + var serialized = sequenceSerialize({bytes_field: buffer_val}); + var deserialized = sequenceDeserialize(serialized); + assert.strictEqual(deserialized.bytes_field.compare(buffer_val), 0); + }); + it('should accept base64 encoded strings', function() { + var serialized = sequenceSerialize({bytes_field: base64_val}); + var deserialized = sequenceDeserialize(serialized); + assert.strictEqual(deserialized.bytes_field.compare(buffer_val), 0); + }); + it('should output base64 encoded strings with an option set', function() { + var serialized = sequenceSerialize({bytes_field: base64_val}); + var deserialized = sequenceBase64Deserialize(serialized); + assert.strictEqual(deserialized.bytes_field, base64_val); + }); + /* The next two tests are specific tests to verify that issue + * https://github.com/grpc/grpc/issues/5174 has been fixed. They are skipped + * because they will not pass until a protobuf.js release has been published + * with a fix for https://github.com/dcodeIO/protobuf.js/issues/390 */ + it.skip('should serialize a repeated field as packed by default', function() { + var expected_serialize = new Buffer([0x12, 0x01, 0x01, 0x0a]); + var serialized = sequenceSerialize({repeated_field: [10]}); + assert.strictEqual(expected_serialize.compare(serialized), 0); + }); + it.skip('should deserialize packed or unpacked repeated', function() { + var serialized = new Buffer([0x12, 0x01, 0x01, 0x0a]); + assert.doesNotThrow(function() { + sequenceDeserialize(serialized); + }); + }); }); diff --git a/src/node/test/test_messages.proto b/src/node/test/test_messages.proto index c77a937d3f4e3c91812eb711bfe655358b6260f6..9b8cb875eeb0aeed0fbd498ef7b101d23b15f0b7 100644 --- a/src/node/test/test_messages.proto +++ b/src/node/test/test_messages.proto @@ -36,3 +36,8 @@ message LongValues { fixed64 fixed_64 = 4; sfixed64 sfixed_64 = 5; } + +message SequenceValues { + bytes bytes_field = 1; + repeated int32 repeated_field = 2; +} diff --git a/src/proto/grpc/lb/v0/load_balancer.options b/src/proto/grpc/lb/v0/load_balancer.options new file mode 100644 index 0000000000000000000000000000000000000000..6d4528f838a4c819c5b183bac9edb2db67200356 --- /dev/null +++ b/src/proto/grpc/lb/v0/load_balancer.options @@ -0,0 +1,6 @@ +grpc.lb.v0.InitialLoadBalanceRequest.name max_size:128 +grpc.lb.v0.InitialLoadBalanceResponse.client_config max_size:64 +grpc.lb.v0.InitialLoadBalanceResponse.load_balancer_delegate max_size:64 +grpc.lb.v0.Server.ip_address max_size:46 +grpc.lb.v0.Server.load_balance_token max_size:64 +load_balancer.proto no_unions:true diff --git a/src/proto/grpc/lb/v0/load_balancer.proto b/src/proto/grpc/lb/v0/load_balancer.proto new file mode 100644 index 0000000000000000000000000000000000000000..e88a4f8c4a7eb7e949daeadfc61becd108a41737 --- /dev/null +++ b/src/proto/grpc/lb/v0/load_balancer.proto @@ -0,0 +1,144 @@ +// Copyright 2016, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package grpc.lb.v0; + +message Duration { + + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. + int64 seconds = 1; + + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + int32 nanos = 2; +} + +service LoadBalancer { + // Bidirectional rpc to get a list of servers. + rpc BalanceLoad(stream LoadBalanceRequest) + returns (stream LoadBalanceResponse); +} + +message LoadBalanceRequest { + oneof load_balance_request_type { + // This message should be sent on the first request to the load balancer. + InitialLoadBalanceRequest initial_request = 1; + + // The client stats should be periodically reported to the load balancer + // based on the duration defined in the InitialLoadBalanceResponse. + ClientStats client_stats = 2; + } +} + +message InitialLoadBalanceRequest { + // Name of load balanced service (IE, service.grpc.gslb.google.com) + string name = 1; +} + +// Contains client level statistics that are useful to load balancing. Each +// count should be reset to zero after reporting the stats. +message ClientStats { + // The total number of requests sent by the client since the last report. + int64 total_requests = 1; + + // The number of client rpc errors since the last report. + int64 client_rpc_errors = 2; + + // The number of dropped requests since the last report. + int64 dropped_requests = 3; +} + +message LoadBalanceResponse { + oneof load_balance_response_type { + // This message should be sent on the first response to the client. + InitialLoadBalanceResponse initial_response = 1; + + // Contains the list of servers selected by the load balancer. The client + // should send requests to these servers in the specified order. + ServerList server_list = 2; + } +} + +message InitialLoadBalanceResponse { + oneof initial_response_type { + // Contains gRPC config options like RPC deadline or flow control. + // TODO(yetianx): Change to ClientConfig after it is defined. + string client_config = 1; + + // This is an application layer redirect that indicates the client should + // use the specified server for load balancing. When this field is set in + // the response, the client should open a separate connection to the + // load_balancer_delegate and call the BalanceLoad method. + string load_balancer_delegate = 2; + } + + // This interval defines how often the client should send the client stats + // to the load balancer. Stats should only be reported when the duration is + // positive. + Duration client_stats_report_interval = 3; +} + +message ServerList { + // Contains a list of servers selected by the load balancer. The list will + // be updated when server resolutions change or as needed to balance load + // across more servers. The client should consume the server list in order + // unless instructed otherwise via the client_config. + repeated Server servers = 1; + + // Indicates the amount of time that the client should consider this server + // list as valid. It may be considered stale after waiting this interval of + // time after receiving the list. If the interval is not positive, the + // client can assume the list is valid until the next list is received. + Duration expiration_interval = 3; +} + +message Server { + // A resolved address and port for the server. The IP address string may + // either be an IPv4 or IPv6 address. + string ip_address = 1; + int32 port = 2; + + // An opaque token that is passed from the client to the server in metadata. + // The server may expect this token to indicate that the request from the + // client was load balanced. + // TODO(yetianx): Not used right now, and will be used after implementing + // load report. + bytes load_balance_token = 3; + + // Indicates whether this particular request should be dropped by the client + // when this server is chosen from the list. + bool drop_request = 4; +} diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 38b2226e4e5f86027000ee1c5e97294d1ceec029..c020fda2846006d57d0784137f90a571ea070656 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -73,27 +73,6 @@ CORE_SOURCE_FILES = [ 'src/core/support/time_win32.c', 'src/core/support/tls_pthread.c', 'src/core/support/wrap_memcpy.c', - 'src/core/httpcli/httpcli_security_connector.c', - 'src/core/security/base64.c', - 'src/core/security/client_auth_filter.c', - 'src/core/security/credentials.c', - 'src/core/security/credentials_metadata.c', - 'src/core/security/credentials_posix.c', - 'src/core/security/credentials_win32.c', - 'src/core/security/google_default_credentials.c', - 'src/core/security/handshake.c', - 'src/core/security/json_token.c', - 'src/core/security/jwt_verifier.c', - 'src/core/security/secure_endpoint.c', - 'src/core/security/security_connector.c', - 'src/core/security/security_context.c', - 'src/core/security/server_auth_filter.c', - 'src/core/security/server_secure_chttp2.c', - 'src/core/surface/init_secure.c', - 'src/core/surface/secure_channel_create.c', - 'src/core/tsi/fake_transport_security.c', - 'src/core/tsi/ssl_transport_security.c', - 'src/core/tsi/transport_security.c', 'src/core/census/grpc_context.c', 'src/core/census/grpc_filter.c', 'src/core/channel/channel_args.c', @@ -109,6 +88,7 @@ CORE_SOURCE_FILES = [ 'src/core/client_config/connector.c', 'src/core/client_config/default_initial_connect_string.c', 'src/core/client_config/initial_connect_string.c', + 'src/core/client_config/lb_policies/load_balancer_api.c', 'src/core/client_config/lb_policies/pick_first.c', 'src/core/client_config/lb_policies/round_robin.c', 'src/core/client_config/lb_policy.c', @@ -173,6 +153,7 @@ CORE_SOURCE_FILES = [ 'src/core/json/json_reader.c', 'src/core/json/json_string.c', 'src/core/json/json_writer.c', + 'src/core/proto/grpc/lb/v0/load_balancer.pb.c', 'src/core/surface/alarm.c', 'src/core/surface/api_trace.c', 'src/core/surface/byte_buffer.c', @@ -222,12 +203,36 @@ CORE_SOURCE_FILES = [ 'src/core/transport/static_metadata.c', 'src/core/transport/transport.c', 'src/core/transport/transport_op_string.c', + 'src/core/httpcli/httpcli_security_connector.c', + 'src/core/security/base64.c', + 'src/core/security/client_auth_filter.c', + 'src/core/security/credentials.c', + 'src/core/security/credentials_metadata.c', + 'src/core/security/credentials_posix.c', + 'src/core/security/credentials_win32.c', + 'src/core/security/google_default_credentials.c', + 'src/core/security/handshake.c', + 'src/core/security/json_token.c', + 'src/core/security/jwt_verifier.c', + 'src/core/security/secure_endpoint.c', + 'src/core/security/security_connector.c', + 'src/core/security/security_context.c', + 'src/core/security/server_auth_filter.c', + 'src/core/security/server_secure_chttp2.c', + 'src/core/surface/init_secure.c', + 'src/core/surface/secure_channel_create.c', + 'src/core/tsi/fake_transport_security.c', + 'src/core/tsi/ssl_transport_security.c', + 'src/core/tsi/transport_security.c', 'src/core/census/context.c', 'src/core/census/initialize.c', - 'src/core/census/log.c', + 'src/core/census/mlog.c', 'src/core/census/operation.c', 'src/core/census/placeholders.c', 'src/core/census/tracing.c', + 'third_party/nanopb/pb_common.c', + 'third_party/nanopb/pb_decode.c', + 'third_party/nanopb/pb_encode.c', 'src/boringssl/err_data.c', 'third_party/boringssl/crypto/aes/aes.c', 'third_party/boringssl/crypto/aes/mode_wrappers.c', diff --git a/summerofcode/ideas.md b/summerofcode/ideas.md new file mode 100644 index 0000000000000000000000000000000000000000..c7f368e7cc2f9d66e40069e68136047f8baf859f --- /dev/null +++ b/summerofcode/ideas.md @@ -0,0 +1,52 @@ +# gRPC Summer of Code Project Ideas + +Hello students! + +We want gRPC to be the universal remote procedure call protocol for all +computing platforms and paradigms, so while these are our ideas of what we +think would make good projects for the summer, we're eager to hear your ideas +and proposals as well. +[Try us out](https://github.com/grpc/grpc/blob/master/CONTRIBUTING.md) and get +to know the gRPC code and team! + +**Required skills for all projects:** git version control, collaborative +software development on github.com, and software development in at least one +of gRPC's ten languages on at least one of Linux, Mac OS X, and Windows. + +------------------------------------- + +gRPC C Core: + +1. Port gRPC to one of the major BSD platforms ([FreeBSD](https://freebsd.org), [NetBSD](https://netbsd.org), and [OpenBSD](https://openbsd.org)) and create packages for them. Add [kqueue](https://www.freebsd.org/cgi/man.cgi?query=kqueue) support in the process. + * **Required skills:** C programming language, BSD operating system. + * **Likely mentors:** [Craig Tiller](https://github.com/ctiller), [Nicolas Noble](https://github.com/nicolasnoble). +1. Fix gRPC C-core's URI parser. The current parser does not qualify as a standard parser according to [RFC3986]( https://tools.ietf.org/html/rfc3986). Write test suites to verify this and make changes necessary to make the URI parser compliant. + * **Required skills:** C programming language, HTTP standard compliance. + * **Likely mentors:** [Craig Tiller](https://github.com/ctiller). +1. HPACK compression efficiency evaluation - Figure out how to benchmark gRPC's compression efficiency (both in terms of bytes on the wire and cpu cycles). Implement benchmarks. Potentially extend this to other full-stack gRPC implementations (Java and Go). + * **Required skills:** C programming language, software performance benchmarking, potentially Java and Go. + * **Likely mentors:** [Craig Tiller](https://github.com/ctiller). + + +gRPC Python: + +1. Port gRPC Python to [PyPy](http://pypy.org). Investigate the state of [Cython support](http://docs.cython.org/src/userguide/pypy.html) to do this or potentially explore [cffi](https://cffi.readthedocs.org/en/latest/). + * **Required skills:** Python programming language, PyPy Python interpreter. + * **Likely mentors:** [Nathaniel Manista](https://github.com/nathanielmanistaatgoogle), [Masood Malekghassemi](https://github.com/soltanmm). +1. Develop and test Python 3.5 Support for gRPC. Make necessary changes to port gRPC and package it for supported platforms. + * **Required skills:** Python programming language, PyPy Python interpreter. + * **Likely mentors:** [Nathaniel Manista](https://github.com/nathanielmanistaatgoogle), [Masood Malekghassemi](https://github.com/soltanmm). + +gRPC Ruby/Java: + +1. [jRuby](http://jruby.org) support for gRPC. Develop a jRuby wrapper for gRPC based on grpc-java and ensure that it is API compatible with the existing Ruby implementation and passes all tests. + * **Required skills:** Java programming language, Ruby programming language. + * **Likely mentors:** [Michael Lumish](https://github.com/murgatroid99), [Eric Anderson](https://github.com/ejona86). + + +gRPC Wire Protocol: + +1. Develop a [Wireshark](https://wireshark.org) plugin for the gRPC protocol. Provide documentation and tutorials for this plugin. + * **Bonus:** consider set-up and use with mobile clients. + * **Required skills:** Wireshark software. + * **Likely mentors:** [Nicolas Noble](https://github.com/nicolasnoble). diff --git a/templates/Makefile.template b/templates/Makefile.template index 218f492837c7a2608ed848afabb8e3286af5c709..7aa6ad71e26a2e1a18c950f350ddcc20e75d7a65 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -159,7 +159,7 @@ else ifeq ($(SYSTEM),Darwin) ifeq ($(origin AR), default) - AR = libtool -o + AR = libtool -no_warning_for_no_symbols -o endif STRIP ?= strip -x else @@ -790,18 +790,22 @@ static_c: pc_c pc_c_unsecure cache.mk pc_c_zookeeper\ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'all' and lib.language == 'c' and not lib.get('external_deps', None): $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ % endif + % endif % endfor static_zookeeper_libs static_cxx: pc_cxx pc_cxx_unsecure cache.mk \ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'all' and lib.language == 'c++': $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ % endif + % endif % endfor @@ -809,40 +813,50 @@ shared_c: pc_c pc_c_unsecure cache.mk pc_c_zookeeper\ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'all' and lib.language == 'c' and not lib.get('external_deps', None): $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ % endif + % endif % endfor shared_zookeeper_libs shared_cxx: pc_cxx pc_cxx_unsecure cache.mk\ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'all' and lib.language == 'c++': $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ % endif + % endif % endfor shared_csharp: shared_c \ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'all' and lib.language == 'csharp': $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ % endif + % endif % endfor ifeq ($(HAS_ZOOKEEPER),true) static_zookeeper_libs:\ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'all' and lib.language == 'c' and 'zookeeper' in lib.get('external_deps', []): $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ % endif + % endif % endfor shared_zookeeper_libs:\ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'all' and lib.language == 'c' and 'zookeeper' in lib.get('external_deps', []): $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)\ % endif + % endif % endfor else @@ -861,9 +875,11 @@ privatelibs_c: \ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'private' and lib.language == 'c' and not lib.get('external_deps', None) and not lib.boringssl: $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ % endif + % endif % endfor pc_c: $(LIBDIR)/$(CONFIG)/pkgconfig/grpc.pc @@ -882,18 +898,22 @@ privatelibs_cxx: \ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'private' and lib.language == 'c++' and not lib.get('external_deps', None): $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ % endif + % endif % endfor ifeq ($(HAS_ZOOKEEPER),true) privatelibs_zookeeper: \ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.build == 'private' and lib.language == 'c++' and zookeeper in lib.get('external_deps', []): $(LIBDIR)/$(CONFIG)/lib${lib.name}.a\ % endif + % endif % endfor else @@ -1044,6 +1064,7 @@ strip-static_c: static_c ifeq ($(CONFIG),opt) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c": % if lib.build == "all": % if not lib.get('external_deps', None): @@ -1052,9 +1073,11 @@ % endif % endif % endif + % endif % endfor ifeq ($(HAS_ZOOKEEPER),true) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c": % if lib.build == "all": % if 'zookeeper' in lib.get('external_deps', []): @@ -1063,6 +1086,7 @@ % endif % endif % endif + % endif % endfor endif endif @@ -1070,18 +1094,21 @@ strip-static_cxx: static_cxx ifeq ($(CONFIG),opt) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c++": % if lib.build == "all": $(E) "[STRIP] Stripping lib${lib.name}.a" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a % endif % endif + % endif % endfor endif strip-shared_c: shared_c ifeq ($(CONFIG),opt) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c": % if lib.build == "all": % if not lib.get('external_deps', None): @@ -1090,9 +1117,11 @@ % endif % endif % endif + % endif % endfor ifeq ($(HAS_ZOOKEEPER),true) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c": % if lib.build == "all": % if 'zookeeper' in lib.get('external_deps', []): @@ -1101,6 +1130,7 @@ % endif % endif % endif + % endif % endfor endif endif @@ -1108,24 +1138,28 @@ strip-shared_cxx: shared_cxx ifeq ($(CONFIG),opt) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c++": % if lib.build == "all": $(E) "[STRIP] Stripping $(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT) % endif % endif + % endif % endfor endif strip-shared_csharp: shared_csharp ifeq ($(CONFIG),opt) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "csharp": % if lib.build == "all": $(E) "[STRIP] Stripping $(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT)" $(Q) $(STRIP) $(LIBDIR)/$(CONFIG)/$(SHARED_PREFIX)${lib.name}$(SHARED_VERSION).$(SHARED_EXT) % endif % endif + % endif % endfor endif @@ -1234,6 +1268,7 @@ install-static_c: static_c strip-static_c install-pkg-config_c % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c": % if lib.build == "all": % if not lib.get('external_deps', None): @@ -1243,9 +1278,11 @@ % endif % endif % endif + % endif % endfor ifeq ($(HAS_ZOOKEEPER),true) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c": % if lib.build == "all": % if 'zookeeper' in lib.get('external_deps', []): @@ -1255,11 +1292,13 @@ % endif % endif % endif + % endif % endfor endif install-static_cxx: static_cxx strip-static_cxx install-pkg-config_cxx % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == "c++": % if lib.build == "all": $(E) "[INSTALL] Installing lib${lib.name}.a" @@ -1267,10 +1306,12 @@ $(Q) $(INSTALL) $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(prefix)/lib/lib${lib.name}.a % endif % endif + % endif % endfor <%def name="install_shared(lang_filter)">\ % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == lang_filter: % if lib.build == "all": % if not lib.get('external_deps', None): @@ -1286,9 +1327,11 @@ % endif % endif % endif + % endif % endfor ifeq ($(HAS_ZOOKEEPER),true) % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): % if lib.language == lang_filter: % if lib.build == "all": % if 'zookeeper' in lib.get('external_deps', []): @@ -1304,6 +1347,7 @@ % endif % endif % endif + % endif % endfor endif ifneq ($(SYSTEM),MINGW32) @@ -1383,7 +1427,9 @@ # The various libraries % for lib in libs: + % if 'Makefile' in lib.get('build_system', ['Makefile']): ${makelib(lib)} + % endif % endfor @@ -1498,7 +1544,7 @@ % endif ifeq ($(SYSTEM),Darwin) - $(Q) ranlib $(LIBDIR)/$(CONFIG)/lib${lib.name}.a + $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/lib${lib.name}.a endif <% diff --git a/templates/config.m4.template b/templates/config.m4.template new file mode 100644 index 0000000000000000000000000000000000000000..dbc12188dc00cd65525f429f566848b920deb6b8 --- /dev/null +++ b/templates/config.m4.template @@ -0,0 +1,44 @@ +%YAML 1.2 +--- | + PHP_ARG_ENABLE(grpc, whether to enable grpc support, + [ --enable-grpc Enable grpc support]) + + if test "$PHP_GRPC" != "no"; then + dnl Write more examples of tests here... + + dnl # --with-grpc -> add include path + PHP_ADD_INCLUDE(../../grpc/include) + PHP_ADD_INCLUDE(../../grpc/src/php/ext/grpc) + PHP_ADD_INCLUDE(../../grpc/third_party/boringssl/include) + + LIBS="-lpthread $LIBS" + + GRPC_SHARED_LIBADD="-lpthread $GRPC_SHARED_LIBADD" + PHP_ADD_LIBRARY(pthread) + + PHP_ADD_LIBRARY(dl,,GRPC_SHARED_LIBADD) + PHP_ADD_LIBRARY(dl) + + case $host in + *darwin*) ;; + *) + PHP_ADD_LIBRARY(rt,,GRPC_SHARED_LIBADD) + PHP_ADD_LIBRARY(rt) + ;; + esac + + PHP_NEW_EXTENSION(grpc, + % for source in php_config_m4.src: + ${source} ${"\\"} + % endfor + % for lib in libs: + % if lib.name in php_config_m4.get('deps', []): + % for source in lib.src: + ${source} ${"\\"} + % endfor + % endif + % endfor + , $ext_shared, , -Wall -Werror -std=c11 ${"\\"} + -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN ${"\\"} + -D_HAS_EXCEPTIONS=0 -DNOMINMAX) + fi diff --git a/templates/package.xml.template b/templates/package.xml.template new file mode 100644 index 0000000000000000000000000000000000000000..455b002e64a0a4788943c13667391b02696172c9 --- /dev/null +++ b/templates/package.xml.template @@ -0,0 +1,159 @@ +%YAML 1.2 +--- | + <?xml version="1.0" encoding="UTF-8"?> + <package packagerversion="1.9.5" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd"> + <name>grpc</name> + <channel>pecl.php.net</channel> + <summary>A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.</summary> + <description>Remote Procedure Calls (RPCs) provide a useful abstraction for building distributed applications and services. The libraries in this repository provide a concrete implementation of the gRPC protocol, layered over HTTP/2. These libraries enable communication between clients and servers using any combination of the supported languages.</description> + <lead> + <name>Stanley Cheung</name> + <user>stanleycheung</user> + <email>grpc-packages@google.com</email> + <active>yes</active> + </lead> + <%! from time import strftime %><date>${"%Y-%m-%d" | strftime}</date> + <time>16:06:07</time> + <version> + <release>0.8.0</release> + <api>0.8.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <license>BSD</license> + <notes> + - Simplify gRPC PHP installation #4517 + </notes> + <contents> + <dir baseinstalldir="/" name="/"> + <file baseinstalldir="/" name="config.m4" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/CREDITS" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/LICENSE" role="src" /> + <file baseinstalldir="/" name="src/php/ext/grpc/README.md" role="src" /> + % for source in php_config_m4.src + php_config_m4.headers: + <file baseinstalldir="/" name="${source}" role="src" /> + % endfor + % for lib in libs: + % if lib.name in php_config_m4.get('deps', []): + % for source in lib.get('public_headers', []) + lib.headers + lib.src: + <file baseinstalldir="/" name="${source}" role="src" /> + % endfor + % endif + % endfor + </dir> + </contents> + <dependencies> + <required> + <php> + <min>5.5.0</min> + </php> + <pearinstaller> + <min>1.4.0</min> + </pearinstaller> + </required> + </dependencies> + <providesextension>grpc</providesextension> + <extsrcrelease /> + <changelog> + <release> + <version> + <release>0.5.0</release> + <api>0.5.0</api> + </version> + <stability> + <release>alpha</release> + <api>alpha</api> + </stability> + <date>2015-06-16</date> + <license>BSD</license> + <notes> + First alpha release + </notes> + </release> + <release> + <version> + <release>0.5.1</release> + <api>0.5.1</api> + </version> + <stability> + <release>alpha</release> + <api>alpha</api> + </stability> + <date>2015-07-09</date> + <license>BSD</license> + <notes> + Update to wrap gRPC C Core version 0.10.0 + </notes> + </release> + <release> + <version> + <release>0.6.0</release> + <api>0.6.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2015-09-24</date> + <license>BSD</license> + <notes> + - support per message compression disable + - expose per-call host override option + - expose connectivity API + - expose channel target and call peer + - add user-agent + - update to wrap gRPC C core library beta version 0.11.0 + </notes> + </release> + <release> + <version> + <release>0.6.1</release> + <api>0.6.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2015-10-21</date> + <license>BSD</license> + <notes> + - fixed undefined constant fatal error when run with apache/nginx #2275 + </notes> + </release> + <release> + <version> + <release>0.7.0</release> + <api>0.7.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>2016-01-13</date> + <license>BSD</license> + <notes> + - Breaking change to Credentials class (removed) #3765 + - Replaced by ChannelCredentials and CallCredentials class #3765 + - New plugin based metadata auth API #4394 + - Explicit ChannelCredentials::createInsecure() call + </notes> + </release> + <release> + <version> + <release>0.8.0</release> + <api>0.8.0</api> + </version> + <stability> + <release>beta</release> + <api>beta</api> + </stability> + <date>${"%Y-%m-%d" | strftime}</date> + <license>BSD</license> + <notes> + - Simplify gRPC PHP installation #4517 + </notes> + </release> + </changelog> + </package> diff --git a/templates/tools/dockerfile/apt_get_basic.include b/templates/tools/dockerfile/apt_get_basic.include index 9237e7dacef6bf786c53de2650e1a753c11b2584..547ce01a300902e06717f09be302a23e86f82cfd 100644 --- a/templates/tools/dockerfile/apt_get_basic.include +++ b/templates/tools/dockerfile/apt_get_basic.include @@ -1,3 +1,4 @@ +<%page args="skip_golang=False"/>\ # Install Git and basic packages. RUN apt-get update && apt-get install -y ${'\\'} autoconf ${'\\'} @@ -9,7 +10,9 @@ RUN apt-get update && apt-get install -y ${'\\'} gcc ${'\\'} gcc-multilib ${'\\'} git ${'\\'} +% if not skip_golang: golang ${'\\'} +% endif gyp ${'\\'} lcov ${'\\'} libc6 ${'\\'} diff --git a/templates/tools/dockerfile/run_tests_addons.include b/templates/tools/dockerfile/run_tests_addons.include index 27ac67f5d8feeec3023090c99d06dd7c5870c5a7..30d22be2980462f8f281f9ce011eae0223da0c28 100644 --- a/templates/tools/dockerfile/run_tests_addons.include +++ b/templates/tools/dockerfile/run_tests_addons.include @@ -1,7 +1,10 @@ +<%page args="skip_zookeeper=False"/>\ <%include file="ccache_setup.include"/> +% if not skip_zookeeper: #====================== # Zookeeper dependencies # TODO(jtattermusch): is zookeeper still needed? RUN apt-get install -y libzookeeper-mt-dev +% endif RUN mkdir /var/local/jenkins diff --git a/templates/tools/dockerfile/test/cxx_squeeze_x64/Dockerfile.template b/templates/tools/dockerfile/test/cxx_squeeze_x64/Dockerfile.template new file mode 100644 index 0000000000000000000000000000000000000000..294ae00b4c7ad2eb33713fc73325d54a0e2d82a6 --- /dev/null +++ b/templates/tools/dockerfile/test/cxx_squeeze_x64/Dockerfile.template @@ -0,0 +1,45 @@ +%YAML 1.2 +--- | + # Copyright 2015-2016, Google Inc. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are + # met: + # + # * Redistributions of source code must retain the above copyright + # notice, this list of conditions and the following disclaimer. + # * Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following disclaimer + # in the documentation and/or other materials provided with the + # distribution. + # * Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + FROM debian:squeeze + + <%include file="../../apt_get_basic.include" args="skip_golang=True"/> + + # libgflags-dev is not available on squeezy + RUN apt-get update && apt-get -y install libgtest-dev libc++-dev clang && apt-get clean + + RUN apt-get update && apt-get -y install python-pip && apt-get clean + RUN pip install argparse + + <%include file="../../run_tests_addons.include" args="skip_zookeeper=True"/> + # Define the default command. + CMD ["bash"] + \ No newline at end of file diff --git a/templates/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile.template b/templates/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile.template new file mode 100644 index 0000000000000000000000000000000000000000..6b302748925f2133c35744194d40478e7029ff15 --- /dev/null +++ b/templates/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile.template @@ -0,0 +1,39 @@ +%YAML 1.2 +--- | + # Copyright 2015-2016, Google Inc. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are + # met: + # + # * Redistributions of source code must retain the above copyright + # notice, this list of conditions and the following disclaimer. + # * Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following disclaimer + # in the documentation and/or other materials provided with the + # distribution. + # * Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + FROM ubuntu:16.04 + + <%include file="../../apt_get_basic.include"/> + <%include file="../../cxx_deps.include"/> + <%include file="../../run_tests_addons.include"/> + # Define the default command. + CMD ["bash"] + \ No newline at end of file diff --git a/templates/tools/run_tests/sources_and_headers.json.template b/templates/tools/run_tests/sources_and_headers.json.template index 04802772af50d362554c6f1426aed04515506411..78363ff1fae66e554be103f9721952f5a4454ee8 100644 --- a/templates/tools/run_tests/sources_and_headers.json.template +++ b/templates/tools/run_tests/sources_and_headers.json.template @@ -12,20 +12,27 @@ out.extend(fmt % name for fmt in ['%s.grpc.pb.h', '%s.pb.h']) return out - def no_protos(src): + def no_protos_filter(src): + return os.path.splitext(src)[1] != '.proto' + + def no_third_party_filter(src): + return not src.startswith('third_party/') + + def filter_srcs(srcs, filters): out = [] - for f in src: - if os.path.splitext(f)[1] != '.proto': - out.append(f) + for s in srcs: + filter_passes = (f(s) for f in filters) + if all(filter_passes): + out.append(s) return out %> ${json.dumps([{"name": tgt.name, "language": tgt.language, "src": sorted( - no_protos(tgt.src) + - tgt.get('public_headers', []) + - tgt.get('headers', [])), + filter_srcs(tgt.src, (no_protos_filter, no_third_party_filter)) + + filter_srcs(tgt.get('public_headers', []), (no_protos_filter, no_third_party_filter)) + + filter_srcs(tgt.get('headers', []), (no_third_party_filter,))), "headers": sorted( tgt.get('public_headers', []) + tgt.get('headers', []) + diff --git a/templates/vsprojects/protoc.props.template b/templates/vsprojects/protoc.props.template index a869005daec4637d86cd2824d7dcd470e7e8e013..ced6028a4be1338517536ebe2ee56e94db08185a 100644 --- a/templates/vsprojects/protoc.props.template +++ b/templates/vsprojects/protoc.props.template @@ -4,6 +4,9 @@ <PropertyGroup Label="UserMacros" /> <PropertyGroup /> <ItemDefinitionGroup> + <ClCompile> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> <Link> <AdditionalDependencies>libprotoc.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>$(SolutionDir)\..\third_party\protobuf\cmake\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> diff --git a/templates/vsprojects/vcxproj.filters_defs.include b/templates/vsprojects/vcxproj.filters_defs.include index 7e2fbac147bf931813ec5bbe6fd4e1dbe37bcd28..e7df8db76378c05dff6a34bfb7cc0387f591d6b5 100644 --- a/templates/vsprojects/vcxproj.filters_defs.include +++ b/templates/vsprojects/vcxproj.filters_defs.include @@ -23,6 +23,11 @@ % endfor </ItemGroup> % endif + % if project.get('dll_def', None): + <ItemGroup> + <None Include="${get_repo_root(project)}\${to_windows_path(project.dll_def)}" /> + </ItemGroup> + % endif % if project.get('public_headers',[]): <ItemGroup> % for public_header in project.public_headers: diff --git a/templates/vsprojects/vcxproj_defs.include b/templates/vsprojects/vcxproj_defs.include index b57c27f76aa458304d22834a99ca18ab81c8996b..e598f1319b845ac45b9df429d1b9d3208761f93c 100644 --- a/templates/vsprojects/vcxproj_defs.include +++ b/templates/vsprojects/vcxproj_defs.include @@ -2,6 +2,9 @@ <%def name="to_windows_path(path)">${path.replace('/','\\')}</%def>\ <%def name="get_subsystem(is_library)">${'Windows' if is_library else 'Console'}</%def>\ <%def name="item_definition_group(project, target, debug, dll, _64bit)">\ +<% + repo_root = '$(SolutionDir)\..' +%>\ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='${'%s%s|%s' % ('Debug' if debug else 'Release', '-DLL' if dll else '', 'x64' if _64bit else 'Win32')}'"> <ClCompile> <PrecompiledHeader>NotUsing</PrecompiledHeader> @@ -23,6 +26,12 @@ <SubSystem>${get_subsystem(project.is_library)}</SubSystem> <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> +% if project.get("noentry", False): + <NoEntryPoint>true</NoEntryPoint> +% endif +% if project.get("dll_def", None): + <ModuleDefinitionFile>${repo_root}\${to_windows_path(project.dll_def)}</ModuleDefinitionFile> +% endif % if not debug: <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> @@ -194,6 +203,11 @@ ${gen_package_props(packages, repo_root)}\ % endfor </ItemGroup> % endif + % if project.get('dll_def', None): + <ItemGroup> + <None Include="${repo_root}\${to_windows_path(project.dll_def)}" /> + </ItemGroup> + % endif % if project.get('src',[]): <ItemGroup> % for src_name in project.src: diff --git a/test/core/census/log_test.c b/test/core/census/mlog_test.c similarity index 99% rename from test/core/census/log_test.c rename to test/core/census/mlog_test.c index b68ca115045b94c6c8951cb354107a22023a6121..5b6c5946ab5799e37b476fb26c8b5b2e10dfaee7 100644 --- a/test/core/census/log_test.c +++ b/test/core/census/mlog_test.c @@ -31,7 +31,7 @@ * */ -#include "src/core/census/log.h" +#include "src/core/census/mlog.h" #include <grpc/support/cpu.h> #include <grpc/support/log.h> #include <grpc/support/port_platform.h> diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c index 85d7c0ce07764f9670c0943dd11d7ef70fa3db7a..b5bd0168ad2808581257dae898ce988875826090 100644 --- a/test/core/util/port_windows.c +++ b/test/core/util/port_windows.c @@ -180,7 +180,7 @@ static int pick_port_using_server(char *server) { &pr); gpr_mu_lock(GRPC_POLLSET_MU(&pr.pollset)); while (pr.port == -1) { - grpc_pollset_worker worker; + grpc_pollset_worker *worker = NULL; grpc_pollset_work(&exec_ctx, &pr.pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1)); diff --git a/test/cpp/common/alarm_cpp_test.cc b/test/cpp/common/alarm_cpp_test.cc index 4745ef14ec7893765a137d13795331b11f6f27f8..5d7344046ce564df72fd0c323ac181fb21796ca3 100644 --- a/test/cpp/common/alarm_cpp_test.cc +++ b/test/cpp/common/alarm_cpp_test.cc @@ -55,6 +55,36 @@ TEST(AlarmTest, RegularExpiry) { EXPECT_EQ(junk, output_tag); } +TEST(AlarmTest, ZeroExpiry) { + CompletionQueue cq; + void* junk = reinterpret_cast<void*>(1618033); + Alarm alarm(&cq, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(0), junk); + + void* output_tag; + bool ok; + const CompletionQueue::NextStatus status = cq.AsyncNext( + (void**)&output_tag, &ok, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(0)); + + EXPECT_EQ(status, CompletionQueue::GOT_EVENT); + EXPECT_TRUE(ok); + EXPECT_EQ(junk, output_tag); +} + +TEST(AlarmTest, NegativeExpiry) { + CompletionQueue cq; + void* junk = reinterpret_cast<void*>(1618033); + Alarm alarm(&cq, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(-1), junk); + + void* output_tag; + bool ok; + const CompletionQueue::NextStatus status = cq.AsyncNext( + (void**)&output_tag, &ok, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(0)); + + EXPECT_EQ(status, CompletionQueue::GOT_EVENT); + EXPECT_TRUE(ok); + EXPECT_EQ(junk, output_tag); +} + TEST(AlarmTest, Cancellation) { CompletionQueue cq; void* junk = reinterpret_cast<void*>(1618033); diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc index a194c615cdfd1965623371d1627abc8c4d5af52f..9ca3bf98f85c470abda4ef0482c0e16acac6922c 100644 --- a/test/cpp/end2end/async_end2end_test.cc +++ b/test/cpp/end2end/async_end2end_test.cc @@ -43,6 +43,7 @@ #include <grpc/grpc.h> #include <grpc/support/thd.h> #include <grpc/support/time.h> +#include <grpc/support/tls.h> #include <gtest/gtest.h> #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" @@ -59,6 +60,8 @@ using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; using std::chrono::system_clock; +GPR_TLS_DECL(g_is_async_end2end_test); + namespace grpc { namespace testing { @@ -67,9 +70,11 @@ namespace { void* tag(int i) { return (void*)(intptr_t)i; } #ifdef GPR_POSIX_SOCKET -static int assert_non_blocking_poll(struct pollfd* pfds, nfds_t nfds, - int timeout) { - GPR_ASSERT(timeout == 0); +static int maybe_assert_non_blocking_poll(struct pollfd* pfds, nfds_t nfds, + int timeout) { + if (gpr_tls_get(&g_is_async_end2end_test)) { + GPR_ASSERT(timeout == 0); + } return poll(pfds, nfds, timeout); } @@ -86,21 +91,21 @@ class PollOverride { grpc_poll_function_type prev_; }; -class PollingCheckRegion : public PollOverride { +class PollingOverrider : public PollOverride { public: - explicit PollingCheckRegion(bool allow_blocking) - : PollOverride(allow_blocking ? poll : assert_non_blocking_poll) {} + explicit PollingOverrider(bool allow_blocking) + : PollOverride(allow_blocking ? poll : maybe_assert_non_blocking_poll) {} }; #else -class PollingCheckRegion { +class PollingOverrider { public: - explicit PollingCheckRegion(bool allow_blocking) {} + explicit PollingOverrider(bool allow_blocking) {} }; #endif -class Verifier : public PollingCheckRegion { +class Verifier { public: - explicit Verifier(bool spin) : PollingCheckRegion(!spin), spin_(spin) {} + explicit Verifier(bool spin) : spin_(spin) {} Verifier& Expect(int i, bool expect_ok) { expectations_[tag(i)] = expect_ok; return *this; @@ -183,6 +188,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { AsyncEnd2endTest() {} void SetUp() GRPC_OVERRIDE { + poll_overrider_.reset(new PollingOverrider(!GetParam())); + int port = grpc_pick_unused_port_or_die(); server_address_ << "localhost:" << port; @@ -193,6 +200,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { builder.RegisterService(&service_); cq_ = builder.AddCompletionQueue(); server_ = builder.BuildAndStart(); + + gpr_tls_set(&g_is_async_end2end_test, 1); } void TearDown() GRPC_OVERRIDE { @@ -202,6 +211,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { cq_->Shutdown(); while (cq_->Next(&ignored_tag, &ignored_ok)) ; + poll_overrider_.reset(); + gpr_tls_set(&g_is_async_end2end_test, 0); } void ResetStub() { @@ -249,6 +260,8 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<bool> { std::unique_ptr<Server> server_; grpc::testing::EchoTestService::AsyncService service_; std::ostringstream server_address_; + + std::unique_ptr<PollingOverrider> poll_overrider_; }; TEST_P(AsyncEnd2endTest, SimpleRpc) { @@ -976,6 +989,10 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { if (server_try_cancel == CANCEL_AFTER_PROCESSING) { ServerTryCancel(&srv_ctx); + + // Client reads may fail bacause it is notified that the stream is + // cancelled. + ignore_cq_result = true; } // Client attemts to read the three messages from the server @@ -1087,7 +1104,7 @@ class AsyncEnd2endServerTryCancelTest : public AsyncEnd2endTest { Verifier(GetParam()).Expect(7, true).Verify(cq_.get()); // This is expected to fail in all cases i.e for all values of - // server_try_cancel. This is becasue at this point, either there are no + // server_try_cancel. This is because at this point, either there are no // more msgs from the client (because client called WritesDone) or the RPC // is cancelled on the server srv_stream.Read(&recv_request, tag(8)); @@ -1164,6 +1181,9 @@ INSTANTIATE_TEST_CASE_P(AsyncEnd2endServerTryCancel, int main(int argc, char** argv) { grpc_test_init(argc, argv); + gpr_tls_init(&g_is_async_end2end_test); ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + int ret = RUN_ALL_TESTS(); + gpr_tls_destroy(&g_is_async_end2end_test); + return ret; } diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc index c8523847ab2cd94034bade62489a76537372d6ab..ce8e4d2a109762ac28c70135bfdd4200debda87f 100644 --- a/test/cpp/end2end/end2end_test.cc +++ b/test/cpp/end2end/end2end_test.cc @@ -51,11 +51,11 @@ #include "src/core/security/credentials.h" #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h" #include "src/proto/grpc/testing/echo.grpc.pb.h" -#include "test/core/end2end/data/ssl_test_data.h" #include "test/core/util/port.h" #include "test/core/util/test_config.h" #include "test/cpp/end2end/test_service_impl.h" #include "test/cpp/util/string_ref_helper.h" +#include "test/cpp/util/test_credentials_provider.h" using grpc::testing::EchoRequest; using grpc::testing::EchoResponse; @@ -191,12 +191,14 @@ class TestServiceImplDupPkg class TestScenario { public: - TestScenario(bool proxy, bool tls) : use_proxy(proxy), use_tls(tls) {} + TestScenario(bool proxy, const grpc::string& creds_type) + : use_proxy(proxy), credentials_type(creds_type) {} void Log() const { - gpr_log(GPR_INFO, "Scenario: proxy %d, tls %d", use_proxy, use_tls); + gpr_log(GPR_INFO, "Scenario: proxy %d, credentials %s", use_proxy, + credentials_type.c_str()); } bool use_proxy; - bool use_tls; + const grpc::string credentials_type; }; class End2endTest : public ::testing::TestWithParam<TestScenario> { @@ -220,14 +222,8 @@ class End2endTest : public ::testing::TestWithParam<TestScenario> { server_address_ << "127.0.0.1:" << port; // Setup server ServerBuilder builder; - auto server_creds = InsecureServerCredentials(); - if (GetParam().use_tls) { - SslServerCredentialsOptions::PemKeyCertPair pkcp = {test_server1_key, - test_server1_cert}; - SslServerCredentialsOptions ssl_opts; - ssl_opts.pem_root_certs = ""; - ssl_opts.pem_key_cert_pairs.push_back(pkcp); - server_creds = SslServerCredentials(ssl_opts); + auto server_creds = GetServerCredentials(GetParam().credentials_type); + if (GetParam().credentials_type != kInsecureCredentialsType) { server_creds->SetAuthMetadataProcessor(processor); } builder.AddListeningPort(server_address_.str(), server_creds); @@ -246,12 +242,8 @@ class End2endTest : public ::testing::TestWithParam<TestScenario> { } EXPECT_TRUE(is_server_started_); ChannelArguments args; - auto channel_creds = InsecureChannelCredentials(); - if (GetParam().use_tls) { - SslCredentialsOptions ssl_opts = {test_root_cert, "", ""}; - args.SetSslTargetNameOverride("foo.test.google.fr"); - channel_creds = SslCredentials(ssl_opts); - } + auto channel_creds = + GetChannelCredentials(GetParam().credentials_type, &args); if (!user_agent_prefix_.empty()) { args.SetUserAgentPrefix(user_agent_prefix_); } @@ -941,7 +933,7 @@ TEST_P(End2endTest, ChannelState) { // Takes 10s. TEST_P(End2endTest, ChannelStateTimeout) { - if (GetParam().use_tls) { + if (GetParam().credentials_type != kInsecureCredentialsType) { return; } int port = grpc_pick_unused_port_or_die(); @@ -1150,7 +1142,7 @@ class SecureEnd2endTest : public End2endTest { protected: SecureEnd2endTest() { GPR_ASSERT(!GetParam().use_proxy); - GPR_ASSERT(GetParam().use_tls); + GPR_ASSERT(GetParam().credentials_type != kInsecureCredentialsType); } }; @@ -1373,21 +1365,42 @@ TEST_P(SecureEnd2endTest, ClientAuthContext) { EXPECT_EQ("*.test.youtube.com", ToString(auth_ctx->GetPeerIdentity()[2])); } +std::vector<TestScenario> CreateTestScenarios(bool use_proxy, + bool test_insecure, + bool test_secure) { + std::vector<TestScenario> scenarios; + std::vector<grpc::string> credentials_types; + if (test_secure) { + credentials_types = GetSecureCredentialsTypeList(); + } + if (test_insecure) { + credentials_types.push_back(kInsecureCredentialsType); + } + for (auto it = credentials_types.begin(); it != credentials_types.end(); + ++it) { + scenarios.push_back(TestScenario(false, *it)); + if (use_proxy) { + scenarios.push_back(TestScenario(true, *it)); + } + } + return scenarios; +} + INSTANTIATE_TEST_CASE_P(End2end, End2endTest, - ::testing::Values(TestScenario(false, false), - TestScenario(false, true))); + ::testing::ValuesIn(CreateTestScenarios(false, true, + true))); INSTANTIATE_TEST_CASE_P(End2endServerTryCancel, End2endServerTryCancelTest, - ::testing::Values(TestScenario(false, false))); + ::testing::ValuesIn(CreateTestScenarios(false, true, + false))); INSTANTIATE_TEST_CASE_P(ProxyEnd2end, ProxyEnd2endTest, - ::testing::Values(TestScenario(false, false), - TestScenario(false, true), - TestScenario(true, false), - TestScenario(true, true))); + ::testing::ValuesIn(CreateTestScenarios(true, true, + true))); INSTANTIATE_TEST_CASE_P(SecureEnd2end, SecureEnd2endTest, - ::testing::Values(TestScenario(false, true))); + ::testing::ValuesIn(CreateTestScenarios(false, false, + true))); } // namespace } // namespace testing diff --git a/test/cpp/grpclb/grpclb_api_test.cc b/test/cpp/grpclb/grpclb_api_test.cc new file mode 100644 index 0000000000000000000000000000000000000000..bd4885fb4cd3659e2e0d85d6b263eb767f0ece6c --- /dev/null +++ b/test/cpp/grpclb/grpclb_api_test.cc @@ -0,0 +1,133 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include <gtest/gtest.h> +#include <string> + +#include "src/core/client_config/lb_policies/load_balancer_api.h" +#include "src/proto/grpc/lb/v0/load_balancer.pb.h" // C++ version + +namespace grpc { +namespace { + +using grpc::lb::v0::LoadBalanceRequest; +using grpc::lb::v0::LoadBalanceResponse; + +class GrpclbTest : public ::testing::Test {}; + +TEST_F(GrpclbTest, CreateRequest) { + const std::string service_name = "AServiceName"; + LoadBalanceRequest request; + grpc_grpclb_request* c_req = grpc_grpclb_request_create(service_name.c_str()); + gpr_slice slice = grpc_grpclb_request_encode(c_req); + const int num_bytes_written = GPR_SLICE_LENGTH(slice); + EXPECT_GT(num_bytes_written, 0); + request.ParseFromArray(GPR_SLICE_START_PTR(slice), num_bytes_written); + EXPECT_EQ(request.initial_request().name(), service_name); + gpr_slice_unref(slice); + grpc_grpclb_request_destroy(c_req); +} + +TEST_F(GrpclbTest, ParseResponse) { + LoadBalanceResponse response; + const std::string client_config_str = "I'm a client config"; + auto* initial_response = response.mutable_initial_response(); + initial_response->set_client_config(client_config_str); + auto* client_stats_report_interval = + initial_response->mutable_client_stats_report_interval(); + client_stats_report_interval->set_seconds(123); + client_stats_report_interval->set_nanos(456); + + const std::string encoded_response = response.SerializeAsString(); + gpr_slice encoded_slice = + gpr_slice_from_copied_string(encoded_response.c_str()); + grpc_grpclb_response* c_response = grpc_grpclb_response_parse(encoded_slice); + EXPECT_TRUE(c_response->has_initial_response); + EXPECT_TRUE(c_response->initial_response.has_client_config); + EXPECT_FALSE(c_response->initial_response.has_load_balancer_delegate); + EXPECT_TRUE(strcmp(c_response->initial_response.client_config, + client_config_str.c_str()) == 0); + EXPECT_EQ(c_response->initial_response.client_stats_report_interval.seconds, + 123); + EXPECT_EQ(c_response->initial_response.client_stats_report_interval.nanos, + 456); + gpr_slice_unref(encoded_slice); + grpc_grpclb_response_destroy(c_response); +} + +TEST_F(GrpclbTest, ParseResponseServerList) { + LoadBalanceResponse response; + auto* serverlist = response.mutable_server_list(); + auto* server = serverlist->add_servers(); + server->set_ip_address("127.0.0.1"); + server->set_port(12345); + server->set_drop_request(true); + server = response.mutable_server_list()->add_servers(); + server->set_ip_address("10.0.0.1"); + server->set_port(54321); + server->set_drop_request(false); + auto* expiration_interval = serverlist->mutable_expiration_interval(); + expiration_interval->set_seconds(888); + expiration_interval->set_nanos(999); + + const std::string encoded_response = response.SerializeAsString(); + gpr_slice encoded_slice = + gpr_slice_from_copied_string(encoded_response.c_str()); + grpc_grpclb_serverlist* c_serverlist = + grpc_grpclb_response_parse_serverlist(encoded_slice); + ASSERT_EQ(c_serverlist->num_servers, 2ul); + EXPECT_TRUE(c_serverlist->servers[0]->has_ip_address); + EXPECT_TRUE(strcmp(c_serverlist->servers[0]->ip_address, "127.0.0.1") == 0); + EXPECT_EQ(c_serverlist->servers[0]->port, 12345); + EXPECT_TRUE(c_serverlist->servers[0]->drop_request); + EXPECT_TRUE(c_serverlist->servers[1]->has_ip_address); + EXPECT_TRUE(strcmp(c_serverlist->servers[1]->ip_address, "10.0.0.1") == 0); + EXPECT_EQ(c_serverlist->servers[1]->port, 54321); + EXPECT_FALSE(c_serverlist->servers[1]->drop_request); + + EXPECT_TRUE(c_serverlist->expiration_interval.has_seconds); + EXPECT_EQ(c_serverlist->expiration_interval.seconds, 888); + EXPECT_TRUE(c_serverlist->expiration_interval.has_nanos); + EXPECT_EQ(c_serverlist->expiration_interval.nanos, 999); + + gpr_slice_unref(encoded_slice); + grpc_grpclb_destroy_serverlist(c_serverlist); +} + +} // namespace +} // namespace grpc + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc index cb9b396beb55cfeb17bb21e53365033ac1c14e7b..788adefd24b01283892ee5ebe1aec761500cffb7 100644 --- a/test/cpp/interop/client.cc +++ b/test/cpp/interop/client.cc @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -74,6 +74,7 @@ DEFINE_string(test_case, "large_unary", "oauth2_auth_token: raw oauth2 access token auth; " "per_rpc_creds: raw oauth2 access token on a single rpc; " "status_code_and_message: verify status code & message; " + "custom_metadata: server will echo custom metadata;" "all : all of above."); DEFINE_string(default_service_account, "", "Email of GCE default service account"); @@ -129,6 +130,8 @@ int main(int argc, char** argv) { client.DoPerRpcCreds(json_key); } else if (FLAGS_test_case == "status_code_and_message") { client.DoStatusWithMessage(); + } else if (FLAGS_test_case == "custom_metadata") { + client.DoCustomMetadata(); } else if (FLAGS_test_case == "all") { client.DoEmpty(); client.DoLargeUnary(); @@ -142,6 +145,7 @@ int main(int argc, char** argv) { client.DoTimeoutOnSleepingServer(); client.DoEmptyStream(); client.DoStatusWithMessage(); + client.DoCustomMetadata(); // service_account_creds and jwt_token_creds can only run with ssl. if (FLAGS_use_tls) { grpc::string json_key = GetServiceAccountJsonKey(); @@ -159,7 +163,7 @@ int main(int argc, char** argv) { "server_compressed_streaming|half_duplex|ping_pong|cancel_after_begin|" "cancel_after_first_response|timeout_on_sleeping_server|empty_stream|" "compute_engine_creds|jwt_token_creds|oauth2_auth_token|per_rpc_creds", - FLAGS_test_case.c_str()); + "status_code_and_message|custom_metadata", FLAGS_test_case.c_str()); ret = 1; } diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index b06310781a247d06bbb57d70d99ec4a2e6b2139f..46f6fdac4092ee99fb039c8da832f8c7f2fac069 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -625,5 +625,77 @@ void InteropClient::DoStatusWithMessage() { gpr_log(GPR_DEBUG, "Done testing Status and Message"); } +void InteropClient::DoCustomMetadata() { + const grpc::string kEchoInitialMetadataKey("x-grpc-test-echo-initial"); + const grpc::string kInitialMetadataValue("test_initial_metadata_value"); + const grpc::string kEchoTrailingBinMetadataKey( + "x-grpc-test-echo-trailing-bin"); + const grpc::string kTrailingBinValue("\x0a\x0b\x0a\x0b\x0a\x0b"); + ; + + { + gpr_log(GPR_DEBUG, "Sending RPC with custom metadata"); + ClientContext context; + context.AddMetadata(kEchoInitialMetadataKey, kInitialMetadataValue); + context.AddMetadata(kEchoTrailingBinMetadataKey, kTrailingBinValue); + SimpleRequest request; + SimpleResponse response; + request.set_response_size(kLargeResponseSize); + grpc::string payload(kLargeRequestSize, '\0'); + request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize); + + Status s = serviceStub_.Get()->UnaryCall(&context, request, &response); + AssertOkOrPrintErrorStatus(s); + const auto& server_initial_metadata = context.GetServerInitialMetadata(); + auto iter = server_initial_metadata.find(kEchoInitialMetadataKey); + GPR_ASSERT(iter != server_initial_metadata.end()); + GPR_ASSERT(iter->second.data() == kInitialMetadataValue); + const auto& server_trailing_metadata = context.GetServerTrailingMetadata(); + iter = server_trailing_metadata.find(kEchoTrailingBinMetadataKey); + GPR_ASSERT(iter != server_trailing_metadata.end()); + GPR_ASSERT(grpc::string(iter->second.begin(), iter->second.end()) == + kTrailingBinValue); + + gpr_log(GPR_DEBUG, "Done testing RPC with custom metadata"); + } + + { + gpr_log(GPR_DEBUG, "Sending stream with custom metadata"); + ClientContext context; + context.AddMetadata(kEchoInitialMetadataKey, kInitialMetadataValue); + context.AddMetadata(kEchoTrailingBinMetadataKey, kTrailingBinValue); + std::unique_ptr<ClientReaderWriter<StreamingOutputCallRequest, + StreamingOutputCallResponse>> + stream(serviceStub_.Get()->FullDuplexCall(&context)); + + StreamingOutputCallRequest request; + request.set_response_type(PayloadType::COMPRESSABLE); + ResponseParameters* response_parameter = request.add_response_parameters(); + response_parameter->set_size(kLargeResponseSize); + grpc::string payload(kLargeRequestSize, '\0'); + request.mutable_payload()->set_body(payload.c_str(), kLargeRequestSize); + StreamingOutputCallResponse response; + GPR_ASSERT(stream->Write(request)); + stream->WritesDone(); + GPR_ASSERT(stream->Read(&response)); + GPR_ASSERT(response.payload().body() == + grpc::string(kLargeResponseSize, '\0')); + GPR_ASSERT(!stream->Read(&response)); + Status s = stream->Finish(); + AssertOkOrPrintErrorStatus(s); + const auto& server_initial_metadata = context.GetServerInitialMetadata(); + auto iter = server_initial_metadata.find(kEchoInitialMetadataKey); + GPR_ASSERT(iter != server_initial_metadata.end()); + GPR_ASSERT(iter->second.data() == kInitialMetadataValue); + const auto& server_trailing_metadata = context.GetServerTrailingMetadata(); + iter = server_trailing_metadata.find(kEchoTrailingBinMetadataKey); + GPR_ASSERT(iter != server_trailing_metadata.end()); + GPR_ASSERT(grpc::string(iter->second.begin(), iter->second.end()) == + kTrailingBinValue); + + gpr_log(GPR_DEBUG, "Done testing stream with custom metadata"); + } +} + } // namespace testing } // namespace grpc diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h index 3ecd3803985ee7c0233056999a0034baa32b7096..3f57f3c7336ff3d9d19ac62a40c171c2e063aed0 100644 --- a/test/cpp/interop/interop_client.h +++ b/test/cpp/interop/interop_client.h @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -75,6 +75,7 @@ class InteropClient { void DoTimeoutOnSleepingServer(); void DoEmptyStream(); void DoStatusWithMessage(); + void DoCustomMetadata(); // Auth tests. // username is a string containing the user email void DoJwtTokenCreds(const grpc::string& username); diff --git a/test/cpp/interop/server.cc b/test/cpp/interop/server.cc index cdca060c237ff130599fcc40a75979d9bde4b70d..18ac35d551c48ce05377f446f42e8dd2b8ce93d0 100644 --- a/test/cpp/interop/server.cc +++ b/test/cpp/interop/server.cc @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -80,6 +80,36 @@ using grpc::Status; static bool got_sigint = false; static const char* kRandomFile = "test/cpp/interop/rnd.dat"; +const char kEchoInitialMetadataKey[] = "x-grpc-test-echo-initial"; +const char kEchoTrailingBinMetadataKey[] = "x-grpc-test-echo-trailing-bin"; +const char kEchoUserAgentKey[] = "x-grpc-test-echo-useragent"; + +void MaybeEchoMetadata(ServerContext* context) { + const auto& client_metadata = context->client_metadata(); + GPR_ASSERT(client_metadata.count(kEchoInitialMetadataKey) <= 1); + GPR_ASSERT(client_metadata.count(kEchoTrailingBinMetadataKey) <= 1); + + auto iter = client_metadata.find(kEchoInitialMetadataKey); + if (iter != client_metadata.end()) { + context->AddInitialMetadata(kEchoInitialMetadataKey, iter->second.data()); + } + iter = client_metadata.find(kEchoTrailingBinMetadataKey); + if (iter != client_metadata.end()) { + context->AddTrailingMetadata( + kEchoTrailingBinMetadataKey, + grpc::string(iter->second.begin(), iter->second.end())); + } + // Check if client sent a magic key in the header that makes us echo + // back the user-agent (for testing purpose) + iter = client_metadata.find(kEchoUserAgentKey); + if (iter != client_metadata.end()) { + iter = client_metadata.find("user-agent"); + if (iter != client_metadata.end()) { + context->AddInitialMetadata(kEchoUserAgentKey, iter->second.data()); + } + } +} + bool SetPayload(PayloadType type, int size, Payload* payload) { PayloadType response_type; if (type == PayloadType::RANDOM) { @@ -130,11 +160,13 @@ class TestServiceImpl : public TestService::Service { public: Status EmptyCall(ServerContext* context, const grpc::testing::Empty* request, grpc::testing::Empty* response) { + MaybeEchoMetadata(context); return Status::OK; } Status UnaryCall(ServerContext* context, const SimpleRequest* request, SimpleResponse* response) { + MaybeEchoMetadata(context); SetResponseCompression(context, *request); if (request->response_size() > 0) { if (!SetPayload(request->response_type(), request->response_size(), @@ -192,6 +224,7 @@ class TestServiceImpl : public TestService::Service { ServerContext* context, ServerReaderWriter<StreamingOutputCallResponse, StreamingOutputCallRequest>* stream) { + MaybeEchoMetadata(context); StreamingOutputCallRequest request; StreamingOutputCallResponse response; bool write_success = true; diff --git a/test/cpp/qps/qps_openloop_test.cc b/test/cpp/qps/qps_openloop_test.cc index 0ac41d9f96337f7188c09195b2a35a0ec4629221..27f266b32be56f7bc2d72364b9e9b6a6ce9c2bde 100644 --- a/test/cpp/qps/qps_openloop_test.cc +++ b/test/cpp/qps/qps_openloop_test.cc @@ -35,6 +35,7 @@ #include <grpc/support/log.h> +#include "test/core/util/test_config.h" #include "test/cpp/qps/driver.h" #include "test/cpp/qps/report.h" #include "test/cpp/util/benchmark_config.h" @@ -55,11 +56,11 @@ static void RunQPS() { client_config.set_async_client_threads(8); client_config.set_rpc_type(STREAMING); client_config.mutable_load_params()->mutable_poisson()->set_offered_load( - 1000.0); + 1000.0 / GRPC_TEST_SLOWDOWN_FACTOR); ServerConfig server_config; server_config.set_server_type(ASYNC_SERVER); - server_config.set_async_server_threads(4); + server_config.set_async_server_threads(8); const auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2); diff --git a/test/cpp/util/test_credentials_provider.cc b/test/cpp/util/test_credentials_provider.cc new file mode 100644 index 0000000000000000000000000000000000000000..1086e14258b0c54c69a649a0507a0f655246227b --- /dev/null +++ b/test/cpp/util/test_credentials_provider.cc @@ -0,0 +1,82 @@ + +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "test/cpp/util/test_credentials_provider.h" + +#include "test/core/end2end/data/ssl_test_data.h" + +namespace grpc { +namespace testing { + +const char kTlsCredentialsType[] = "TLS_CREDENTIALS"; + +std::shared_ptr<ChannelCredentials> GetChannelCredentials( + const grpc::string& type, ChannelArguments* args) { + if (type == kInsecureCredentialsType) { + return InsecureChannelCredentials(); + } else if (type == kTlsCredentialsType) { + SslCredentialsOptions ssl_opts = {test_root_cert, "", ""}; + args->SetSslTargetNameOverride("foo.test.google.fr"); + return SslCredentials(ssl_opts); + } else { + gpr_log(GPR_ERROR, "Unsupported credentials type %s.", type.c_str()); + } + return nullptr; +} + +std::shared_ptr<ServerCredentials> GetServerCredentials( + const grpc::string& type) { + if (type == kInsecureCredentialsType) { + return InsecureServerCredentials(); + } else if (type == kTlsCredentialsType) { + SslServerCredentialsOptions::PemKeyCertPair pkcp = {test_server1_key, + test_server1_cert}; + SslServerCredentialsOptions ssl_opts; + ssl_opts.pem_root_certs = ""; + ssl_opts.pem_key_cert_pairs.push_back(pkcp); + return SslServerCredentials(ssl_opts); + } else { + gpr_log(GPR_ERROR, "Unsupported credentials type %s.", type.c_str()); + } + return nullptr; +} + +std::vector<grpc::string> GetSecureCredentialsTypeList() { + std::vector<grpc::string> types; + types.push_back(kTlsCredentialsType); + return types; +} + +} // namespace testing +} // namespace grpc diff --git a/test/cpp/util/test_credentials_provider.h b/test/cpp/util/test_credentials_provider.h new file mode 100644 index 0000000000000000000000000000000000000000..f7253051a97dd7c3f6f296a0ee77ccaec717708e --- /dev/null +++ b/test/cpp/util/test_credentials_provider.h @@ -0,0 +1,63 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_TEST_CPP_UTIL_TEST_CREDENTIALS_PROVIDER_H +#define GRPC_TEST_CPP_UTIL_TEST_CREDENTIALS_PROVIDER_H + +#include <memory> + +#include <grpc++/security/credentials.h> +#include <grpc++/security/server_credentials.h> +#include <grpc++/support/channel_arguments.h> + +namespace grpc { +namespace testing { + +const char kInsecureCredentialsType[] = "INSECURE_CREDENTIALS"; + +// Provide channel credentials according to the given type. Alter the channel +// arguments if needed. +std::shared_ptr<ChannelCredentials> GetChannelCredentials( + const grpc::string& type, ChannelArguments* args); + +// Provide server credentials according to the given type. +std::shared_ptr<ServerCredentials> GetServerCredentials( + const grpc::string& type); + +// Provide a list of secure credentials type. +std::vector<grpc::string> GetSecureCredentialsTypeList(); + +} // namespace testing +} // namespace grpc + +#endif // GRPC_TEST_CPP_UTIL_TEST_CREDENTIALS_PROVIDER_H diff --git a/test/distrib/php/distribtest.php b/test/distrib/php/distribtest.php new file mode 100644 index 0000000000000000000000000000000000000000..318c6f9cf08f2dc5f4af681aa1106f66bb00bb23 --- /dev/null +++ b/test/distrib/php/distribtest.php @@ -0,0 +1,13 @@ +<?php + +$channel = new Grpc\Channel('localhost:1000', [ + 'credentials' => Grpc\ChannelCredentials::createInsecure() +]); + +$deadline = Grpc\Timeval::infFuture(); +$call = new Grpc\Call($channel, + 'dummy_method', + $deadline); + +$call->cancel(); +$channel->close(); diff --git a/test/distrib/php/run_distrib_test.sh b/test/distrib/php/run_distrib_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..43b28d842903c1b9213975552ae3f91e59676926 --- /dev/null +++ b/test/distrib/php/run_distrib_test.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright 2015-2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -ex + +cd $(dirname $0) + +cp -r $EXTERNAL_GIT_ROOT/input_artifacts/grpc-php.tgz . + +pecl install grpc-php.tgz + +php -d extension=grpc.so -d max_execution_time=300 distribtest.php diff --git a/third_party/nanopb b/third_party/nanopb new file mode 160000 index 0000000000000000000000000000000000000000..5497a1dfc91a86965383cdd1652e348345400435 --- /dev/null +++ b/third_party/nanopb @@ -0,0 +1 @@ +Subproject commit 5497a1dfc91a86965383cdd1652e348345400435 diff --git a/tools/codegen/core/gen_load_balancing_proto.sh b/tools/codegen/core/gen_load_balancing_proto.sh new file mode 100755 index 0000000000000000000000000000000000000000..fb6a468ee0b68d376919750427e89f5f46b23ffb --- /dev/null +++ b/tools/codegen/core/gen_load_balancing_proto.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# +# Example usage: +# tools/codegen/core/gen_load_balancing_proto.sh \ +# src/proto/grpc/lb/v0/load_balancer.proto + +read -r -d '' COPYRIGHT <<'EOF' +/* + * + * Copyright <YEAR>, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +EOF + +CURRENT_YEAR=$(date +%Y) +COPYRIGHT_FILE=$(mktemp) +echo "${COPYRIGHT/<YEAR>/$CURRENT_YEAR}" > $COPYRIGHT_FILE + +set -ex +if [ $# -eq 0 ]; then + echo "Usage: $0 <load_balancer.proto> [output dir]" + exit 1 +fi + +readonly GRPC_ROOT=$PWD + +OUTPUT_DIR="$GRPC_ROOT/src/core/proto/grpc/lb/v0" +if [ $# -eq 2 ]; then + mkdir -p "$2" + if [ $? != 0 ]; then + echo "Error creating output directory $2" + exit 2 + fi + OUTPUT_DIR="$2" +fi + +readonly EXPECTED_OPTIONS_FILE_PATH="${1%.*}.options" + +if [[ ! -f "$1" ]]; then + echo "Input proto file '$1' doesn't exist." + exit 3 +fi +if [[ ! -f "${EXPECTED_OPTIONS_FILE_PATH}" ]]; then + echo "Expected nanopb options file '${EXPECTED_OPTIONS_FILE_PATH}' missing" + exit 4 +fi + +readonly VENV_DIR=$(mktemp -d) +readonly VENV_NAME="nanopb-$(date '+%Y%m%d_%H%M%S_%N')" +pushd $VENV_DIR +virtualenv $VENV_NAME +. $VENV_NAME/bin/activate +popd + +# this should be the same version as the submodule we compile against +# ideally we'd update this as a template to ensure that +pip install protobuf==3.0.0b2 + +pushd "$(dirname $1)" > /dev/null + +protoc \ +--plugin=protoc-gen-nanopb="$GRPC_ROOT/third_party/nanopb/generator/protoc-gen-nanopb" \ +--nanopb_out='-T -L#include\ \"third_party/nanopb/pb.h\"'":$OUTPUT_DIR" \ +"$(basename $1)" + +readonly PROTO_BASENAME=$(basename $1 .proto) +sed -i "s:$PROTO_BASENAME.pb.h:src/core/proto/grpc/lb/v0/$PROTO_BASENAME.pb.h:g" \ + "$OUTPUT_DIR/$PROTO_BASENAME.pb.c" + +# prepend copyright +TMPFILE=$(mktemp) +cat $COPYRIGHT_FILE "$OUTPUT_DIR/$PROTO_BASENAME.pb.c" > $TMPFILE +mv -v $TMPFILE "$OUTPUT_DIR/$PROTO_BASENAME.pb.c" +cat $COPYRIGHT_FILE "$OUTPUT_DIR/$PROTO_BASENAME.pb.h" > $TMPFILE +mv -v $TMPFILE "$OUTPUT_DIR/$PROTO_BASENAME.pb.h" + +deactivate +rm -rf $VENV_DIR + +popd > /dev/null diff --git a/tools/distrib/check_nanopb_output.sh b/tools/distrib/check_nanopb_output.sh new file mode 100755 index 0000000000000000000000000000000000000000..5f49ebb93e645981c3e15c2c624866eea2e7c1b9 --- /dev/null +++ b/tools/distrib/check_nanopb_output.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# Copyright 2015-2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -ex + +apt-get install -y autoconf automake libtool curl python-virtualenv + +readonly NANOPB_TMP_OUTPUT="$(mktemp -d)" + +# install protoc version 3 +pushd third_party/protobuf +./autogen.sh +./configure +make +make install +ldconfig +popd + +if [ ! -x "/usr/local/bin/protoc" ]; then + echo "Error: protoc not found in path" + exit 1 +fi +readonly PROTOC_PATH='/usr/local/bin' +# stack up and change to nanopb's proto generator directory +pushd third_party/nanopb/generator/proto +PATH="$PROTOC_PATH:$PATH" make + +# back to the root directory +popd + + +# nanopb-compile the proto to a temp location +PATH="$PROTOC_PATH:$PATH" ./tools/codegen/core/gen_load_balancing_proto.sh \ + src/proto/grpc/lb/v0/load_balancer.proto \ + $NANOPB_TMP_OUTPUT + +# compare outputs to checked compiled code +if ! diff -r $NANOPB_TMP_OUTPUT src/core/proto/grpc/lb/v0; then + echo "Outputs differ: $NANOPB_TMP_OUTPUT vs src/core/proto/grpc/lb/v0" + exit 2 +fi diff --git a/tools/dockerfile/distribtest/php_jessie_x64/Dockerfile b/tools/dockerfile/distribtest/php_jessie_x64/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..d5d3fd626ff9398fed6e78085127cc932079321d --- /dev/null +++ b/tools/dockerfile/distribtest/php_jessie_x64/Dockerfile @@ -0,0 +1,32 @@ +# Copyright 2015-2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +FROM debian:jessie + +RUN apt-get update && apt-get install -y php5 php5-dev php-pear phpunit diff --git a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile index 41dc4274541e29df4892af423e6b70cd26e4f447..d048b725c85a249d18c25ca3323fab1713a47446 100644 --- a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile +++ b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile @@ -91,6 +91,13 @@ RUN /bin/bash -l -c "echo 'export PATH=/usr/local/rvm/bin:$PATH' >> ~/.bashrc" RUN /bin/bash -l -c "echo 'rvm --default use ruby-2.1' >> ~/.bashrc" RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" + +################## +# PHP dependencies + +RUN apt-get update && apt-get install -y \ + php5 php5-dev php-pear phpunit + RUN mkdir /var/local/jenkins # Define the default command. diff --git a/tools/dockerfile/grpc_artifact_protoc/Dockerfile b/tools/dockerfile/grpc_artifact_protoc/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..1bbc6e021bc67a6d2419bef498485704f86bcda3 --- /dev/null +++ b/tools/dockerfile/grpc_artifact_protoc/Dockerfile @@ -0,0 +1,63 @@ +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Docker file for building protoc and gRPC protoc plugin artifacts. +# forked from https://github.com/google/protobuf/blob/master/protoc-artifacts/Dockerfile + +FROM centos:6.6 + +RUN yum install -y git \ + tar \ + wget \ + make \ + autoconf \ + curl-devel \ + unzip \ + automake \ + libtool \ + glibc-static.i686 \ + glibc-devel \ + glibc-devel.i686 + +# Install GCC 4.7 to support -static-libstdc++ +RUN wget http://people.centos.org/tru/devtools-1.1/devtools-1.1.repo -P /etc/yum.repos.d +RUN bash -c 'echo "enabled=1" >> /etc/yum.repos.d/devtools-1.1.repo' +RUN bash -c "sed -e 's/\$basearch/i386/g' /etc/yum.repos.d/devtools-1.1.repo > /etc/yum.repos.d/devtools-i386-1.1.repo" +RUN sed -e 's/testing-/testing-i386-/g' -i /etc/yum.repos.d/devtools-i386-1.1.repo + +# We'll get and "Rpmdb checksum is invalid: dCDPT(pkg checksums)" error caused by +# docker issue when using overlay storage driver, but all the stuff we need +# will be installed, so for now we just ignore the error. +# https://github.com/docker/docker/issues/10180 +RUN yum install -y devtoolset-1.1 \ + devtoolset-1.1-libstdc++-devel \ + devtoolset-1.1-libstdc++-devel.i686 || true + +# Start in devtoolset environment that uses GCC 4.7 +CMD ["scl", "enable", "devtoolset-1.1", "bash"] diff --git a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh index dd8ea1ac305a51ff356b64850e211483c77298bb..d56bc0183118c8016ad1845d9c8c1f19a144334f 100755 --- a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh +++ b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh @@ -44,7 +44,7 @@ for dir in $DIRS do for glob in $GLOB do - files="$files `find /local-code/$dir -name $glob -and -not -name *.generated.*`" + files="$files `find /local-code/$dir -name $glob -and -not -name *.generated.* -and -not -name *.pb.h -and -not -name *.pb.c`" done done diff --git a/tools/dockerfile/test/cxx_squeeze_x64/Dockerfile b/tools/dockerfile/test/cxx_squeeze_x64/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..08488874347797e4c666cfb4fa70e9509ca3ff73 --- /dev/null +++ b/tools/dockerfile/test/cxx_squeeze_x64/Dockerfile @@ -0,0 +1,84 @@ +# Copyright 2015-2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +FROM debian:squeeze + +# Install Git and basic packages. +RUN apt-get update && apt-get install -y \ + autoconf \ + autotools-dev \ + build-essential \ + bzip2 \ + ccache \ + curl \ + gcc \ + gcc-multilib \ + git \ + gyp \ + lcov \ + libc6 \ + libc6-dbg \ + libc6-dev \ + libgtest-dev \ + libtool \ + make \ + perl \ + strace \ + python-dev \ + python-setuptools \ + python-yaml \ + telnet \ + unzip \ + wget \ + zip && apt-get clean + +#================ +# Build profiling +RUN apt-get update && apt-get install -y time && apt-get clean + + +# libgflags-dev is not available on squeezy +RUN apt-get update && apt-get -y install libgtest-dev libc++-dev clang && apt-get clean + +RUN apt-get update && apt-get -y install python-pip && apt-get clean +RUN pip install argparse + +# Prepare ccache +RUN ln -s /usr/bin/ccache /usr/local/bin/gcc +RUN ln -s /usr/bin/ccache /usr/local/bin/g++ +RUN ln -s /usr/bin/ccache /usr/local/bin/cc +RUN ln -s /usr/bin/ccache /usr/local/bin/c++ +RUN ln -s /usr/bin/ccache /usr/local/bin/clang +RUN ln -s /usr/bin/ccache /usr/local/bin/clang++ + + +RUN mkdir /var/local/jenkins + +# Define the default command. +CMD ["bash"] diff --git a/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile b/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..c6fe79b42c064aa1cc29be1fde790531fa449b62 --- /dev/null +++ b/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile @@ -0,0 +1,86 @@ +# Copyright 2015-2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +FROM ubuntu:16.04 + +# Install Git and basic packages. +RUN apt-get update && apt-get install -y \ + autoconf \ + autotools-dev \ + build-essential \ + bzip2 \ + ccache \ + curl \ + gcc \ + gcc-multilib \ + git \ + golang \ + gyp \ + lcov \ + libc6 \ + libc6-dbg \ + libc6-dev \ + libgtest-dev \ + libtool \ + make \ + perl \ + strace \ + python-dev \ + python-setuptools \ + python-yaml \ + telnet \ + unzip \ + wget \ + zip && apt-get clean + +#================ +# Build profiling +RUN apt-get update && apt-get install -y time && apt-get clean + +#================= +# C++ dependencies +RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev libc++-dev clang && apt-get clean + +# Prepare ccache +RUN ln -s /usr/bin/ccache /usr/local/bin/gcc +RUN ln -s /usr/bin/ccache /usr/local/bin/g++ +RUN ln -s /usr/bin/ccache /usr/local/bin/cc +RUN ln -s /usr/bin/ccache /usr/local/bin/c++ +RUN ln -s /usr/bin/ccache /usr/local/bin/clang +RUN ln -s /usr/bin/ccache /usr/local/bin/clang++ + +#====================== +# Zookeeper dependencies +# TODO(jtattermusch): is zookeeper still needed? +RUN apt-get install -y libzookeeper-mt-dev + +RUN mkdir /var/local/jenkins + +# Define the default command. +CMD ["bash"] diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index a2b83ec7117cdf9e6a7dc651d08a5d606a6b4f86..b0a1561df99e5a403b1e928b35a7b082266e9f9c 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -773,20 +773,6 @@ include/grpc/compression.h \ include/grpc/grpc.h \ include/grpc/status.h \ include/grpc/census.h \ -src/core/security/auth_filters.h \ -src/core/security/base64.h \ -src/core/security/credentials.h \ -src/core/security/handshake.h \ -src/core/security/json_token.h \ -src/core/security/jwt_verifier.h \ -src/core/security/secure_endpoint.h \ -src/core/security/security_connector.h \ -src/core/security/security_context.h \ -src/core/tsi/fake_transport_security.h \ -src/core/tsi/ssl_transport_security.h \ -src/core/tsi/ssl_types.h \ -src/core/tsi/transport_security.h \ -src/core/tsi/transport_security_interface.h \ src/core/census/grpc_filter.h \ src/core/channel/channel_args.h \ src/core/channel/channel_stack.h \ @@ -801,6 +787,7 @@ src/core/channel/subchannel_call_holder.h \ src/core/client_config/client_config.h \ src/core/client_config/connector.h \ src/core/client_config/initial_connect_string.h \ +src/core/client_config/lb_policies/load_balancer_api.h \ src/core/client_config/lb_policies/pick_first.h \ src/core/client_config/lb_policies/round_robin.h \ src/core/client_config/lb_policy.h \ @@ -861,6 +848,7 @@ src/core/json/json.h \ src/core/json/json_common.h \ src/core/json/json_reader.h \ src/core/json/json_writer.h \ +src/core/proto/grpc/lb/v0/load_balancer.pb.h \ src/core/statistics/census_interface.h \ src/core/statistics/census_rpc_stats.h \ src/core/surface/api_trace.h \ @@ -900,30 +888,27 @@ src/core/transport/metadata_batch.h \ src/core/transport/static_metadata.h \ src/core/transport/transport.h \ src/core/transport/transport_impl.h \ +src/core/security/auth_filters.h \ +src/core/security/base64.h \ +src/core/security/credentials.h \ +src/core/security/handshake.h \ +src/core/security/json_token.h \ +src/core/security/jwt_verifier.h \ +src/core/security/secure_endpoint.h \ +src/core/security/security_connector.h \ +src/core/security/security_context.h \ +src/core/tsi/fake_transport_security.h \ +src/core/tsi/ssl_transport_security.h \ +src/core/tsi/ssl_types.h \ +src/core/tsi/transport_security.h \ +src/core/tsi/transport_security_interface.h \ src/core/census/aggregation.h \ -src/core/census/log.h \ +src/core/census/mlog.h \ src/core/census/rpc_metric_id.h \ -src/core/httpcli/httpcli_security_connector.c \ -src/core/security/base64.c \ -src/core/security/client_auth_filter.c \ -src/core/security/credentials.c \ -src/core/security/credentials_metadata.c \ -src/core/security/credentials_posix.c \ -src/core/security/credentials_win32.c \ -src/core/security/google_default_credentials.c \ -src/core/security/handshake.c \ -src/core/security/json_token.c \ -src/core/security/jwt_verifier.c \ -src/core/security/secure_endpoint.c \ -src/core/security/security_connector.c \ -src/core/security/security_context.c \ -src/core/security/server_auth_filter.c \ -src/core/security/server_secure_chttp2.c \ -src/core/surface/init_secure.c \ -src/core/surface/secure_channel_create.c \ -src/core/tsi/fake_transport_security.c \ -src/core/tsi/ssl_transport_security.c \ -src/core/tsi/transport_security.c \ +third_party/nanopb/pb.h \ +third_party/nanopb/pb_common.h \ +third_party/nanopb/pb_decode.h \ +third_party/nanopb/pb_encode.h \ src/core/census/grpc_context.c \ src/core/census/grpc_filter.c \ src/core/channel/channel_args.c \ @@ -939,6 +924,7 @@ src/core/client_config/client_config.c \ src/core/client_config/connector.c \ src/core/client_config/default_initial_connect_string.c \ src/core/client_config/initial_connect_string.c \ +src/core/client_config/lb_policies/load_balancer_api.c \ src/core/client_config/lb_policies/pick_first.c \ src/core/client_config/lb_policies/round_robin.c \ src/core/client_config/lb_policy.c \ @@ -1003,6 +989,7 @@ src/core/json/json.c \ src/core/json/json_reader.c \ src/core/json/json_string.c \ src/core/json/json_writer.c \ +src/core/proto/grpc/lb/v0/load_balancer.pb.c \ src/core/surface/alarm.c \ src/core/surface/api_trace.c \ src/core/surface/byte_buffer.c \ @@ -1052,12 +1039,36 @@ src/core/transport/metadata_batch.c \ src/core/transport/static_metadata.c \ src/core/transport/transport.c \ src/core/transport/transport_op_string.c \ +src/core/httpcli/httpcli_security_connector.c \ +src/core/security/base64.c \ +src/core/security/client_auth_filter.c \ +src/core/security/credentials.c \ +src/core/security/credentials_metadata.c \ +src/core/security/credentials_posix.c \ +src/core/security/credentials_win32.c \ +src/core/security/google_default_credentials.c \ +src/core/security/handshake.c \ +src/core/security/json_token.c \ +src/core/security/jwt_verifier.c \ +src/core/security/secure_endpoint.c \ +src/core/security/security_connector.c \ +src/core/security/security_context.c \ +src/core/security/server_auth_filter.c \ +src/core/security/server_secure_chttp2.c \ +src/core/surface/init_secure.c \ +src/core/surface/secure_channel_create.c \ +src/core/tsi/fake_transport_security.c \ +src/core/tsi/ssl_transport_security.c \ +src/core/tsi/transport_security.c \ src/core/census/context.c \ src/core/census/initialize.c \ -src/core/census/log.c \ +src/core/census/mlog.c \ src/core/census/operation.c \ src/core/census/placeholders.c \ src/core/census/tracing.c \ +third_party/nanopb/pb_common.c \ +third_party/nanopb/pb_decode.c \ +third_party/nanopb/pb_encode.c \ include/grpc/support/alloc.h \ include/grpc/support/atm.h \ include/grpc/support/atm_gcc_atomic.h \ diff --git a/tools/jenkins/build_docker_and_run_tests.sh b/tools/jenkins/build_docker_and_run_tests.sh index e2ac7518f09992e9088852df21ca8cfe92d8fe75..458e8ca0c70b0dfa9e3f4d77e58d22b923e1e2e9 100755 --- a/tools/jenkins/build_docker_and_run_tests.sh +++ b/tools/jenkins/build_docker_and_run_tests.sh @@ -60,6 +60,9 @@ docker build -t $DOCKER_IMAGE_NAME $DOCKERFILE_DIR # Choose random name for docker container CONTAINER_NAME="run_tests_$(uuidgen)" +# Git root as seen by the docker instance +docker_instance_git_root=/var/local/jenkins/grpc + # Run tests inside docker docker run \ -e "RUN_TESTS_COMMAND=$RUN_TESTS_COMMAND" \ @@ -69,9 +72,10 @@ docker run \ -e XDG_CACHE_HOME=/tmp/xdg-cache-home \ -e THIS_IS_REALLY_NEEDED='see https://github.com/docker/docker/issues/14203 for why docker is awful' \ -e HOST_GIT_ROOT=$git_root \ + -e LOCAL_GIT_ROOT=$docker_instance_git_root \ -e "BUILD_ID=$BUILD_ID" \ -i $TTY_FLAG \ - -v "$git_root:/var/local/jenkins/grpc" \ + -v "$git_root:$docker_instance_git_root" \ -v /tmp/ccache:/tmp/ccache \ -v /tmp/npm-cache:/tmp/npm-cache \ -v /tmp/xdg-cache-home:/tmp/xdg-cache-home \ @@ -82,11 +86,6 @@ docker run \ $DOCKER_IMAGE_NAME \ bash -l "/var/local/jenkins/grpc/$DOCKER_RUN_SCRIPT" || DOCKER_FAILED="true" -if [ "$XML_REPORT" != "" ] -then - docker cp "$CONTAINER_NAME:/var/local/git/grpc/$XML_REPORT" $git_root || true -fi - docker cp "$CONTAINER_NAME:/var/local/git/grpc/reports.zip" $git_root || true unzip -o $git_root/reports.zip -d $git_root || true rm -f reports.zip diff --git a/tools/jenkins/docker_run_tests.sh b/tools/jenkins/docker_run_tests.sh index 282b85735110284599540571f81b17607e9b48ca..2e40f8fd65a79911246fb18800d448cef20c1b38 100755 --- a/tools/jenkins/docker_run_tests.sh +++ b/tools/jenkins/docker_run_tests.sh @@ -60,5 +60,6 @@ echo '</body></html>' >> index.html cd .. zip -r reports.zip reports +find . -name reports.xml | xargs zip reports.zip exit $exit_code diff --git a/tools/jenkins/run_performance.sh b/tools/jenkins/run_performance.sh index d7e73d4272b61784d6dac14b74d4ec87d1040559..fbc078330f72daf57a7e4e301488972ed4cfb0c4 100755 --- a/tools/jenkins/run_performance.sh +++ b/tools/jenkins/run_performance.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2015, Google Inc. +# Copyright 2015-2016, Google Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -47,9 +47,90 @@ PID1=$! bins/$config/qps_worker -driver_port 10010 & PID2=$! +# +# Put a timeout on these tests +# +((sleep 900; kill $$ && killall qps_worker && rm -f /tmp/qps-test.$$ )&) + export QPS_WORKERS="localhost:10000,localhost:10010" -bins/$config/qps_driver +# big is the size in bytes of large messages (0 is the size otherwise) +big=65536 + +# wide is the number of client channels in multi-channel tests (1 otherwise) +wide=64 + +# deep is the number of RPCs outstanding on a channel in non-ping-pong tests +# (the value used is 1 otherwise) +deep=100 + +# +# Get total core count +cores=`grep -c ^processor /proc/cpuinfo` +halfcores=`expr $cores / 2` + +for secure in true false; do + # Scenario 1: generic async streaming ping-pong (contentionless latency) + bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \ + --server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=1 \ + --client_channels=1 --bbuf_req_size=0 --bbuf_resp_size=0 \ + --async_client_threads=1 --async_server_threads=1 --secure_test=$secure \ + --num_servers=1 --num_clients=1 \ + --server_core_limit=$halfcores --client_core_limit=0 + + # Scenario 2: generic async streaming "unconstrained" (QPS) + bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \ + --server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \ + --client_channels=$wide --bbuf_req_size=0 --bbuf_resp_size=0 \ + --async_client_threads=0 --async_server_threads=0 --secure_test=$secure \ + --num_servers=1 --num_clients=0 \ + --server_core_limit=$halfcores --client_core_limit=0 |& tee /tmp/qps-test.$$ + + # Scenario 2b: QPS with a single server core + bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \ + --server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \ + --client_channels=$wide --bbuf_req_size=0 --bbuf_resp_size=0 \ + --async_client_threads=0 --async_server_threads=0 --secure_test=$secure \ + --num_servers=1 --num_clients=0 --server_core_limit=1 --client_core_limit=0 + + # Scenario 2c: protobuf-based QPS + bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \ + --server_type=ASYNC_SERVER --outstanding_rpcs_per_channel=$deep \ + --client_channels=$wide --simple_req_size=0 --simple_resp_size=0 \ + --async_client_threads=0 --async_server_threads=0 --secure_test=$secure \ + --num_servers=1 --num_clients=0 \ + --server_core_limit=$halfcores --client_core_limit=0 + + # Scenario 3: Latency at sub-peak load (all clients equally loaded) + for loadfactor in 0.7; do + bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \ + --server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \ + --client_channels=$wide --bbuf_req_size=0 --bbuf_resp_size=0 \ + --async_client_threads=0 --async_server_threads=0 --secure_test=$secure \ + --num_servers=1 --num_clients=0 --poisson_load=`awk -v lf=$loadfactor \ + '$5 == "QPS:" {print int(lf * $6); exit}' /tmp/qps-test.$$` \ + --server_core_limit=$halfcores --client_core_limit=0 + done + + rm /tmp/qps-test.$$ + + # Scenario 4: Single-channel bidirectional throughput test (like TCP_STREAM). + bins/$config/qps_driver --rpc_type=STREAMING --client_type=ASYNC_CLIENT \ + --server_type=ASYNC_GENERIC_SERVER --outstanding_rpcs_per_channel=$deep \ + --client_channels=1 --bbuf_req_size=$big --bbuf_resp_size=$big \ + --async_client_threads=1 --async_server_threads=1 --secure_test=$secure \ + --num_servers=1 --num_clients=1 \ + --server_core_limit=$halfcores --client_core_limit=0 + + # Scenario 5: Sync unary ping-pong with protobufs + bins/$config/qps_driver --rpc_type=UNARY --client_type=SYNC_CLIENT \ + --server_type=SYNC_SERVER --outstanding_rpcs_per_channel=1 \ + --client_channels=1 --simple_req_size=0 --simple_resp_size=0 \ + --secure_test=$secure --num_servers=1 --num_clients=1 \ + --server_core_limit=$halfcores --client_core_limit=0 + +done + +bins/$config/qps_driver --quit=true -kill -2 $PID1 $PID2 wait diff --git a/tools/run_tests/artifact_targets.py b/tools/run_tests/artifact_targets.py index 9cd02c5e432e0a517e74478f5c2f49c7588c620c..803d3d106b21532521712c393b76854c49466c45 100644 --- a/tools/run_tests/artifact_targets.py +++ b/tools/run_tests/artifact_targets.py @@ -79,6 +79,17 @@ def macos_arch_env(arch): raise Exception('Unsupported arch') return {'CFLAGS': arch_arg, 'LDFLAGS': arch_arg} +_MACOS_COMPAT_FLAG = '-mmacosx-version-min=10.7' + +_ARCH_FLAG_MAP = { + 'x86': '-m32', + 'x64': '-m64' +} + +python_version_arch_map = { + 'x86': 'Python27_32bits', + 'x64': 'Python27' +} class PythonArtifact: """Builds Python artifacts.""" @@ -88,27 +99,31 @@ class PythonArtifact: self.platform = platform self.arch = arch self.labels = ['artifact', 'python', platform, arch] + self.python_version = python_version_arch_map[arch] def pre_build_jobspecs(self): return [] def build_jobspec(self): - if self.platform == 'windows': - raise Exception('Not supported yet.') + environ = {} + if self.platform == 'linux': + if self.arch == 'x86': + environ['SETARCH_CMD'] = 'linux32' + return create_docker_jobspec(self.name, + 'tools/dockerfile/grpc_artifact_linux_%s' % self.arch, + 'tools/run_tests/build_artifact_python.sh', + environ=environ) + elif self.platform == 'windows': + return create_jobspec(self.name, + ['tools\\run_tests\\build_artifact_python.bat', + self.python_version + ], + shell=True) else: - environ = {} - if self.platform == 'linux': - if self.arch == 'x86': - environ['SETARCH_CMD'] = 'linux32' - return create_docker_jobspec(self.name, - 'tools/dockerfile/grpc_artifact_linux_%s' % self.arch, - 'tools/run_tests/build_artifact_python.sh', - environ=environ) - else: - environ['SKIP_PIP_INSTALL'] = 'TRUE' - return create_jobspec(self.name, - ['tools/run_tests/build_artifact_python.sh'], - environ=environ) + environ['SKIP_PIP_INSTALL'] = 'TRUE' + return create_jobspec(self.name, + ['tools/run_tests/build_artifact_python.sh'], + environ=environ) def __str__(self): return self.name @@ -190,6 +205,7 @@ class CSharpExtArtifact: def __str__(self): return self.name + node_gyp_arch_map = { 'x86': 'ia32', 'x64': 'x64' @@ -225,16 +241,81 @@ class NodeExtArtifact: ['tools/run_tests/build_artifact_node.sh', self.gyp_arch]) +class PHPArtifact: + """Builds PHP PECL package""" + + def __init__(self, platform, arch): + self.name = 'php_pecl_package_{0}_{1}'.format(platform, arch) + self.platform = platform + self.arch = arch + self.labels = ['artifact', 'php', platform, arch] + + def pre_build_jobspecs(self): + return [] + + def build_jobspec(self): + return create_docker_jobspec( + self.name, + 'tools/dockerfile/grpc_artifact_linux_{}'.format(self.arch), + 'tools/run_tests/build_artifact_php.sh') + +class ProtocArtifact: + """Builds protoc and protoc-plugin artifacts""" + + def __init__(self, platform, arch): + self.name = 'protoc_%s_%s' % (platform, arch) + self.platform = platform + self.arch = arch + self.labels = ['artifact', 'protoc', platform, arch] + + def pre_build_jobspecs(self): + return [] + + def build_jobspec(self): + if self.platform != 'windows': + cxxflags = '-DNDEBUG %s' % _ARCH_FLAG_MAP[self.arch] + ldflags = '%s' % _ARCH_FLAG_MAP[self.arch] + if self.platform != 'macos': + ldflags += ' -static-libgcc -static-libstdc++ -s' + environ={'CONFIG': 'opt', + 'CXXFLAGS': cxxflags, + 'LDFLAGS': ldflags, + 'PROTOBUF_LDFLAGS_EXTRA': ldflags} + if self.platform == 'linux': + return create_docker_jobspec(self.name, + 'tools/dockerfile/grpc_artifact_protoc', + 'tools/run_tests/build_artifact_protoc.sh', + environ=environ) + else: + environ['CXXFLAGS'] += ' -std=c++11 -stdlib=libc++ %s' % _MACOS_COMPAT_FLAG + return create_jobspec(self.name, + ['tools/run_tests/build_artifact_protoc.sh'], + environ=environ) + else: + generator = 'Visual Studio 12 Win64' if self.arch == 'x64' else 'Visual Studio 12' + vcplatform = 'x64' if self.arch == 'x64' else 'Win32' + return create_jobspec(self.name, + ['tools\\run_tests\\build_artifact_protoc.bat'], + environ={'generator': generator, + 'Platform': vcplatform}) + + def __str__(self): + return self.name + def targets(): """Gets list of supported targets""" return ([Cls(platform, arch) - for Cls in (CSharpExtArtifact, NodeExtArtifact) + for Cls in (CSharpExtArtifact, NodeExtArtifact, ProtocArtifact) for platform in ('linux', 'macos', 'windows') for arch in ('x86', 'x64')] + [PythonArtifact('linux', 'x86'), PythonArtifact('linux', 'x64'), PythonArtifact('macos', 'x64'), + PythonArtifact('windows', 'x86'), + PythonArtifact('windows', 'x64'), RubyArtifact('linux', 'x86'), RubyArtifact('linux', 'x64'), - RubyArtifact('macos', 'x64')]) + RubyArtifact('macos', 'x64'), + PHPArtifact('linux', 'x64'), + PHPArtifact('macos', 'x64')]) diff --git a/tools/run_tests/build_artifact_php.sh b/tools/run_tests/build_artifact_php.sh new file mode 100755 index 0000000000000000000000000000000000000000..50bf0ea82159b15ee6f5b691dac0ddcf4147d8f5 --- /dev/null +++ b/tools/run_tests/build_artifact_php.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PHP_TARGET_ARCH=$1 +set -ex + +cd $(dirname $0)/../.. + +mkdir -p artifacts + +pear package + +cp -r grpc-*.tgz artifacts/grpc-php.tgz diff --git a/tools/run_tests/build_artifact_protoc.bat b/tools/run_tests/build_artifact_protoc.bat new file mode 100644 index 0000000000000000000000000000000000000000..e1dc032188f130e2cf3fee718ed511df69b73802 --- /dev/null +++ b/tools/run_tests/build_artifact_protoc.bat @@ -0,0 +1,51 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +mkdir artifacts + +setlocal +cd third_party/protobuf + +powershell -Command "Invoke-WebRequest https://googlemock.googlecode.com/files/gmock-1.7.0.zip -OutFile gmock.zip" +powershell -Command "Add-Type -Assembly 'System.IO.Compression.FileSystem'; [System.IO.Compression.ZipFile]::ExtractToDirectory('gmock.zip', '.');" +rename gmock-1.7.0 gmock + +cd cmake +cmake -G "%generator%" || goto :error +endlocal + +call vsprojects/build_plugins.bat || goto :error + +xcopy /Y third_party\protobuf\cmake\Release\protoc.exe artifacts\ || goto :error +xcopy /Y vsprojects\Release\*_plugin.exe artifacts\ || xcopy /Y vsprojects\x64\Release\*_plugin.exe artifacts\ || goto :error + +goto :EOF + +:error +exit /b 1 \ No newline at end of file diff --git a/tools/run_tests/build_artifact_protoc.sh b/tools/run_tests/build_artifact_protoc.sh new file mode 100755 index 0000000000000000000000000000000000000000..161d3a84d6edd81e8aaea1aac055ca381d81f0b3 --- /dev/null +++ b/tools/run_tests/build_artifact_protoc.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Use devtoolset environment that has GCC 4.7 before set -ex +source scl_source enable devtoolset-1.1 + +set -ex + +cd $(dirname $0)/../.. + +make plugins + +mkdir -p artifacts +cp bins/opt/protobuf/protoc bins/opt/*_plugin artifacts/ diff --git a/tools/run_tests/build_artifact_python.bat b/tools/run_tests/build_artifact_python.bat new file mode 100644 index 0000000000000000000000000000000000000000..023d394549425f65f33811f09a1db6f336c90bc6 --- /dev/null +++ b/tools/run_tests/build_artifact_python.bat @@ -0,0 +1,61 @@ +@rem Copyright 2016, Google Inc. +@rem All rights reserved. +@rem +@rem Redistribution and use in source and binary forms, with or without +@rem modification, are permitted provided that the following conditions are +@rem met: +@rem +@rem * Redistributions of source code must retain the above copyright +@rem notice, this list of conditions and the following disclaimer. +@rem * Redistributions in binary form must reproduce the above +@rem copyright notice, this list of conditions and the following disclaimer +@rem in the documentation and/or other materials provided with the +@rem distribution. +@rem * Neither the name of Google Inc. nor the names of its +@rem contributors may be used to endorse or promote products derived from +@rem this software without specific prior written permission. +@rem +@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +set NUGET=C:\nuget\nuget.exe +%NUGET% restore vsprojects\grpc.sln || goto :error + + +@call vsprojects\build_vs2013.bat vsprojects\grpc.sln /t:grpc_dll /p:Configuration=Release /p:PlatformToolset=v120 /p:Platform=Win32 || goto :error +@call vsprojects\build_vs2013.bat vsprojects\grpc.sln /t:grpc_dll /p:Configuration=Release /p:PlatformToolset=v120 /p:Platform=x64 || goto :error + +mkdir src\python\grpcio\grpc\_cython\_windows + +copy /Y vsprojects\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\grpc_c.32.python || goto :error +copy /Y vsprojects\x64\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\grpc_c.64.python || goto :error + + +set PATH=C:\%1;C:\%1\scripts;%PATH% + +pip install --upgrade six +pip install --upgrade setuptools +pip install -rrequirements.txt + +set GRPC_PYTHON_USE_CUSTOM_BDIST=0 +set GRPC_PYTHON_BUILD_WITH_CYTHON=1 + +python setup.py bdist_wheel + +mkdir artifacts +xcopy /Y /I /S dist\* artifacts\ || goto :error + +goto :EOF + +:error +exit /b 1 diff --git a/tools/run_tests/build_package_php.sh b/tools/run_tests/build_package_php.sh new file mode 100755 index 0000000000000000000000000000000000000000..56e3319ed9b9b56da0f3d552fc9609a238d8a72b --- /dev/null +++ b/tools/run_tests/build_package_php.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -ex + +cd $(dirname $0)/../.. + +mkdir -p artifacts/ +cp -r $EXTERNAL_GIT_ROOT/architecture={x86,x64},language=php,platform={windows,linux,macos}/artifacts/* artifacts/ || true diff --git a/tools/run_tests/configs.json b/tools/run_tests/configs.json index 9d7b8a3c7253c47329ea02d8139ea8299fc0e367..cbb8ec57b6170579e303e3a82d657902c369c302 100644 --- a/tools/run_tests/configs.json +++ b/tools/run_tests/configs.json @@ -18,7 +18,7 @@ "environ": { "ASAN_OPTIONS": "detect_leaks=0:color=always" }, - "timeout_multiplier": 1.5 + "timeout_multiplier": 3 }, { "config": "ubsan", @@ -48,18 +48,18 @@ "ASAN_OPTIONS": "detect_leaks=1:color=always", "LSAN_OPTIONS": "suppressions=tools/lsan_suppressions.txt:report_objects=1" }, - "timeout_multiplier": 1.5 + "timeout_multiplier": 3 }, { "config": "tsan", "environ": { "TSAN_OPTIONS": "suppressions=tools/tsan_suppressions.txt:halt_on_error=1:second_deadlock_stack=1" }, - "timeout_multiplier": 2 + "timeout_multiplier": 5 }, { "config": "msan", - "timeout_multiplier": 2 + "timeout_multiplier": 4 }, { "config": "mutrace" diff --git a/tools/run_tests/distribtest_targets.py b/tools/run_tests/distribtest_targets.py index 261f44bc6d991f50b029f326222ccbd5babf393e..0c02344d90d6e038bbaa404394f21209f98b9a09 100644 --- a/tools/run_tests/distribtest_targets.py +++ b/tools/run_tests/distribtest_targets.py @@ -198,6 +198,33 @@ class RubyDistribTest(object): return self.name +class PHPDistribTest(object): + """Tests PHP package""" + + def __init__(self, platform, arch, docker_suffix): + self.name = 'php_%s_%s_%s' % (platform, arch, docker_suffix) + self.platform = platform + self.arch = arch + self.docker_suffix = docker_suffix + self.labels = ['distribtest', 'php', platform, arch, docker_suffix] + + def pre_build_jobspecs(self): + return [] + + def build_jobspec(self): + if not self.platform == 'linux': + raise Exception("Not supported yet.") + + return create_docker_jobspec(self.name, + 'tools/dockerfile/distribtest/php_%s_%s' % ( + self.docker_suffix, + self.arch), + 'test/distrib/php/run_distrib_test.sh') + + def __str__(self): + return self.name + + def targets(): """Gets list of supported targets""" return [CSharpDistribTest('linux', 'x64', 'wheezy'), @@ -241,7 +268,9 @@ def targets(): RubyDistribTest('linux', 'x64', 'ubuntu1510'), RubyDistribTest('linux', 'x64', 'ubuntu1604'), NodeDistribTest('macos', 'x64', None, '4'), - NodeDistribTest('linux', 'x86', 'jessie', '4') + NodeDistribTest('macos', 'x64', None, '5'), + NodeDistribTest('linux', 'x86', 'jessie', '4'), + PHPDistribTest('linux', 'x64', 'jessie'), ] + [ NodeDistribTest('linux', 'x64', os, version) for os in ('wheezy', 'jessie', 'ubuntu1204', 'ubuntu1404', diff --git a/tools/run_tests/package_targets.py b/tools/run_tests/package_targets.py index 4ca8279f1bfa529783b2b2463e582cec7978c7dc..87bc4865ce34e5f8962f1b28e357c750e6351ac2 100644 --- a/tools/run_tests/package_targets.py +++ b/tools/run_tests/package_targets.py @@ -139,9 +139,27 @@ class PythonPackage: 'tools/run_tests/build_package_python.sh') +class PHPPackage: + """Copy PHP PECL package artifact""" + + def __init__(self): + self.name = 'php_package' + self.labels = ['package', 'php', 'linux'] + + def pre_build_jobspecs(self): + return [] + + def build_jobspec(self): + return create_docker_jobspec( + self.name, + 'tools/dockerfile/grpc_artifact_linux_x64', + 'tools/run_tests/build_package_php.sh') + + def targets(): """Gets list of supported targets""" return [CSharpPackage(), NodePackage(), RubyPackage(), - PythonPackage()] + PythonPackage(), + PHPPackage()] diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 76be932aeff47b9be1ca993045bfe870f740d4d8..df3ab90a839fad5e10d73847a2f12c3951841809 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -422,7 +422,7 @@ def _job_kill_handler(job): time.sleep(2) -def cloud_to_prod_jobspec(language, test_case, server_host_name, +def cloud_to_prod_jobspec(language, test_case, server_host_name, server_host_detail, docker_image=None, auth=False): """Creates jobspec for cloud-to-prod interop test""" container_name = None @@ -441,7 +441,7 @@ def cloud_to_prod_jobspec(language, test_case, server_host_name, cwd = language.client_cwd if docker_image: - container_name = dockerjob.random_name('interop_client_%s' % + container_name = dockerjob.random_name('interop_client_%s' % language.safename) cmdline = docker_run_cmdline(cmdline, image=docker_image, @@ -457,7 +457,7 @@ def cloud_to_prod_jobspec(language, test_case, server_host_name, cmdline=cmdline, cwd=cwd, environ=environ, - shortname='%s:%s:%s:%s' % (suite_name, server_host_name, language, + shortname='%s:%s:%s:%s' % (suite_name, server_host_name, language, test_case), timeout_seconds=90, flake_retries=5 if args.allow_flakes else 0, @@ -575,18 +575,18 @@ def aggregate_http2_results(stdout): 'percent': 1.0 * passed / (passed + failed) } -# A dictionary of prod servers to test. +# A dictionary of prod servers to test. # Format: server_name: (server_host, server_host_override, errors_allowed) # TODO(adelez): implement logic for errors_allowed where if the indicated tests # fail, they don't impact the overall test result. prod_servers = { - 'default': ('grpc-test.sandbox.googleapis.com', + 'default': ('grpc-test.sandbox.googleapis.com', 'grpc-test.sandbox.googleapis.com', False), - 'gateway_v2': ('grpc-test2.sandbox.googleapis.com', + 'gateway_v2': ('grpc-test2.sandbox.googleapis.com', 'grpc-test2.sandbox.googleapis.com', True), - 'cloud_gateway': ('216.239.32.255', 'grpc-test.sandbox.googleapis.com', + 'cloud_gateway': ('216.239.32.255', 'grpc-test.sandbox.googleapis.com', False), - 'cloud_gateway_v2': ('216.239.32.255', 'grpc-test2.sandbox.googleapis.com', + 'cloud_gateway_v2': ('216.239.32.255', 'grpc-test2.sandbox.googleapis.com', True) } @@ -720,7 +720,7 @@ try: if not test_case in language.unimplemented_test_cases(): if not test_case in _SKIP_ADVANCED + _SKIP_COMPRESSION: test_job = cloud_to_prod_jobspec( - language, test_case, server_host_name, + language, test_case, server_host_name, prod_servers[server_host_name], docker_image=docker_images.get(str(language))) jobs.append(test_job) @@ -728,7 +728,7 @@ try: if args.http2_interop: for test_case in _HTTP2_TEST_CASES: test_job = cloud_to_prod_jobspec( - http2Interop, test_case, server_host_name, + http2Interop, test_case, server_host_name, prod_servers[server_host_name], docker_image=docker_images.get(str(http2Interop))) jobs.append(test_job) @@ -739,7 +739,7 @@ try: for test_case in _AUTH_TEST_CASES: if not test_case in language.unimplemented_test_cases(): test_job = cloud_to_prod_jobspec( - language, test_case, server_host_name, + language, test_case, server_host_name, prod_servers[server_host_name], docker_image=docker_images.get(str(language)), auth=True) jobs.append(test_job) @@ -802,7 +802,7 @@ try: report_utils.render_interop_html_report( set([str(l) for l in languages]), servers, _TEST_CASES, _AUTH_TEST_CASES, _HTTP2_TEST_CASES, resultset, num_failures, - args.cloud_to_prod_auth or args.cloud_to_prod, args.prod_servers, + args.cloud_to_prod_auth or args.cloud_to_prod, args.prod_servers, args.http2_interop) finally: diff --git a/tools/run_tests/run_node.bat b/tools/run_tests/run_node.bat index f5cf01f0959844c06041468eeb57d3934fe9e7fe..ad9ca14b8b9d5474331bc34f95a6a0e51eb04c1c 100644 --- a/tools/run_tests/run_node.bat +++ b/tools/run_tests/run_node.bat @@ -29,4 +29,4 @@ set JUNIT_REPORT_PATH=src\node\reports.xml set JUNIT_REPORT_STACK=1 -.\node_modules\.bin\mocha.cmd --reporter mocha-jenkins-reporter src\node\test \ No newline at end of file +.\node_modules\.bin\mocha.cmd --reporter mocha-jenkins-reporter --timeout 8000 src\node\test \ No newline at end of file diff --git a/tools/run_tests/run_node.sh b/tools/run_tests/run_node.sh index 40f61d77cc9bec232d2a5337ca4d0bdddb9de107..178584ae8ed59f035b92b409de1a9101fbf53fbc 100755 --- a/tools/run_tests/run_node.sh +++ b/tools/run_tests/run_node.sh @@ -41,10 +41,13 @@ cd $(dirname $0)/../.. root=`pwd` +test_directory='src/node/test' +timeout=8000 + if [ "$CONFIG" = "gcov" ] then ./node_modules/.bin/istanbul cover --dir reports/node_coverage \ - -x **/interop/* ./node_modules/.bin/_mocha -- --timeout 8000 src/node/test + -x **/interop/* ./node_modules/.bin/_mocha -- --timeout $timeout $test_directory cd build gcov Release/obj.target/grpc/ext/*.o lcov --base-directory . --directory . -c -o coverage.info @@ -55,5 +58,7 @@ then echo '<html><head><meta http-equiv="refresh" content="0;URL=lcov-report/index.html"></head></html>' > \ ../reports/node_coverage/index.html else - JUNIT_REPORT_PATH=src/node/reports.xml JUNIT_REPORT_STACK=1 ./node_modules/.bin/mocha --reporter mocha-jenkins-reporter src/node/test + JUNIT_REPORT_PATH=src/node/reports.xml JUNIT_REPORT_STACK=1 \ + ./node_modules/.bin/mocha --timeout $timeout \ + --reporter mocha-jenkins-reporter $test_directory fi diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index de3716bc887e743c2fa42cbb751ee3c18a21e3f2..7b2bc537162a1d0bee7110a12b4112bd2c85a108 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -55,8 +55,8 @@ import report_utils import watch_dirs -ROOT = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..')) -os.chdir(ROOT) +_ROOT = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..')) +os.chdir(_ROOT) _FORCE_ENVIRON_FOR_WRAPPERS = {} @@ -118,6 +118,16 @@ def get_c_tests(travis, test_lang) : not (travis and tgt['flaky'])] +def _check_compiler(compiler, supported_compilers): + if compiler not in supported_compilers: + raise Exception('Compiler %s not supported.' % compiler) + + +def _is_use_docker_child(): + """Returns True if running running as a --use_docker child.""" + return True if os.getenv('RUN_TESTS_COMMAND') else False + + class CLanguage(object): def __init__(self, make_target, test_lang): @@ -125,44 +135,55 @@ class CLanguage(object): self.platform = platform_string() self.test_lang = test_lang - def test_specs(self, config, args): + def configure(self, config, args): + self.config = config + self.args = args + if self.platform == 'windows': + self._make_options = [_windows_toolset_option(self.args.compiler), + _windows_arch_option(self.args.arch)] + else: + self._make_options = [] + self._docker_distro = self._get_docker_distro(self.args.use_docker, + self.args.compiler) + + def test_specs(self): out = [] - binaries = get_c_tests(args.travis, self.test_lang) + binaries = get_c_tests(self.args.travis, self.test_lang) for target in binaries: - if config.build_config in target['exclude_configs']: + if self.config.build_config in target['exclude_configs']: continue if self.platform == 'windows': binary = 'vsprojects/%s%s/%s.exe' % ( - 'x64/' if args.arch == 'x64' else '', - _WINDOWS_CONFIG[config.build_config], + 'x64/' if self.args.arch == 'x64' else '', + _MSBUILD_CONFIG[self.config.build_config], target['name']) else: - binary = 'bins/%s/%s' % (config.build_config, target['name']) + binary = 'bins/%s/%s' % (self.config.build_config, target['name']) if os.path.isfile(binary): cmdline = [binary] + target['args'] - out.append(config.job_spec(cmdline, [binary], - shortname=' '.join(cmdline), - cpu_cost=target['cpu_cost'], - environ={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH': - os.path.abspath(os.path.dirname( - sys.argv[0]) + '/../../src/core/tsi/test_creds/ca.pem')})) - elif args.regex == '.*' or platform_string() == 'windows': + out.append(self.config.job_spec(cmdline, [binary], + shortname=' '.join(cmdline), + cpu_cost=target['cpu_cost'], + environ={'GRPC_DEFAULT_SSL_ROOTS_FILE_PATH': + _ROOT + '/src/core/tsi/test_creds/ca.pem'})) + elif self.args.regex == '.*' or self.platform == 'windows': print '\nWARNING: binary not found, skipping', binary return sorted(out) - def make_targets(self, test_regex): - if platform_string() != 'windows' and test_regex != '.*': + def make_targets(self): + test_regex = self.args.regex + if self.platform != 'windows' and self.args.regex != '.*': # use the regex to minimize the number of things to build return [os.path.basename(target['name']) for target in get_c_tests(False, self.test_lang) if re.search(test_regex, '/' + target['name'])] - if platform_string() == 'windows': + if self.platform == 'windows': # don't build tools on windows just yet return ['buildtests_%s' % self.make_target] return ['buildtests_%s' % self.make_target, 'tools_%s' % self.make_target] def make_options(self): - return [] + return self._make_options; def pre_build_steps(self): if self.platform == 'windows': @@ -182,11 +203,24 @@ class CLanguage(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return True + def _get_docker_distro(self, use_docker, compiler): + if _is_use_docker_child(): + return "already_under_docker" + if not use_docker: + _check_compiler(compiler, ['default']) + + if compiler == 'gcc4.9' or compiler == 'default': + return 'jessie' + elif compiler == 'gcc4.4': + return 'squeeze' + elif compiler == 'gcc5.3': + return 'ubuntu1604' + else: + raise Exception('Compiler %s not supported.' % compiler) - def dockerfile_dir(self, config, arch): - return 'tools/dockerfile/test/cxx_jessie_%s' % _docker_arch_suffix(arch) + def dockerfile_dir(self): + return 'tools/dockerfile/test/cxx_%s_%s' % (self._docker_distro, + _docker_arch_suffix(self.args.arch)) def __str__(self): return self.make_target @@ -198,13 +232,18 @@ class NodeLanguage(object): self.platform = platform_string() self.node_version = '0.12' - def test_specs(self, config, args): + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default']) + + def test_specs(self): if self.platform == 'windows': - return [config.job_spec(['tools\\run_tests\\run_node.bat'], None)] + return [self.config.job_spec(['tools\\run_tests\\run_node.bat'], None)] else: - return [config.job_spec(['tools/run_tests/run_node.sh', self.node_version], - None, - environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + return [self.config.job_spec(['tools/run_tests/run_node.sh', self.node_version], + None, + environ=_FORCE_ENVIRON_FOR_WRAPPERS)] def pre_build_steps(self): if self.platform == 'windows': @@ -212,7 +251,7 @@ class NodeLanguage(object): else: return [['tools/run_tests/pre_build_node.sh', self.node_version]] - def make_targets(self, test_regex): + def make_targets(self): return [] def make_options(self): @@ -230,11 +269,8 @@ class NodeLanguage(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return False - - def dockerfile_dir(self, config, arch): - return 'tools/dockerfile/test/node_jessie_%s' % _docker_arch_suffix(arch) + def dockerfile_dir(self): + return 'tools/dockerfile/test/node_jessie_%s' % _docker_arch_suffix(self.args.arch) def __str__(self): return 'node' @@ -242,14 +278,19 @@ class NodeLanguage(object): class PhpLanguage(object): - def test_specs(self, config, args): - return [config.job_spec(['src/php/bin/run_tests.sh'], None, - environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default']) + + def test_specs(self): + return [self.config.job_spec(['src/php/bin/run_tests.sh'], None, + environ=_FORCE_ENVIRON_FOR_WRAPPERS)] def pre_build_steps(self): return [] - def make_targets(self, test_regex): + def make_targets(self): return ['static_c', 'shared_c'] def make_options(self): @@ -264,11 +305,8 @@ class PhpLanguage(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return False - - def dockerfile_dir(self, config, arch): - return 'tools/dockerfile/test/php_jessie_%s' % _docker_arch_suffix(arch) + def dockerfile_dir(self): + return 'tools/dockerfile/test/php_jessie_%s' % _docker_arch_suffix(self.args.arch) def __str__(self): return 'php' @@ -280,10 +318,15 @@ class PythonLanguage(object): self._build_python_versions = ['2.7'] self._has_python_versions = [] - def test_specs(self, config, args): + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default']) + + def test_specs(self): environment = dict(_FORCE_ENVIRON_FOR_WRAPPERS) environment['PYVER'] = '2.7' - return [config.job_spec( + return [self.config.job_spec( ['tools/run_tests/run_python.sh'], None, environ=environment, @@ -294,7 +337,7 @@ class PythonLanguage(object): def pre_build_steps(self): return [] - def make_targets(self, test_regex): + def make_targets(self): return ['static_c', 'grpc_python_plugin', 'shared_c'] def make_options(self): @@ -320,11 +363,8 @@ class PythonLanguage(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return False - - def dockerfile_dir(self, config, arch): - return 'tools/dockerfile/test/python_jessie_%s' % _docker_arch_suffix(arch) + def dockerfile_dir(self): + return 'tools/dockerfile/test/python_jessie_%s' % _docker_arch_suffix(self.args.arch) def __str__(self): return 'python' @@ -332,15 +372,21 @@ class PythonLanguage(object): class RubyLanguage(object): - def test_specs(self, config, args): - return [config.job_spec(['tools/run_tests/run_ruby.sh'], None, - environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default']) + + def test_specs(self): + return [self.config.job_spec(['tools/run_tests/run_ruby.sh'], None, + timeout_seconds=10*60, + environ=_FORCE_ENVIRON_FOR_WRAPPERS)] def pre_build_steps(self): return [['tools/run_tests/pre_build_ruby.sh']] - def make_targets(self, test_regex): - return ['static_c'] + def make_targets(self): + return [] def make_options(self): return [] @@ -354,27 +400,30 @@ class RubyLanguage(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return False - - def dockerfile_dir(self, config, arch): - return 'tools/dockerfile/test/ruby_jessie_%s' % _docker_arch_suffix(arch) + def dockerfile_dir(self): + return 'tools/dockerfile/test/ruby_jessie_%s' % _docker_arch_suffix(self.args.arch) def __str__(self): return 'ruby' class CSharpLanguage(object): + def __init__(self): self.platform = platform_string() - def test_specs(self, config, args): + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default']) + + def test_specs(self): with open('src/csharp/tests.json') as f: tests_json = json.load(f) assemblies = tests_json['assemblies'] tests = tests_json['tests'] - msbuild_config = _WINDOWS_CONFIG[config.build_config] + msbuild_config = _MSBUILD_CONFIG[self.config.build_config] assembly_files = ['%s/bin/%s/%s.dll' % (a, msbuild_config, a) for a in assemblies] @@ -386,13 +435,13 @@ class CSharpLanguage(object): else: script_name = 'tools/run_tests/run_csharp.sh' - if config.build_config == 'gcov': + if self.config.build_config == 'gcov': # On Windows, we only collect C# code coverage. # On Linux, we only collect coverage for native extension. # For code coverage all tests need to run as one suite. - return [config.job_spec([script_name] + extra_args, None, - shortname='csharp.coverage', - environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + return [self.config.job_spec([script_name] + extra_args, None, + shortname='csharp.coverage', + environ=_FORCE_ENVIRON_FOR_WRAPPERS)] else: specs = [] for test in tests: @@ -401,9 +450,9 @@ class CSharpLanguage(object): # use different output directory for each test to prevent # TestResult.xml clash between parallel test runs. cmdline += ['-work=test-result/%s' % uuid.uuid4()] - specs.append(config.job_spec(cmdline, None, - shortname='csharp.%s' % test, - environ=_FORCE_ENVIRON_FOR_WRAPPERS)) + specs.append(self.config.job_spec(cmdline, None, + shortname='csharp.%s' % test, + environ=_FORCE_ENVIRON_FOR_WRAPPERS)) return specs def pre_build_steps(self): @@ -412,7 +461,7 @@ class CSharpLanguage(object): else: return [['tools/run_tests/pre_build_csharp.sh']] - def make_targets(self, test_regex): + def make_targets(self): # For Windows, this target doesn't really build anything, # everything is build by buildall script later. if self.platform == 'windows': @@ -439,11 +488,8 @@ class CSharpLanguage(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return False - - def dockerfile_dir(self, config, arch): - return 'tools/dockerfile/test/csharp_jessie_%s' % _docker_arch_suffix(arch) + def dockerfile_dir(self): + return 'tools/dockerfile/test/csharp_jessie_%s' % _docker_arch_suffix(self.args.arch) def __str__(self): return 'csharp' @@ -451,14 +497,19 @@ class CSharpLanguage(object): class ObjCLanguage(object): - def test_specs(self, config, args): - return [config.job_spec(['src/objective-c/tests/run_tests.sh'], None, - environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default']) + + def test_specs(self): + return [self.config.job_spec(['src/objective-c/tests/run_tests.sh'], None, + environ=_FORCE_ENVIRON_FOR_WRAPPERS)] def pre_build_steps(self): return [] - def make_targets(self, test_regex): + def make_targets(self): return ['grpc_objective_c_plugin', 'interop_server'] def make_options(self): @@ -473,10 +524,7 @@ class ObjCLanguage(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return False - - def dockerfile_dir(self, config, arch): + def dockerfile_dir(self): return None def __str__(self): @@ -485,18 +533,23 @@ class ObjCLanguage(object): class Sanity(object): - def test_specs(self, config, args): + def configure(self, config, args): + self.config = config + self.args = args + _check_compiler(self.args.compiler, ['default']) + + def test_specs(self): import yaml with open('tools/run_tests/sanity/sanity_tests.yaml', 'r') as f: - return [config.job_spec(cmd['script'].split(), None, - timeout_seconds=None, environ={'TEST': 'true'}, - cpu_cost=cmd.get('cpu_cost', 1)) + return [self.config.job_spec(cmd['script'].split(), None, + timeout_seconds=None, environ={'TEST': 'true'}, + cpu_cost=cmd.get('cpu_cost', 1)) for cmd in yaml.load(f)] def pre_build_steps(self): return [] - def make_targets(self, test_regex): + def make_targets(self): return ['run_dep_checks'] def make_options(self): @@ -511,55 +564,18 @@ class Sanity(object): def makefile_name(self): return 'Makefile' - def supports_multi_config(self): - return False - - def dockerfile_dir(self, config, arch): + def dockerfile_dir(self): return 'tools/dockerfile/test/sanity' def __str__(self): return 'sanity' -class Build(object): - - def test_specs(self, config, args): - return [] - - def pre_build_steps(self): - return [] - - def make_targets(self, test_regex): - return ['static'] - - def make_options(self): - return [] - - def build_steps(self): - return [] - - def post_tests_steps(self): - return [] - - def makefile_name(self): - return 'Makefile' - - def supports_multi_config(self): - return True - - def dockerfile_dir(self, config, arch): - return None - - def __str__(self): - return self.make_target - - # different configurations we can run under with open('tools/run_tests/configs.json') as f: _CONFIGS = dict((cfg['config'], Config(**cfg)) for cfg in ast.literal_eval(f.read())) -_DEFAULT = ['opt'] _LANGUAGES = { 'c++': CLanguage('cxx', 'c++'), 'c': CLanguage('c', 'c'), @@ -569,11 +585,11 @@ _LANGUAGES = { 'ruby': RubyLanguage(), 'csharp': CSharpLanguage(), 'objc' : ObjCLanguage(), - 'sanity': Sanity(), - 'build': Build(), + 'sanity': Sanity() } -_WINDOWS_CONFIG = { + +_MSBUILD_CONFIG = { 'dbg': 'Debug', 'opt': 'Release', 'gcov': 'Debug', @@ -650,14 +666,6 @@ def _docker_arch_suffix(arch): sys.exit(1) -def _get_dockerfile_dir(language, cfg, arch): - """Returns dockerfile to use""" - custom = language.dockerfile_dir(cfg, arch) - if custom: - return custom - else: - return 'tools/dockerfile/grpc_tests_multilang_%s' % _docker_arch_suffix(arch) - def runs_per_test_type(arg_str): """Auxilary function to parse the "runs_per_test" flag. @@ -681,9 +689,8 @@ def runs_per_test_type(arg_str): # parse command line argp = argparse.ArgumentParser(description='Run grpc tests.') argp.add_argument('-c', '--config', - choices=['all'] + sorted(_CONFIGS.keys()), - nargs='+', - default=_DEFAULT) + choices=sorted(_CONFIGS.keys()), + default='opt') argp.add_argument('-n', '--runs_per_test', default=1, type=runs_per_test_type, help='A positive integer or "inf". If "inf", all tests will run in an ' 'infinite loop. Especially useful in combination with "-f"') @@ -727,9 +734,11 @@ argp.add_argument('--arch', default='default', help='Selects architecture to target. For some platforms "default" is the only supported choice.') argp.add_argument('--compiler', - choices=['default', 'vs2010', 'vs2013', 'vs2015'], + choices=['default', + 'gcc4.4', 'gcc4.9', 'gcc5.3', + 'vs2010', 'vs2013', 'vs2015'], default='default', - help='Selects compiler to use. For some platforms "default" is the only supported choice.') + help='Selects compiler to use. Allowed values depend on the platform and language.') argp.add_argument('--build_only', default=False, action='store_const', @@ -775,11 +784,8 @@ if need_to_regenerate_projects: # grab config -run_configs = set(_CONFIGS[cfg] - for cfg in itertools.chain.from_iterable( - _CONFIGS.iterkeys() if x == 'all' else [x] - for x in args.config)) -build_configs = set(cfg.build_config for cfg in run_configs) +run_config = _CONFIGS[args.config] +build_config = run_config.build_config if args.travis: _FORCE_ENVIRON_FOR_WRAPPERS = {'GRPC_TRACE': 'api'} @@ -790,17 +796,13 @@ else: lang_list = args.language # We don't support code coverage on some languages if 'gcov' in args.config: - for bad in ['objc', 'sanity', 'build']: + for bad in ['objc', 'sanity']: if bad in lang_list: lang_list.remove(bad) languages = set(_LANGUAGES[l] for l in lang_list) - -if len(build_configs) > 1: - for language in languages: - if not language.supports_multi_config(): - print language, 'does not support multiple build configurations' - sys.exit(1) +for l in languages: + l.configure(run_config, args) language_make_options=[] if any(language.make_options() for language in languages): @@ -810,10 +812,6 @@ if any(language.make_options() for language in languages): else: language_make_options = next(iter(languages)).make_options() -if len(languages) != 1 or len(build_configs) != 1: - print 'Multi-language and multi-config testing is not supported.' - sys.exit(1) - if args.use_docker: if not args.travis: print 'Seen --use_docker flag, will run tests under docker.' @@ -823,14 +821,18 @@ if args.use_docker: print 'copied to the docker environment.' time.sleep(5) + dockerfile_dirs = set([l.dockerfile_dir() for l in languages]) + if len(dockerfile_dirs) > 1: + print 'Languages to be tested require running under different docker images.' + sys.exit(1) + dockerfile_dir = next(iter(dockerfile_dirs)) + child_argv = [ arg for arg in sys.argv if not arg == '--use_docker' ] run_tests_cmd = 'python tools/run_tests/run_tests.py %s' % ' '.join(child_argv[1:]) env = os.environ.copy() env['RUN_TESTS_COMMAND'] = run_tests_cmd - env['DOCKERFILE_DIR'] = _get_dockerfile_dir(next(iter(languages)), - next(iter(build_configs)), - args.arch) + env['DOCKERFILE_DIR'] = dockerfile_dir env['DOCKER_RUN_SCRIPT'] = 'tools/jenkins/docker_run_tests.sh' if args.xml_report: env['XML_REPORT'] = args.xml_report @@ -842,10 +844,6 @@ if args.use_docker: env=env) sys.exit(0) -if platform_string() != 'windows' and args.compiler != 'default': - print 'Compiler %s not supported on current platform.' % args.compiler - sys.exit(1) - _check_arch_option(args.arch) def make_jobspec(cfg, targets, makefile='Makefile'): @@ -860,9 +858,7 @@ def make_jobspec(cfg, targets, makefile='Makefile'): return [ jobset.JobSpec([_windows_build_bat(args.compiler), 'vsprojects\\%s.sln' % target, - '/p:Configuration=%s' % _WINDOWS_CONFIG[cfg], - _windows_toolset_option(args.compiler), - _windows_arch_option(args.arch)] + + '/p:Configuration=%s' % _MSBUILD_CONFIG[cfg]] + extra_args + language_make_options, shell=True, timeout_seconds=None) @@ -885,32 +881,29 @@ make_targets = {} for l in languages: makefile = l.makefile_name() make_targets[makefile] = make_targets.get(makefile, set()).union( - set(l.make_targets(args.regex))) + set(l.make_targets())) def build_step_environ(cfg): environ = {'CONFIG': cfg} - msbuild_cfg = _WINDOWS_CONFIG.get(cfg) + msbuild_cfg = _MSBUILD_CONFIG.get(cfg) if msbuild_cfg: environ['MSBUILD_CONFIG'] = msbuild_cfg return environ build_steps = list(set( - jobset.JobSpec(cmdline, environ=build_step_environ(cfg), flake_retries=5) - for cfg in build_configs + jobset.JobSpec(cmdline, environ=build_step_environ(build_config), flake_retries=5) for l in languages for cmdline in l.pre_build_steps())) if make_targets: - make_commands = itertools.chain.from_iterable(make_jobspec(cfg, list(targets), makefile) for cfg in build_configs for (makefile, targets) in make_targets.iteritems()) + make_commands = itertools.chain.from_iterable(make_jobspec(build_config, list(targets), makefile) for (makefile, targets) in make_targets.iteritems()) build_steps.extend(set(make_commands)) build_steps.extend(set( - jobset.JobSpec(cmdline, environ=build_step_environ(cfg), timeout_seconds=None) - for cfg in build_configs + jobset.JobSpec(cmdline, environ=build_step_environ(build_config), timeout_seconds=None) for l in languages for cmdline in l.build_steps())) post_tests_steps = list(set( - jobset.JobSpec(cmdline, environ=build_step_environ(cfg)) - for cfg in build_configs + jobset.JobSpec(cmdline, environ=build_step_environ(build_config)) for l in languages for cmdline in l.post_tests_steps())) runs_per_test = args.runs_per_test @@ -1023,7 +1016,7 @@ def _start_port_server(port_server_port): print 'last ditch attempt to contact port server succeeded' break except: - traceback.print_exc(); + traceback.print_exc() port_log = open(logfile, 'r').read() print port_log sys.exit(1) @@ -1043,7 +1036,7 @@ def _start_port_server(port_server_port): time.sleep(1) waits += 1 except: - traceback.print_exc(); + traceback.print_exc() port_server.kill() raise @@ -1101,9 +1094,8 @@ def _build_and_run( infinite_runs = runs_per_test == 0 one_run = set( spec - for config in run_configs for language in languages - for spec in language.test_specs(config, args) + for spec in language.test_specs() if re.search(args.regex, spec.shortname)) # When running on travis, we want out test runs to be as similar as possible # for reproducibility purposes. @@ -1197,4 +1189,3 @@ else: if BuildAndRunError.POST_TEST in errors: exit_code |= 4 sys.exit(exit_code) - diff --git a/tools/run_tests/sanity/check_submodules.sh b/tools/run_tests/sanity/check_submodules.sh index f49230e49aa44cc3de8ea83be8bb49bbe81240c0..3c6dbb9ea1f1a18f51b33c8d889c901496d12153 100755 --- a/tools/run_tests/sanity/check_submodules.sh +++ b/tools/run_tests/sanity/check_submodules.sh @@ -44,6 +44,7 @@ cat << EOF | awk '{ print $1 }' | sort > $want_submodules 9f897b25800d2f54f5c442ef01a60721aeca6d87 third_party/boringssl (version_for_cocoapods_1.0-67-g9f897b2) 05b155ff59114735ec8cd089f669c4c3d8f59029 third_party/gflags (v2.1.0-45-g05b155f) c99458533a9b4c743ed51537e25989ea55944908 third_party/googletest (release-1.7.0) + f8ac463766281625ad710900479130c7fcb4d63b third_party/nanopb (nanopb-0.3.4-29-gf8ac463) d5fb408ddc281ffcadeb08699e65bb694656d0bd third_party/protobuf (v3.0.0-beta-2) 50893291621658f355bc5b4d450a8d06a563053d third_party/zlib (v1.2.8) EOF diff --git a/tools/run_tests/sanity/check_version.py b/tools/run_tests/sanity/check_version.py new file mode 100755 index 0000000000000000000000000000000000000000..41dd5efe3887fde41b69aa70e2add1d876ec4161 --- /dev/null +++ b/tools/run_tests/sanity/check_version.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python2.7 + +# Copyright 2016, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import sys +import yaml +import os +import re +import subprocess + +errors = 0 + +os.chdir(os.path.join(os.path.dirname(sys.argv[0]), '../../..')) + +# hack import paths to pick up extra code +sys.path.insert(0, os.path.abspath('tools/buildgen/plugins')) +from expand_version import Version + +try: + branch_name = subprocess.check_output( + 'git rev-parse --abbrev-ref HEAD', + shell=True) +except: + print 'WARNING: not a git repository' + branch_name = None + +if branch_name is not None: + m = re.match(r'^release-([0-9]+)_([0-9]+)$', branch_name) + if m: + print 'RELEASE branch' + # version number should align with the branched version + check_version = lambda version: ( + version.major == int(m.group(1)) and + version.minor == int(m.group(2))) + warning = 'Version key "%%s" value "%%s" should have a major version %s and minor version %s' % (m.group(1), m.group(2)) + elif re.match(r'^debian/.*$', branch_name): + # no additional version checks for debian branches + check_version = lambda version: True + else: + # all other branches should have a -dev tag + check_version = lambda version: version.tag == 'dev' + warning = 'Version key "%s" value "%s" should have a -dev tag' +else: + check_version = lambda version: True + +with open('build.yaml', 'r') as f: + build_yaml = yaml.load(f.read()) + +settings = build_yaml['settings'] + +top_version = Version(settings['version']) +if not check_version(top_version): + errors += 1 + print warning % ('version', top_version) + +for tag, value in settings.iteritems(): + if re.match(r'^[a-z]+_version$', tag): + value = Version(value) + if value.major != top_version.major: + errors += 1 + print 'major version mismatch on %s: %d vs %d' % (tag, value.major, top_version.major) + if value.minor != top_version.minor: + errors += 1 + print 'minor version mismatch on %s: %d vs %d' % (tag, value.minor, top_version.minor) + if not check_version(value): + errors += 1 + print warning % (tag, value) + +sys.exit(errors) + diff --git a/tools/run_tests/sanity/sanity_tests.yaml b/tools/run_tests/sanity/sanity_tests.yaml index 809e6ce645414fe527b9112c4dc1c5d715c1f592..cffc180fb07d90a3dc481ff9dc30d569b874518b 100644 --- a/tools/run_tests/sanity/sanity_tests.yaml +++ b/tools/run_tests/sanity/sanity_tests.yaml @@ -1,9 +1,11 @@ # a set of tests that are run in parallel for sanity tests +- script: tools/run_tests/sanity/check_cache_mk.sh - script: tools/run_tests/sanity/check_sources_and_headers.py - script: tools/run_tests/sanity/check_submodules.sh -- script: tools/run_tests/sanity/check_cache_mk.sh +- script: tools/run_tests/sanity/check_version.py - script: tools/buildgen/generate_projects.sh -j 3 cpu_cost: 3 - script: tools/distrib/check_copyright.py - script: tools/distrib/clang_format_code.sh - script: tools/distrib/check_trailing_newlines.sh +- script: tools/distrib/check_nanopb_output.sh diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json index ca8a514742883e50cd54ef02aadf5da474c7fe47..88e7343399f226b5e975eee41d108330db5c1310 100644 --- a/tools/run_tests/sources_and_headers.json +++ b/tools/run_tests/sources_and_headers.json @@ -92,7 +92,7 @@ "language": "c", "name": "census_log_test", "src": [ - "test/core/census/log_test.c" + "test/core/census/mlog_test.c" ] }, { @@ -1658,6 +1658,23 @@ "src/compiler/ruby_plugin.cc" ] }, + { + "deps": [ + "grpc", + "grpc++", + "grpc++_test_util", + "grpc_test_util" + ], + "headers": [ + "src/proto/grpc/lb/v0/load_balancer.grpc.pb.h", + "src/proto/grpc/lb/v0/load_balancer.pb.h" + ], + "language": "c++", + "name": "grpclb_api_test", + "src": [ + "test/cpp/grpclb/grpclb_api_test.cc" + ] + }, { "deps": [ "gpr", @@ -2983,7 +3000,7 @@ "include/grpc/status.h", "src/core/census/aggregation.h", "src/core/census/grpc_filter.h", - "src/core/census/log.h", + "src/core/census/mlog.h", "src/core/census/rpc_metric_id.h", "src/core/channel/channel_args.h", "src/core/channel/channel_stack.h", @@ -2998,6 +3015,7 @@ "src/core/client_config/client_config.h", "src/core/client_config/connector.h", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.h", "src/core/client_config/lb_policy.h", @@ -3058,6 +3076,7 @@ "src/core/json/json_common.h", "src/core/json/json_reader.h", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/security/auth_filters.h", "src/core/security/base64.h", "src/core/security/credentials.h", @@ -3110,7 +3129,11 @@ "src/core/tsi/ssl_transport_security.h", "src/core/tsi/ssl_types.h", "src/core/tsi/transport_security.h", - "src/core/tsi/transport_security_interface.h" + "src/core/tsi/transport_security_interface.h", + "third_party/nanopb/pb.h", + "third_party/nanopb/pb_common.h", + "third_party/nanopb/pb_decode.h", + "third_party/nanopb/pb_encode.h" ], "language": "c", "name": "grpc", @@ -3134,8 +3157,8 @@ "src/core/census/grpc_filter.c", "src/core/census/grpc_filter.h", "src/core/census/initialize.c", - "src/core/census/log.c", - "src/core/census/log.h", + "src/core/census/mlog.c", + "src/core/census/mlog.h", "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/rpc_metric_id.h", @@ -3166,6 +3189,8 @@ "src/core/client_config/default_initial_connect_string.c", "src/core/client_config/initial_connect_string.c", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.c", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.c", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.c", @@ -3291,6 +3316,8 @@ "src/core/json/json_string.c", "src/core/json/json_writer.c", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.c", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/security/auth_filters.h", "src/core/security/base64.c", "src/core/security/base64.h", @@ -3415,6 +3442,16 @@ "src/core/tsi/transport_security_interface.h" ] }, + { + "deps": [ + "gpr", + "grpc" + ], + "headers": [], + "language": "c", + "name": "grpc_dll", + "src": [] + }, { "deps": [ "gpr", @@ -3512,7 +3549,7 @@ "include/grpc/status.h", "src/core/census/aggregation.h", "src/core/census/grpc_filter.h", - "src/core/census/log.h", + "src/core/census/mlog.h", "src/core/census/rpc_metric_id.h", "src/core/channel/channel_args.h", "src/core/channel/channel_stack.h", @@ -3527,6 +3564,7 @@ "src/core/client_config/client_config.h", "src/core/client_config/connector.h", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.h", "src/core/client_config/lb_policy.h", @@ -3587,6 +3625,7 @@ "src/core/json/json_common.h", "src/core/json/json_reader.h", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/statistics/census_interface.h", "src/core/statistics/census_rpc_stats.h", "src/core/surface/api_trace.h", @@ -3625,7 +3664,11 @@ "src/core/transport/metadata_batch.h", "src/core/transport/static_metadata.h", "src/core/transport/transport.h", - "src/core/transport/transport_impl.h" + "src/core/transport/transport_impl.h", + "third_party/nanopb/pb.h", + "third_party/nanopb/pb_common.h", + "third_party/nanopb/pb_decode.h", + "third_party/nanopb/pb_encode.h" ], "language": "c", "name": "grpc_unsecure", @@ -3648,8 +3691,8 @@ "src/core/census/grpc_filter.c", "src/core/census/grpc_filter.h", "src/core/census/initialize.c", - "src/core/census/log.c", - "src/core/census/log.h", + "src/core/census/mlog.c", + "src/core/census/mlog.h", "src/core/census/operation.c", "src/core/census/placeholders.c", "src/core/census/rpc_metric_id.h", @@ -3680,6 +3723,8 @@ "src/core/client_config/default_initial_connect_string.c", "src/core/client_config/initial_connect_string.c", "src/core/client_config/initial_connect_string.h", + "src/core/client_config/lb_policies/load_balancer_api.c", + "src/core/client_config/lb_policies/load_balancer_api.h", "src/core/client_config/lb_policies/pick_first.c", "src/core/client_config/lb_policies/pick_first.h", "src/core/client_config/lb_policies/round_robin.c", @@ -3804,6 +3849,8 @@ "src/core/json/json_string.c", "src/core/json/json_writer.c", "src/core/json/json_writer.h", + "src/core/proto/grpc/lb/v0/load_balancer.pb.c", + "src/core/proto/grpc/lb/v0/load_balancer.pb.h", "src/core/statistics/census_interface.h", "src/core/statistics/census_rpc_stats.h", "src/core/surface/alarm.c", @@ -4182,7 +4229,8 @@ "test/cpp/util/cli_call.h", "test/cpp/util/create_test_channel.h", "test/cpp/util/string_ref_helper.h", - "test/cpp/util/subprocess.h" + "test/cpp/util/subprocess.h", + "test/cpp/util/test_credentials_provider.h" ], "language": "c++", "name": "grpc++_test_util", @@ -4198,7 +4246,9 @@ "test/cpp/util/string_ref_helper.cc", "test/cpp/util/string_ref_helper.h", "test/cpp/util/subprocess.cc", - "test/cpp/util/subprocess.h" + "test/cpp/util/subprocess.h", + "test/cpp/util/test_credentials_provider.cc", + "test/cpp/util/test_credentials_provider.h" ] }, { diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index ea9c129101db84b9f5b5adcef61a455172025f1c..8868e2a93eab4bbbbe2020e50b043622c0e9dbc9 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -2039,6 +2039,26 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "flaky": false, + "language": "c++", + "name": "grpclb_api_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -2104,7 +2124,7 @@ "mac", "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 10, "exclude_configs": [], "flaky": false, "language": "c++", @@ -2123,9 +2143,7 @@ "posix" ], "cpu_cost": 10, - "exclude_configs": [ - "tsan" - ], + "exclude_configs": [], "flaky": false, "language": "c++", "name": "qps_test", diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index b30941ff73894a16c13546ce2ca1476e544b22cc..3a337576d1e023fe2b1455caee67b83c9202e00c 100644 --- a/vsprojects/buildtests_c.sln +++ b/vsprojects/buildtests_c.sln @@ -24,6 +24,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc", "vcxproj\.\grpc\grpc {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_dll", "vcxproj\.\grpc_dll\grpc_dll.vcxproj", "{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}" + ProjectSection(myProperties) = preProject + lib = "True" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "vcxproj\.\grpc_test_util\grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}" ProjectSection(myProperties) = preProject lib = "True" @@ -1375,6 +1384,22 @@ Global {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|Win32.Build.0 = Release-DLL|Win32 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.ActiveCfg = Release-DLL|x64 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.Build.0 = Release-DLL|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.ActiveCfg = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.ActiveCfg = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.ActiveCfg = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.ActiveCfg = Release|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.Build.0 = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.Build.0 = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.Build.0 = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.Build.0 = Release|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.Build.0 = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.Build.0 = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.ActiveCfg = Release|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.Build.0 = Release|x64 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|x64.ActiveCfg = Debug|x64 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/grpc.sln b/vsprojects/grpc.sln index ad9198341ad67a25142ca510f5b4d2c65108190b..3f6b3379728a70059c39b89df8f817bc7fda3c2c 100644 --- a/vsprojects/grpc.sln +++ b/vsprojects/grpc.sln @@ -24,6 +24,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc", "vcxproj\.\grpc\grpc {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_dll", "vcxproj\.\grpc_dll\grpc_dll.vcxproj", "{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}" + ProjectSection(myProperties) = preProject + lib = "True" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9} + EndProjectSection +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_test_util", "vcxproj\.\grpc_test_util\grpc_test_util.vcxproj", "{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}" ProjectSection(myProperties) = preProject lib = "True" @@ -220,6 +229,22 @@ Global {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|Win32.Build.0 = Release-DLL|Win32 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.ActiveCfg = Release-DLL|x64 {29D16885-7228-4C31-81ED-5F9187C7F2A9}.Release-DLL|x64.Build.0 = Release-DLL|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.ActiveCfg = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.ActiveCfg = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.ActiveCfg = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.ActiveCfg = Release|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|Win32.Build.0 = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug|x64.Build.0 = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|Win32.Build.0 = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release|x64.Build.0 = Release|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|Win32.Build.0 = Debug|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.ActiveCfg = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Debug-DLL|x64.Build.0 = Debug|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.ActiveCfg = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|Win32.Build.0 = Release|Win32 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.ActiveCfg = Release|x64 + {A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}.Release-DLL|x64.Build.0 = Release|x64 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|Win32.ActiveCfg = Debug|Win32 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Debug|x64.ActiveCfg = Debug|x64 {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/protoc.props b/vsprojects/protoc.props index ecaf248446e1677515a2704300a4d9891bcf8a4e..1bdc07193bce01b5aad1e89616c79b55da335ddc 100644 --- a/vsprojects/protoc.props +++ b/vsprojects/protoc.props @@ -1 +1 @@ -<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup /> <ItemDefinitionGroup> <Link> <AdditionalDependencies>libprotoc.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>$(SolutionDir)\..\third_party\protobuf\cmake\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> <ItemGroup /> </Project> \ No newline at end of file +<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyGroup /> <ItemDefinitionGroup> <ClCompile> <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> </ClCompile> <Link> <AdditionalDependencies>libprotoc.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>$(SolutionDir)\..\third_party\protobuf\cmake\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> <ItemGroup /> </Project> \ No newline at end of file diff --git a/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj b/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj index 3d353716a9e5b1b3d49effee7a07ca42368384de..33860af620b65f742a630a59991d927321e2cc8f 100644 --- a/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj @@ -153,6 +153,7 @@ <ClInclude Include="$(SolutionDir)\..\test\cpp\util\create_test_channel.h" /> <ClInclude Include="$(SolutionDir)\..\test\cpp\util\string_ref_helper.h" /> <ClInclude Include="$(SolutionDir)\..\test\cpp\util\subprocess.h" /> + <ClInclude Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.pb.cc"> @@ -191,6 +192,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\test\cpp\util\subprocess.cc"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.cc"> + </ClCompile> </ItemGroup> <ItemGroup> <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj"> diff --git a/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj.filters index 27ac6751b94c9cc6d22e5fdf3cf6bee87ff9998d..b35ba1fd91c8dd8d4988d9e738d1f829630b680f 100644 --- a/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_test_util/grpc++_test_util.vcxproj.filters @@ -28,6 +28,9 @@ <ClCompile Include="$(SolutionDir)\..\test\cpp\util\subprocess.cc"> <Filter>test\cpp\util</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.cc"> + <Filter>test\cpp\util</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="$(SolutionDir)\..\test\cpp\end2end\test_service_impl.h"> @@ -48,6 +51,9 @@ <ClInclude Include="$(SolutionDir)\..\test\cpp\util\subprocess.h"> <Filter>test\cpp\util</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\test\cpp\util\test_credentials_provider.h"> + <Filter>test\cpp\util</Filter> + </ClInclude> </ItemGroup> <ItemGroup> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index f866a15f8bd8dab863e53b4ffd0ce096dca06a87..4b39ff284f84037a1b9dccd462a7ce20d6e53470 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -282,20 +282,6 @@ <ClInclude Include="$(SolutionDir)\..\include\grpc\census.h" /> </ItemGroup> <ItemGroup> - <ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\grpc_filter.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\channel\channel_args.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\channel\channel_stack.h" /> @@ -310,6 +296,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\client_config\client_config.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\connector.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\round_robin.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policy.h" /> @@ -370,6 +357,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\json\json_common.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\json\json_reader.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\json\json_writer.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\statistics\census_interface.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\statistics\census_rpc_stats.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\surface\api_trace.h" /> @@ -409,53 +397,29 @@ <ClInclude Include="$(SolutionDir)\..\src\core\transport\static_metadata.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\census\log.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\census\mlog.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.h" /> </ItemGroup> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c"> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_context.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_filter.c"> @@ -486,6 +450,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\round_robin.c"> @@ -614,6 +580,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\json\json_writer.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\surface\alarm.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\surface\api_trace.c"> @@ -712,11 +680,53 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\transport\transport_op_string.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\context.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\census\log.c"> + <ClCompile Include="$(SolutionDir)\..\src\core\census\mlog.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c"> </ClCompile> @@ -724,6 +734,12 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\tracing.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.c"> + </ClCompile> </ItemGroup> <ItemGroup> <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 344cdcf9a9b6dd0e2943caad18f4004ce76605ec..1989a4705999838e8129c63646c0f4cf8ee23dd6 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -1,69 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c"> - <Filter>src\core\httpcli</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c"> - <Filter>src\core\security</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c"> - <Filter>src\core\surface</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c"> - <Filter>src\core\surface</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c"> - <Filter>src\core\tsi</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c"> - <Filter>src\core\tsi</Filter> - </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c"> - <Filter>src\core\tsi</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\grpc_context.c"> <Filter>src\core\census</Filter> </ClCompile> @@ -109,6 +46,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.c"> <Filter>src\core\client_config</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.c"> + <Filter>src\core\client_config\lb_policies</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.c"> <Filter>src\core\client_config\lb_policies</Filter> </ClCompile> @@ -301,6 +241,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\json\json_writer.c"> <Filter>src\core\json</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.c"> + <Filter>src\core\proto\grpc\lb\v0</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\surface\alarm.c"> <Filter>src\core\surface</Filter> </ClCompile> @@ -448,13 +391,76 @@ <ClCompile Include="$(SolutionDir)\..\src\core\transport\transport_op_string.c"> <Filter>src\core\transport</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\httpcli\httpcli_security_connector.c"> + <Filter>src\core\httpcli</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\base64.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\client_auth_filter.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_metadata.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_posix.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\credentials_win32.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\google_default_credentials.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\handshake.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\json_token.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\jwt_verifier.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\secure_endpoint.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\security_connector.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\security_context.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\server_auth_filter.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\security\server_secure_chttp2.c"> + <Filter>src\core\security</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\surface\init_secure.c"> + <Filter>src\core\surface</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\surface\secure_channel_create.c"> + <Filter>src\core\surface</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c"> + <Filter>src\core\tsi</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c"> + <Filter>src\core\tsi</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c"> + <Filter>src\core\tsi</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\context.c"> <Filter>src\core\census</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c"> <Filter>src\core\census</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\census\log.c"> + <ClCompile Include="$(SolutionDir)\..\src\core\census\mlog.c"> <Filter>src\core\census</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c"> @@ -466,6 +472,15 @@ <ClCompile Include="$(SolutionDir)\..\src\core\census\tracing.c"> <Filter>src\core\census</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> + <Filter>third_party\nanopb</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.c"> + <Filter>third_party\nanopb</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.c"> + <Filter>third_party\nanopb</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="$(SolutionDir)\..\include\grpc\grpc_security.h"> @@ -509,48 +524,6 @@ </ClInclude> </ItemGroup> <ItemGroup> - <ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h"> - <Filter>src\core\security</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h"> - <Filter>src\core\tsi</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h"> - <Filter>src\core\tsi</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h"> - <Filter>src\core\tsi</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h"> - <Filter>src\core\tsi</Filter> - </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h"> - <Filter>src\core\tsi</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\census\grpc_filter.h"> <Filter>src\core\census</Filter> </ClInclude> @@ -593,6 +566,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.h"> <Filter>src\core\client_config</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.h"> + <Filter>src\core\client_config\lb_policies</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.h"> <Filter>src\core\client_config\lb_policies</Filter> </ClInclude> @@ -773,6 +749,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\json\json_writer.h"> <Filter>src\core\json</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.h"> + <Filter>src\core\proto\grpc\lb\v0</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\statistics\census_interface.h"> <Filter>src\core\statistics</Filter> </ClInclude> @@ -890,15 +869,69 @@ <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h"> <Filter>src\core\transport</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\auth_filters.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\base64.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\credentials.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\handshake.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\json_token.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\jwt_verifier.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\secure_endpoint.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\security_connector.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\security\security_context.h"> + <Filter>src\core\security</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h"> + <Filter>src\core\tsi</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h"> + <Filter>src\core\tsi</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h"> + <Filter>src\core\tsi</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h"> + <Filter>src\core\tsi</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security_interface.h"> + <Filter>src\core\tsi</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h"> <Filter>src\core\census</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\census\log.h"> + <ClInclude Include="$(SolutionDir)\..\src\core\census\mlog.h"> <Filter>src\core\census</Filter> </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h"> <Filter>src\core\census</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> </ItemGroup> <ItemGroup> @@ -950,6 +983,18 @@ <Filter Include="src\core\json"> <UniqueIdentifier>{e665cc0e-b994-d7c5-cc18-2007392019f0}</UniqueIdentifier> </Filter> + <Filter Include="src\core\proto"> + <UniqueIdentifier>{1ff04466-0905-8a5d-d6f4-7ff2df4c13b5}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\proto\grpc"> + <UniqueIdentifier>{7c7ad0b3-bf85-5bd3-e0c8-4f5468a8e2e6}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\proto\grpc\lb"> + <UniqueIdentifier>{3d533dad-8100-e8a3-b7c3-1fc13a4d60da}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\proto\grpc\lb\v0"> + <UniqueIdentifier>{0ffcf868-7617-5fed-b6ce-2162d9d09148}</UniqueIdentifier> + </Filter> <Filter Include="src\core\security"> <UniqueIdentifier>{1d850ac6-e639-4eab-5338-4ba40272fcc9}</UniqueIdentifier> </Filter> @@ -968,6 +1013,12 @@ <Filter Include="src\core\tsi"> <UniqueIdentifier>{0b0f9ab1-efa4-7f03-e446-6fb9b5227e84}</UniqueIdentifier> </Filter> + <Filter Include="third_party"> + <UniqueIdentifier>{aaab30a4-2a15-732e-c141-3fbc0f0f5a7a}</UniqueIdentifier> + </Filter> + <Filter Include="third_party\nanopb"> + <UniqueIdentifier>{93d6596d-330c-1d27-6f84-3c840e57869e}</UniqueIdentifier> + </Filter> </ItemGroup> </Project> diff --git a/vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj b/vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..cafc9518674a2943b2b8a0000534c497cbea7998 --- /dev/null +++ b/vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj @@ -0,0 +1,200 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" /> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{A2F6CBBA-A553-41B3-A7DE-F26DECCC27F0}</ProjectGuid> + <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> + <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> + <PlatformToolset>v100</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> + <PlatformToolset>v120</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(SolutionDir)\..\vsprojects\global.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <TargetName>grpc_dll</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <TargetName>grpc_dll</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <ModuleDefinitionFile>$(SolutionDir)\..\grpc.def</ModuleDefinitionFile> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemGroup> + <None Include="$(SolutionDir)\..\grpc.def" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\vsprojects\dummy.c"> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> + <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj"> + <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" /> + </Target> +</Project> + diff --git a/vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj.filters b/vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..8493ace0a2486300a22de07b0afc204f2e84f4a0 --- /dev/null +++ b/vsprojects/vcxproj/grpc_dll/grpc_dll.vcxproj.filters @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <None Include="$(SolutionDir)\..\grpc.def" /> + </ItemGroup> + + <ItemGroup> + </ItemGroup> +</Project> + diff --git a/vsprojects/vcxproj/grpc_plugin_support/grpc_plugin_support.vcxproj b/vsprojects/vcxproj/grpc_plugin_support/grpc_plugin_support.vcxproj index 89183902d74c09c0ae53e67555b91efcf6fdf5ee..a76c883903a6910c16761154904abd9b60c74874 100644 --- a/vsprojects/vcxproj/grpc_plugin_support/grpc_plugin_support.vcxproj +++ b/vsprojects/vcxproj/grpc_plugin_support/grpc_plugin_support.vcxproj @@ -53,6 +53,7 @@ <ImportGroup Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(SolutionDir)\..\vsprojects\global.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\protoc.props" /> <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 78c3bcd0e92de06d32a9a627b50267c5ecc61941..d61c5a75745a3e3427551b0c91477f32270daa6f 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -286,6 +286,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\client_config\client_config.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\connector.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\round_robin.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policy.h" /> @@ -346,6 +347,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\json\json_common.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\json\json_reader.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\json\json_writer.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\statistics\census_interface.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\statistics\census_rpc_stats.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\surface\api_trace.h" /> @@ -386,8 +388,12 @@ <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\transport\transport_impl.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\census\log.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\census\mlog.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h" /> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="$(SolutionDir)\..\src\core\surface\init_unsecure.c"> @@ -422,6 +428,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\round_robin.c"> @@ -550,6 +558,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\json\json_writer.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\surface\alarm.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\surface\api_trace.c"> @@ -652,7 +662,7 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\census\log.c"> + <ClCompile Include="$(SolutionDir)\..\src\core\census\mlog.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c"> </ClCompile> @@ -660,6 +670,12 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\tracing.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.c"> + </ClCompile> </ItemGroup> <ItemGroup> <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 063bb47dfa108221a2be83287c98dce3a9f2f15e..ee51cafd256d1a7db5bf3ea9e1a2dc1dfdc4b875 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -49,6 +49,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.c"> <Filter>src\core\client_config</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.c"> + <Filter>src\core\client_config\lb_policies</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.c"> <Filter>src\core\client_config\lb_policies</Filter> </ClCompile> @@ -241,6 +244,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\json\json_writer.c"> <Filter>src\core\json</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.c"> + <Filter>src\core\proto\grpc\lb\v0</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\surface\alarm.c"> <Filter>src\core\surface</Filter> </ClCompile> @@ -394,7 +400,7 @@ <ClCompile Include="$(SolutionDir)\..\src\core\census\initialize.c"> <Filter>src\core\census</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\census\log.c"> + <ClCompile Include="$(SolutionDir)\..\src\core\census\mlog.c"> <Filter>src\core\census</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\census\operation.c"> @@ -406,6 +412,15 @@ <ClCompile Include="$(SolutionDir)\..\src\core\census\tracing.c"> <Filter>src\core\census</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_common.c"> + <Filter>third_party\nanopb</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.c"> + <Filter>third_party\nanopb</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.c"> + <Filter>third_party\nanopb</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="$(SolutionDir)\..\include\grpc\byte_buffer.h"> @@ -488,6 +503,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\client_config\initial_connect_string.h"> <Filter>src\core\client_config</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\load_balancer_api.h"> + <Filter>src\core\client_config\lb_policies</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\client_config\lb_policies\pick_first.h"> <Filter>src\core\client_config\lb_policies</Filter> </ClInclude> @@ -668,6 +686,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\json\json_writer.h"> <Filter>src\core\json</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\proto\grpc\lb\v0\load_balancer.pb.h"> + <Filter>src\core\proto\grpc\lb\v0</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\statistics\census_interface.h"> <Filter>src\core\statistics</Filter> </ClInclude> @@ -788,12 +809,24 @@ <ClInclude Include="$(SolutionDir)\..\src\core\census\aggregation.h"> <Filter>src\core\census</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\census\log.h"> + <ClInclude Include="$(SolutionDir)\..\src\core\census\mlog.h"> <Filter>src\core\census</Filter> </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\census\rpc_metric_id.h"> <Filter>src\core\census</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_common.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_decode.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> + <ClInclude Include="$(SolutionDir)\..\third_party\nanopb\pb_encode.h"> + <Filter>third_party\nanopb</Filter> + </ClInclude> </ItemGroup> <ItemGroup> @@ -845,6 +878,18 @@ <Filter Include="src\core\json"> <UniqueIdentifier>{443ffc61-1bea-2477-6e54-1ddf8c139264}</UniqueIdentifier> </Filter> + <Filter Include="src\core\proto"> + <UniqueIdentifier>{7f4bb22a-65ba-0f8f-6387-66b1f6677a80}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\proto\grpc"> + <UniqueIdentifier>{9c2bd164-c317-8a13-564d-3b28b0fd79cf}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\proto\grpc\lb"> + <UniqueIdentifier>{2bad8e10-4fc5-d8b3-e026-4abbd0c25cda}</UniqueIdentifier> + </Filter> + <Filter Include="src\core\proto\grpc\lb\v0"> + <UniqueIdentifier>{4475c8ed-e01b-8906-47d0-8a504189c0d5}</UniqueIdentifier> + </Filter> <Filter Include="src\core\statistics"> <UniqueIdentifier>{e084164c-a069-00e3-db35-4e0b1cd6f0b7}</UniqueIdentifier> </Filter> @@ -857,6 +902,12 @@ <Filter Include="src\core\transport\chttp2"> <UniqueIdentifier>{5fcd6206-f774-9ae6-4b85-305d6a723843}</UniqueIdentifier> </Filter> + <Filter Include="third_party"> + <UniqueIdentifier>{025c051e-8eba-125b-67f9-173f95176eb2}</UniqueIdentifier> + </Filter> + <Filter Include="third_party\nanopb"> + <UniqueIdentifier>{6511f77d-f28c-80e0-0889-8975e688e344}</UniqueIdentifier> + </Filter> </ItemGroup> </Project> diff --git a/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj b/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj index 851086d663539777b2a10fedf4893db75d8200b3..9f2480085b54c6069b26e57f2c37bb2317593ca8 100644 --- a/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj +++ b/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj @@ -158,7 +158,7 @@ </ItemDefinitionGroup> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\test\core\census\log_test.c"> + <ClCompile Include="$(SolutionDir)\..\test\core\census\mlog_test.c"> </ClCompile> </ItemGroup> <ItemGroup> diff --git a/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj.filters b/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj.filters index 135c77847f926e6a334f3da7c8b76eb9a7863eea..8b70dcb2a41bec7e9e798620a9c10c40d3840d16 100644 --- a/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj.filters +++ b/vsprojects/vcxproj/test/census_log_test/census_log_test.vcxproj.filters @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\test\core\census\log_test.c"> + <ClCompile Include="$(SolutionDir)\..\test\core\census\mlog_test.c"> <Filter>test\core\census</Filter> </ClCompile> </ItemGroup> diff --git a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..1509ece9f96a82b1ac74129593f6c07794df1bb6 --- /dev/null +++ b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" /> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{990AF023-17D7-8DBF-EB6E-14C7C016C77E}</ProjectGuid> + <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> + <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> + <PlatformToolset>v100</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> + <PlatformToolset>v110</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> + <PlatformToolset>v120</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\global.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> + <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <TargetName>grpclb_api_test</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <TargetName>grpclb_api_test</TargetName> + <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> + <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> + <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> + <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <TreatWarningAsError>true</TreatWarningAsError> + <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> + <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> + <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.pb.cc"> + </ClCompile> + <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.pb.h"> + </ClInclude> + <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.grpc.pb.cc"> + </ClCompile> + <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.grpc.pb.h"> + </ClInclude> + <ClCompile Include="$(SolutionDir)\..\test\cpp\grpclb\grpclb_api_test.cc"> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++_test_util\grpc++_test_util.vcxproj"> + <Project>{0BE77741-552A-929B-A497-4EF7ECE17A64}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj"> + <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj"> + <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project> + </ProjectReference> + <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj"> + <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> + </ImportGroup> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" /> + <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" /> + </Target> +</Project> + diff --git a/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..6c57b8c162a7e34d7ead3fbf32e691069a1f8b5e --- /dev/null +++ b/vsprojects/vcxproj/test/grpclb_api_test/grpclb_api_test.vcxproj.filters @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\lb\v0\load_balancer.proto"> + <Filter>src\proto\grpc\lb\v0</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\test\cpp\grpclb\grpclb_api_test.cc"> + <Filter>test\cpp\grpclb</Filter> + </ClCompile> + </ItemGroup> + + <ItemGroup> + <Filter Include="src"> + <UniqueIdentifier>{a31d21fb-c6ab-75ce-43dc-7d6f506765e6}</UniqueIdentifier> + </Filter> + <Filter Include="src\proto"> + <UniqueIdentifier>{10d49c90-8503-9b10-6678-eed983bc25d9}</UniqueIdentifier> + </Filter> + <Filter Include="src\proto\grpc"> + <UniqueIdentifier>{8b6be783-e071-44cc-2096-f1c476012556}</UniqueIdentifier> + </Filter> + <Filter Include="src\proto\grpc\lb"> + <UniqueIdentifier>{2981699e-c196-c599-bc17-c177770f89ee}</UniqueIdentifier> + </Filter> + <Filter Include="src\proto\grpc\lb\v0"> + <UniqueIdentifier>{3d04774a-1c2f-e100-435e-08af5d539250}</UniqueIdentifier> + </Filter> + <Filter Include="test"> + <UniqueIdentifier>{64736e1d-eb77-664f-34ab-6cf41263d3d8}</UniqueIdentifier> + </Filter> + <Filter Include="test\cpp"> + <UniqueIdentifier>{c86e9cb1-bed4-3697-40f2-9ecff6297fa5}</UniqueIdentifier> + </Filter> + <Filter Include="test\cpp\grpclb"> + <UniqueIdentifier>{6b5ba83a-6cf2-5a7b-0ab8-62de31882705}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project> +