Revert "Remove check and useless compatibility for older gRPC."

This reverts commit f1cc2f0459.
This commit is contained in:
Tao He 2023-01-31 11:47:07 +08:00
parent f1cc2f0459
commit 19186bb235
5 changed files with 189 additions and 34 deletions

View File

@ -122,7 +122,6 @@ else()
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindGRPC.cmake)
set(GRPC_LIBRARIES ${GPR_LIBRARY} ${GRPC_LIBRARY} ${GRPC_GRPC++_LIBRARY})
endif()
message("-- Found GRPC: ${GRPC_LIBRARIES} (found version: \"${gRPC_VERSION}\")")
# avoid use the apt-get installed libgrpc-dev (version v1.13) on Ubuntu 18.04
if(gRPC_FOUND AND gRPC_VERSION VERSION_LESS "1.14")
message(FATAL_ERROR "gRPC '${gRPC_VERSION}' is not supported, please install a newer gRPC library "
@ -153,6 +152,20 @@ check_cxx_compiler_flag(-Wno-c++17-extensions W_NO_CPP17_EXTENSIONS)
if(W_NO_CPP17_EXTENSIONS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++17-extensions")
endif()
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
set(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES} ${GRPC_INCLUDE_DIR}")
set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES} ${GRPC_LIBRARIES}")
set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
check_cxx_source_compiles("
#include <grpc++/grpc++.h>
namespace grpc { class Channel; }
int main() {}
" GRPC_CHANNEL_CLASS_FOUND)
if(GRPC_CHANNEL_CLASS_FOUND)
add_definitions(-DWITH_GRPC_CHANNEL_CLASS)
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
add_subdirectory(src)

View File

@ -55,7 +55,12 @@ namespace etcd
* @param arguments user provided grpc channel arguments.
*/
Client(std::string const & etcd_url,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
* Constructs an etcd client object.
@ -75,7 +80,12 @@ namespace etcd
* @param arguments user provided grpc channel arguments.
*/
static Client *WithUrl(std::string const & etcd_url,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
* Constructs an etcd client object.
@ -108,7 +118,12 @@ namespace etcd
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
* Constructs an etcd client object.
@ -141,7 +156,12 @@ namespace etcd
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
* Constructs an etcd client object.
@ -175,7 +195,12 @@ namespace etcd
std::string const & cert,
std::string const & privkey,
std::string const & target_name_override,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
* Constructs an etcd client object.
@ -211,11 +236,15 @@ namespace etcd
* @param arguments user provided grpc channel arguments.
*/
static Client *WithSSL(std::string const & etcd_url,
grpc::ChannelArguments const & arguments,
std::string const & ca,
std::string const & cert = "",
std::string const & privkey = "",
std::string const & target_name_override = "");
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments,
#else
grpc_impl::ChannelArguments const & arguments,
#endif
std::string const & ca,
std::string const & cert = "",
std::string const & privkey = "",
std::string const & target_name_override = "");
~Client();
@ -654,7 +683,11 @@ namespace etcd
/**
* Obtain the underlying gRPC channel.
*/
#if defined(WITH_GRPC_CHANNEL_CLASS)
std::shared_ptr<grpc::Channel> grpc_channel() const;
#else
std::shared_ptr<grpc_impl::Channel> grpc_channel() const;
#endif
/**
* Set a timeout value for grpc operations.

View File

@ -45,10 +45,17 @@ namespace etcdv3 {
}
}
#if defined(WITH_GRPC_CHANNEL_CLASS)
namespace grpc {
class Channel;
class ChannelArguments;
}
#else
namespace grpc_impl {
class Channel;
class ChannelArguments;
}
#endif
namespace etcd
{
@ -101,7 +108,12 @@ namespace etcd
* @param arguments user provided grpc channel arguments.
*/
SyncClient(std::string const & etcd_url,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
* Constructs an etcd client object.
@ -121,7 +133,12 @@ namespace etcd
* @param arguments user provided grpc channel arguments.
*/
static SyncClient *WithUrl(std::string const & etcd_url,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
* Constructs an etcd client object.
@ -154,7 +171,12 @@ namespace etcd
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
@ -188,7 +210,12 @@ namespace etcd
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
@ -223,7 +250,12 @@ namespace etcd
std::string const & cert,
std::string const & privkey,
std::string const & target_name_override,
grpc::ChannelArguments const & arguments);
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
);
/**
@ -260,11 +292,15 @@ namespace etcd
* @param arguments user provided grpc channel arguments.
*/
static SyncClient *WithSSL(std::string const & etcd_url,
grpc::ChannelArguments const & arguments,
std::string const & ca,
std::string const & cert = "",
std::string const & privkey = "",
std::string const & target_name_override = "");
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments,
#else
grpc_impl::ChannelArguments const & arguments,
#endif
std::string const & ca,
std::string const & cert = "",
std::string const & privkey = "",
std::string const & target_name_override = "");
~SyncClient();
@ -722,7 +758,11 @@ namespace etcd
/**
* Obtain the underlying gRPC channel.
*/
#if defined(WITH_GRPC_CHANNEL_CLASS)
std::shared_ptr<grpc::Channel> grpc_channel() const;
#else
std::shared_ptr<grpc_impl::Channel> grpc_channel() const;
#endif
/**
* Set a timeout value for grpc operations.
@ -740,7 +780,11 @@ namespace etcd
}
private:
#if defined(WITH_GRPC_CHANNEL_CLASS)
std::shared_ptr<grpc::Channel> channel;
#else
std::shared_ptr<grpc_impl::Channel> channel;
#endif
mutable std::unique_ptr<TokenAuthenticator, TokenAuthenticatorDeleter> token_authenticator;
mutable std::chrono::microseconds grpc_timeout = std::chrono::microseconds::zero();

View File

@ -82,7 +82,13 @@ etcd::Client::Client(std::string const & address,
}
etcd::Client::Client(std::string const & address,
grpc::ChannelArguments const & arguments)
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
)
{
this->own_client = true;
this->client = new SyncClient(address, arguments);
@ -94,7 +100,13 @@ etcd::Client *etcd::Client::WithUrl(std::string const & etcd_url,
}
etcd::Client *etcd::Client::WithUrl(std::string const & etcd_url,
grpc::ChannelArguments const & arguments) {
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
) {
return new etcd::Client(etcd_url, arguments);
}
@ -112,7 +124,13 @@ etcd::Client::Client(std::string const & address,
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments)
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
)
{
this->own_client = true;
this->client = new SyncClient(address, username, password, auth_token_ttl, arguments);
@ -130,7 +148,13 @@ etcd::Client *etcd::Client::WithUser(std::string const & etcd_url,
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments) {
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
) {
return new etcd::Client(etcd_url, username, password, auth_token_ttl, arguments);
}
@ -151,7 +175,13 @@ etcd::Client::Client(std::string const & address,
std::string const & cert,
std::string const & privkey,
std::string const & target_name_override,
grpc::ChannelArguments const & arguments)
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
)
{
this->own_client = true;
this->client = new SyncClient(address, ca, cert, privkey, target_name_override, arguments);
@ -167,7 +197,11 @@ etcd::Client *etcd::Client::WithSSL(std::string const & etcd_url,
}
etcd::Client *etcd::Client::WithSSL(std::string const & etcd_url,
grpc::ChannelArguments const & arguments,
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments,
#else
grpc_impl::ChannelArguments const & arguments,
#endif
std::string const & ca,
std::string const & cert,
std::string const & privkey,

View File

@ -271,7 +271,12 @@ etcd::SyncClient::SyncClient(std::string const & address,
}
etcd::SyncClient::SyncClient(std::string const & address,
grpc::ChannelArguments const & arguments)
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
)
{
// create channels
std::string const addresses = etcd::detail::strip_and_resolve_addresses(address);
@ -297,7 +302,12 @@ etcd::SyncClient *etcd::SyncClient::WithUrl(std::string const & etcd_url,
}
etcd::SyncClient *etcd::SyncClient::WithUrl(std::string const & etcd_url,
grpc::ChannelArguments const & arguments) {
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
) {
return new etcd::SyncClient(etcd_url, arguments);
}
@ -332,7 +342,13 @@ etcd::SyncClient::SyncClient(std::string const & address,
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments)
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
)
{
// create channels
std::string const addresses = etcd::detail::strip_and_resolve_addresses(address);
@ -366,7 +382,12 @@ etcd::SyncClient *etcd::SyncClient::WithUser(std::string const & etcd_url,
std::string const & username,
std::string const & password,
int const auth_token_ttl,
grpc::ChannelArguments const & arguments) {
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
) {
return new etcd::SyncClient(etcd_url, username, password, auth_token_ttl, arguments);
}
@ -406,7 +427,13 @@ etcd::SyncClient::SyncClient(std::string const & address,
std::string const & cert,
std::string const & privkey,
std::string const & target_name_override,
grpc::ChannelArguments const & arguments)
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments
#else
grpc_impl::ChannelArguments const & arguments
#endif
)
{
// create channels
std::string const addresses = etcd::detail::strip_and_resolve_addresses(address);
@ -440,7 +467,11 @@ etcd::SyncClient *etcd::SyncClient::WithSSL(std::string const & etcd_url,
}
etcd::SyncClient *etcd::SyncClient::WithSSL(std::string const & etcd_url,
grpc::ChannelArguments const & arguments,
#if defined(WITH_GRPC_CHANNEL_CLASS)
grpc::ChannelArguments const & arguments,
#else
grpc_impl::ChannelArguments const & arguments,
#endif
std::string const & ca,
std::string const & cert,
std::string const & privkey,