From aaa1a98d62c970d5342caf7d96a3794b6c1f590b Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Thu, 20 Sep 2018 11:34:42 -0400 Subject: [PATCH] rgw: add BucketChangeObserver to RGWDataChangesLog this means that BucketTrimManager will track active buckets based on local changes, rather than changes in remote datalogs or error repos Fixes: http://tracker.ceph.com/issues/36034 Signed-off-by: Casey Bodley (cherry picked from commit f3c258c49ff6899433e742b10554c83413d64a8a) --- src/rgw/rgw_bucket.cc | 4 ++++ src/rgw/rgw_bucket.h | 9 +++++++++ src/rgw/rgw_rados.cc | 1 + 3 files changed, 14 insertions(+) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index ab6b6cbb7c1a3..f8e8c2366a880 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -1807,6 +1807,10 @@ int RGWDataChangesLog::add_entry(rgw_bucket& bucket, int shard_id) { if (!store->need_to_log_data()) return 0; + if (observer) { + observer->on_bucket_changed(bucket.get_key()); + } + rgw_bucket_shard bs(bucket, shard_id); int index = choose_oid(bs); diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index 464479ba28740..f43365515c5b7 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -406,9 +406,14 @@ struct RGWDataChangesLogInfo { void decode_json(JSONObj *obj); }; +namespace rgw { +struct BucketChangeObserver; +} + class RGWDataChangesLog { CephContext *cct; RGWRados *store; + rgw::BucketChangeObserver *observer = nullptr; int num_shards; string *oids; @@ -519,6 +524,10 @@ public: void mark_modified(int shard_id, const rgw_bucket_shard& bs); void read_clear_modified(map > &modified); + void set_observer(rgw::BucketChangeObserver *observer) { + this->observer = observer; + } + bool going_down(); }; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index dbf96e782635f..8a9cd5bef8f2f 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -4600,6 +4600,7 @@ int RGWRados::init_complete() ldout(cct, 0) << "ERROR: failed to start bucket trim manager" << dendl; return ret; } + data_log->set_observer(&*bucket_trim); Mutex::Locker dl(data_sync_thread_lock); for (auto iter : zone_data_sync_from_map) { -- 2.39.5