grpc 0.13.0.pre1.1-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/etc/roots.pem +5114 -0
- data/grpc_c.32.ruby +0 -0
- data/grpc_c.64.ruby +0 -0
- data/src/ruby/bin/apis/google/protobuf/empty.rb +44 -0
- data/src/ruby/bin/apis/pubsub_demo.rb +256 -0
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +174 -0
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +103 -0
- data/src/ruby/bin/grpc_ruby_interop_client +33 -0
- data/src/ruby/bin/grpc_ruby_interop_server +33 -0
- data/src/ruby/bin/interop/interop_client.rb +51 -0
- data/src/ruby/bin/interop/interop_server.rb +50 -0
- data/src/ruby/bin/math.rb +32 -0
- data/src/ruby/bin/math_client.rb +147 -0
- data/src/ruby/bin/math_server.rb +206 -0
- data/src/ruby/bin/math_services.rb +27 -0
- data/src/ruby/bin/noproto_client.rb +108 -0
- data/src/ruby/bin/noproto_server.rb +112 -0
- data/src/ruby/ext/grpc/extconf.rb +129 -0
- data/src/ruby/ext/grpc/rb_byte_buffer.c +70 -0
- data/src/ruby/ext/grpc/rb_byte_buffer.h +47 -0
- data/src/ruby/ext/grpc/rb_call.c +908 -0
- data/src/ruby/ext/grpc/rb_call.h +66 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +319 -0
- data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
- data/src/ruby/ext/grpc/rb_channel.c +432 -0
- data/src/ruby/ext/grpc/rb_channel.h +47 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +169 -0
- data/src/ruby/ext/grpc/rb_channel_args.h +53 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +268 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.h +47 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +183 -0
- data/src/ruby/ext/grpc/rb_completion_queue.h +55 -0
- data/src/ruby/ext/grpc/rb_event_thread.c +158 -0
- data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
- data/src/ruby/ext/grpc/rb_grpc.c +336 -0
- data/src/ruby/ext/grpc/rb_grpc.h +85 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
- data/src/ruby/ext/grpc/rb_loader.c +72 -0
- data/src/ruby/ext/grpc/rb_loader.h +40 -0
- data/src/ruby/ext/grpc/rb_server.c +400 -0
- data/src/ruby/ext/grpc/rb_server.h +47 -0
- data/src/ruby/ext/grpc/rb_server_credentials.c +284 -0
- data/src/ruby/ext/grpc/rb_server_credentials.h +47 -0
- data/src/ruby/lib/grpc.rb +44 -0
- data/src/ruby/lib/grpc/2.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.2/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.3/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/core/time_consts.rb +71 -0
- data/src/ruby/lib/grpc/errors.rb +62 -0
- data/src/ruby/lib/grpc/generic/active_call.rb +488 -0
- data/src/ruby/lib/grpc/generic/bidi_call.rb +218 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +471 -0
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +147 -0
- data/src/ruby/lib/grpc/generic/rpc_server.rb +504 -0
- data/src/ruby/lib/grpc/generic/service.rb +234 -0
- data/src/ruby/lib/grpc/grpc.rb +34 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/logconfig.rb +59 -0
- data/src/ruby/lib/grpc/notifier.rb +60 -0
- data/src/ruby/lib/grpc/version.rb +33 -0
- data/src/ruby/pb/README.md +42 -0
- data/src/ruby/pb/generate_proto_ruby.sh +51 -0
- data/src/ruby/pb/grpc/health/checker.rb +75 -0
- data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
- data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
- data/src/ruby/pb/test/client.rb +469 -0
- data/src/ruby/pb/test/proto/empty.rb +15 -0
- data/src/ruby/pb/test/proto/messages.rb +80 -0
- data/src/ruby/pb/test/proto/test.rb +14 -0
- data/src/ruby/pb/test/proto/test_services.rb +64 -0
- data/src/ruby/pb/test/server.rb +253 -0
- data/src/ruby/spec/call_credentials_spec.rb +57 -0
- data/src/ruby/spec/call_spec.rb +163 -0
- data/src/ruby/spec/channel_credentials_spec.rb +97 -0
- data/src/ruby/spec/channel_spec.rb +177 -0
- data/src/ruby/spec/client_server_spec.rb +475 -0
- data/src/ruby/spec/completion_queue_spec.rb +42 -0
- data/src/ruby/spec/generic/active_call_spec.rb +373 -0
- data/src/ruby/spec/generic/client_stub_spec.rb +476 -0
- data/src/ruby/spec/generic/rpc_desc_spec.rb +331 -0
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +138 -0
- data/src/ruby/spec/generic/rpc_server_spec.rb +576 -0
- data/src/ruby/spec/generic/service_spec.rb +345 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +232 -0
- data/src/ruby/spec/server_credentials_spec.rb +94 -0
- data/src/ruby/spec/server_spec.rb +209 -0
- data/src/ruby/spec/spec_helper.rb +69 -0
- data/src/ruby/spec/testdata/README +1 -0
- data/src/ruby/spec/testdata/ca.pem +15 -0
- data/src/ruby/spec/testdata/server1.key +16 -0
- data/src/ruby/spec/testdata/server1.pem +16 -0
- data/src/ruby/spec/time_consts_spec.rb +89 -0
- metadata +320 -0
@@ -0,0 +1,234 @@
|
|
1
|
+
# Copyright 2015, Google Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are
|
6
|
+
# met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright
|
9
|
+
# notice, this list of conditions and the following disclaimer.
|
10
|
+
# * Redistributions in binary form must reproduce the above
|
11
|
+
# copyright notice, this list of conditions and the following disclaimer
|
12
|
+
# in the documentation and/or other materials provided with the
|
13
|
+
# distribution.
|
14
|
+
# * Neither the name of Google Inc. nor the names of its
|
15
|
+
# contributors may be used to endorse or promote products derived from
|
16
|
+
# this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
|
30
|
+
require 'grpc/generic/client_stub'
|
31
|
+
require 'grpc/generic/rpc_desc'
|
32
|
+
|
33
|
+
# GRPC contains the General RPC module.
|
34
|
+
module GRPC
|
35
|
+
# Provides behaviour used to implement schema-derived service classes.
|
36
|
+
#
|
37
|
+
# Is intended to be used to support both client and server
|
38
|
+
# IDL-schema-derived servers.
|
39
|
+
module GenericService
|
40
|
+
# creates a new string that is the underscore separate version of s.
|
41
|
+
#
|
42
|
+
# E.g,
|
43
|
+
# PrintHTML -> print_html
|
44
|
+
# AMethod -> a_method
|
45
|
+
# AnRpc -> an_rpc
|
46
|
+
#
|
47
|
+
# @param s [String] the string to be converted.
|
48
|
+
def self.underscore(s)
|
49
|
+
s.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
50
|
+
s.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
51
|
+
s.tr!('-', '_')
|
52
|
+
s.downcase!
|
53
|
+
s
|
54
|
+
end
|
55
|
+
|
56
|
+
# Used to indicate that a name has already been specified
|
57
|
+
class DuplicateRpcName < StandardError
|
58
|
+
def initialize(name)
|
59
|
+
super("rpc (#{name}) is already defined")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Provides a simple DSL to describe RPC services.
|
64
|
+
#
|
65
|
+
# E.g, a Maths service that uses the serializable messages DivArgs,
|
66
|
+
# DivReply and Num might define its endpoint uses the following way:
|
67
|
+
#
|
68
|
+
# rpc :div DivArgs, DivReply # single request, single response
|
69
|
+
# rpc :sum stream(Num), Num # streamed input, single response
|
70
|
+
# rpc :fib FibArgs, stream(Num) # single request, streamed response
|
71
|
+
# rpc :div_many stream(DivArgs), stream(DivReply)
|
72
|
+
# # streamed req and resp
|
73
|
+
#
|
74
|
+
# Each 'rpc' adds an RpcDesc to classes including this module, and
|
75
|
+
# #assert_rpc_descs_have_methods is used to ensure the including class
|
76
|
+
# provides methods with signatures that support all the descriptors.
|
77
|
+
module Dsl
|
78
|
+
# This configures the method names that the serializable message
|
79
|
+
# implementation uses to marshal and unmarshal messages.
|
80
|
+
#
|
81
|
+
# - unmarshal_class method must be a class method on the serializable
|
82
|
+
# message type that takes a string (byte stream) and produces and object
|
83
|
+
#
|
84
|
+
# - marshal_class_method is called on a serializable message instance
|
85
|
+
# and produces a serialized string.
|
86
|
+
#
|
87
|
+
# The Dsl verifies that the types in the descriptor have both the
|
88
|
+
# unmarshal and marshal methods.
|
89
|
+
attr_writer(:marshal_class_method, :unmarshal_class_method)
|
90
|
+
|
91
|
+
# This allows configuration of the service name.
|
92
|
+
attr_accessor(:service_name)
|
93
|
+
|
94
|
+
# Adds an RPC spec.
|
95
|
+
#
|
96
|
+
# Takes the RPC name and the classes representing the types to be
|
97
|
+
# serialized, and adds them to the including classes rpc_desc hash.
|
98
|
+
#
|
99
|
+
# input and output should both have the methods #marshal and #unmarshal
|
100
|
+
# that are responsible for writing and reading an object instance from a
|
101
|
+
# byte buffer respectively.
|
102
|
+
#
|
103
|
+
# @param name [String] the name of the rpc
|
104
|
+
# @param input [Object] the input parameter's class
|
105
|
+
# @param output [Object] the output parameter's class
|
106
|
+
def rpc(name, input, output)
|
107
|
+
fail(DuplicateRpcName, name) if rpc_descs.key? name
|
108
|
+
assert_can_marshal(input)
|
109
|
+
assert_can_marshal(output)
|
110
|
+
rpc_descs[name] = RpcDesc.new(name, input, output,
|
111
|
+
marshal_class_method,
|
112
|
+
unmarshal_class_method)
|
113
|
+
end
|
114
|
+
|
115
|
+
def inherited(subclass)
|
116
|
+
# Each subclass should have a distinct class variable with its own
|
117
|
+
# rpc_descs
|
118
|
+
subclass.rpc_descs.merge!(rpc_descs)
|
119
|
+
subclass.service_name = service_name
|
120
|
+
end
|
121
|
+
|
122
|
+
# the name of the instance method used to marshal events to a byte
|
123
|
+
# stream.
|
124
|
+
def marshal_class_method
|
125
|
+
@marshal_class_method ||= :marshal
|
126
|
+
end
|
127
|
+
|
128
|
+
# the name of the class method used to unmarshal from a byte stream.
|
129
|
+
def unmarshal_class_method
|
130
|
+
@unmarshal_class_method ||= :unmarshal
|
131
|
+
end
|
132
|
+
|
133
|
+
def assert_can_marshal(cls)
|
134
|
+
cls = cls.type if cls.is_a? RpcDesc::Stream
|
135
|
+
mth = unmarshal_class_method
|
136
|
+
unless cls.methods.include? mth
|
137
|
+
fail(ArgumentError, "#{cls} needs #{cls}.#{mth}")
|
138
|
+
end
|
139
|
+
mth = marshal_class_method
|
140
|
+
return if cls.methods.include? mth
|
141
|
+
fail(ArgumentError, "#{cls} needs #{cls}.#{mth}")
|
142
|
+
end
|
143
|
+
|
144
|
+
# @param cls [Class] the class of a serializable type
|
145
|
+
# @return cls wrapped in a RpcDesc::Stream
|
146
|
+
def stream(cls)
|
147
|
+
assert_can_marshal(cls)
|
148
|
+
RpcDesc::Stream.new(cls)
|
149
|
+
end
|
150
|
+
|
151
|
+
# the RpcDescs defined for this GenericService, keyed by name.
|
152
|
+
def rpc_descs
|
153
|
+
@rpc_descs ||= {}
|
154
|
+
end
|
155
|
+
|
156
|
+
# Creates a rpc client class with methods for accessing the methods
|
157
|
+
# currently in rpc_descs.
|
158
|
+
def rpc_stub_class
|
159
|
+
descs = rpc_descs
|
160
|
+
route_prefix = service_name
|
161
|
+
Class.new(ClientStub) do
|
162
|
+
# @param host [String] the host the stub connects to
|
163
|
+
# @param creds [Core::ChannelCredentials|Symbol] The channel
|
164
|
+
# credentials to use, or :this_channel_is_insecure otherwise
|
165
|
+
# @param kw [KeywordArgs] the channel arguments, plus any optional
|
166
|
+
# args for configuring the client's channel
|
167
|
+
def initialize(host, creds, **kw)
|
168
|
+
super(host, Core::CompletionQueue.new, creds, **kw)
|
169
|
+
end
|
170
|
+
|
171
|
+
# Used define_method to add a method for each rpc_desc. Each method
|
172
|
+
# calls the base class method for the given descriptor.
|
173
|
+
descs.each_pair do |name, desc|
|
174
|
+
mth_name = GenericService.underscore(name.to_s).to_sym
|
175
|
+
marshal = desc.marshal_proc
|
176
|
+
unmarshal = desc.unmarshal_proc(:output)
|
177
|
+
route = "/#{route_prefix}/#{name}"
|
178
|
+
if desc.request_response?
|
179
|
+
define_method(mth_name) do |req, **kw|
|
180
|
+
GRPC.logger.debug("calling #{@host}:#{route}")
|
181
|
+
request_response(route, req, marshal, unmarshal, **kw)
|
182
|
+
end
|
183
|
+
elsif desc.client_streamer?
|
184
|
+
define_method(mth_name) do |reqs, **kw|
|
185
|
+
GRPC.logger.debug("calling #{@host}:#{route}")
|
186
|
+
client_streamer(route, reqs, marshal, unmarshal, **kw)
|
187
|
+
end
|
188
|
+
elsif desc.server_streamer?
|
189
|
+
define_method(mth_name) do |req, **kw, &blk|
|
190
|
+
GRPC.logger.debug("calling #{@host}:#{route}")
|
191
|
+
server_streamer(route, req, marshal, unmarshal, **kw, &blk)
|
192
|
+
end
|
193
|
+
else # is a bidi_stream
|
194
|
+
define_method(mth_name) do |reqs, **kw, &blk|
|
195
|
+
GRPC.logger.debug("calling #{@host}:#{route}")
|
196
|
+
bidi_streamer(route, reqs, marshal, unmarshal, **kw, &blk)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
# Asserts that the appropriate methods are defined for each added rpc
|
204
|
+
# spec. Is intended to aid verifying that server classes are correctly
|
205
|
+
# implemented.
|
206
|
+
def assert_rpc_descs_have_methods
|
207
|
+
rpc_descs.each_pair do |m, spec|
|
208
|
+
mth_name = GenericService.underscore(m.to_s).to_sym
|
209
|
+
unless instance_methods.include?(mth_name)
|
210
|
+
fail "#{self} does not provide instance method '#{mth_name}'"
|
211
|
+
end
|
212
|
+
spec.assert_arity_matches(instance_method(mth_name))
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
def self.included(o)
|
218
|
+
o.extend(Dsl)
|
219
|
+
# Update to the use the service name including module. Provide a default
|
220
|
+
# that can be nil e.g. when modules are declared dynamically.
|
221
|
+
return unless o.service_name.nil?
|
222
|
+
if o.name.nil?
|
223
|
+
o.service_name = 'GenericService'
|
224
|
+
else
|
225
|
+
modules = o.name.split('::')
|
226
|
+
if modules.length > 2
|
227
|
+
o.service_name = modules[modules.length - 2]
|
228
|
+
else
|
229
|
+
o.service_name = modules.first
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright 2015-2016, Google Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are
|
6
|
+
# met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright
|
9
|
+
# notice, this list of conditions and the following disclaimer.
|
10
|
+
# * Redistributions in binary form must reproduce the above
|
11
|
+
# copyright notice, this list of conditions and the following disclaimer
|
12
|
+
# in the documentation and/or other materials provided with the
|
13
|
+
# distribution.
|
14
|
+
# * Neither the name of Google Inc. nor the names of its
|
15
|
+
# contributors may be used to endorse or promote products derived from
|
16
|
+
# this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
|
30
|
+
begin
|
31
|
+
require "grpc/#{RUBY_VERSION.sub(/\.\d$/, '')}/grpc_c"
|
32
|
+
rescue LoadError
|
33
|
+
require 'grpc/grpc_c'
|
34
|
+
end
|
Binary file
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Copyright 2015, Google Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are
|
6
|
+
# met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright
|
9
|
+
# notice, this list of conditions and the following disclaimer.
|
10
|
+
# * Redistributions in binary form must reproduce the above
|
11
|
+
# copyright notice, this list of conditions and the following disclaimer
|
12
|
+
# in the documentation and/or other materials provided with the
|
13
|
+
# distribution.
|
14
|
+
# * Neither the name of Google Inc. nor the names of its
|
15
|
+
# contributors may be used to endorse or promote products derived from
|
16
|
+
# this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
|
30
|
+
# GRPC contains the General RPC module.
|
31
|
+
module GRPC
|
32
|
+
# DefaultLogger is a module included in GRPC if no other logging is set up for
|
33
|
+
# it. See ../spec/spec_helpers an example of where other logging is added.
|
34
|
+
module DefaultLogger
|
35
|
+
def logger
|
36
|
+
LOGGER
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# NoopLogger implements the methods of Ruby's conventional logging interface
|
42
|
+
# that are actually used internally within gRPC with a noop implementation.
|
43
|
+
class NoopLogger
|
44
|
+
def info(_ignored)
|
45
|
+
end
|
46
|
+
|
47
|
+
def debug(_ignored)
|
48
|
+
end
|
49
|
+
|
50
|
+
def warn(_ignored)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
LOGGER = NoopLogger.new
|
55
|
+
end
|
56
|
+
|
57
|
+
# Inject the noop #logger if no module-level logger method has been injected.
|
58
|
+
extend DefaultLogger unless methods.include?(:logger)
|
59
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Copyright 2015, Google Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are
|
6
|
+
# met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright
|
9
|
+
# notice, this list of conditions and the following disclaimer.
|
10
|
+
# * Redistributions in binary form must reproduce the above
|
11
|
+
# copyright notice, this list of conditions and the following disclaimer
|
12
|
+
# in the documentation and/or other materials provided with the
|
13
|
+
# distribution.
|
14
|
+
# * Neither the name of Google Inc. nor the names of its
|
15
|
+
# contributors may be used to endorse or promote products derived from
|
16
|
+
# this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
|
30
|
+
# GRPC contains the General RPC module.
|
31
|
+
module GRPC
|
32
|
+
# Notifier is useful high-level synchronization primitive.
|
33
|
+
class Notifier
|
34
|
+
attr_reader :payload, :notified
|
35
|
+
alias_method :notified?, :notified
|
36
|
+
|
37
|
+
def initialize
|
38
|
+
@mutex = Mutex.new
|
39
|
+
@cvar = ConditionVariable.new
|
40
|
+
@notified = false
|
41
|
+
@payload = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def wait
|
45
|
+
@mutex.synchronize do
|
46
|
+
@cvar.wait(@mutex) until notified?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def notify(payload)
|
51
|
+
@mutex.synchronize do
|
52
|
+
return Error.new('already notified') if notified?
|
53
|
+
@payload = payload
|
54
|
+
@notified = true
|
55
|
+
@cvar.signal
|
56
|
+
return nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Copyright 2015-2016, Google Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are
|
6
|
+
# met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright
|
9
|
+
# notice, this list of conditions and the following disclaimer.
|
10
|
+
# * Redistributions in binary form must reproduce the above
|
11
|
+
# copyright notice, this list of conditions and the following disclaimer
|
12
|
+
# in the documentation and/or other materials provided with the
|
13
|
+
# distribution.
|
14
|
+
# * Neither the name of Google Inc. nor the names of its
|
15
|
+
# contributors may be used to endorse or promote products derived from
|
16
|
+
# this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
|
30
|
+
# GRPC contains the General RPC module.
|
31
|
+
module GRPC
|
32
|
+
VERSION = '0.13.0.pre1.1'
|
33
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Protocol Buffers
|
2
|
+
================
|
3
|
+
|
4
|
+
This folder contains protocol buffers provided with gRPC ruby, and the generated
|
5
|
+
code to them.
|
6
|
+
|
7
|
+
PREREQUISITES
|
8
|
+
-------------
|
9
|
+
|
10
|
+
The code is is generated using the protoc (> 3.0.0.alpha.1) and the
|
11
|
+
grpc_ruby_plugin. These must be installed to regenerate the IDL defined
|
12
|
+
classes, but that's not necessary just to use them.
|
13
|
+
|
14
|
+
health_check/v1alpha
|
15
|
+
--------------------
|
16
|
+
|
17
|
+
This package defines the surface of a simple health check service that gRPC
|
18
|
+
servers may choose to implement, and provides an implementation for it. To
|
19
|
+
re-generate the surface.
|
20
|
+
|
21
|
+
```bash
|
22
|
+
$ # (from this directory)
|
23
|
+
$ protoc -I ../../proto ../../proto/grpc/health/v1alpha/health.proto \
|
24
|
+
--grpc_out=. \
|
25
|
+
--ruby_out=. \
|
26
|
+
--plugin=protoc-gen-grpc=`which grpc_ruby_plugin`
|
27
|
+
```
|
28
|
+
|
29
|
+
test
|
30
|
+
----
|
31
|
+
|
32
|
+
This package defines the surface of the gRPC interop test service and client
|
33
|
+
To re-generate the surface, it's necessary to have checked-out versions of
|
34
|
+
the grpc interop test proto, e.g, by having the full gRPC repository. E.g,
|
35
|
+
|
36
|
+
```bash
|
37
|
+
$ # (from this directory within the grpc repo)
|
38
|
+
$ protoc -I../../.. ../../../test/proto/{messages,test,empty}.proto \
|
39
|
+
--grpc_out=. \
|
40
|
+
--ruby_out=. \
|
41
|
+
--plugin=protoc-gen-grpc=`which grpc_ruby_plugin`
|
42
|
+
```
|