]> 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:22:46 +0000 (14:22 +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 ab6b6cbb7c1a3c6f5c7564a64ae4a76650e1632d..f8e8c2366a8802f52108d9280ed4ef0dd14e28ab 100644 (file)
@@ -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);
index 464479ba28740f523c967d8044d324062acdf17d..f43365515c5b788b5974809ebea323dfd2b2db4a 100644 (file)
@@ -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<int, set<string> > &modified);
 
+  void set_observer(rgw::BucketChangeObserver *observer) {
+    this->observer = observer;
+  }
+
   bool going_down();
 };
 
index dbf96e782635fce5e9efb214a8c26d3a08e1c848..8a9cd5bef8f2f3bcc096612cd02bc58dab0f84c9 100644 (file)
@@ -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) {