]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add BucketChangeObserver to RGWDataChangesLog 24221/head
authorCasey Bodley <cbodley@redhat.com>
Thu, 20 Sep 2018 15:34:42 +0000 (11:34 -0400)
committerCasey Bodley <cbodley@redhat.com>
Fri, 21 Sep 2018 14:51:10 +0000 (10:51 -0400)
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>
src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket.h
src/rgw/rgw_rados.cc

index 14828ce9bad431b8a2cc80a4b6521c800a070501..fc44adeac669c577ad4b5c92048e334906415143 100644 (file)
@@ -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);
index f66295eb797cb0f329c9bfaa2fcce8f8bb87b26e..f878097c65f2546bac52e4724f3c9ad590475dc2 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 69f4f64384e941579357f3918629f50329b5d189..0e7346a3529f405853c6126d3657d5c11ad97e3d 100644 (file)
@@ -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) {