From b2394dcb4dff6fd70fa03ec9ebd8d3e3efc65e79 Mon Sep 17 00:00:00 2001 From: jai1 Date: Mon, 13 Mar 2017 20:47:26 +0000 Subject: [PATCH] Trying to fix CPP CLient ABI with minimal changes. --- pulsar-client-cpp/.gitignore | 1 + pulsar-client-cpp/CMakeLists.txt | 10 +++- .../pulsar/{Auth.h => Authentication.h} | 51 ++++--------------- pulsar-client-cpp/include/pulsar/Client.h | 37 ++++++++++++-- pulsar-client-cpp/include/pulsar/Message.h | 15 ++---- .../lib/{Auth.cc => Authentication.cc} | 26 +++++----- .../lib/BinaryProtoLookupService.h | 2 +- pulsar-client-cpp/lib/CMakeLists.txt | 10 ++-- pulsar-client-cpp/lib/Client.cc | 26 +++++++--- pulsar-client-cpp/lib/Commands.h | 2 +- pulsar-client-cpp/lib/auth/AuthTls.h | 2 +- pulsar-client-cpp/perf/PerfConsumer.cc | 6 +-- pulsar-client-cpp/perf/PerfProducer.cc | 6 +-- pulsar-client-cpp/tests/AuthPluginTest.cc | 10 ++-- pulsar-client-cpp/tests/BasicEndToEndTest.cc | 2 +- .../tests/BinaryLookupServiceTest.cc | 4 +- 16 files changed, 114 insertions(+), 96 deletions(-) rename pulsar-client-cpp/include/pulsar/{Auth.h => Authentication.h} (71%) rename pulsar-client-cpp/lib/{Auth.cc => Authentication.cc} (81%) diff --git a/pulsar-client-cpp/.gitignore b/pulsar-client-cpp/.gitignore index 86cfc587758c6..3c0a6723f63e1 100644 --- a/pulsar-client-cpp/.gitignore +++ b/pulsar-client-cpp/.gitignore @@ -8,6 +8,7 @@ # Compiled Dynamic libraries *.so +lib*.so* *.dylib *.dll *.so.1 diff --git a/pulsar-client-cpp/CMakeLists.txt b/pulsar-client-cpp/CMakeLists.txt index 35f52d06d2fe2..26d88c41e1a95 100644 --- a/pulsar-client-cpp/CMakeLists.txt +++ b/pulsar-client-cpp/CMakeLists.txt @@ -33,6 +33,8 @@ find_library(CURL_LIBRARY_PATH curl) find_path(LOG4CXX_INCLUDE_PATH log4cxx/logger.h) find_path(GTEST_INCLUDE_PATH gtest/gtest.h) +set(ADDITIONAL_LIBRARIES $ENV{PULSAR_ADDITIONAL_LIBRARIES}) +link_directories( $ENV{PULSAR_ADDITIONAL_LIBRARY_PATH} ) include_directories( ${CMAKE_SOURCE_DIR} @@ -53,13 +55,19 @@ set(COMMON_LIBS ${PROTOBUF_LIBRARIES} ${LOG4CXX_LIBRARY_PATH} ${CURL_LIBRARY_PATH} + ${ADDITIONAL_LIBRARIES} ) link_directories(${CMAKE_BINARY_DIR}/lib) +set(LIB_NAME $ENV{PULSAR_LIBRARY_NAME}) +if (NOT LIB_NAME) + set(LIB_NAME pulsar) +endif(NOT LIB_NAME) + set(CLIENT_LIBS ${COMMON_LIBS} - pulsar + ${LIB_NAME} ) add_subdirectory(lib) diff --git a/pulsar-client-cpp/include/pulsar/Auth.h b/pulsar-client-cpp/include/pulsar/Authentication.h similarity index 71% rename from pulsar-client-cpp/include/pulsar/Auth.h rename to pulsar-client-cpp/include/pulsar/Authentication.h index deddfe7b71f5c..2456e6d55eb71 100644 --- a/pulsar-client-cpp/include/pulsar/Auth.h +++ b/pulsar-client-cpp/include/pulsar/Authentication.h @@ -14,39 +14,22 @@ * limitations under the License. */ -#ifndef PULSAR_AUTH_H_ -#define PULSAR_AUTH_H_ +#ifndef PULSAR_AUTHENTICATION_H_ +#define PULSAR_AUTHENTICATION_H_ #include #include #include #include #include +#include #pragma GCC visibility push(default) namespace pulsar { -#ifdef PULSAR_ENABLE_DEPRECATED_METHOD - // This is deprecated. - enum AuthType { - AuthNone, - AuthYcaV1 - }; - // This is deprecated. - class AuthData { - public: - virtual ~AuthData(); - - virtual AuthType getType() const = 0; - - virtual Result getAuthData(std::string& authDataContent) const = 0; - - protected: - AuthData(); - }; - typedef boost::shared_ptr AuthDataPtr; -#endif + class ClientConfiguration; + class Authentication; class AuthenticationDataProvider { public: @@ -64,6 +47,8 @@ namespace pulsar { }; typedef boost::shared_ptr AuthenticationDataPtr; + typedef boost::shared_ptr AuthenticationPtr; + typedef std::map ParamMap; class Authentication { public: @@ -73,30 +58,15 @@ namespace pulsar { authDataContent = authData_; return ResultOk; } -#ifdef PULSAR_ENABLE_DEPRECATED_METHOD - // This is deprecated. - virtual Result getAuthData(std::string& authDataContent) const { - return ResultOk; - } -#endif protected: Authentication(); AuthenticationDataPtr authData_; + friend class ClientConfiguration; }; - typedef boost::shared_ptr AuthenticationPtr; - typedef std::map ParamMap; - - class Auth { + class AuthFactory { public: -#ifdef PULSAR_ENABLE_DEPRECATED_METHOD - // This is deprecated. - static AuthDataPtr Disabled(); - // This is deprecated. - static AuthDataPtr YcaV1(const std::string& ycaAppId); -#else static AuthenticationPtr Disabled(); -#endif static AuthenticationPtr create(const std::string& dynamicLibPath); static AuthenticationPtr create(const std::string& dynamicLibPath, const std::string& authParamsString); static AuthenticationPtr create(const std::string& dynamicLibPath, ParamMap& params); @@ -106,10 +76,9 @@ namespace pulsar { static std::vector loadedLibrariesHandles_; static void release_handles(); }; - } // namespace pulsar #pragma GCC visibility pop -#endif /* PULSAR_AUTH_H_ */ +#endif /* PULSAR_AUTHENTICATION_H_ */ diff --git a/pulsar-client-cpp/include/pulsar/Client.h b/pulsar-client-cpp/include/pulsar/Client.h index efaef3e298b5a..70123f609abde 100644 --- a/pulsar-client-cpp/include/pulsar/Client.h +++ b/pulsar-client-cpp/include/pulsar/Client.h @@ -17,15 +17,30 @@ #ifndef PULSAR_CLIENT_HPP_ #define PULSAR_CLIENT_HPP_ -#include +#include #include #include #include #include #include - #include +#ifdef PULSAR_ENABLE_DEPRECATED_METHOD + #include +#else + // Deprecated + namespace pulsar { + class AuthData; + typedef boost::shared_ptr AuthDataPtr; + class AuthData { + public: + static AuthenticationPtr getAuthenticationPtr(const AuthDataPtr& authentication) { + AuthenticationPtr ptr; + return ptr; + } + }; + } +#endif #pragma GCC visibility push(default) class PulsarFriend; @@ -44,17 +59,31 @@ class ClientConfiguration { ClientConfiguration(const ClientConfiguration&); ClientConfiguration& operator=(const ClientConfiguration&); + /** + * @deprecated + * Set the authentication method to be used with the broker + * + * @param authentication the authentication data to use + */ + ClientConfiguration& setAuthentication(const AuthDataPtr& authentication); + + /** + * @deprecated + * @return the authentication data + */ + const AuthData& getAuthentication() const; + /** * Set the authentication method to be used with the broker * * @param authentication the authentication data to use */ - ClientConfiguration& setAuthentication(const AuthenticationPtr& authentication); + ClientConfiguration& setAuth(const AuthenticationPtr& authentication); /** * @return the authentication data */ - const Authentication& getAuthentication() const; + const Authentication& getAuth() const; /** * Set timeout on client operations (subscribe, create producer, close, unsubscribe) diff --git a/pulsar-client-cpp/include/pulsar/Message.h b/pulsar-client-cpp/include/pulsar/Message.h index 9218e2ca7be44..0ed8bc3fce65a 100644 --- a/pulsar-client-cpp/include/pulsar/Message.h +++ b/pulsar-client-cpp/include/pulsar/Message.h @@ -26,16 +26,11 @@ #pragma GCC visibility push(default) namespace pulsar { -namespace proto { -class CommandMessage; -class MessageMetadata; -class SingleMessageMetadata; -} -} - -using namespace pulsar; - -namespace pulsar { + namespace proto { + class CommandMessage; + class MessageMetadata; + class SingleMessageMetadata; + } class SharedBuffer; class MessageBuilder; diff --git a/pulsar-client-cpp/lib/Auth.cc b/pulsar-client-cpp/lib/Authentication.cc similarity index 81% rename from pulsar-client-cpp/lib/Auth.cc rename to pulsar-client-cpp/lib/Authentication.cc index 088be96b8de73..ec17ec4a45445 100644 --- a/pulsar-client-cpp/lib/Auth.cc +++ b/pulsar-client-cpp/lib/Authentication.cc @@ -16,7 +16,7 @@ #include -#include +#include #include #include @@ -102,30 +102,30 @@ namespace pulsar { }; - AuthenticationPtr Auth::Disabled() { + AuthenticationPtr AuthFactory::Disabled() { ParamMap params; return AuthDisabled::create(params); } - AuthenticationPtr Auth::create(const std::string& dynamicLibPath) { + AuthenticationPtr AuthFactory::create(const std::string& dynamicLibPath) { ParamMap params; - return Auth::create(dynamicLibPath, params); + return AuthFactory::create(dynamicLibPath, params); } boost::mutex mutex; - std::vector Auth::loadedLibrariesHandles_; - bool Auth::isShutdownHookRegistered_ = false; + std::vector AuthFactory::loadedLibrariesHandles_; + bool AuthFactory::isShutdownHookRegistered_ = false; - void Auth::release_handles() { + void AuthFactory::release_handles() { boost::lock_guard lock(mutex); - for (std::vector::iterator ite = Auth::loadedLibrariesHandles_.begin(); ite != Auth::loadedLibrariesHandles_.end(); + for (std::vector::iterator ite = AuthFactory::loadedLibrariesHandles_.begin(); ite != AuthFactory::loadedLibrariesHandles_.end(); ite++) { dlclose(*ite); } loadedLibrariesHandles_.clear(); } - AuthenticationPtr Auth::create(const std::string& dynamicLibPath, const std::string& authParamsString) { + AuthenticationPtr AuthFactory::create(const std::string& dynamicLibPath, const std::string& authParamsString) { ParamMap paramMap; if(!authParamsString.empty()) { std::vector params; @@ -138,15 +138,15 @@ namespace pulsar { } } } - return Auth::create(dynamicLibPath, paramMap); + return AuthFactory::create(dynamicLibPath, paramMap); } - AuthenticationPtr Auth::create(const std::string& dynamicLibPath, ParamMap& params) { + AuthenticationPtr AuthFactory::create(const std::string& dynamicLibPath, ParamMap& params) { { boost::lock_guard lock(mutex); - if (!Auth::isShutdownHookRegistered_) { + if (!AuthFactory::isShutdownHookRegistered_) { atexit(release_handles); - Auth::isShutdownHookRegistered_ = true; + AuthFactory::isShutdownHookRegistered_ = true; } } Authentication *auth = NULL; diff --git a/pulsar-client-cpp/lib/BinaryProtoLookupService.h b/pulsar-client-cpp/lib/BinaryProtoLookupService.h index 1d719fcf9bbee..ad448ec3502d2 100644 --- a/pulsar-client-cpp/lib/BinaryProtoLookupService.h +++ b/pulsar-client-cpp/lib/BinaryProtoLookupService.h @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include "ConnectionPool.h" #include "DestinationName.h" diff --git a/pulsar-client-cpp/lib/CMakeLists.txt b/pulsar-client-cpp/lib/CMakeLists.txt index 6b31c9ab57f94..e46222fea0a86 100644 --- a/pulsar-client-cpp/lib/CMakeLists.txt +++ b/pulsar-client-cpp/lib/CMakeLists.txt @@ -17,14 +17,18 @@ file(GLOB PULSAR_SOURCES *.cc lz4/*.c checksum/*.cc) execute_process(COMMAND cat ../pom.xml COMMAND xmllint --format - COMMAND sed "s/xmlns=\".*\"//g" COMMAND xmllint --stream --pattern /project/version --debug - COMMAND grep -A 2 "matches pattern" COMMAND grep text COMMAND sed "s/.* [0-9] //g" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE PV) - set (CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul -D_PULSAR_VERSION_=\\\"${PV}\\\"") add_library(pulsarStatic STATIC ${PULSAR_SOURCES}) add_library(pulsarShared SHARED ${PULSAR_SOURCES}) -set_target_properties(pulsarStatic PROPERTIES OUTPUT_NAME pulsar VERSION ${PV}) -set_target_properties(pulsarShared PROPERTIES OUTPUT_NAME pulsar VERSION ${PV}) +set(LIBRARY_VERSION $ENV{PULSAR_LIBRARY_VERSION}) +if (NOT LIBRARY_VERSION) + set(LIBRARY_VERSION ${PV}) +endif(NOT LIBRARY_VERSION) + +set_target_properties(pulsarStatic PROPERTIES OUTPUT_NAME ${LIB_NAME} VERSION ${LIBRARY_VERSION}) +set_target_properties(pulsarShared PROPERTIES OUTPUT_NAME ${LIB_NAME} VERSION ${LIBRARY_VERSION}) target_link_libraries(pulsarStatic ${COMMON_LIBS}) target_link_libraries(pulsarShared ${COMMON_LIBS}) diff --git a/pulsar-client-cpp/lib/Client.cc b/pulsar-client-cpp/lib/Client.cc index 61ff1cb5d095d..27033a39b33cf 100644 --- a/pulsar-client-cpp/lib/Client.cc +++ b/pulsar-client-cpp/lib/Client.cc @@ -31,7 +31,8 @@ DECLARE_LOG_OBJECT() namespace pulsar { struct ClientConfiguration::Impl { - AuthenticationPtr authData; + AuthenticationPtr authenticationPtr; + AuthDataPtr authDataPtr; int ioThreads; int operationTimeoutSeconds; int messageListenerThreads; @@ -40,7 +41,7 @@ struct ClientConfiguration::Impl { bool useTls; std::string tlsTrustCertsFilePath; bool tlsAllowInsecureConnection; - Impl() : authData(Auth::Disabled()), + Impl() : authenticationPtr(AuthFactory::Disabled()), ioThreads(1), operationTimeoutSeconds(30), messageListenerThreads(1), @@ -66,17 +67,28 @@ ClientConfiguration& ClientConfiguration::operator=(const ClientConfiguration& x return *this; } -ClientConfiguration& ClientConfiguration::setAuthentication(const AuthenticationPtr& authentication) { - impl_->authData = authentication; +ClientConfiguration& ClientConfiguration::setAuth(const AuthenticationPtr& authentication) { + impl_->authenticationPtr = authentication; return *this; } -const Authentication& ClientConfiguration::getAuthentication() const { - return *impl_->authData; +const Authentication& ClientConfiguration::getAuth() const { + return *impl_->authenticationPtr; } +ClientConfiguration& ClientConfiguration::setAuthentication(const AuthDataPtr& authentication) { + impl_->authDataPtr = authentication; + impl_->authenticationPtr = AuthData::getAuthenticationPtr(authentication); + return *this; +} + +const AuthData& ClientConfiguration::getAuthentication() const { + return *(impl_->authDataPtr); +} + + const AuthenticationPtr& ClientConfiguration::getAuthenticationPtr() const { - return impl_->authData; + return impl_->authenticationPtr; } ClientConfiguration& ClientConfiguration::setOperationTimeoutSeconds(int timeout) { diff --git a/pulsar-client-cpp/lib/Commands.h b/pulsar-client-cpp/lib/Commands.h index 0d4eeb4a3dbba..672888ef3701a 100644 --- a/pulsar-client-cpp/lib/Commands.h +++ b/pulsar-client-cpp/lib/Commands.h @@ -17,7 +17,7 @@ #ifndef LIB_COMMANDS_H_ #define LIB_COMMANDS_H_ -#include +#include #include #include "PulsarApi.pb.h" diff --git a/pulsar-client-cpp/lib/auth/AuthTls.h b/pulsar-client-cpp/lib/auth/AuthTls.h index 1d564e6dce3d8..d5bbc09f8595a 100644 --- a/pulsar-client-cpp/lib/auth/AuthTls.h +++ b/pulsar-client-cpp/lib/auth/AuthTls.h @@ -17,7 +17,7 @@ #ifndef PULSAR_AUTH_TLS_H_ #define PULSAR_AUTH_TLS_H_ -#include +#include #include #include #include diff --git a/pulsar-client-cpp/perf/PerfConsumer.cc b/pulsar-client-cpp/perf/PerfConsumer.cc index 5936737b53db0..7d7e1b029e034 100644 --- a/pulsar-client-cpp/perf/PerfConsumer.cc +++ b/pulsar-client-cpp/perf/PerfConsumer.cc @@ -38,7 +38,7 @@ using namespace boost::accumulators; #include #include -#include +#include using namespace pulsar; static int64_t currentTimeMillis() { @@ -138,8 +138,8 @@ void startPerfConsumer(const Arguments& args) { conf.setIOThreads(args.ioThreads); conf.setMessageListenerThreads(args.listenerThreads); if(!args.authPlugin.empty()) { - AuthenticationPtr auth = Auth::create(args.authPlugin, args.authParams); - conf.setAuthentication(auth); + AuthenticationPtr auth = AuthFactory::create(args.authPlugin, args.authParams); + conf.setAuth(auth); } Client client(pulsar::PulsarFriend::getClient(args.serviceURL, conf, false)); diff --git a/pulsar-client-cpp/perf/PerfProducer.cc b/pulsar-client-cpp/perf/PerfProducer.cc index ad03da96effb4..bd65f4f185d8d 100644 --- a/pulsar-client-cpp/perf/PerfProducer.cc +++ b/pulsar-client-cpp/perf/PerfProducer.cc @@ -36,7 +36,7 @@ namespace po = boost::program_options; #include #include "RateLimiter.h" #include -#include +#include typedef boost::shared_ptr RateLimiterPtr; struct Arguments { @@ -296,8 +296,8 @@ int main(int argc, char** argv) { conf.setIOThreads(args.ioThreads); conf.setMessageListenerThreads(args.listenerThreads); if(!args.authPlugin.empty()) { - AuthenticationPtr auth = Auth::create(args.authPlugin, args.authParams); - conf.setAuthentication(auth); + pulsar::AuthenticationPtr auth = pulsar::AuthFactory::create(args.authPlugin, args.authParams); + conf.setAuth(auth); } pulsar::Client client(pulsar::PulsarFriend::getClient(args.serviceURL, conf, false)); diff --git a/pulsar-client-cpp/tests/AuthPluginTest.cc b/pulsar-client-cpp/tests/AuthPluginTest.cc index 598157b1eb7b7..568f06cb84888 100644 --- a/pulsar-client-cpp/tests/AuthPluginTest.cc +++ b/pulsar-client-cpp/tests/AuthPluginTest.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "pulsar/Auth.h" +#include "pulsar/Authentication.h" #include #include #include @@ -40,7 +40,7 @@ static void sendCallBackTls(Result r, const Message& msg) { TEST(AuthPluginTest, testCreate) { pulsar::AuthenticationDataPtr data; - pulsar::AuthenticationPtr auth = pulsar::Auth::create("../lib/auth/libauthtls.so"); + pulsar::AuthenticationPtr auth = pulsar::AuthFactory::create("../lib/auth/libauthtls.so"); ASSERT_TRUE(auth != NULL); ASSERT_EQ(auth->getAuthMethodName(), "tls"); ASSERT_EQ(auth->getAuthData(data), pulsar::ResultOk); @@ -56,8 +56,8 @@ TEST(AuthPluginTest, testTls) { std::string params = "tlsCertFile:../../pulsar-broker/src/test/resources/authentication/tls/client-cert.pem,tlsKeyFile:../../pulsar-broker/src/test/resources/authentication/tls/client-key.pem"; config.setTlsTrustCertsFilePath(certfile); config.setTlsAllowInsecureConnection(false); - AuthenticationPtr auth = pulsar::Auth::create("../lib/auth/libauthtls.so", params); - config.setAuthentication(auth); + AuthenticationPtr auth = pulsar::AuthFactory::create("../lib/auth/libauthtls.so", params); + config.setAuth(auth); Client client(lookupUrlTls,config); std::string topicName = "persistent://property/cluster/namespace/test-tls"; @@ -116,7 +116,7 @@ TEST(AuthPluginTest, testTls) { TEST(AuthPluginTest, testDisable) { pulsar::AuthenticationDataPtr data; - pulsar::AuthenticationPtr auth = pulsar::Auth::Disabled(); + pulsar::AuthenticationPtr auth = pulsar::AuthFactory::Disabled(); ASSERT_TRUE(auth != NULL); ASSERT_EQ(auth->getAuthMethodName(), "none"); ASSERT_EQ(auth->getAuthData(data), pulsar::ResultOk); diff --git a/pulsar-client-cpp/tests/BasicEndToEndTest.cc b/pulsar-client-cpp/tests/BasicEndToEndTest.cc index 2126572eb0c18..670873cebe39d 100644 --- a/pulsar-client-cpp/tests/BasicEndToEndTest.cc +++ b/pulsar-client-cpp/tests/BasicEndToEndTest.cc @@ -512,7 +512,7 @@ TEST(BasicEndToEndTest, testMessageTooBig) ClientConfiguration config2 = config1; AuthenticationDataPtr authData; - ASSERT_EQ(ResultOk, config1.getAuthentication().getAuthData(authData)); + ASSERT_EQ(ResultOk, config1.getAuth().getAuthData(authData)); ASSERT_EQ(100, config2.getOperationTimeoutSeconds()); ASSERT_EQ(10, config2.getIOThreads()); ASSERT_EQ(1, config2.getMessageListenerThreads()); diff --git a/pulsar-client-cpp/tests/BinaryLookupServiceTest.cc b/pulsar-client-cpp/tests/BinaryLookupServiceTest.cc index d2ff2c7469e44..f944be68e77f6 100644 --- a/pulsar-client-cpp/tests/BinaryLookupServiceTest.cc +++ b/pulsar-client-cpp/tests/BinaryLookupServiceTest.cc @@ -23,14 +23,14 @@ #include #include #include "ConnectionPool.h" -#include +#include #include using namespace pulsar; TEST(BinaryLookupServiceTest, basicLookup) { ExecutorServiceProviderPtr service = boost::make_shared(1); - AuthenticationPtr authData = Auth::Disabled(); + AuthenticationPtr authData = AuthFactory::Disabled(); std::string url = "pulsar://localhost:8885"; ClientConfiguration conf; ExecutorServiceProviderPtr ioExecutorProvider_(boost::make_shared(1));