OPT::ROLE_POLICY_GET,
OPT::RESHARD_LIST,
OPT::RESHARD_STATUS,
- OPT::PUBSUB_TOPICS_LIST,
- OPT::PUBSUB_TOPIC_GET,
- OPT::PUBSUB_SUB_GET,
- OPT::PUBSUB_SUB_PULL,
- OPT::SCRIPT_GET,
- };
-
+ OPT::PUBSUB_TOPICS_LIST,
+ OPT::PUBSUB_TOPIC_GET,
+ OPT::PUBSUB_SUB_GET,
+ OPT::PUBSUB_SUB_PULL,
+ OPT::SCRIPT_GET,
+ };
+
+ std::set<OPT> gc_ops_list = {
+ OPT::GC_LIST,
+ OPT::GC_PROCESS,
+ OPT::OBJECT_RM,
+ OPT::BUCKET_RM, // --purge-objects
+ OPT::USER_RM, // --purge-data
+ OPT::OBJECTS_EXPIRE,
+ OPT::OBJECTS_EXPIRE_STALE_RM,
+ OPT::LC_PROCESS
+ };
bool raw_storage_op = (raw_storage_ops_list.find(opt_cmd) != raw_storage_ops_list.end() ||
raw_period_update || raw_period_pull);
bool need_cache = readonly_ops_list.find(opt_cmd) == readonly_ops_list.end();
+ bool need_gc = (gc_ops_list.find(opt_cmd) != gc_ops_list.end()) && !bypass_gc;
- if (raw_storage_op) {
+ if (raw_storage_op) {
store = RGWStoreManager::get_raw_storage(dpp(), g_ceph_context);
} else {
store = RGWStoreManager::get_storage(dpp(), g_ceph_context, false, false, false, false, false,
- need_cache && g_conf()->rgw_cache_enabled);
+ need_cache && g_conf()->rgw_cache_enabled, need_gc);
}
if (!store) {
cerr << "couldn't init storage provider" << std::endl;
pools_initialized = true;
- gc = new RGWGC();
- gc->initialize(cct, this);
+ if (use_gc) {
+ gc = new RGWGC();
+ gc->initialize(cct, this);
+ } else {
+ ldpp_dout(dpp, 5) << "note: GC not initialized" << dendl;
+ }
obj_expirer = new RGWObjectExpirer(this->store);
- if (use_gc_thread) {
+ if (use_gc_thread && use_gc) {
gc->start_processor();
obj_expirer->start_processor();
}
SafeTimer *timer;
rgw::sal::RGWRadosStore *store;
- RGWGC *gc;
+ RGWGC *gc = nullptr;
RGWLC *lc;
RGWObjectExpirer *obj_expirer;
bool use_gc_thread;
RGWIndexCompletionManager *index_completion_manager{nullptr};
bool use_cache{false};
+ bool use_gc{true};
int get_obj_head_ioctx(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw_obj& obj, librados::IoCtx *ioctx);
public:
return *this;
}
+ RGWRados& set_use_gc(bool status) {
+ use_gc = status;
+ return *this;
+ }
+
RGWLC *get_lc() {
return lc;
}
} // namespace rgw::sal
-rgw::sal::RGWRadosStore *RGWStoreManager::init_storage_provider(const DoutPrefixProvider *dpp, CephContext *cct, bool use_gc_thread, bool use_lc_thread, bool quota_threads, bool run_sync_thread, bool run_reshard_thread, bool use_cache)
+rgw::sal::RGWRadosStore *RGWStoreManager::init_storage_provider(const DoutPrefixProvider *dpp, CephContext *cct, bool use_gc_thread, bool use_lc_thread, bool quota_threads, bool run_sync_thread, bool run_reshard_thread, bool use_cache, bool use_gc)
{
RGWRados *rados = new RGWRados;
rgw::sal::RGWRadosStore *store = new rgw::sal::RGWRadosStore();
rados->set_store(store);
if ((*rados).set_use_cache(use_cache)
+ .set_use_gc(use_gc)
.set_run_gc_thread(use_gc_thread)
.set_run_lc_thread(use_lc_thread)
.set_run_quota_threads(quota_threads)
public:
RGWStoreManager() {}
static rgw::sal::RGWRadosStore *get_storage(const DoutPrefixProvider *dpp, CephContext *cct, bool use_gc_thread, bool use_lc_thread, bool quota_threads,
- bool run_sync_thread, bool run_reshard_thread, bool use_cache = true) {
+ bool run_sync_thread, bool run_reshard_thread, bool use_cache = true, bool use_gc = true) {
rgw::sal::RGWRadosStore *store = init_storage_provider(dpp, cct, use_gc_thread, use_lc_thread,
- quota_threads, run_sync_thread, run_reshard_thread, use_cache);
+ quota_threads, run_sync_thread, run_reshard_thread, use_cache, use_gc);
return store;
}
static rgw::sal::RGWRadosStore *get_raw_storage(const DoutPrefixProvider *dpp, CephContext *cct) {
rgw::sal::RGWRadosStore *rados = init_raw_storage_provider(dpp, cct);
return rados;
}
- static rgw::sal::RGWRadosStore *init_storage_provider(const DoutPrefixProvider *dpp, CephContext *cct, bool use_gc_thread, bool use_lc_thread, bool quota_threads, bool run_sync_thread, bool run_reshard_thread, bool use_metadata_cache);
+ static rgw::sal::RGWRadosStore *init_storage_provider(const DoutPrefixProvider *dpp, CephContext *cct, bool use_gc_thread, bool use_lc_thread, bool quota_threads, bool run_sync_thread, bool run_reshard_thread, bool use_metadata_cache, bool use_gc);
static rgw::sal::RGWRadosStore *init_raw_storage_provider(const DoutPrefixProvider *dpp, CephContext *cct);
static void close_storage(rgw::sal::RGWRadosStore *store);