diff options
author | Vijay Pai <vpai@google.com> | 2016-08-30 10:20:20 -0700 |
---|---|---|
committer | Vijay Pai <vpai@google.com> | 2016-08-30 10:20:20 -0700 |
commit | de2aec810660c39b4fdf047d15b59bda64456373 (patch) | |
tree | 673ce1f8b9ff1c5ba169237154b7f42a1169bd0b /include | |
parent | 1ce6d33669fd1978f70e5aecb4ccb59fd0d5b2db (diff) | |
parent | 7684c74b3cb4dc0b9cc631410feeb2aff7a496b8 (diff) |
Merge branch 'master' into fc_unary
Resolve conflicts in ServerReaderWriterInterface
Remove file server_streamed_unary.h and merge with sync_stream.h
Diffstat (limited to 'include')
-rw-r--r-- | include/grpc++/create_channel.h | 1 | ||||
-rw-r--r-- | include/grpc++/ext/reflection.grpc.pb.h | 1 | ||||
-rw-r--r-- | include/grpc++/impl/codegen/client_context.h | 2 | ||||
-rw-r--r-- | include/grpc++/impl/codegen/completion_queue.h | 6 | ||||
-rw-r--r-- | include/grpc++/impl/codegen/method_handler_impl.h | 1 | ||||
-rw-r--r-- | include/grpc++/impl/codegen/server_context.h | 6 | ||||
-rw-r--r-- | include/grpc++/impl/codegen/server_streamed_unary.h | 90 | ||||
-rw-r--r-- | include/grpc++/impl/codegen/sync_stream.h | 116 | ||||
-rw-r--r-- | include/grpc++/support/server_streamed_unary.h | 39 | ||||
-rw-r--r-- | include/grpc/grpc.h | 3 |
10 files changed, 114 insertions, 151 deletions
diff --git a/include/grpc++/create_channel.h b/include/grpc++/create_channel.h index e9ccb51503..0537695ed2 100644 --- a/include/grpc++/create_channel.h +++ b/include/grpc++/create_channel.h @@ -48,7 +48,6 @@ namespace grpc { /// \param target The URI of the endpoint to connect to. /// \param creds Credentials to use for the created channel. If it does not hold /// an object or is invalid, a lame channel is returned. -/// \param args Options for channel creation. std::shared_ptr<Channel> CreateChannel( const grpc::string& target, const std::shared_ptr<ChannelCredentials>& creds); diff --git a/include/grpc++/ext/reflection.grpc.pb.h b/include/grpc++/ext/reflection.grpc.pb.h index 822c2e374a..dbf93f81f3 100644 --- a/include/grpc++/ext/reflection.grpc.pb.h +++ b/include/grpc++/ext/reflection.grpc.pb.h @@ -77,7 +77,6 @@ #include <grpc++/impl/codegen/method_handler_impl.h> #include <grpc++/impl/codegen/proto_utils.h> #include <grpc++/impl/codegen/rpc_method.h> -#include <grpc++/impl/codegen/server_streamed_unary.h> #include <grpc++/impl/codegen/service_type.h> #include <grpc++/impl/codegen/status.h> #include <grpc++/impl/codegen/stub_options.h> diff --git a/include/grpc++/impl/codegen/client_context.h b/include/grpc++/impl/codegen/client_context.h index 012bcc2bbe..fb10a3be1a 100644 --- a/include/grpc++/impl/codegen/client_context.h +++ b/include/grpc++/impl/codegen/client_context.h @@ -271,7 +271,7 @@ class ClientContext { /// Set \a algorithm to be the compression algorithm used for the client call. /// - /// \param algorith The compression algorithm used for the client call. + /// \param algorithm The compression algorithm used for the client call. void set_compression_algorithm(grpc_compression_algorithm algorithm); /// Return the peer uri in a string. diff --git a/include/grpc++/impl/codegen/completion_queue.h b/include/grpc++/impl/codegen/completion_queue.h index ea317a7a79..78bc5ca481 100644 --- a/include/grpc++/impl/codegen/completion_queue.h +++ b/include/grpc++/impl/codegen/completion_queue.h @@ -68,8 +68,10 @@ template <class R> class ServerReader; template <class W> class ServerWriter; +namespace internal { template <class W, class R> -class ServerReaderWriterInterface; +class ServerReaderWriterBody; +} template <class ServiceType, class RequestType, class ResponseType> class RpcMethodHandler; template <class ServiceType, class RequestType, class ResponseType> @@ -178,7 +180,7 @@ class CompletionQueue : private GrpcLibraryCodegen { template <class W> friend class ::grpc::ServerWriter; template <class W, class R> - friend class ::grpc::ServerReaderWriterInterface; + friend class ::grpc::internal::ServerReaderWriterBody; template <class ServiceType, class RequestType, class ResponseType> friend class RpcMethodHandler; template <class ServiceType, class RequestType, class ResponseType> diff --git a/include/grpc++/impl/codegen/method_handler_impl.h b/include/grpc++/impl/codegen/method_handler_impl.h index ef803483ea..170852606f 100644 --- a/include/grpc++/impl/codegen/method_handler_impl.h +++ b/include/grpc++/impl/codegen/method_handler_impl.h @@ -36,7 +36,6 @@ #include <grpc++/impl/codegen/core_codegen_interface.h> #include <grpc++/impl/codegen/rpc_service_method.h> -#include <grpc++/impl/codegen/server_streamed_unary.h> #include <grpc++/impl/codegen/sync_stream.h> namespace grpc { diff --git a/include/grpc++/impl/codegen/server_context.h b/include/grpc++/impl/codegen/server_context.h index 8e101c3f15..157971e7c5 100644 --- a/include/grpc++/impl/codegen/server_context.h +++ b/include/grpc++/impl/codegen/server_context.h @@ -65,8 +65,10 @@ template <class R> class ServerReader; template <class W> class ServerWriter; +namespace internal { template <class W, class R> -class ServerReaderWriterInterface; +class ServerReaderWriterBody; +} template <class ServiceType, class RequestType, class ResponseType> class RpcMethodHandler; template <class ServiceType, class RequestType, class ResponseType> @@ -183,7 +185,7 @@ class ServerContext { template <class W> friend class ::grpc::ServerWriter; template <class W, class R> - friend class ::grpc::ServerReaderWriterInterface; + friend class ::grpc::internal::ServerReaderWriterBody; template <class ServiceType, class RequestType, class ResponseType> friend class RpcMethodHandler; template <class ServiceType, class RequestType, class ResponseType> diff --git a/include/grpc++/impl/codegen/server_streamed_unary.h b/include/grpc++/impl/codegen/server_streamed_unary.h deleted file mode 100644 index a23e6020ed..0000000000 --- a/include/grpc++/impl/codegen/server_streamed_unary.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * - * 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 GRPCXX_IMPL_CODEGEN_SERVER_STREAMED_UNARY_H -#define GRPCXX_IMPL_CODEGEN_SERVER_STREAMED_UNARY_H - -#include <grpc++/impl/codegen/call.h> -#include <grpc++/impl/codegen/completion_queue.h> -#include <grpc++/impl/codegen/core_codegen_interface.h> -#include <grpc++/impl/codegen/server_context.h> -#include <grpc++/impl/codegen/sync_stream.h> - -namespace grpc { -/// A class to represent a flow-controlled unary call. This is something -/// of a hybrid between conventional unary and streaming. This is invoked -/// through a unary call on the client side, but the server responds to it -/// as though it were a single-ping-pong streaming call. The server can use -/// the \a NextMessageSize method to determine an upper-bound on the size of -/// the message. -/// A key difference relative to streaming: ServerUnaryStreamer -/// must have exactly 1 Read and exactly 1 Write, in that order, to function -/// correctly. Otherwise, the RPC is in error. -template <class RequestType, class ResponseType> -class ServerUnaryStreamer GRPC_FINAL - : public ServerReaderWriterInterface<ResponseType, RequestType> { - public: - ServerUnaryStreamer(Call* call, ServerContext* ctx) - : ServerReaderWriterInterface<ResponseType, RequestType>(call, ctx), - read_done_(false), - write_done_(false) {} - - ~ServerUnaryStreamer() {} - - bool Read(RequestType* request) GRPC_OVERRIDE { - if (read_done_) { - return false; - } - read_done_ = true; - return ServerReaderWriterInterface<ResponseType, RequestType>::Read( - request); - } - - using WriterInterface<ResponseType>::Write; - bool Write(const ResponseType& response, - const WriteOptions& options) GRPC_OVERRIDE { - if (write_done_ || !read_done_) { - return false; - } - write_done_ = true; - return ServerReaderWriterInterface<ResponseType, RequestType>::Write( - response, options); - } - - private: - bool read_done_; - bool write_done_; -}; -} // namespace grpc - -#endif // GRPCXX_IMPL_CODEGEN_SERVER_STREAMED_UNARY_H diff --git a/include/grpc++/impl/codegen/sync_stream.h b/include/grpc++/impl/codegen/sync_stream.h index d9b7e6fec5..5c775ec957 100644 --- a/include/grpc++/impl/codegen/sync_stream.h +++ b/include/grpc++/impl/codegen/sync_stream.h @@ -64,6 +64,15 @@ class ClientStreamingInterface { virtual Status Finish() = 0; }; +/// Common interface for all synchronous server side streaming. +class ServerStreamingInterface { + public: + virtual ~ServerStreamingInterface() {} + + /// Blocking send initial metadata to client. + virtual void SendInitialMetadata() = 0; +}; + /// An interface that yields a sequence of messages of type \a R. template <class R> class ReaderInterface { @@ -349,12 +358,17 @@ class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> { Call call_; }; +/// Server-side interface for streaming reads of message of type \a R. +template <class R> +class ServerReaderInterface : public ServerStreamingInterface, + public ReaderInterface<R> {}; + template <class R> -class ServerReader GRPC_FINAL : public ReaderInterface<R> { +class ServerReader GRPC_FINAL : public ServerReaderInterface<R> { public: ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {} - void SendInitialMetadata() { + void SendInitialMetadata() GRPC_OVERRIDE { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); CallOpSet<CallOpSendInitialMetadata> ops; @@ -385,12 +399,17 @@ class ServerReader GRPC_FINAL : public ReaderInterface<R> { ServerContext* const ctx_; }; +/// Server-side interface for streaming writes of message of type \a W. +template <class W> +class ServerWriterInterface : public ServerStreamingInterface, + public WriterInterface<W> {}; + template <class W> -class ServerWriter GRPC_FINAL : public WriterInterface<W> { +class ServerWriter GRPC_FINAL : public ServerWriterInterface<W> { public: ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {} - void SendInitialMetadata() { + void SendInitialMetadata() GRPC_OVERRIDE { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); CallOpSet<CallOpSendInitialMetadata> ops; @@ -429,12 +448,18 @@ class ServerWriter GRPC_FINAL : public WriterInterface<W> { /// Server-side interface for bi-directional streaming. template <class W, class R> -class ServerReaderWriterInterface : public WriterInterface<W>, - public ReaderInterface<R> { +class ServerReaderWriterInterface : public ServerStreamingInterface, + public WriterInterface<W>, + public ReaderInterface<R> {}; + +// Actual implementation of bi-directional streaming +namespace internal { +template <class W, class R> +class ServerReaderWriterBody GRPC_FINAL { public: - ServerReaderWriterInterface(Call* call, ServerContext* ctx) - : call_(call), ctx_(ctx) {} - virtual void SendInitialMetadata() { + ServerReaderWriterBody(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {} + + void SendInitialMetadata() { GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_); CallOpSet<CallOpSendInitialMetadata> ops; @@ -448,20 +473,19 @@ class ServerReaderWriterInterface : public WriterInterface<W>, call_->cq()->Pluck(&ops); } - virtual bool NextMessageSize(uint32_t* sz) GRPC_OVERRIDE { + bool NextMessageSize(uint32_t* sz) { *sz = call_->max_message_size(); return true; } - virtual bool Read(R* msg) GRPC_OVERRIDE { + bool Read(R* msg) { CallOpSet<CallOpRecvMessage<R>> ops; ops.RecvMessage(msg); call_->PerformOps(&ops); return call_->cq()->Pluck(&ops) && ops.got_message; } - using WriterInterface<W>::Write; - virtual bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE { + bool Write(const W& msg, const WriteOptions& options) { CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops; if (!ops.SendMessage(msg, options).ok()) { return false; @@ -482,12 +506,76 @@ class ServerReaderWriterInterface : public WriterInterface<W>, Call* const call_; ServerContext* const ctx_; }; +} +// class to represent the user API for a bidirectional streaming call template <class W, class R> class ServerReaderWriter GRPC_FINAL : public ServerReaderWriterInterface<W, R> { public: ServerReaderWriter(Call* call, ServerContext* ctx) - : ServerReaderWriterInterface<W, R>(call, ctx) {} + : body_(call, ctx) {} + + void SendInitialMetadata() GRPC_OVERRIDE { body_.SendInitialMetadata(); } + + bool NextMessageSize(uint32_t* sz) GRPC_OVERRIDE { + return body_.NextMessageSize(sz); + } + + bool Read(R* msg) GRPC_OVERRIDE { return body_.Read(msg); } + + using WriterInterface<W>::Write; + bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE { + return body_.Write(msg, options); + } + + private: + internal::ServerReaderWriterBody<W,R> body_; +}; + +/// A class to represent a flow-controlled unary call. This is something +/// of a hybrid between conventional unary and streaming. This is invoked +/// through a unary call on the client side, but the server responds to it +/// as though it were a single-ping-pong streaming call. The server can use +/// the \a NextMessageSize method to determine an upper-bound on the size of +/// the message. +/// A key difference relative to streaming: ServerUnaryStreamer +/// must have exactly 1 Read and exactly 1 Write, in that order, to function +/// correctly. Otherwise, the RPC is in error. +template <class RequestType, class ResponseType> +class ServerUnaryStreamer GRPC_FINAL + : public ServerReaderWriterInterface<ResponseType, RequestType> { + public: + ServerUnaryStreamer(Call* call, ServerContext* ctx) + : body_(call, ctx), read_done_(false), write_done_(false) {} + + void SendInitialMetadata() GRPC_OVERRIDE { body_.SendInitialMetadata(); } + + bool NextMessageSize(uint32_t* sz) GRPC_OVERRIDE { + return body_.NextMessageSize(sz); + } + + bool Read(RequestType* request) GRPC_OVERRIDE { + if (read_done_) { + return false; + } + read_done_ = true; + return body_.Read(request); + } + + using WriterInterface<ResponseType>::Write; + bool Write(const ResponseType& response, + const WriteOptions& options) GRPC_OVERRIDE { + if (write_done_ || !read_done_) { + return false; + } + write_done_ = true; + return body_.Write(response, options); + } + + private: + internal::ServerReaderWriterBody<ResponseType,RequestType> body_; + bool read_done_; + bool write_done_; }; } // namespace grpc diff --git a/include/grpc++/support/server_streamed_unary.h b/include/grpc++/support/server_streamed_unary.h deleted file mode 100644 index 109dfd4bca..0000000000 --- a/include/grpc++/support/server_streamed_unary.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * - * 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 GRPCXX_SUPPORT_SERVER_STREAMED_UNARY_H -#define GRPCXX_SUPPORT_SERVER_STREAMED_UNARY_H - -#include <grpc++/impl/codegen/server_streamed_unary.h> - -#endif // GRPCXX_SUPPORT_SERVER_STREAMED_UNARY_H diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h index 4ca018edb3..587d86c98f 100644 --- a/include/grpc/grpc.h +++ b/include/grpc/grpc.h @@ -90,6 +90,9 @@ GRPCAPI void grpc_shutdown(void); /** Return a string representing the current version of grpc */ GRPCAPI const char *grpc_version_string(void); +/** Return a string specifying what the 'g' in gRPC stands for */ +GRPCAPI const char *grpc_g_stands_for(void); + /** Create a completion queue */ GRPCAPI grpc_completion_queue *grpc_completion_queue_create(void *reserved); |