diff options
author | 2016-04-08 17:20:10 -0700 | |
---|---|---|
committer | 2016-04-08 17:20:10 -0700 | |
commit | 001193c7522479169d768eed76da33d3050d0f1b (patch) | |
tree | 2f73dc318d49aa0af90ba4cbfc8dcbb59de9effb /src | |
parent | 9885bff5fb817031a9f8b73d0960f7ae5e3c3c2a (diff) | |
parent | 9ea60274efac6e4108118260015ab6070f59f66d (diff) |
Merge branch 'master' of github.com:grpc/grpc into ip_parse_refactor
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/ruby_generator.cc | 4 | ||||
-rw-r--r-- | src/compiler/ruby_generator_string-inl.h | 1 | ||||
-rw-r--r-- | src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs | 2 | ||||
-rw-r--r-- | src/php/ext/grpc/byte_buffer.c | 1 | ||||
-rw-r--r-- | src/php/ext/grpc/call.c | 8 | ||||
-rw-r--r-- | src/proto/grpc/binary_log/v1alpha/log.proto | 108 | ||||
-rw-r--r-- | src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb | 28 | ||||
-rw-r--r-- | src/ruby/spec/pb/duplicate/codegen_spec.rb | 71 |
8 files changed, 220 insertions, 3 deletions
diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc index 299137519f..5ac56ad289 100644 --- a/src/compiler/ruby_generator.cc +++ b/src/compiler/ruby_generator.cc @@ -55,11 +55,11 @@ namespace { // Prints out the method using the ruby gRPC DSL. void PrintMethod(const MethodDescriptor *method, const grpc::string &package, Printer *out) { - grpc::string input_type = RubyTypeOf(method->input_type()->name(), package); + grpc::string input_type = RubyTypeOf(method->input_type()->full_name(), package); if (method->client_streaming()) { input_type = "stream(" + input_type + ")"; } - grpc::string output_type = RubyTypeOf(method->output_type()->name(), package); + grpc::string output_type = RubyTypeOf(method->output_type()->full_name(), package); if (method->server_streaming()) { output_type = "stream(" + output_type + ")"; } diff --git a/src/compiler/ruby_generator_string-inl.h b/src/compiler/ruby_generator_string-inl.h index 8da3a88da2..d1ad871c1a 100644 --- a/src/compiler/ruby_generator_string-inl.h +++ b/src/compiler/ruby_generator_string-inl.h @@ -115,6 +115,7 @@ inline grpc::string RubyTypeOf(const grpc::string &a_type, return res; } else { std::vector<grpc::string> prefixes_and_type = Split(res, '.'); + res.clear(); for (unsigned int i = 0; i < prefixes_and_type.size(); ++i) { if (i != 0) { res += "::"; // switch '.' to the ruby module delim diff --git a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs index 0e4d9070d3..26af6311d5 100644 --- a/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs +++ b/src/csharp/Grpc.Core/Internal/NativeMetadataCredentialsPlugin.cs @@ -87,7 +87,7 @@ namespace Grpc.Core.Internal } } - private async void StartGetMetadata(AuthInterceptorContext context, IntPtr callbackPtr, IntPtr userDataPtr) + private async Task StartGetMetadata(AuthInterceptorContext context, IntPtr callbackPtr, IntPtr userDataPtr) { try { diff --git a/src/php/ext/grpc/byte_buffer.c b/src/php/ext/grpc/byte_buffer.c index 8be0a20607..7a726de5db 100644 --- a/src/php/ext/grpc/byte_buffer.c +++ b/src/php/ext/grpc/byte_buffer.c @@ -72,6 +72,7 @@ void byte_buffer_to_string(grpc_byte_buffer *buffer, char **out_string, while (grpc_byte_buffer_reader_next(&reader, &next) != 0) { memcpy(string + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next)); offset += GPR_SLICE_LENGTH(next); + gpr_slice_unref(next); } *out_string = string; *out_length = length; diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c index 024ab70571..a0f3d160c6 100644 --- a/src/php/ext/grpc/call.c +++ b/src/php/ext/grpc/call.c @@ -492,6 +492,14 @@ cleanup: if (status_details != NULL) { gpr_free(status_details); } + for (int i = 0; i < op_num; i++) { + if (ops[i].op == GRPC_OP_SEND_MESSAGE) { + grpc_byte_buffer_destroy(ops[i].data.send_message); + } + if (ops[i].op == GRPC_OP_RECV_MESSAGE) { + grpc_byte_buffer_destroy(message); + } + } RETURN_DESTROY_ZVAL(result); } diff --git a/src/proto/grpc/binary_log/v1alpha/log.proto b/src/proto/grpc/binary_log/v1alpha/log.proto new file mode 100644 index 0000000000..6cc473be74 --- /dev/null +++ b/src/proto/grpc/binary_log/v1alpha/log.proto @@ -0,0 +1,108 @@ +// 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"; + +import "google/protobuf/timestamp.proto" + +package grpc.binary_log.v1alpha; + +enum Direction { + SERVER_SEND; + SERVER_RECV; + CLIENT_SEND; + CLIENT_RECV; +} + +message KeyValuePair { + string key; + string value; +} + +// Any sort of metadata that may be sent in either direction during a call +message Metadata { + // Cryptographically unique identifier, generated on the client and sent + // to the server. + uint64 rpc_id = 1; + // Timestamp of logging the metadata + google.protobuf.Timestamp timestamp = 2; + Direction direction = 3; + // The actual metadata that is being sent + repeated KeyValuePair metadata = 4; + + // Initial metadata sent by the client to initiate a request + message ClientInitialMetadata { + // The full method name that is being called + string method_name = 1; + // The call's deadline + google.protobuf.Timestamp deadline = 2; + // The address of the connected peer + string peer = 3; + } + + // Arbitrary key/value pairs specified by the user that are not sent over + // the network but are nonetheless useful to log + message UserData { + } + + // Initial metadata response sent by the server after accepting the request + message ServerInitialMetadata { + } + + // Status sent by the server when closing the call on the server side + message ServerStatus { + // The status code + uint32 code = 1; + // The status details + string details = 2; + } + + oneof kind { + ClientInitialMetadata client_initial_metadata = 5; + UserData user_data = 6; + ServerInitialMetadata server_initial_metadata = 7; + ServerStatus server_status = 8; + } +} + +// A message that is sent during a call +message Message { + // Cryptographically unique identifier, generated on the client and sent + // to the server. + uint64 rpc_id = 1; + // The sequence number of the message. Messages sent by the client and by the + // server should have independently incrementing sequence numbers. + uint32 sequence_number = 2; + Direction direction = 3; + // The length of the complete message. + uint32 length = 4; + // The contents of the message. May be a prefix instead of the complete + // message. + bytes data = 5; +}
\ No newline at end of file diff --git a/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb b/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb new file mode 100644 index 0000000000..9f6e7e0e42 --- /dev/null +++ b/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb @@ -0,0 +1,28 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# Source: src/proto/grpc/testing/duplicate/echo_duplicate.proto for package 'grpc.testing.duplicate' + +require 'grpc' +require 'src/proto/grpc/testing/duplicate/echo_duplicate' + +module Grpc + module Testing + module Duplicate + module EchoTestService + + # TODO: add proto service documentation here + class Service + + include GRPC::GenericService + + self.marshal_class_method = :encode + self.unmarshal_class_method = :decode + self.service_name = 'grpc.testing.duplicate.EchoTestService' + + rpc :Echo, Grpc::Testing::EchoRequest, Grpc::Testing::EchoResponse + end + + Stub = Service.rpc_stub_class + end + end + end +end diff --git a/src/ruby/spec/pb/duplicate/codegen_spec.rb b/src/ruby/spec/pb/duplicate/codegen_spec.rb new file mode 100644 index 0000000000..54c136c510 --- /dev/null +++ b/src/ruby/spec/pb/duplicate/codegen_spec.rb @@ -0,0 +1,71 @@ +# 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. + +require 'open3' +require 'tmpdir' + +def can_run_codegen_check + system('which grpc_ruby_plugin') && system('which protoc') +end + +describe 'Ping protobuf code generation' do + if !can_run_codegen_check + skip 'protoc || grpc_ruby_plugin missing, cannot verify ping code-gen' + else + it 'should have the same content as created by code generation' do + root_dir = File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..') + + # Get the current content + service_path = File.join(root_dir, 'src', 'ruby', 'pb', 'grpc', + 'testing', 'duplicate', + 'echo_duplicate_services.rb') + want = nil + File.open(service_path) { |f| want = f.read } + + # Regenerate it + plugin, = Open3.capture2('which', 'grpc_ruby_plugin') + plugin = plugin.strip + got = nil + Dir.mktmpdir do |tmp_dir| + gen_out = File.join(tmp_dir, 'src', 'proto', 'grpc', 'testing', + 'duplicate', 'echo_duplicate_services.rb') + pid = spawn( + 'protoc', + '-I.', + 'src/proto/grpc/testing/duplicate/echo_duplicate.proto', + "--grpc_out=#{tmp_dir}", + "--plugin=protoc-gen-grpc=#{plugin}", + chdir: root_dir) + Process.wait(pid) + File.open(gen_out) { |f| got = f.read } + end + expect(got).to eq(want) + end + end +end |