From c6326bbc753649ada893c659f68411883f9d854e Mon Sep 17 00:00:00 2001 From: Cheng-Yu Chung Date: Mon, 12 Sep 2022 18:19:59 -0400 Subject: [PATCH] Remove `include/grpcpp/impl/codegen/async_generic_service.h` (#30450) * Remove `include/grpcpp/impl/codegen/async_generic_service.h` * Fix test * Reserve compatibility --- .../grpcpp/generic/async_generic_service.h | 113 ++++++++++++++++- .../impl/codegen/async_generic_service.h | 116 +----------------- src/compiler/cpp_generator.cc | 2 +- test/cpp/codegen/compiler_test_golden | 2 +- 4 files changed, 117 insertions(+), 116 deletions(-) diff --git a/include/grpcpp/generic/async_generic_service.h b/include/grpcpp/generic/async_generic_service.h index 01c79428e26..5ff9826742c 100644 --- a/include/grpcpp/generic/async_generic_service.h +++ b/include/grpcpp/generic/async_generic_service.h @@ -19,6 +19,117 @@ #ifndef GRPCPP_GENERIC_ASYNC_GENERIC_SERVICE_H #define GRPCPP_GENERIC_ASYNC_GENERIC_SERVICE_H -#include // IWYU pragma: export +#include + +#include +#include +#include +#include + +struct grpc_server; + +namespace grpc { + +typedef ServerAsyncReaderWriter + GenericServerAsyncReaderWriter; +typedef ServerAsyncResponseWriter GenericServerAsyncResponseWriter; +typedef ServerAsyncReader GenericServerAsyncReader; +typedef ServerAsyncWriter GenericServerAsyncWriter; + +class GenericServerContext final : public ServerContext { + public: + const std::string& method() const { return method_; } + const std::string& host() const { return host_; } + + private: + friend class ServerInterface; + + std::string method_; + std::string host_; +}; + +// A generic service at the server side accepts all RPC methods and hosts. It is +// typically used in proxies. The generic service can be registered to a server +// which also has other services. +// Sample usage: +// ServerBuilder builder; +// auto cq = builder.AddCompletionQueue(); +// AsyncGenericService generic_service; +// builder.RegisterAsyncGenericService(&generic_service); +// auto server = builder.BuildAndStart(); +// +// // request a new call +// GenericServerContext context; +// GenericServerAsyncReaderWriter stream; +// generic_service.RequestCall(&context, &stream, cq.get(), cq.get(), tag); +// +// When tag is retrieved from cq->Next(), context.method() can be used to look +// at the method and the RPC can be handled accordingly. +class AsyncGenericService final { + public: + AsyncGenericService() : server_(nullptr) {} + + void RequestCall(GenericServerContext* ctx, + GenericServerAsyncReaderWriter* reader_writer, + grpc::CompletionQueue* call_cq, + grpc::ServerCompletionQueue* notification_cq, void* tag); + + private: + friend class grpc::Server; + grpc::Server* server_; +}; + +/// \a ServerGenericBidiReactor is the reactor class for bidi streaming RPCs +/// invoked on a CallbackGenericService. It is just a ServerBidi reactor with +/// ByteBuffer arguments. +using ServerGenericBidiReactor = ServerBidiReactor; + +class GenericCallbackServerContext final : public grpc::CallbackServerContext { + public: + const std::string& method() const { return method_; } + const std::string& host() const { return host_; } + + private: + friend class grpc::Server; + + std::string method_; + std::string host_; +}; + +/// \a CallbackGenericService is the base class for generic services implemented +/// using the callback API and registered through the ServerBuilder using +/// RegisterCallbackGenericService. +class CallbackGenericService { + public: + CallbackGenericService() {} + virtual ~CallbackGenericService() {} + + /// The "method handler" for the generic API. This function should be + /// overridden to provide a ServerGenericBidiReactor that implements the + /// application-level interface for this RPC. Unimplemented by default. + virtual ServerGenericBidiReactor* CreateReactor( + GenericCallbackServerContext* /*ctx*/) { + class Reactor : public ServerGenericBidiReactor { + public: + Reactor() { this->Finish(Status(StatusCode::UNIMPLEMENTED, "")); } + void OnDone() override { delete this; } + }; + return new Reactor; + } + + private: + friend class grpc::Server; + + internal::CallbackBidiHandler* Handler() { + return new internal::CallbackBidiHandler( + [this](grpc::CallbackServerContext* ctx) { + return CreateReactor(static_cast(ctx)); + }); + } + + grpc::Server* server_{nullptr}; +}; + +} // namespace grpc #endif // GRPCPP_GENERIC_ASYNC_GENERIC_SERVICE_H diff --git a/include/grpcpp/impl/codegen/async_generic_service.h b/include/grpcpp/impl/codegen/async_generic_service.h index 2a000662bcf..03a096c52be 100644 --- a/include/grpcpp/impl/codegen/async_generic_service.h +++ b/include/grpcpp/impl/codegen/async_generic_service.h @@ -19,119 +19,9 @@ #ifndef GRPCPP_IMPL_CODEGEN_ASYNC_GENERIC_SERVICE_H #define GRPCPP_IMPL_CODEGEN_ASYNC_GENERIC_SERVICE_H -// IWYU pragma: private, include +// IWYU pragma: private -#include - -#include -#include -#include -#include - -struct grpc_server; - -namespace grpc { - -typedef ServerAsyncReaderWriter - GenericServerAsyncReaderWriter; -typedef ServerAsyncResponseWriter GenericServerAsyncResponseWriter; -typedef ServerAsyncReader GenericServerAsyncReader; -typedef ServerAsyncWriter GenericServerAsyncWriter; - -class GenericServerContext final : public ServerContext { - public: - const std::string& method() const { return method_; } - const std::string& host() const { return host_; } - - private: - friend class ServerInterface; - - std::string method_; - std::string host_; -}; - -// A generic service at the server side accepts all RPC methods and hosts. It is -// typically used in proxies. The generic service can be registered to a server -// which also has other services. -// Sample usage: -// ServerBuilder builder; -// auto cq = builder.AddCompletionQueue(); -// AsyncGenericService generic_service; -// builder.RegisterAsyncGenericService(&generic_service); -// auto server = builder.BuildAndStart(); -// -// // request a new call -// GenericServerContext context; -// GenericServerAsyncReaderWriter stream; -// generic_service.RequestCall(&context, &stream, cq.get(), cq.get(), tag); -// -// When tag is retrieved from cq->Next(), context.method() can be used to look -// at the method and the RPC can be handled accordingly. -class AsyncGenericService final { - public: - AsyncGenericService() : server_(nullptr) {} - - void RequestCall(GenericServerContext* ctx, - GenericServerAsyncReaderWriter* reader_writer, - grpc::CompletionQueue* call_cq, - grpc::ServerCompletionQueue* notification_cq, void* tag); - - private: - friend class grpc::Server; - grpc::Server* server_; -}; - -/// \a ServerGenericBidiReactor is the reactor class for bidi streaming RPCs -/// invoked on a CallbackGenericService. It is just a ServerBidi reactor with -/// ByteBuffer arguments. -using ServerGenericBidiReactor = ServerBidiReactor; - -class GenericCallbackServerContext final : public grpc::CallbackServerContext { - public: - const std::string& method() const { return method_; } - const std::string& host() const { return host_; } - - private: - friend class grpc::Server; - - std::string method_; - std::string host_; -}; - -/// \a CallbackGenericService is the base class for generic services implemented -/// using the callback API and registered through the ServerBuilder using -/// RegisterCallbackGenericService. -class CallbackGenericService { - public: - CallbackGenericService() {} - virtual ~CallbackGenericService() {} - - /// The "method handler" for the generic API. This function should be - /// overridden to provide a ServerGenericBidiReactor that implements the - /// application-level interface for this RPC. Unimplemented by default. - virtual ServerGenericBidiReactor* CreateReactor( - GenericCallbackServerContext* /*ctx*/) { - class Reactor : public ServerGenericBidiReactor { - public: - Reactor() { this->Finish(Status(StatusCode::UNIMPLEMENTED, "")); } - void OnDone() override { delete this; } - }; - return new Reactor; - } - - private: - friend class grpc::Server; - - internal::CallbackBidiHandler* Handler() { - return new internal::CallbackBidiHandler( - [this](grpc::CallbackServerContext* ctx) { - return CreateReactor(static_cast(ctx)); - }); - } - - grpc::Server* server_{nullptr}; -}; - -} // namespace grpc +/// TODO(chengyuc): Remove this file after solving compatibility. +#include #endif // GRPCPP_IMPL_CODEGEN_ASYNC_GENERIC_SERVICE_H diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc index 1bad3781a82..844f4b6e520 100644 --- a/src/compiler/cpp_generator.cc +++ b/src/compiler/cpp_generator.cc @@ -137,7 +137,7 @@ std::string GetHeaderIncludes(grpc_generator::File* file, } static const char* headers_strs[] = { "functional", - "grpcpp/impl/codegen/async_generic_service.h", + "grpcpp/generic/async_generic_service.h", "grpcpp/impl/codegen/async_stream.h", "grpcpp/support/async_unary_call.h", "grpcpp/impl/codegen/client_callback.h", diff --git a/test/cpp/codegen/compiler_test_golden b/test/cpp/codegen/compiler_test_golden index ea5dc1023d4..5ee30a5535e 100644 --- a/test/cpp/codegen/compiler_test_golden +++ b/test/cpp/codegen/compiler_test_golden @@ -27,7 +27,7 @@ #include "src/proto/grpc/testing/compiler_test.pb.h" #include -#include +#include #include #include #include