aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ruby/lib
diff options
context:
space:
mode:
authorGravatar Tim Emiola <temiola@google.com>2015-04-17 14:46:36 -0700
committerGravatar Tim Emiola <temiola@google.com>2015-04-17 14:46:36 -0700
commit9a0ae0380c71811a44789901583929a1fe9daa83 (patch)
treeb761b8e2b53b8880b2ef6d411049a9f4274aaad7 /src/ruby/lib
parent8661a43f784e6c2689466355dd5a0bdab4567346 (diff)
Adds support for updating the output metadata to calls
Diffstat (limited to 'src/ruby/lib')
-rw-r--r--src/ruby/lib/grpc/generic/active_call.rb21
-rw-r--r--src/ruby/lib/grpc/generic/rpc_desc.rb2
2 files changed, 16 insertions, 7 deletions
diff --git a/src/ruby/lib/grpc/generic/active_call.rb b/src/ruby/lib/grpc/generic/active_call.rb
index 274372e4d5..43ba549905 100644
--- a/src/ruby/lib/grpc/generic/active_call.rb
+++ b/src/ruby/lib/grpc/generic/active_call.rb
@@ -122,6 +122,12 @@ module GRPC
@metadata_tag = metadata_tag
end
+ # output_metadata are provides access to hash that can be used to
+ # save metadata to be sent as trailer
+ def output_metadata
+ @output_metadata ||= {}
+ end
+
# multi_req_view provides a restricted view of this ActiveCall for use
# in a server client-streaming handler.
def multi_req_view
@@ -164,10 +170,12 @@ module GRPC
def finished
batch_result = @call.run_batch(@cq, self, INFINITE_FUTURE,
RECV_STATUS_ON_CLIENT => nil)
- if @call.metadata.nil?
- @call.metadata = batch_result.metadata
- elsif !batch_result.metadata.nil?
- @call.metadata.merge!(batch_result.metadata)
+ unless batch_result.status.nil?
+ if @call.metadata.nil?
+ @call.metadata = batch_result.status.metadata
+ else
+ @call.metadata.merge!(batch_result.status.metadata)
+ end
end
batch_result.check_status
end
@@ -445,12 +453,13 @@ module GRPC
# SingleReqView limits access to an ActiveCall's methods for use in server
# handlers that receive just one request.
- SingleReqView = view_class(:cancelled, :deadline, :metadata)
+ SingleReqView = view_class(:cancelled, :deadline, :metadata,
+ :output_metadata)
# MultiReqView limits access to an ActiveCall's methods for use in
# server client_streamer handlers.
MultiReqView = view_class(:cancelled, :deadline, :each_queued_msg,
- :each_remote_read, :metadata)
+ :each_remote_read, :metadata, :output_metadata)
# Operation limits access to an ActiveCall's methods for use as
# a Operation on the client.
diff --git a/src/ruby/lib/grpc/generic/rpc_desc.rb b/src/ruby/lib/grpc/generic/rpc_desc.rb
index 22b80d8938..10211ae239 100644
--- a/src/ruby/lib/grpc/generic/rpc_desc.rb
+++ b/src/ruby/lib/grpc/generic/rpc_desc.rb
@@ -80,7 +80,7 @@ module GRPC
else # is a bidi_stream
active_call.run_server_bidi(mth)
end
- send_status(active_call, OK, 'OK')
+ send_status(active_call, OK, 'OK', **active_call.output_metadata)
rescue BadStatus => e
# this is raised by handlers that want GRPC to send an application error
# code and detail message and some additional app-specific metadata.