diff options
author | Alexander Polcyn <apolcyn@google.com> | 2016-09-19 18:36:33 -0700 |
---|---|---|
committer | Alexander Polcyn <apolcyn@google.com> | 2016-09-20 11:00:36 -0700 |
commit | 689e89c2e6e7a118046f5bc14aea92e3655e3dfb (patch) | |
tree | 2261b00d057a517e80817073428760827131d51e /src/ruby/qps | |
parent | cc730a413768cfa545b1ad44d2c3eb4f027936c8 (diff) |
dont create extra thread on bidi call in benchmark, and change suggested
code for ruby bidi calls
Diffstat (limited to 'src/ruby/qps')
-rw-r--r-- | src/ruby/qps/qps-common.rb | 16 | ||||
-rw-r--r-- | src/ruby/qps/server.rb | 11 |
2 files changed, 17 insertions, 10 deletions
diff --git a/src/ruby/qps/qps-common.rb b/src/ruby/qps/qps-common.rb index 4119d600b1..4714ccfdb7 100644 --- a/src/ruby/qps/qps-common.rb +++ b/src/ruby/qps/qps-common.rb @@ -52,6 +52,7 @@ def load_test_certs files.map { |f| File.open(File.join(data_dir, f)).read } end + # A EnumeratorQueue wraps a Queue yielding the items added to it via each_item. class EnumeratorQueue extend Forwardable @@ -73,4 +74,19 @@ class EnumeratorQueue end end +# A PingPongEnumerator reads requests and responds one-by-one when enumerated +# via #each_item +class PingPongEnumerator + def initialize(reqs) + @reqs = reqs + end + def each_item + return enum_for(:each_item) unless block_given? + sr = Grpc::Testing::SimpleResponse + pl = Grpc::Testing::Payload + @reqs.each do |req| + yield sr.new(payload: pl.new(body: nulls(req.response_size))) + end + end +end diff --git a/src/ruby/qps/server.rb b/src/ruby/qps/server.rb index f51f86d9a9..d0c2073dd1 100644 --- a/src/ruby/qps/server.rb +++ b/src/ruby/qps/server.rb @@ -49,16 +49,7 @@ class BenchmarkServiceImpl < Grpc::Testing::BenchmarkService::Service sr.new(payload: pl.new(body: nulls(req.response_size))) end def streaming_call(reqs) - q = EnumeratorQueue.new(self) - Thread.new { - sr = Grpc::Testing::SimpleResponse - pl = Grpc::Testing::Payload - reqs.each do |req| - q.push(sr.new(payload: pl.new(body: nulls(req.response_size)))) - end - q.push(self) - } - q.each_item + PingPongEnumerator.new(reqs).each_item end end |