]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
RGW - Standalone - Add a standalone build target and RPM 68291/head
authorDaniel Gryniewicz <dang@fprintf.net>
Mon, 16 Mar 2026 15:21:28 +0000 (11:21 -0400)
committerDaniel Gryniewicz <dang@fprintf.net>
Mon, 6 Jul 2026 15:19:42 +0000 (11:19 -0400)
Add a build target that builds standalone RGW in addition to normal RGW,
and add an RPM for it that only installs the necessary bits.

Signed-off-by: Daniel Gryniewicz <dang@fprintf.net>
30 files changed:
CMakeLists.txt
ceph.spec.in
src/include/config-h.in.cmake
src/rgw/CMakeLists.txt
src/rgw/driver/d4n/rgw_sal_d4n.h
src/rgw/driver/dbstore/CMakeLists.txt
src/rgw/driver/dbstore/config/sqlite.cc
src/rgw/driver/dbstore/sqlite/CMakeLists.txt
src/rgw/driver/dbstore/sqlite/connection.h
src/rgw/driver/dbstore/tests/CMakeLists.txt
src/rgw/driver/posix/rgw_standalone.cc [new file with mode: 0644]
src/rgw/driver/rados/rgw_bucket.cc
src/rgw/driver/rados/rgw_sal_rados.cc
src/rgw/rgw_lua_request.cc
src/rgw/rgw_multi.cc
src/rgw/rgw_op.cc
src/rgw/rgw_quota.cc
src/rgw/rgw_rest.cc
src/rgw/rgw_rest_dedup.cc
src/rgw/rgw_rest_ratelimit.h
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_restore.cc
src/rgw/rgw_restore.h
src/rgw/rgw_sal.cc
src/rgw/rgw_sal.h
src/rgw/rgw_sal_dbstore.cc
src/rgw/rgw_sal_filter.h
src/rgw/rgw_sal_store.h
src/rgw/rgw_sts.cc
src/test/rgw/CMakeLists.txt

