#option for RGW
option(WITH_RADOSGW "Rados Gateway is enabled" ON)
+option(WITH_RADOSGW_FCGI_FRONTEND "Rados Gateway's FCGI frontend is enabled" ON)
+option(WITH_RADOSGW_ASIO_FRONTEND "Rados Gateway's ASIO frontend is enabled" ON)
if(WITH_RADOSGW)
find_package(EXPAT REQUIRED)
- find_package(fcgi REQUIRED)
+ if(WITH_RADOSGW_FCGI_FRONTEND)
+ find_package(fcgi REQUIRED)
+ endif()
endif(WITH_RADOSGW)
-option(WITH_RADOSGW_ASIO_FRONTEND "Rados Gateway's ASIO frontend is enabled" ON)
if (WITH_RADOSGW)
if (NOT DEFINED OPENSSL_FOUND)
/* define if radosgw enabled */
#cmakedefine WITH_RADOSGW
+/* define if radosgw enabled */
+#cmakedefine WITH_RADOSGW_FCGI_FRONTEND
+
/* define if leveldb is enabled */
#cmakedefine WITH_LEVELDB
rgw_cors_s3.cc
rgw_dencoder.cc
rgw_env.cc
- rgw_fcgi.cc
rgw_formats.cc
rgw_frontend.cc
rgw_gc.cc
rgw_xml_enc.cc
rgw_torrent.cc)
+if (WITH_RADOSGW_FCGI_FRONTEND)
+ list(APPEND rgw_a_srcs rgw_fcgi.cc)
+endif()
+
add_library(rgw_a STATIC ${rgw_a_srcs})
add_dependencies(rgw_a civetweb_h)
${OPENLDAP_LIBRARIES} ${CRYPTO_LIBS})
set(radosgw_srcs
- rgw_fcgi_process.cc
rgw_loadgen_process.cc
rgw_civetweb.cc
rgw_civetweb_frontend.cc
rgw_civetweb_log.cc)
+if (WITH_RADOSGW_FCGI_FRONTEND)
+ list(APPEND radosgw_srcs rgw_fcgi_process.cc)
+endif()
+
if (WITH_RADOSGW_ASIO_FRONTEND)
list(APPEND radosgw_srcs
rgw_asio_client.cc
cls_rgw_client cls_lock_client cls_refcount_client
cls_log_client cls_statelog_client cls_timeindex_client
cls_version_client cls_replica_log_client cls_user_client
- global fcgi ${LIB_RESOLV}
+ global ${FCGI_LIBRARY} ${LIB_RESOLV}
${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${SSL_LIBRARIES} ${BLKID_LIBRARIES}
${ALLOC_LIBS})
# radosgw depends on cls libraries at runtime, but not as link dependencies
cls_rgw_client cls_lock_client cls_refcount_client
cls_log_client cls_statelog_client cls_timeindex_client
cls_version_client cls_replica_log_client cls_user_client
- global fcgi ${LIB_RESOLV}
+ global ${FCGI_LIBRARY} ${LIB_RESOLV}
${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${SSL_LIBRARIES} ${BLKID_LIBRARIES})
install(TARGETS radosgw-admin DESTINATION bin)
cls_rgw_client cls_lock_client cls_refcount_client
cls_log_client cls_statelog_client cls_timeindex_client
cls_version_client cls_replica_log_client cls_user_client
- global fcgi ${LIB_RESOLV}
+ global ${FCGI_LIBRARY} ${LIB_RESOLV}
${CURL_LIBRARIES} ${EXPAT_LIBRARIES})
install(TARGETS radosgw-object-expirer DESTINATION bin)
add_library(cephd_rgw_base STATIC rgw_main.cc ${radosgw_admin_srcs})
set_target_properties(cephd_rgw_base PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED)
merge_static_libraries(cephd_rgw cephd_rgw_base rgw_a radosgw_a)
- target_link_libraries(cephd_rgw fcgi)
+ target_link_libraries(cephd_rgw ${FCGI_LIBRARY})
endif()
static void handle_sigterm(int signum)
{
dout(1) << __func__ << dendl;
+#if defined(WITH_RADOSGW_FCGI_FRONTEND)
FCGX_ShutdownPending();
+#endif
// send a signal to make fcgi's accept(2) wake up. unfortunately the
// initial signal often isn't sufficient because we race with accept's
curl_global_init(CURL_GLOBAL_ALL);
+#if defined(WITH_RADOSGW_FCGI_FRONTEND)
FCGX_Init();
+#endif
RGWRados *store = RGWStoreManager::get_storage(g_ceph_context,
g_conf->rgw_enable_gc_threads, g_conf->rgw_enable_lc_threads, g_conf->rgw_enable_quota_threads,
fiter != fe_map.end(); ++fiter) {
RGWFrontendConfig *config = fiter->second;
string framework = config->get_framework();
- RGWFrontend *fe;
+ RGWFrontend *fe = NULL;
#if defined(WITH_RADOSGW_ASIO_FRONTEND)
if ((framework == "asio") &&
cct->check_experimental_feature_enabled("rgw-asio-frontend")) {
config->get_val("prefix", "", &uri_prefix);
RGWProcessEnv env{ store, &rest, olog, port, uri_prefix };
fe = new RGWAsioFrontend(env);
- } else if (framework == "fastcgi" || framework == "fcgi") {
-#else
- if (framework == "fastcgi" || framework == "fcgi") {
+ }
#endif /* WITH_RADOSGW_ASIO_FRONTEND */
+#if defined(WITH_RADOSGW_FCGI_FRONTEND)
+ if (framework == "fastcgi" || framework == "fcgi") {
std::string uri_prefix;
config->get_val("prefix", "", &uri_prefix);
RGWProcessEnv fcgi_pe = { store, &rest, olog, 0, uri_prefix };
fe = new RGWFCGXFrontend(fcgi_pe, config);
- } else if (framework == "civetweb" || framework == "mongoose") {
+ }
+#endif /* WITH_RADOSGW_FCGI_FRONTEND */
+ if (framework == "civetweb" || framework == "mongoose") {
+ int port;
+ config->get_val("port", 80, &port);
std::string uri_prefix;
config->get_val("prefix", "", &uri_prefix);
RGWProcessEnv env = { store, &rest, olog, 0, uri_prefix };
fe = new RGWCivetWebFrontend(env, config);
- } else if (framework == "loadgen") {
+ }
+ if (framework == "loadgen") {
int port;
config->get_val("port", 80, &port);
std::string uri_prefix;
RGWProcessEnv env = { store, &rest, olog, port, uri_prefix };
fe = new RGWLoadGenFrontend(env, config);
- } else {
+ }
+ if (fe == NULL) {
dout(0) << "WARNING: skipping unknown framework: " << framework << dendl;
continue;
}
#include "rgw_acl.h"
#include "rgw_user.h"
#include "rgw_op.h"
+#if defined(WITH_RADOSGW_FCGI_FRONTEND)
#include "rgw_fcgi.h"
-
+#endif
#include "common/QueueRing.h"
struct RGWRequest
void log(struct req_state *s, const char *msg);
}; /* RGWRequest */
+#if defined(WITH_RADOSGW_FCGI_FRONTEND)
struct RGWFCGXRequest : public RGWRequest {
FCGX_Request *fcgx;
QueueRing<FCGX_Request *> *qr;
qr->enqueue(fcgx);
}
};
+#endif
struct RGWLoadGenRequest : public RGWRequest {
string method;