]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add BucketChangeObserver to RGWDataChangesLog
authorCasey Bodley <cbodley@redhat.com>
Thu, 20 Sep 2018 15:34:42 +0000 (11:34 -0400)
committerNathan Cutler <ncutler@suse.com>
Wed, 3 Oct 2018 12:32:11 +0000 (14:32 +0200)
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 <cbodley@redhat.com>
(cherry picked from commit f3c258c49ff6899433e742b10554c83413d64a8a)

src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket.h
src/rgw/rgw_rados.cc

index 925dceed3ed5e7f2812601b5982dc8e13b7b13cd..c635cdd803ef5623495dd278c7fefb11a1e4a823 100644 (file)
@@ -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);
index 3079a936163d67c45cea25969dc4a3278d7a90a8..926911d346942b83f3077fc756506a11af5faf46 100644 (file)
@@ -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<int, set<string> > &modified);
 
+  void set_observer(rgw::BucketChangeObserver *observer) {
+    this->observer = observer;
+  }
+
   bool going_down();
 };
 
index 503786e7e7c300587a25746e0a844c859b8fca9d..e82457122a2dba344dc2f03f16d29dae4acf39ee 100644 (file)
@@ -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) {