index 43ce6ef414749fb0dafa905eaee538d72a8ac527..f57a38a78d6354cfe26c812b2a1608111d104427 100644 (file)
@@ -588,11 +588,13 @@ option(WITH_RADOSGW_BEAST_OPENSSL "RADOS Gateway's Beast frontend uses OpenSSL"
 option(WITH_RADOSGW_AMQP_ENDPOINT "RADOS Gateway's pubsub support for AMQP push endpoint" ON)
 option(WITH_RADOSGW_KAFKA_ENDPOINT "RADOS Gateway's pubsub support for Kafka push endpoint" ON)
 option(WITH_RADOSGW_LUA_PACKAGES "RADOS Gateway's support for dynamically adding lua packagess" ON)
+option(WITH_RADOSGW_FDB "FoundationDB support for RADOS Gateway (experimental)" OFF)
 option(WITH_RADOSGW_DBSTORE "DBStore backend for RADOS Gateway" ON)
 option(WITH_RADOSGW_MOTR "CORTX-Motr backend for RADOS Gateway" OFF)
 option(WITH_RADOSGW_DAOS "DAOS backend for RADOS Gateway" OFF)
 option(WITH_RADOSGW_D4N "D4N wrapper for RADOS Gateway" ON)
-option(WITH_RADOSGW_FDB "FoundationDB support for RADOS Gateway (experimental)" OFF)
+option(WITH_RADOSGW_POSIX "POSIX backend for RADOS Gateway" ON)
+cmake_dependent_option(WITH_RADOSGW_STANDALONE "Standalone RADOS Gateway" ON WITH_RADOSGW_POSIX OFF)
 option(WITH_RADOSGW_RADOS "RADOS backend for Rados Gateway" ON)
 option(WITH_RADOSGW_SELECT_PARQUET "Support for s3 select on parquet objects" ON)
 option(WITH_RADOSGW_ARROW_FLIGHT "Build arrow flight when not using system-provided arrow" OFF)
index 10ccf569956994c87b724be73afc518ec02f3c83..1f26c78d0bb4b856cf9b987b26680101d8d596af 100644 (file)
@@ -1142,6 +1142,19 @@ storage system.  This package provides a REST gateway to the
 object store that aims to implement a superset of Amazon's S3
 service as well as the OpenStack Object Storage ("Swift") API.
 
+%package rgw-standalone
+Summary:       Rados REST gateway for filesystems
+%if 0%{?suse_version}
+Group:         System/Filesystems
+%endif
+Conflicts:     ceph-common
+Conflicts:     radosgw
+%description rgw-standalone
+This package provides an Object REST gateway (S3 and Swift) on
+top of a filesystem that aims to implement a superset of Amazon's S3
+service as well as the OpenStack Object Storage ("Swift") API.
+It does not require or provide any of the rest of the Ceph services.
+
 %package -n cephfs-top
 Summary:    top(1) like utility for Ceph Filesystem
 BuildArch:  noarch
@@ -2631,6 +2644,19 @@ if [ $1 -ge 1 ] ; then
   fi
 fi
 
+%files rgw-standalone
+%dir %{_docdir}/ceph
+%doc %{_docdir}/ceph/sample.ceph.conf
+%dir %{_libdir}/ceph
+%{_libdir}/ceph/libceph-common.so.*
+%{_bindir}/rgw-standalone
+%{_bindir}/rgw-standalone-admin
+%dir %{_localstatedir}/lib/ceph/radosgw
+
+%post rgw-standalone -p /sbin/ldconfig
+
+%postun rgw-standalone -p /sbin/ldconfig
+
 %files osd
 %{_bindir}/ceph-clsinfo
 %{_bindir}/ceph-erasure-code-tool
index 1ae58be6201b4fe6fe02c536cf7b4ab020d3538f..b9162455f035d12789b87eae0fa48237bf5c5657 100644 (file)
 #cmakedefine WITH_RADOSGW_POSIX
 
 /* Backend RADOS for Rados Gateway */
-#cmakedefine WITH_RADOSGW_RADOS
+/* #cmakedefine WITH_RADOSGW_RADOS */
 
 /* Defined if std::map::merge() is supported */
 #cmakedefine HAVE_STDLIB_MAP_SPLICING
index 875c5b21397df9374105c2eaa6a89ffb81929c5c..d331dc73fd82282b6326a4aa992f101232602eec 100644 (file)
@@ -1,6 +1,12 @@
 find_program(GPERF gperf
   REQUIRED)
 
+option(USE_SQLITE "Enable SQLITE DB" ON)
+if(USE_SQLITE)
+  find_package(SQLite3 REQUIRED)
+  add_compile_definitions(SQLITE_ENABLED=1)
+endif()
+
 if(WITH_RADOSGW_BACKTRACE_LOGGING)
   add_definitions(-D_BACKTRACE_LOGGING)
 endif(WITH_RADOSGW_BACKTRACE_LOGGING)
@@ -154,126 +160,12 @@ list(APPEND librgw_common_srcs
   driver/immutable_config/store.cc
   driver/json_config/store.cc)
 
-if(WITH_RADOSGW_RADOS)
-  list(APPEND librgw_common_srcs
-          services/svc_bi_rados.cc
-          services/svc_bilog_rados.cc
-          services/svc_bucket.cc
-          services/svc_bucket_sobj.cc
-          services/svc_bucket_sync_sobj.cc
-          services/svc_cls.cc
-          services/svc_config_key_rados.cc
-          services/svc_mdlog.cc
-          services/svc_notify.cc
-          services/svc_quota.cc
-          services/svc_sync_modules.cc
-          services/svc_sys_obj.cc
-          services/svc_sys_obj_cache.cc
-          services/svc_sys_obj_core.cc
-          services/svc_user.cc
-          services/svc_user_rados.cc
-          services/svc_zone.cc
-          services/svc_zone_utils.cc
-          driver/rados/account.cc
-          driver/rados/buckets.cc
-          driver/rados/group.cc
-          driver/rados/groups.cc
-          driver/rados/rgw_bucket.cc
-          driver/rados/rgw_bl_rados.cc
-          driver/rados/rgw_cr_rados.cc
-          driver/rados/rgw_cr_tools.cc
-          driver/rados/rgw_d3n_datacache.cc
-          driver/rados/rgw_datalog.cc
-          driver/rados/rgw_datalog_notify.cc
-          driver/rados/rgw_data_sync.cc
-          driver/rados/rgw_etag_verifier.cc
-          driver/rados/rgw_gc.cc
-          driver/rados/rgw_gc_log.cc
-          driver/rados/rgw_lc_tier.cc
-          driver/rados/rgw_log_backing.cc
-          driver/rados/rgw_metadata.cc
-          driver/rados/rgw_notify.cc
-          driver/rados/rgw_obj_manifest.cc
-          driver/rados/rgw_object_expirer_core.cc
-          driver/rados/rgw_otp.cc
-          driver/rados/rgw_pubsub_push.cc
-          driver/rados/rgw_putobj_processor.cc
-          driver/rados/rgw_rados.cc
-          driver/rados/rgw_reshard.cc
-          driver/rados/rgw_rest_bucket.cc
-          driver/rados/rgw_rest_log.cc
-          driver/rados/rgw_rest_realm.cc
-          driver/rados/rgw_rest_user.cc
-          driver/rados/rgw_sal_rados.cc
-          driver/rados/rgw_service.cc
-          driver/rados/rgw_sync.cc
-          driver/rados/rgw_sync_counters.cc
-          driver/rados/rgw_sync_error_repo.cc
-          driver/rados/rgw_sync_module.cc
-          driver/rados/rgw_sync_module_aws.cc
-          driver/rados/rgw_sync_module_es.cc
-          driver/rados/rgw_sync_module_es_rest.cc
-          driver/rados/rgw_sync_module_log.cc
-          driver/rados/rgw_sync_trace.cc
-          driver/rados/rgw_tools.cc
-          driver/rados/rgw_trim_bilog.cc
-          driver/rados/rgw_trim_datalog.cc
-          driver/rados/rgw_trim_mdlog.cc
-          driver/rados/rgw_user.cc
-          driver/rados/oidc.cc
-          driver/rados/oidcs.cc
-          driver/rados/role.cc
-          driver/rados/roles.cc
-          driver/rados/sync_fairness.cc
-          driver/rados/topic.cc
-          driver/rados/topic_migration.cc
-          driver/rados/topics.cc
-          driver/rados/users.cc
-          driver/rados/config/impl.cc
-          driver/rados/config/period.cc
-          driver/rados/config/period_config.cc
-          driver/rados/config/realm.cc
-          driver/rados/config/realm_watcher.cc
-          driver/rados/config/store.cc
-          driver/rados/config/zone.cc
-          driver/rados/config/zonegroup.cc
-          driver/rados/rgw_dedup.cc
-          driver/rados/rgw_dedup_filter.cc
-          driver/rados/rgw_dedup_table.cc
-          driver/rados/rgw_dedup_store.cc
-          driver/rados/rgw_dedup_utils.cc
-          driver/rados/rgw_dedup_cluster.cc
-         rgw_coroutine.cc
-       )
-endif()
 if(WITH_RADOSGW_AMQP_ENDPOINT)
   list(APPEND librgw_common_srcs rgw_amqp.cc)
 endif()
 if(WITH_RADOSGW_KAFKA_ENDPOINT)
   list(APPEND librgw_common_srcs rgw_kafka.cc)
 endif()
-if(WITH_RADOSGW_DBSTORE)
-  add_subdirectory(driver/dbstore)
-  list(APPEND librgw_common_srcs rgw_sal_dbstore.cc)
-endif()
-if(WITH_RADOSGW_MOTR)
-  list(APPEND librgw_common_srcs driver/motr/rgw_sal_motr.cc)
-endif()
-if(WITH_RADOSGW_DAOS)
-  list(APPEND librgw_common_srcs driver/motr/rgw_sal_daos.cc)
-endif()
-
-if(WITH_RADOSGW_POSIX)
-  #add_subdirectory(driver/posix)
-  find_package(LMDB REQUIRED)
-  add_compile_definitions(LMDB_SAFE_NO_CPP_UTILITIES)
-  list(APPEND librgw_common_srcs
-             driver/posix/lmdb-safe.cc
-             driver/posix/notify.cpp
-          driver/posix/posixDB.cc
-             driver/posix/rgw_sal_posix.cc)
-endif()
-
 if(WITH_JAEGER)
   list(APPEND librgw_common_srcs rgw_tracer.cc)
 endif()
@@ -284,16 +176,169 @@ if(WITH_RADOSGW_ARROW_FLIGHT)
   list(APPEND librgw_common_srcs rgw_flight.cc rgw_flight_frontend.cc)
 endif(WITH_RADOSGW_ARROW_FLIGHT)
 
+list(APPEND librgw_rados_srcs
+  services/svc_bi_rados.cc
+  services/svc_bilog_rados.cc
+  services/svc_bucket.cc
+  services/svc_bucket_sobj.cc
+  services/svc_bucket_sync_sobj.cc
+  services/svc_cls.cc
+  services/svc_config_key_rados.cc
+  services/svc_mdlog.cc
+  services/svc_notify.cc
+  services/svc_quota.cc
+  services/svc_sync_modules.cc
+  services/svc_sys_obj.cc
+  services/svc_sys_obj_cache.cc
+  services/svc_sys_obj_core.cc
+  services/svc_user.cc
+  services/svc_user_rados.cc
+  services/svc_zone.cc
+  services/svc_zone_utils.cc
+  driver/rados/account.cc
+  driver/rados/buckets.cc
+  driver/rados/group.cc
+  driver/rados/groups.cc
+  driver/rados/rgw_bucket.cc
+  driver/rados/rgw_bl_rados.cc
+  driver/rados/rgw_cr_rados.cc
+  driver/rados/rgw_cr_tools.cc
+  driver/rados/rgw_d3n_datacache.cc
+  driver/rados/rgw_datalog.cc
+  driver/rados/rgw_datalog_notify.cc
+  driver/rados/rgw_data_sync.cc
+  driver/rados/rgw_etag_verifier.cc
+  driver/rados/rgw_gc.cc
+  driver/rados/rgw_gc_log.cc
+  driver/rados/rgw_lc_tier.cc
+  driver/rados/rgw_log_backing.cc
+  driver/rados/rgw_metadata.cc
+  driver/rados/rgw_notify.cc
+  driver/rados/rgw_obj_manifest.cc
+  driver/rados/rgw_object_expirer_core.cc
+  driver/rados/rgw_otp.cc
+  driver/rados/rgw_pubsub_push.cc
+  driver/rados/rgw_putobj_processor.cc
+  driver/rados/rgw_rados.cc
+  driver/rados/rgw_reshard.cc
+  driver/rados/rgw_rest_bucket.cc
+  driver/rados/rgw_rest_log.cc
+  driver/rados/rgw_rest_realm.cc
+  driver/rados/rgw_rest_user.cc
+  driver/rados/rgw_sal_rados.cc
+  driver/rados/rgw_service.cc
+  driver/rados/rgw_sync.cc
+  driver/rados/rgw_sync_counters.cc
+  driver/rados/rgw_sync_error_repo.cc
+  driver/rados/rgw_sync_module.cc
+  driver/rados/rgw_sync_module_aws.cc
+  driver/rados/rgw_sync_module_es.cc
+  driver/rados/rgw_sync_module_es_rest.cc
+  driver/rados/rgw_sync_module_log.cc
+  driver/rados/rgw_sync_trace.cc
+  driver/rados/rgw_tools.cc
+  driver/rados/rgw_trim_bilog.cc
+  driver/rados/rgw_trim_datalog.cc
+  driver/rados/rgw_trim_mdlog.cc
+  driver/rados/rgw_user.cc
+  driver/rados/oidc.cc
+  driver/rados/oidcs.cc
+  driver/rados/role.cc
+  driver/rados/roles.cc
+  driver/rados/sync_fairness.cc
+  driver/rados/topic.cc
+  driver/rados/topic_migration.cc
+  driver/rados/topics.cc
+  driver/rados/users.cc
+  driver/rados/config/impl.cc
+  driver/rados/config/period.cc
+  driver/rados/config/period_config.cc
+  driver/rados/config/realm.cc
+  driver/rados/config/realm_watcher.cc
+  driver/rados/config/store.cc
+  driver/rados/config/zone.cc
+  driver/rados/config/zonegroup.cc
+  driver/rados/rgw_dedup.cc
+  driver/rados/rgw_dedup_filter.cc
+  driver/rados/rgw_dedup_table.cc
+  driver/rados/rgw_dedup_store.cc
+  driver/rados/rgw_dedup_utils.cc
+  driver/rados/rgw_dedup_cluster.cc
+  rgw_coroutine.cc
+)
+list(APPEND librgw_dbstore_srcs
+  rgw_sal_dbstore.cc
+  driver/dbstore/common/dbstore_log.h
+  driver/dbstore/common/dbstore.h
+  driver/dbstore/common/dbstore.cc
+  driver/dbstore/config/store.cc
+  driver/dbstore/config/sqlite.cc
+  driver/dbstore/sqlite/connection.cc
+  driver/dbstore/sqlite/error.cc
+  driver/dbstore/sqlite/statement.cc
+  driver/dbstore/dbstore_mgr.h
+  driver/dbstore/dbstore_mgr.cc
+  driver/dbstore/sqlite/sqliteDB.h
+  driver/dbstore/sqlite/sqliteDB.cc
+)
+list(APPEND librgw_motr_srcs
+  driver/motr/rgw_sal_motr.cc
+)
+list(APPEND librgw_daos_srcs
+  driver/motr/rgw_sal_daos.cc
+)
+list(APPEND librgw_posix_srcs
+  driver/posix/rgw_sal_posix.cc
+  driver/posix/lmdb-safe.cc
+  driver/posix/posixDB.cc
+  driver/posix/notify.cpp
+)
+list(APPEND librgw_d4n_srcs
+  rgw_redis_driver.cc
+  rgw_ssd_driver.cc
+  driver/d4n/d4n_directory.cc
+  driver/d4n/d4n_policy.cc
+  driver/d4n/rgw_sal_d4n.cc)
+
+set(rgw_common_libs)
+
+if(WITH_RADOSGW_RADOS)
+  list(APPEND librgw_driver_srcs ${librgw_rados_srcs})
+endif()
+if(WITH_RADOSGW_DBSTORE OR WITH_RADOSGW_STANDALONE)
+  list(APPEND librgw_driver_srcs ${librgw_dbstore_srcs})
+  list(APPEND librgw_driver_standalone_srcs ${librgw_dbstore_srcs})
+  list(APPEND rgw_common_libs sqlite3)
+set(SQLITE_COMPILE_FLAGS "-DSQLITE_THREADSAFE=1")
+endif()
+if(WITH_RADOSGW_MOTR)
+  list(APPEND librgw_driver_srcs ${librgw_motr_srcs})
+endif()
+if(WITH_RADOSGW_DAOS)
+  list(APPEND librgw_driver_srcs ${librgw_daos_srcs})
+endif()
+if(WITH_RADOSGW_POSIX)
+  find_package(LMDB REQUIRED)
+  add_compile_definitions(LMDB_SAFE_NO_CPP_UTILITIES)
+  list(APPEND librgw_driver_srcs ${librgw_posix_srcs})
+  list(APPEND librgw_driver_standalone_srcs ${librgw_posix_srcs})
+endif()
 if(WITH_RADOSGW_D4N)
-  list(APPEND librgw_common_srcs
-        rgw_redis_driver.cc
-        rgw_ssd_driver.cc
-        driver/d4n/d4n_directory.cc
-        driver/d4n/d4n_policy.cc
-        driver/d4n/rgw_sal_d4n.cc)
+  list(APPEND librgw_driver_srcs ${librgw_d4n_srcs})
+endif()
+
+if(WITH_RADOSGW_STANDALONE)
+  find_package(LMDB REQUIRED)
+  add_compile_definitions(LMDB_SAFE_NO_CPP_UTILITIES)
+  list(APPEND librgw_driver_standalone_srcs
+    ${librgw_posix_srcs}
+    driver/posix/rgw_standalone.cc
+  )
 endif()
 
-add_library(rgw_common STATIC ${librgw_common_srcs})
+add_library(rgw_common STATIC
+  ${librgw_common_srcs}
+  ${librgw_driver_srcs})
 
 include(CheckCXXCompilerFlag)
 check_cxx_compiler_flag("-Wimplicit-const-int-float-conversion"
@@ -311,6 +356,7 @@ endif()
 
 target_link_libraries(rgw_common
   PRIVATE
+    ${rgw_common_libs}
     legacy-option-headers
     global
     cls_rgw_client
@@ -342,6 +388,18 @@ target_compile_definitions(rgw_common PUBLIC
   $<$<CONFIG:Debug>:XXH_NO_INLINE_HINTS=1>
   $<$<CONFIG:RelWithDebInfo>:XXH_NO_INLINE_HINTS=1>)
 
+#target_compile_definitions(rgw_common
+  #PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
+
+if(WITH_RADOSGW_RADOS)
+  target_compile_OPTIONS(rgw_common
+    PUBLIC "-DWITH_RADOSGW_RADOS")
+endif()
+
+if(WITH_RADOSGW_DBSTORE OR WITH_RADOSGW_STANDALONE)
+  target_compile_OPTIONS(rgw_common PUBLIC "-DSQLITE_THREADSAFE=1")
+endif()
+
 if(WITH_RADOSGW_KAFKA_ENDPOINT)
   # used by rgw_kafka.cc
   target_link_libraries(rgw_common
@@ -392,23 +450,97 @@ if(WITH_RADOSGW_RADOS)
   )
 endif()
 
-if(WITH_RADOSGW_DBSTORE)
-  target_link_libraries(rgw_common PRIVATE global dbstore)
-endif()
-
 if(WITH_RADOSGW_MOTR)
   find_package(motr REQUIRED)
-  target_link_libraries(rgw_common PRIVATE motr::motr)
+  list(APPEND rgw_libs motr::motr)
 endif()
 
 if(WITH_RADOSGW_DAOS)
   find_package(DAOS REQUIRED)
   set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG ")
-  target_link_libraries(rgw_common PRIVATE daos dfs ds3 uuid duns)
+  list(APPEND rgw_libs daos dfs ds3 uuid duns)
   target_include_directories(rgw_common PRIVATE ${PC_DAOS_INCLUDEDIR} )
   link_directories( ${PC_DAOS_LIBRARY_DIRS} )
 endif()
 
+if(WITH_RADOSGW_STANDALONE)
+  add_library(rgw_common_standalone STATIC
+    ${librgw_common_srcs}
+    ${librgw_driver_standalone_srcs})
+
+  include(CheckCXXCompilerFlag)
+  check_cxx_compiler_flag("-Wimplicit-const-int-float-conversion"
+    COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
+  if(COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
+    target_compile_definitions(common-objs PRIVATE
+      HAVE_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
+  endif()
+
+  target_link_libraries(rgw_common_standalone
+    PRIVATE
+    ${rgw_common_libs}
+    legacy-option-headers
+    global
+    cls_rgw_client
+    keyring
+    rt
+    ICU::uc
+    OATH::OATH
+    dmclock::dmclock
+    ${CURL_LIBRARIES}
+    ${EXPAT_LIBRARIES}
+    ${ARROW_LIBRARIES}
+    ${ARROW_FLIGHT_LIBRARIES}
+    ${LMDB_LIBRARIES}
+    PUBLIC
+    ${LUA_LIBRARIES}
+    RapidJSON::RapidJSON
+    Boost::context
+    Boost::url
+    ${FMT_LIB}
+    OpenSSL::SSL
+    BLAKE3::blake3)
+  target_include_directories(rgw_common_standalone
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw/services"
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
+    PUBLIC "${LUA_INCLUDE_DIR}")
+
+  # work around https://github.com/Cyan4973/xxHash/issues/943 for debug builds
+  target_compile_definitions(rgw_common_standalone PUBLIC
+    $<$<CONFIG:Debug>:XXH_NO_INLINE_HINTS=1>
+    $<$<CONFIG:RelWithDebInfo>:XXH_NO_INLINE_HINTS=1>)
+
+  target_compile_OPTIONS(rgw_common_standalone
+    PUBLIC "-DWITH_RADOSGW_STANDALONE"
+    PUBLIC "-DWITH_RADOSGW_DBSTORE"
+    PUBLIC "-UWITH_RADOSGW_D4N"
+    PUBLIC "-UWITH_RADOSGW_RADOS"
+    PUBLIC "-UWITH_RADOSGW_MOTR"
+    PUBLIC "-UWITH_RADOSGW_DAOS"
+    PUBLIC "-UWITH_RADOSGW_AMQP_ENDPOINT")
+
+  if(WITH_RADOSGW_KAFKA_ENDPOINT)
+    # used by rgw_kafka.cc
+    target_link_libraries(rgw_common_standalone
+      PRIVATE
+      RDKafka::RDKafka)
+  endif()
+  if(WITH_OPENLDAP)
+    target_link_libraries(rgw_common_standalone
+      PRIVATE
+      OpenLDAP::OpenLDAP)
+  endif()
+  if(WITH_RADOSGW_LUA_PACKAGES)
+    target_link_libraries(rgw_common_standalone
+      PRIVATE Boost::filesystem StdFilesystem::filesystem)
+  endif()
+
+  if(WITH_JAEGER)
+    add_dependencies(rgw_common_standalone jaeger_base)
+    target_link_libraries(rgw_common_standalone PUBLIC jaeger_base)
+  endif()
+endif()
+
 set(rgw_a_srcs
   rgw_appmain.cc
   rgw_asio_client.cc
@@ -430,7 +562,6 @@ set(rgw_a_srcs
   rgw_realm_reloader.cc
   rgw_rest_config.cc
   rgw_rest_info.cc
-  rgw_rest_dedup.cc
   rgw_rest_metadata.cc
   rgw_rest_ratelimit.cc
   rgw_rest_sts.cc
@@ -441,12 +572,12 @@ set(rgw_a_srcs
   rgw_usage.cc
   rgw_sts.cc)
 
+set(rgw_a_rados_srcs "")
+
 if(WITH_RADOSGW_RADOS)
-  list(APPEND rgw_a_srcs
-         driver/rados/rgw_rest_bucket.cc
-          driver/rados/rgw_rest_log.cc
-          driver/rados/rgw_rest_realm.cc
-         rgw_period_pusher.cc
+  list(APPEND rgw_a_rados_srcs
+    rgw_period_pusher.cc
+    rgw_rest_dedup.cc
   )
 endif()
 
@@ -458,10 +589,16 @@ set_source_files_properties(rgw_iam_policy.cc PROPERTIES
 
 
 add_library(rgw_a STATIC
-    ${rgw_a_srcs})
+    ${rgw_a_srcs}
+    ${rgw_a_rados_srcs})
 
 target_compile_definitions(rgw_a PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
 
+if(WITH_RADOSGW_RADOS)
+  target_compile_OPTIONS(rgw_a
+    PUBLIC "-DWITH_RADOSGW_RADOS")
+endif()
+
 target_include_directories(rgw_a
   PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
   PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
@@ -477,6 +614,8 @@ endif()
 
 target_link_libraries(rgw_a
   PRIVATE
+    rgw_schedulers
+    kmip
     legacy-option-headers
     common_utf8 global
     ${CRYPTO_LIBS}
@@ -492,7 +631,45 @@ if(WITH_CURL_OPENSSL)
   target_link_libraries(rgw_a PRIVATE OpenSSL::Crypto)
 endif()
 
-set(rgw_libs rgw_a)
+list(APPEND rgw_libs rgw_a)
+
+if(WITH_RADOSGW_STANDALONE)
+  add_library(rgw_a_standalone STATIC
+    ${rgw_a_srcs})
+
+  target_compile_OPTIONS(rgw_a_standalone
+    PUBLIC "-DWITH_RADOSGW_STANDALONE"
+    PUBLIC "-DWITH_RADOSGW_DBSTORE"
+    PUBLIC "-UWITH_RADOSGW_D4N"
+    PUBLIC "-UWITH_RADOSGW_RADOS"
+    PUBLIC "-UWITH_RADOSGW_MOTR"
+    PUBLIC "-UWITH_RADOSGW_DAOS")
+
+  target_include_directories(rgw_a_standalone
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw/driver/rados"
+    PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip")
+
+  target_link_libraries(rgw_a_standalone
+    PRIVATE
+    rgw_schedulers
+    kmip
+    legacy-option-headers
+    common_utf8 global
+    ${CRYPTO_LIBS}
+    ${ARROW_LIBRARIES}
+    ${ARROW_FLIGHT_LIBRARIES}
+    OATH::OATH
+    PUBLIC
+    rgw_common_standalone
+    Boost::context)
+
+  if(WITH_CURL_OPENSSL)
+    # used by rgw_http_client_curl.cc
+    target_link_libraries(rgw_a_standalone PRIVATE OpenSSL::Crypto)
+  endif()
+endif()
 
 set(rgw_schedulers_srcs
   rgw_dmclock_scheduler_ctx.cc
@@ -507,15 +684,16 @@ if(COMPILER_SUPPORTS_VLA_ERROR)
     $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
 endif()
 
-# rgw_a references rgw::dmclock::* (rgw_schedulers) and kmip_* (kmip); declare
-# it here so the dependency propagates to every consumer. PRIVATE: not in headers.
-target_link_libraries(rgw_a PRIVATE rgw_schedulers kmip)
-
 set(radosgw_srcs
   rgw_main.cc)
 
 add_executable(radosgw ${radosgw_srcs})
 
+if(WITH_RADOSGW_RADOS)
+  target_compile_OPTIONS(radosgw
+    PUBLIC "-DWITH_RADOSGW_RADOS")
+endif()
+
 if(WITH_RADOSGW_ARROW_FLIGHT)
   # target_compile_definitions(radosgw PUBLIC WITH_ARROW_FLIGHT)
   target_compile_definitions(rgw_common PUBLIC WITH_ARROW_FLIGHT)
@@ -529,10 +707,9 @@ target_include_directories(radosgw
   PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
   PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip"
   PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
+  PUBLIC "${CMAKE_SOURCE_DIR}/src/s3select/rapidjson/include"
   PRIVATE "${LUA_INCLUDE_DIR}")
 
-target_include_directories(radosgw SYSTEM PUBLIC "../rapidjson/include")
-
 target_link_libraries(radosgw PRIVATE
   legacy-option-headers
   ${rgw_libs}
@@ -580,16 +757,34 @@ endif(WITH_RADOSGW_FDB)
 
 install(TARGETS radosgw DESTINATION bin)
 
-set(radosgw_admin_srcs
-  radosgw-admin/radosgw-admin.cc
-  radosgw-admin/sync_checkpoint.cc
-  radosgw-admin/orphan.cc)
+if(WITH_RADOSGW_STANDALONE)
+  add_executable(rgw-standalone ${radosgw_srcs})
+
+  target_compile_OPTIONS(rgw-standalone
+    PUBLIC "-DWITH_RADOSGW_STANDALONE"
+    PUBLIC "-DWITH_RADOSGW_DBSTORE"
+    PUBLIC "-UWITH_RADOSGW_D4N"
+    PUBLIC "-UWITH_RADOSGW_RADOS"
+    PUBLIC "-UWITH_RADOSGW_MOTR"
+    PUBLIC "-UWITH_RADOSGW_DAOS")
+
+  target_include_directories(rgw-standalone
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
+    PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip"
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/s3select/rapidjson/include"
+    PRIVATE "${LUA_INCLUDE_DIR}")
+
+  target_link_libraries(rgw-standalone PRIVATE
+    legacy-option-headers
+    rgw_a_standalone
+    ${ALLOC_LIBS})
 
-set(radosgw_admin_srcs_without_rados
-  radosgw-admin/radosgw-admin.cc
-  driver/rados/rgw_user.cc
-  driver/rados/rgw_bucket.cc
-  driver/rados/rgw_obj_manifest.cc)
+  install(TARGETS rgw-standalone DESTINATION bin)
+endif()
+
+set(radosgw_admin_srcs
+  radosgw-admin/radosgw-admin.cc)
 
 # this is unsatisfying and hopefully temporary; ARROW should not be
 # part of radosgw_admin
@@ -598,32 +793,62 @@ if(WITH_RADOSGW_ARROW_FLIGHT)
 endif(WITH_RADOSGW_ARROW_FLIGHT)
 
 if(WITH_RADOSGW_RADOS)
-add_executable(radosgw-admin ${radosgw_admin_srcs})
-target_link_libraries(radosgw-admin
-  legacy-option-headers
-  ${rgw_libs} librados
-  cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
-  cls_log_client cls_timeindex_client
-  cls_version_client cls_user_client
-  global ${LIB_RESOLV}
-  OATH::OATH
-  ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
+  list(APPEND radosgw_admin_rados_srcs
+    radosgw-admin/sync_checkpoint.cc
+    radosgw-admin/orphan.cc)
+
+  add_executable(radosgw-admin ${radosgw_admin_srcs} ${radosgw_admin_rados_srcs})
+  target_link_libraries(radosgw-admin
+    legacy-option-headers
+    ${rgw_libs} librados
+    cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
+    cls_log_client cls_timeindex_client
+    cls_version_client cls_user_client
+    global ${LIB_RESOLV}
+    OATH::OATH
+    ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
+
+  # this is unsatisfying and hopefully temporary; ARROW should not be
+  # part of radosgw_admin
+  if(WITH_RADOSGW_ARROW_FLIGHT)
+    target_link_libraries(radosgw-admin ${ARROW_LIBRARIES} ${ARROW_FLIGHT_LIBRARIES})
+  endif(WITH_RADOSGW_ARROW_FLIGHT)
+
+  target_compile_OPTIONS(radosgw-admin PUBLIC "-DWITH_RADOSGW_RADOS")
+
+  install(TARGETS radosgw-admin DESTINATION bin)
 endif()
 
-if(WITH_RADOSGW_POSIX AND NOT WITH_RADOSGW_RADOS)
-add_executable(radosgw-admin ${radosgw_admin_srcs_without_rados})
-target_link_libraries(radosgw-admin
-  ${rgw_libs} librados)
-endif(WITH_RADOSGW_POSIX AND NOT WITH_RADOSGW_RADOS)
+if(WITH_RADOSGW_STANDALONE)
+  list(APPEND rgw_standalone_admin_srcs
+    driver/rados/rgw_user.cc
+    driver/rados/rgw_bucket.cc
+    driver/rados/rgw_obj_manifest.cc)
 
-# this is unsatisfying and hopefully temporary; ARROW should not be
-# part of radosgw_admin
-if(WITH_RADOSGW_ARROW_FLIGHT)
-  target_link_libraries(radosgw-admin ${ARROW_LIBRARIES} ${ARROW_FLIGHT_LIBRARIES})
-endif(WITH_RADOSGW_ARROW_FLIGHT)
+  add_executable(rgw-standalone-admin ${radosgw_admin_srcs} ${rgw_standalone_admin_srcs})
 
-if(WITH_RADOSGW_RADOS)
-install(TARGETS radosgw-admin DESTINATION bin)
+  target_link_libraries(rgw-standalone-admin
+    legacy-option-headers
+    rgw_a_standalone
+    global ${LIB_RESOLV}
+    OATH::OATH
+    ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
+
+  # this is unsatisfying and hopefully temporary; ARROW should not be
+  # part of radosgw_admin
+  if(WITH_RADOSGW_ARROW_FLIGHT)
+    target_link_libraries(rgw-standalone-admin ${ARROW_LIBRARIES} ${ARROW_FLIGHT_LIBRARIES})
+  endif(WITH_RADOSGW_ARROW_FLIGHT)
+
+  target_compile_OPTIONS(rgw-standalone-admin
+    PUBLIC "-DWITH_RADOSGW_STANDALONE"
+    PUBLIC "-DWITH_RADOSGW_DBSTORE"
+    PUBLIC "-UWITH_RADOSGW_D4N"
+    PUBLIC "-UWITH_RADOSGW_RADOS"
+    PUBLIC "-UWITH_RADOSGW_MOTR"
+    PUBLIC "-UWITH_RADOSGW_DAOS")
+
+  install(TARGETS rgw-standalone-admin DESTINATION bin)
 endif()
 
 set(radosgw_es_srcs
@@ -635,6 +860,9 @@ target_link_libraries(radosgw-es ${rgw_libs} librados
   cls_version_client cls_user_client
   global ${LIB_RESOLV}
   ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
+if(WITH_RADOSGW_RADOS)
+  target_compile_OPTIONS(radosgw-es PUBLIC "-DWITH_RADOSGW_RADOS")
+endif()
 install(TARGETS radosgw-es DESTINATION bin)
 
 set(radosgw_token_srcs
@@ -647,6 +875,9 @@ target_link_libraries(radosgw-token
 if(COMPILER_SUPPORTS_VLA_ERROR)
   target_compile_options(radosgw-token PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
 endif()
+if(WITH_RADOSGW_RADOS)
+  target_compile_OPTIONS(radosgw-token PUBLIC "-DWITH_RADOSGW_RADOS")
+endif()
 install(TARGETS radosgw-token DESTINATION bin)
 
 if(WITH_RADOSGW_RADOS)
@@ -659,6 +890,7 @@ target_link_libraries(radosgw-object-expirer ${rgw_libs} librados
   cls_version_client cls_user_client
   global ${LIB_RESOLV}
   ${CURL_LIBRARIES} ${EXPAT_LIBRARIES})
+target_compile_OPTIONS(radosgw-object-expirer PUBLIC "-DWITH_RADOSGW_RADOS")
 install(TARGETS radosgw-object-expirer DESTINATION bin)
 endif()
 
@@ -666,6 +898,9 @@ set(radosgw_polparser_srcs
   rgw_polparser.cc)
 add_executable(rgw-policy-check ${radosgw_polparser_srcs})
 target_link_libraries(rgw-policy-check ${rgw_libs})
+if(WITH_RADOSGW_RADOS)
+  target_compile_OPTIONS(rgw-policy-check PUBLIC "-DWITH_RADOSGW_RADOS")
+endif()
 install(TARGETS rgw-policy-check DESTINATION bin)
 
 set(librgw_srcs
@@ -677,13 +912,13 @@ target_include_directories(rgw
   PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
   PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip"
   PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
+  PUBLIC "${CMAKE_SOURCE_DIR}/src/s3select/rapidjson/include"
   PRIVATE "${LUA_INCLUDE_DIR}")
 
-target_include_directories(rgw SYSTEM PUBLIC "../rapidjson/include")
-
 target_link_libraries(rgw
   PRIVATE
   ${rgw_libs}
+  rgw_common
   librados
   cls_rgw_client
   cls_otp_client
@@ -713,18 +948,28 @@ set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0
   SOVERSION 2)
 install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
+if(WITH_RADOSGW_RADOS)
+  target_compile_OPTIONS(rgw PUBLIC "-DWITH_RADOSGW_RADOS")
+endif()
+
 if(WITH_TESTS)
   add_executable(ceph_rgw_jsonparser
     rgw_jsonparser.cc)
   target_link_libraries(ceph_rgw_jsonparser
     ${rgw_libs}
     global)
+  if(WITH_RADOSGW_RADOS)
+    target_compile_OPTIONS(ceph_rgw_jsonparser PUBLIC "-DWITH_RADOSGW_RADOS")
+  endif()
 
   add_executable(ceph_rgw_multiparser
     rgw_multiparser.cc)
   target_link_libraries(ceph_rgw_multiparser
     ${rgw_libs}
     global)
+  if(WITH_RADOSGW_RADOS)
+    target_compile_OPTIONS(ceph_rgw_multiparser PUBLIC "-DWITH_RADOSGW_RADOS")
+  endif()
 
   install(TARGETS
     ceph_rgw_jsonparser
index 373a01d7442fe521759275e13b66dc6683c69bd3..1499d150d95d547a90f4e168ad546d59bd62bc98 100644 (file)
@@ -135,7 +135,7 @@ class D4NFilterBucket : public FilterBucket {
                                const std::string& oid,
                                std::optional<std::string> upload_id=std::nullopt,
                                ACLOwner owner={}, ceph::real_time mtime=real_clock::now()) override;
-    void set_cache_request() { cache_request = true; }
+    virtual void set_cache_request() override { cache_request = true; }
 };
 
 class D4NFilterObject : public FilterObject {
@@ -306,7 +306,7 @@ class D4NFilterObject : public FilterObject {
     bool load_obj_from_store() { return load_from_store; }
     void set_load_obj_from_store(bool load_from_store) { this->load_from_store = load_from_store; }
     int delete_cache_entry(const DoutPrefixProvider* dpp, const std::string key, optional_yield y);
-    void set_cache_request() { cache_request = true; }
+    virtual void set_cache_request() override { cache_request = true; }
     bool is_cache_request() { return cache_request; }
 };
 
@@ -346,7 +346,6 @@ class D4NFilterWriter : public FilterWriter {
                         uint32_t flags) override;
    bool is_atomic() { return atomic; };
    const DoutPrefixProvider* get_dpp() { return this->dpp; } 
-   void set_cache_request() { object->set_cache_request(); }
 };
 
 class D4NFilterMultipartUpload : public FilterMultipartUpload {
index 0226c3afb02039b4bdf9bd338908d72fe571449e..6d2e7af8812746486976fa96b38f3c18fd3575cc 100644 (file)
@@ -4,7 +4,15 @@ project(dbstore)
 
 option(USE_SQLITE "Enable SQLITE DB" ON)
 
-set (CMAKE_INCLUDE_DIR ${CMAKE_INCLUDE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/common")
+set (dbstore_include_dirs
+    "${CMAKE_CURRENT_SOURCE_DIR}"
+    "${CMAKE_CURRENT_SOURCE_DIR}/common")
+
+IF(USE_SQLITE)
+  add_subdirectory(sqlite)
+  list(APPEND dbstore_include_dirs "${CMAKE_CURRENT_SOURCE_DIR}/sqlite")
+  add_compile_definitions(SQLITE_ENABLED=1)
+ENDIF()
 
 set(dbstore_srcs
     common/dbstore_log.h
@@ -29,29 +37,30 @@ if(COMPILER_SUPPORTS_VLA_ERROR)
   target_compile_options(dbstore_lib PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
 endif()
 target_include_directories(dbstore_lib
-    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
-    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw/store/rados"
-    PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
+    PUBLIC
+    ${dbstore_include_dirs}
+    "${CMAKE_SOURCE_DIR}/src/rgw"
+    "${CMAKE_SOURCE_DIR}/src/s3select/rapidjson/include"
+    PRIVATE
+    "${LUA_INCLUDE_DIR}")
+
 set(link_targets Boost::context)
 if(WITH_JAEGER)
   list(APPEND link_targets jaeger_base)
 endif()
-list(APPEND link_targets rgw_common)
+
 target_link_libraries(dbstore_lib PUBLIC ${link_targets})
 
-set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} dbstore_lib)
+set (dbstore_libs dbstore_lib)
 
 IF(USE_SQLITE)
-  add_subdirectory(sqlite)
-  set(CMAKE_INCLUDE_DIR ${CMAKE_INCLUDE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/sqlite")
-  add_compile_definitions(SQLITE_ENABLED=1)
-  set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} rgw_common)
-  set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} sqlite_db)
-  add_dependencies(sqlite_db dbstore_lib)
+  list(APPEND dbstore_libs
+    rgw_common
+    sqlite_db)
 ENDIF()
 
 # add pthread library
-set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} pthread)
+list(APPEND dbstore_libs pthread)
 
 find_package(gtest QUIET)
 if(WITH_TESTS)
@@ -60,9 +69,8 @@ else()
        message(WARNING "Gtest not enabled")
 endif()
 
-include_directories(${CMAKE_INCLUDE_DIR})
 add_library(dbstore STATIC ${dbstore_mgr_srcs})
-target_link_libraries(dbstore ${CMAKE_LINK_LIBRARIES})
+target_link_libraries(dbstore ${dbstore_libs})
 if(COMPILER_SUPPORTS_VLA_ERROR)
   target_compile_options(dbstore PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
 endif()
@@ -71,10 +79,10 @@ endif()
 set(dbstore_main_srcs
     dbstore_main.cc)
 
-set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} dbstore)
+list(APPEND dbstore_libs dbstore)
 add_executable(dbstore-bin ${dbstore_main_srcs})
 add_dependencies(dbstore-bin dbstore)
-target_link_libraries(dbstore-bin ${CMAKE_LINK_LIBRARIES})
+target_link_libraries(dbstore-bin ${dbstore_libs})
 if(COMPILER_SUPPORTS_VLA_ERROR)
   target_compile_options(dbstore-bin PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
 endif()
index 1877f498dfe9783d5d1463f57a71cfa92702c266..145e2854aa5aa87675d130a110b00027ce5dde17 100644 (file)
 
 #include "rgw/rgw_zone.h"
 
-#include "common/connection_pool.h"
-#include "sqlite/connection.h"
-#include "sqlite/error.h"
-#include "sqlite/statement.h"
+#include "driver/dbstore/common/connection_pool.h"
+#include "driver/dbstore/sqlite/connection.h"
+#include "driver/dbstore/sqlite/error.h"
+#include "driver/dbstore/sqlite/statement.h"
 #include "sqlite_schema.h"
 #include "sqlite.h"
 
index 37c0f14fdbbac3d30c3b3380b0323dae09e6f455..a8daa4a756b6a3a2db2c1f162f8af5ccfcbc7278 100644 (file)
@@ -13,7 +13,12 @@ set(SQLITE_COMPILE_FLAGS "-DSQLITE_THREADSAFE=1")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SQLITE_COMPILE_FLAGS}")
 
 add_library(sqlite_db STATIC ${sqlite_db_srcs})
-target_link_libraries(sqlite_db sqlite3 dbstore_lib rgw_common)
+target_include_directories(sqlite_db
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
+    PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}"
+    PUBLIC "${CMAKE_SOURCE_DIR}/src/s3select/rapidjson/include"
+    PRIVATE "${LUA_INCLUDE_DIR}")
+target_link_libraries(sqlite_db sqlite3 common)
 if(COMPILER_SUPPORTS_VLA_ERROR)
   target_compile_options(sqlite_db PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
 endif()
index 6c4b25343704f4b63405ec71ff64ebecc8269ae9..775d2c5b5fa00e3c7174061ddd1b8704e67bc303 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <fmt/format.h>
 
-#include "sqlite/statement.h"
+#include "statement.h"
 
 class DoutPrefixProvider;
 
index af8400774d209c5f1f10df7e67adb3193ead0636..f8f4d583c08e196f9c416bf8e03bc9a2382c2670 100644 (file)
@@ -1,22 +1,22 @@
 cmake_minimum_required(VERSION 3.14.0)
 project(dbstore-tests)
 
-set (CMAKE_LINK_LIBRARIES ${CMAKE_LINK_LIBRARIES} gtest)
-
 set(dbstore_tests_srcs
     dbstore_tests.cc)
 
-include_directories(${CMAKE_INCLUDE_DIR})
-
 add_executable(unittest_dbstore_tests ${dbstore_tests_srcs})
-target_link_libraries(unittest_dbstore_tests ${CMAKE_LINK_LIBRARIES})
+target_link_libraries(unittest_dbstore_tests
+    dbstore
+    gtest)
 add_ceph_unittest(unittest_dbstore_tests)
 if(COMPILER_SUPPORTS_VLA_ERROR)
   target_compile_options(unittest_dbstore_tests PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
 endif()
 
 add_executable(unittest_dbstore_mgr_tests dbstore_mgr_tests.cc)
-target_link_libraries(unittest_dbstore_mgr_tests dbstore gtest_main)
+target_link_libraries(unittest_dbstore_mgr_tests
+    dbstore
+    gtest_main)
 add_ceph_unittest(unittest_dbstore_mgr_tests)
 if(COMPILER_SUPPORTS_VLA_ERROR)
   target_compile_options(unittest_dbstore_mgr_tests PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-Werror=vla>)
diff --git a/src/rgw/driver/posix/rgw_standalone.cc b/src/rgw/driver/posix/rgw_standalone.cc
new file mode 100644 (file)
index 0000000..244438b
--- /dev/null
@@ -0,0 +1,40 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*-
+// vim: ts=8 sw=2 sts=2 expandtab ft=cpp
+
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2026 IBM, Inc.
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+#include "rgw_sal.h"
+
+extern "C" {
+
+rgw::sal::Driver* newRadosStore(void* io_context, CephContext* cct)
+{
+  return NULL;
+}
+
+rgw::sal::Driver* newMotrStore(CephContext *cct)
+{
+  return NULL;
+}
+
+rgw::sal::Driver* newDaosStore(CephContext *cct)
+{
+  return NULL;
+}
+
+rgw::sal::Driver* newD4NFilter(rgw::sal::Driver* next, boost::asio::io_context& io_context, bool admin)
+{
+  return NULL;
+}
+
+}
index 4f3cdba8dac9215b61b807f0457acffd6ae6c423..214e22f38109265bf3ae8ece3e539d45550d0a32 100644 (file)
@@ -38,12 +38,14 @@ constexpr uint64_t BUCKET_TAG_QUICK_TIMEOUT = 30;
 using namespace std;
 
 // these values are copied from cls/rgw/cls_rgw.cc
+#ifdef WITH_RADOSGW_RADOS
 static const string BI_OLH_ENTRY_NS_START = "\x80" "1001_";
 static const string BI_INSTANCE_ENTRY_NS_START = "\x80" "1000_";
 
 // number of characters that we should allow to be buffered by the formatter
 // before flushing (used by index check methods with dump_keys=true)
 static constexpr int FORMATTER_LEN_FLUSH_THRESHOLD = 4 * 1024 * 1024;
+#endif
 
 // default number of entries to list with each bucket listing call
 // (use marker to bridge between calls)
index a4a3987d6c24b2224d3bff758ded1c10ce2a272d..cdd190c5826aa44b1a0d5e23e5edc0693d88ed52 100644 (file)
@@ -6024,6 +6024,20 @@ int RadosRole::delete_obj(const DoutPrefixProvider *dpp, optional_yield y)
 
 } // namespace rgw::sal
 
+std::optional<neorados::RADOS>
+make_neorados(CephContext* cct, boost::asio::io_context& io_context) {
+  try {
+    auto neorados = neorados::RADOS::make_with_cct(boost::intrusive_ptr{cct},
+                                                   io_context,
+                                                   ceph::async::use_blocked);
+    return neorados;
+  } catch (const std::exception& e) {
+    ldout(cct, 0) << "Failed constructing neroados handle: " << e.what()
+                 << dendl;
+  }
+  return std::nullopt;
+}
+
 extern "C" {
 
 void* newRadosStore(void* io_context_, CephContext* cct)
index af7b030d4e26fe34597afefb37ab7c675299b88e..997cef2bb7d4f0442306cfa9184d701c89de746d 100644 (file)
@@ -11,9 +11,6 @@
 #include "rgw_process_env.h"
 #include "rgw_zone.h"
 #include "rgw_acl.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 #include "rgw_lua_background.h"
 #include "rgw_perf_counters.h"
 
index d7155dd6259c64d12111143e768e5223abab4eaf..4d83a0726decee65d4358e332f678fec4cd6d794 100644 (file)
@@ -12,9 +12,6 @@
 #include "rgw_multi.h"
 #include "rgw_op.h"
 #include "rgw_sal.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 
 #define dout_subsys ceph_subsys_rgw
 
index bfcb0ea6df1f0647d5b944fbcc47b0099e2ee55f..a232536642bb588e519245591158303689627d8f 100644 (file)
@@ -59,9 +59,6 @@
 #include "rgw_process_env.h"
 #include "rgw_notify_event_type.h"
 #include "rgw_sal.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 #include "rgw_torrent.h"
 #include "rgw_cksum_pipe.h"
 #include "rgw_lua_data_filter.h"
 #include "rgw_flight_frontend.h"
 #endif
 
-#ifdef WITH_RADOSGW_D4N
-#include "driver/d4n/rgw_sal_d4n.h"
-#endif
-
 #ifdef WITH_LTTNG
 #define TRACEPOINT_DEFINE
 #define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
@@ -2703,11 +2696,8 @@ void RGWGetObj::execute(optional_yield y)
   if (multipart_part_num) {
     read_op->params.part_num = &*multipart_part_num;
   }
-#ifdef WITH_RADOSGW_D4N
-  if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST") && (g_conf().get_val<std::string>("rgw_filter") == "d4n")) {
-    dynamic_cast<rgw::sal::D4NFilterObject*>(s->object.get())->set_cache_request();
-  }
-#endif
+  if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST"))
+    s->object->set_cache_request();
 
   op_ret = read_op->prepare(s->yield, this);
   version_id = s->object->get_instance();
@@ -3600,11 +3590,8 @@ void RGWListBucket::execute(optional_yield y)
   params.list_versions = list_versions;
   params.allow_unordered = allow_unordered;
   params.shard_id = shard_id;
-#ifdef WITH_RADOSGW_D4N
-  if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST") && (g_conf().get_val<std::string>("rgw_filter") == "d4n")) {
-    dynamic_cast<rgw::sal::D4NFilterBucket*>(s->bucket.get())->set_cache_request();
-  }
-#endif
+  if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST"))
+    s->bucket->set_cache_request();
 
   rgw::sal::Bucket::ListResults results;
 
@@ -4855,11 +4842,8 @@ void RGWPutObj::execute(optional_yield y)
                                         s->owner,
                                         pdest_placement, olh_epoch, s->req_id);
   }
-#ifdef WITH_RADOSGW_D4N
-  if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST") && (g_conf().get_val<std::string>("rgw_filter") == "d4n")) {
-    dynamic_cast<rgw::sal::D4NFilterWriter*>(processor.get())->set_cache_request();
-  }
-#endif
+  if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST"))
+    s->object->set_cache_request();
 
   op_ret = processor->prepare(s->yield);
   if (op_ret < 0) {
@@ -6005,11 +5989,9 @@ void RGWDeleteObj::execute(optional_yield y)
       del_op->params.null_verid = null_verid;
       del_op->params.size_match = size_match;
       del_op->params.if_match = if_match;
-#ifdef WITH_RADOSGW_D4N
-      if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST") && (g_conf().get_val<std::string>("rgw_filter") == "d4n")) {
-               dynamic_cast<rgw::sal::D4NFilterObject*>(s->object.get())->set_cache_request();
-      }
-#endif
+
+      if (s->info.env->get_optional("HTTP_X_RGW_CACHE_REQUEST"))
+        s->object->set_cache_request();
 
       op_ret = del_op->delete_obj(this, y, rgw::sal::FLAG_LOG_OP);
       if (op_ret >= 0) {
index 2f58543457f95a7ba9127875b03b23ed28ad64c1..6e7c525e7c871e7bf7fbed37d4db64cf3082e15a 100644 (file)
@@ -24,9 +24,6 @@
 
 #include "rgw_common.h"
 #include "rgw_sal.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 #include "rgw_quota.h"
 #include "rgw_bucket.h"
 #include "driver/rados/rgw_user.h"
index 186715b3cceee57484aa00ca5624c8dcb9a80d9b..0ca5e6a17d97138bb4797606b199b23b4c61c840 100644 (file)
@@ -27,9 +27,6 @@
 
 #include "rgw_client_io.h"
 #include "rgw_resolve.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 
 #include "rgw_ratelimit.h"
 #include <numeric>
index 03cc2fdd57937be99869f5cb545ed56ad77e632b..c8c6d265b44f8f94512e731a4be12f475abaa53a 100644 (file)
@@ -4,9 +4,9 @@
 #include "rgw_rest_dedup.h"
 #include "rgw_op.h"
 #include "rgw_sal.h"
-#include "rgw_sal_rados.h"
-#include "rgw_dedup_cluster.h"
-#include "rgw_dedup_utils.h"
+#include "driver/rados/rgw_sal_rados.h"
+#include "driver/rados/rgw_dedup_cluster.h"
+#include "driver/rados/rgw_dedup_utils.h"
 
 #define dout_subsys ceph_subsys_rgw
 
index 5e8471c4f406b3a9e8d936b72c9e541048a7369f..e2fcdcbd8895a6378f847f97a311adf8429b2b3c 100644 (file)
@@ -5,9 +5,6 @@
 
 #include "rgw_rest.h"
 #include "rgw_rest_s3.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 
 class RGWHandler_Ratelimit : public RGWHandler_Auth_S3 {
 protected:
index 7dc6320c447bdd61b3d4244f605e7b040ff1af76..c7e78157d2172b74c74984776c74e5e32afbef1e 100644 (file)
@@ -74,9 +74,6 @@
 #include "rgw_rest_iam.h"
 #include "rgw_rest_bucket_logging.h"
 #include "rgw_sts.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 #include "rgw_cksum_pipe.h"
 #include "rgw_s3select.h"
 
index a73de2a400837717574e50f96584c21c3d0d45e8..aa245b2c843652936f41703ea6da5d7480d6bc11 100644 (file)
@@ -32,8 +32,6 @@
 #include "rgw_string.h"
 #include "rgw_multi.h"
 #include "rgw_sal.h"
-#include "rgw_lc_tier.h"
-#include "rgw_notify.h"
 #include "common/dout.h"
 
 #include "fmt/format.h"
index c759fd8abf1b29f4696b3b50d507182b80599307..526342c4531a0abaf8eddee37fce54ef980b9495 100644 (file)
@@ -19,7 +19,6 @@
 #include "rgw_common.h"
 #include "cls/rgw/cls_rgw_types.h"
 #include "rgw_sal.h"
-#include "rgw_notify.h"
 #include "rgw_restore_waiter.h"
 
 #include <atomic>
index a4035d13c6de336b23d6d55e1635e269e049d4a5..dc438c9bd4adbc99c609a9c8959988cfb3cb4505 100644 (file)
@@ -81,19 +81,8 @@ extern rgw::sal::Driver* newD4NFilter(rgw::sal::Driver* next, boost::asio::io_co
 
 
 #ifdef WITH_RADOSGW_RADOS
-std::optional<neorados::RADOS>
-make_neorados(CephContext* cct, boost::asio::io_context& io_context) {
-  try {
-    auto neorados = neorados::RADOS::make_with_cct(boost::intrusive_ptr{cct},
-                                                   io_context,
-                                                   ceph::async::use_blocked);
-    return neorados;
-  } catch (const std::exception& e) {
-    ldout(cct, 0) << "Failed constructing neroados handle: " << e.what()
-                 << dendl;
-  }
-  return std::nullopt;
-}
+extern std::optional<neorados::RADOS>
+make_neorados(CephContext* cct, boost::asio::io_context& io_context);
 #endif
 
 rgw::sal::Driver* DriverManager::init_storage_provider(const DoutPrefixProvider* dpp,
@@ -371,6 +360,14 @@ DriverManager::Config DriverManager::get_config(bool admin, CephContext* cct)
 {
   DriverManager::Config cfg;
 
+#ifdef WITH_RADOSGW_STANDALONE
+  {
+    /* Shortcut the whole thing, and only allow POSIXDriver for Standalone */
+    cfg.store_name = "posix";
+    return cfg;
+  }
+#endif /* WITH_RADOSGW_STANDALONE */
+
   // Get the store backend
   const auto& config_store = g_conf().get_val<std::string>("rgw_backend_store");
   if (config_store == "rados") {
@@ -432,6 +429,12 @@ auto DriverManager::create_config_store(const DoutPrefixProvider* dpp,
   -> std::unique_ptr<rgw::sal::ConfigStore>
 {
   try {
+#ifdef WITH_RADOSGW_STANDALONE
+    { /* For Standalone, only allow DBStore config */
+      const auto uri = g_conf().get_val<std::string>("dbstore_config_uri");
+      return rgw::dbstore::create_config_store(dpp, uri);
+    }
+#endif
 #ifdef WITH_RADOSGW_RADOS
     if (type == "rados") {
       return rgw::rados::create_config_store(dpp);
index 74d4b100a3093efd8807df0de37a4358f97f762a..1845e8b5e9353c28cc97e951236ad50c8b2c15a6 100644 (file)
@@ -1089,6 +1089,8 @@ class Bucket {
     virtual int remove_logging_object(const std::string& obj_name, const std::string& prefix, optional_yield y, const DoutPrefixProvider *dpp) = 0;
     /** Write a record to the pending bucket logging object */
     virtual int write_logging_object(const std::string& obj_name, const std::string& record, const std::string& prefix, optional_yield y, const DoutPrefixProvider *dpp, bool async_completion) = 0;
+    /** Mark this as a cache request */
+    virtual void set_cache_request() = 0;
 
     /* dang - This is temporary, until the API is completed */
     virtual rgw_bucket& get_key() = 0;
@@ -1457,6 +1459,8 @@ class Object {
     virtual bool have_instance(void) = 0;
     /** Clear the instance on this object */
     virtual void clear_instance() = 0;
+    /** Mark this as a cache request */
+    virtual void set_cache_request() = 0;
 
     /** Print the User to @a out */
     virtual void print(std::ostream& out) const = 0;
@@ -2057,9 +2061,4 @@ public:
 
 };
 
-#ifdef WITH_RADOSGW_RADOS
-std::optional<neorados::RADOS>
-make_neorados(CephContext* cct, boost::asio::io_context& io_context);
-#endif
-
 /** @} */
index a7cdc4cc3ddaa161b8204912b2fa6ad9bb0c83eb..deebf9899b4890c816540ad34145c84712d988c8 100644 (file)
 #include "rgw_sal_dbstore.h"
 #include "rgw_bucket.h"
 
-#include "driver/rados/rgw_rados.h" // XXX: for RGW_OBJ_NS_MULTIPART, PUT_OBJ_CREATE, etc
-
 #define dout_subsys ceph_subsys_rgw
 
+/* flags for put_obj_meta() */
+#define PUT_OBJ_CREATE      0x01
+#define PUT_OBJ_EXCL        0x02
+#define PUT_OBJ_CREATE_EXCL (PUT_OBJ_CREATE | PUT_OBJ_EXCL)
+
 using namespace std;
 
 namespace rgw::sal {
index ecb55a98ee5c070c5becfa09d329d28ed0564100..36b57922cfcf90d27688a9c4b75c0389bb4f7b04 100644 (file)
@@ -712,6 +712,8 @@ public:
   virtual rgw_bucket& get_key() override { return next->get_key(); }
   virtual RGWBucketInfo& get_info() override { return next->get_info(); }
 
+  virtual void set_cache_request() override {};
+
   virtual void print(std::ostream& out) const override { return next->print(out); }
 
   virtual bool operator==(const Bucket& b) const override { return next->operator==(b); }
@@ -917,8 +919,9 @@ public:
     return std::make_unique<FilterObject>(*this);
   }
 
-  virtual jspan_context& get_trace() { return next->get_trace(); }
-  virtual void set_trace (jspan_context&& _trace_ctx) { next->set_trace(std::move(_trace_ctx)); }
+  virtual jspan_context& get_trace() override { return next->get_trace(); }
+  virtual void set_trace (jspan_context&& _trace_ctx) override { next->set_trace(std::move(_trace_ctx)); }
+  virtual void set_cache_request() override {};
 
   virtual void print(std::ostream& out) const override { return next->print(out); }
 
@@ -938,7 +941,7 @@ public:
   virtual uint64_t get_size() override { return next->get_size(); }
   virtual const std::string& get_etag() override { return next->get_etag(); }
   virtual ceph::real_time& get_mtime() override { return next->get_mtime(); }
-  virtual const std::optional<rgw::cksum::Cksum>& get_cksum() {
+  virtual const std::optional<rgw::cksum::Cksum>& get_cksum() override {
     return next->get_cksum();
   }
 };
index b43c399d99dd70111d93694a41ac3fb50f61c343..1fa72a8bd94a7855b2f28f33040164464faf7101 100644 (file)
@@ -272,6 +272,7 @@ class StoreBucket : public Bucket {
     int write_logging_object(const std::string& obj_name, const std::string& record, const std::string& prefix, optional_yield y, const DoutPrefixProvider *dpp, bool async_completion) override {
       return 0;
     }
+    virtual void set_cache_request() override {};
 
     friend class BucketList;
 };
@@ -393,6 +394,8 @@ class StoreObject : public Object {
 
     virtual RGWObjVersionTracker& get_version_tracker() override { return state.objv_tracker; }
 
+    virtual void set_cache_request() override {};
+
     virtual void print(std::ostream& out) const override {
       if (bucket)
        out << bucket << ":";
index 357a153e222d2fc60bdf6cf98afce013a8fe9350..bfe75b39973c056c71a257e45597ab42afda9af8 100644 (file)
@@ -26,9 +26,6 @@
 #include "rgw_iam_policy.h"
 #include "rgw_sts.h"
 #include "rgw_sal.h"
-#ifdef WITH_RADOSGW_RADOS
-#include "rgw_sal_rados.h"
-#endif
 
 #define dout_subsys ceph_subsys_rgw
 
index 04791cd5cda75032e9835fefea28cb6a33100af2..de1c05347f201d5e825e3f7d4509665c182cb305 100644 (file)
@@ -383,7 +383,7 @@ if(WITH_RADOSGW_RADOS)
 add_executable(ceph_test_rgw_gc_log test_rgw_gc_log.cc $<TARGET_OBJECTS:unit-main>)
 target_include_directories(ceph_test_rgw_gc_log
   SYSTEM PRIVATE "${CMAKE_SOURCE_DIR}/src/rgw")
-target_link_libraries(ceph_test_rgw_gc_log ${rgw_libs} radostest-cxx)
+target_link_libraries(ceph_test_rgw_gc_log ${rgw_libs} rgw radostest-cxx)
 install(TARGETS ceph_test_rgw_gc_log DESTINATION ${CMAKE_INSTALL_BINDIR})
 endif()
 
@@ -458,8 +458,10 @@ target_compile_definitions(unittest_rgw_posix_driver PUBLIC LMDB_SAFE_NO_CPP_UTI
 target_include_directories(unittest_rgw_posix_driver
   SYSTEM PRIVATE "${CMAKE_SOURCE_DIR}/src/rgw"
   SYSTEM PRIVATE "${CMAKE_SOURCE_DIR}/src/rgw/driver/posix")
-target_link_libraries(unittest_rgw_posix_driver  ${UNITTEST_LIBS}
-  ${rgw_libs} ${LMDB_LIBRARIES})
+target_link_libraries(unittest_rgw_posix_driver
+  ${UNITTEST_LIBS}
+  rgw_a_standalone
+  ${LMDB_LIBRARIES})
 endif(WITH_RADOSGW_POSIX)
 
 if(WITH_RADOSGW_RADOS)