From: Casey Bodley Date: Thu, 20 Sep 2018 15:34:42 +0000 (-0400) Subject: rgw: add BucketChangeObserver to RGWDataChangesLog X-Git-Tag: v14.0.1~178^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F24221%2Fhead;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 --- diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 14828ce9bad4..fc44adeac669 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -1799,6 +1799,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 f66295eb797c..f878097c65f2 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 69f4f64384e9..0e7346a3529f 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -4666,6 +4666,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) {