From: Casey Bodley Date: Thu, 20 Sep 2018 15:34:42 +0000 (-0400) Subject: rgw: add BucketChangeObserver to RGWDataChangesLog X-Git-Tag: v13.2.3~136^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=32dd211fc68f2c20105c96f9fe8a6e45b07a46c0;p=ceph.git 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) --- diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 925dceed3ed5..c635cdd803ef 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -1800,6 +1800,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 3079a936163d..926911d34694 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -408,9 +408,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; @@ -521,6 +526,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 503786e7e7c3..e82457122a2d 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -4618,6 +4618,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) {