From 4f154010c947e7680faea850947d3e561272c447 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 21 Feb 2019 15:59:23 +0800 Subject: [PATCH] rgw,cmake: add option "WITH_RADOSGW_AMQP_ENDPOINT" WITH_RADOSGW_AMQP_ENDPOINT is enabled by default. Signed-off-by: Kefu Chai --- CMakeLists.txt | 1 + src/include/config-h.in.cmake | 3 +++ src/rgw/CMakeLists.txt | 43 +++++++++++++++++++++++++++-------- src/rgw/rgw_pubsub_push.cc | 7 ++++++ src/test/rgw/CMakeLists.txt | 22 ++++++++++-------- 5 files changed, 56 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78dcfebb9be..266dbb07e4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -435,6 +435,7 @@ option(WITH_RADOSGW "Rados Gateway is enabled" ON) option(WITH_RADOSGW_FCGI_FRONTEND "Rados Gateway's FCGI frontend is enabled" OFF) option(WITH_RADOSGW_BEAST_FRONTEND "Rados Gateway's Beast frontend is enabled" ON) option(WITH_RADOSGW_BEAST_OPENSSL "Rados Gateway's Beast frontend uses OpenSSL" ON) +option(WITH_RADOSGW_AMQP_ENDPOINT "Rados Gateway's pubsub support for AMQP push endpoint" ON) if(WITH_RADOSGW) find_package(EXPAT REQUIRED) diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake index cfbc80240cd..c5ee1e9a4fb 100644 --- a/src/include/config-h.in.cmake +++ b/src/include/config-h.in.cmake @@ -342,6 +342,9 @@ /* Defined if OpenSSL is available for the rgw beast frontend */ #cmakedefine WITH_RADOSGW_BEAST_OPENSSL +/* Defined if rabbitmq-c is available for rgw amqp push endpoint */ +#cmakedefine WITH_RADOSGW_AMQP_ENDPOINT + /* Defined if std::map::merge() is supported */ #cmakedefine HAVE_STDLIB_MAP_SPLICING diff --git a/src/rgw/CMakeLists.txt b/src/rgw/CMakeLists.txt index c16caad4bd1..954836f09d2 100644 --- a/src/rgw/CMakeLists.txt +++ b/src/rgw/CMakeLists.txt @@ -90,7 +90,6 @@ set(librgw_common_srcs rgw_sync_module_log.cc rgw_sync_module_pubsub.cc rgw_pubsub_push.cc - rgw_amqp.cc rgw_sync_module_pubsub_rest.cc rgw_sync_log_trim.cc rgw_sync_trace.cc @@ -137,6 +136,10 @@ set(librgw_common_srcs rgw_rest_sts.cc rgw_perf_counters.cc) +if(WITH_RADOSGW_AMQP_ENDPOINT) + list(APPEND librgw_common_srcs rgw_amqp.cc) +endif() + add_library(rgw_common OBJECT ${librgw_common_srcs}) target_include_directories(rgw_common SYSTEM PUBLIC "services") @@ -194,7 +197,10 @@ add_dependencies(rgw_a civetweb_h) target_include_directories(rgw_a SYSTEM PUBLIC "../rapidjson/include") -find_package(RabbitMQ REQUIRED) +if(WITH_RADOSGW_AMQP_ENDPOINT) + find_package(RabbitMQ REQUIRED) +endif() + target_link_libraries(rgw_a PUBLIC dmclock::dmclock PRIVATE @@ -233,11 +239,15 @@ endif() add_library(radosgw_a STATIC ${radosgw_srcs} $) -target_link_libraries(radosgw_a PRIVATE rgw_a RabbitMQ::RabbitMQ) +target_link_libraries(radosgw_a PRIVATE rgw_a) if(WITH_RADOSGW_BEAST_FRONTEND AND WITH_RADOSGW_BEAST_OPENSSL) # used by rgw_asio_frontend.cc target_link_libraries(radosgw_a PRIVATE OpenSSL::SSL) endif() +if(WITH_RADOSGW_AMQP_ENDPOINT) + # used by rgw_amqp.cc + target_link_libraries(radosgw_a PRIVATE RabbitMQ::RabbitMQ) +endif() add_executable(radosgw rgw_main.cc) target_link_libraries(radosgw radosgw_a librados @@ -259,7 +269,10 @@ target_link_libraries(radosgw-admin rgw_a librados cls_log_client cls_timeindex_client cls_version_client cls_user_client global ${FCGI_LIBRARY} ${LIB_RESOLV} - ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES} RabbitMQ::RabbitMQ) + ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES}) +if(WITH_RADOSGW_AMQP_ENDPOINT) + target_link_libraries(radosgw-admin RabbitMQ::RabbitMQ) +endif() install(TARGETS radosgw-admin DESTINATION bin) set(radosgw_es_srcs @@ -270,7 +283,10 @@ target_link_libraries(radosgw-es rgw_a librados cls_log_client cls_timeindex_client cls_version_client cls_user_client global ${FCGI_LIBRARY} ${LIB_RESOLV} - ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES} RabbitMQ::RabbitMQ) + ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES}) +if(WITH_RADOSGW_AMQP_ENDPOINT) + target_link_libraries(radosgw-es RabbitMQ::RabbitMQ) +endif() install(TARGETS radosgw-es DESTINATION bin) set(radosgw_token_srcs @@ -288,7 +304,10 @@ target_link_libraries(radosgw-object-expirer rgw_a librados cls_log_client cls_timeindex_client cls_version_client cls_user_client global ${FCGI_LIBRARY} ${LIB_RESOLV} - ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} RabbitMQ::RabbitMQ) + ${CURL_LIBRARIES} ${EXPAT_LIBRARIES}) +if(WITH_RADOSGW_AMQP_ENDPOINT) + target_link_libraries(radosgw-object-expirer RabbitMQ::RabbitMQ) +endif() install(TARGETS radosgw-object-expirer DESTINATION bin) set(librgw_srcs @@ -311,8 +330,10 @@ target_link_libraries(rgw global ${LIB_RESOLV} ${CURL_LIBRARIES} - ${EXPAT_LIBRARIES} - RabbitMQ::RabbitMQ) + ${EXPAT_LIBRARIES}) +if(WITH_RADOSGW_AMQP_ENDPOINT) + target_link_libraries(rgw PRIVATE RabbitMQ::RabbitMQ) +endif() set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0 SOVERSION 2) install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -341,11 +362,13 @@ target_link_libraries(rgw_admin_user PRIVATE ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${OPENLDAP_LIBRARIES} - dmclock::dmclock - RabbitMQ::RabbitMQ) + dmclock::dmclock) set_target_properties(rgw_admin_user PROPERTIES OUTPUT_NAME rgw_admin_user VERSION 1.0.0 SOVERSION 0) install(TARGETS rgw_admin_user DESTINATION ${CMAKE_INSTALL_LIBDIR}) +if(WITH_RADOSGW_AMQP_ENDPOINT) + target_link_libraries(rgw_admin_user PRIVATE RabbitMQ::RabbitMQ) +endif() if(WITH_BOOST_CONTEXT) target_link_libraries(rgw_admin_user PRIVATE Boost::coroutine Boost::context) endif() diff --git a/src/rgw/rgw_pubsub_push.cc b/src/rgw/rgw_pubsub_push.cc index 0d879e724c0..efc1823e748 100644 --- a/src/rgw/rgw_pubsub_push.cc +++ b/src/rgw/rgw_pubsub_push.cc @@ -10,7 +10,10 @@ #include "rgw_common.h" #include "rgw_data_sync.h" #include "rgw_pubsub.h" +#include "acconfig.h" +#ifdef WITH_RADOSGW_AMQP_ENDPOINT #include "rgw_amqp.h" +#endif #include #include #include @@ -128,6 +131,7 @@ public: } }; +#ifdef WITH_RADOSGW_AMQP_ENDPOINT class RGWPubSubAMQPEndpoint : public RGWPubSubEndpoint { private: enum ack_level_t { @@ -286,6 +290,7 @@ class RGWPubSubAMQPEndpoint : public RGWPubSubEndpoint { static const std::string AMQP_0_9_1("0-9-1"); static const std::string AMQP_1_0("1-0"); +#endif // ifdef WITH_RADOSGW_AMQP_ENDPOINT RGWPubSubEndpoint::Ptr RGWPubSubEndpoint::create(const std::string& endpoint, const std::string& topic, @@ -299,6 +304,7 @@ RGWPubSubEndpoint::Ptr RGWPubSubEndpoint::create(const std::string& endpoint, const auto& schema = endpoint.substr(0,pos); if (schema == "http" || schema == "https") { return Ptr(new RGWPubSubHTTPEndpoint(endpoint, args)); +#ifdef WITH_RADOSGW_AMQP_ENDPOINT } else if (schema == "amqp") { bool exists; std::string version = args.get("amqp-version", &exists); @@ -317,6 +323,7 @@ RGWPubSubEndpoint::Ptr RGWPubSubEndpoint::create(const std::string& endpoint, } else if (schema == "amqps") { throw configuration_error("amqps not supported"); return nullptr; +#endif } throw configuration_error("unknown schema " + schema); diff --git a/src/test/rgw/CMakeLists.txt b/src/test/rgw/CMakeLists.txt index 2b578149d01..33a2607531a 100644 --- a/src/test/rgw/CMakeLists.txt +++ b/src/test/rgw/CMakeLists.txt @@ -1,7 +1,10 @@ -# amqp mock library -set(amqp_mock_src - amqp_mock.cc amqp_url.c) -add_library(amqp_mock STATIC ${amqp_mock_src}) + +if(WITH_RADOSGW_AMQP_ENDPOINT) + # amqp mock library + set(amqp_mock_src + amqp_mock.cc amqp_url.c) + add_library(amqp_mock STATIC ${amqp_mock_src}) +endif() #unittest_rgw_bencode add_executable(unittest_rgw_bencode test_rgw_bencode.cc) @@ -143,9 +146,8 @@ if(WITH_BOOST_CONTEXT) target_link_libraries(unittest_rgw_dmclock_scheduler Boost::coroutine Boost::context) endif() -# unittest_rgw_amqp -add_executable(unittest_rgw_amqp test_rgw_amqp.cc) -add_ceph_unittest(unittest_rgw_amqp) - -target_link_libraries(unittest_rgw_amqp rgw_a amqp_mock) - +if(WITH_RADOSGW_AMQP_ENDPOINT) + add_executable(unittest_rgw_amqp test_rgw_amqp.cc) + add_ceph_unittest(unittest_rgw_amqp) + target_link_libraries(unittest_rgw_amqp rgw_a amqp_mock) +endif() -- 2.39.5