]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add MetaPeerTrimCR to query master mdlog info
authorCasey Bodley <cbodley@redhat.com>
Mon, 23 Jan 2017 21:26:36 +0000 (16:26 -0500)
committerCasey Bodley <cbodley@redhat.com>
Tue, 23 Jan 2018 16:24:54 +0000 (11:24 -0500)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 6e9296d49f4ce322a98651119f5dc66df7f5224c)

src/rgw/rgw_sync.cc

index 5ca023dfd4fa368331bbaf5ebb7ed61c0af53277..84de084565bc86151c128f18f960b21da08a18f2 100644 (file)
@@ -2497,6 +2497,8 @@ struct MasterTrimEnv : public TrimEnv {
   }
 };
 
+using PeerTrimEnv = TrimEnv;
+
 } // anonymous namespace
 
 
@@ -2641,3 +2643,38 @@ int MetaMasterTrimCR::operate()
   }
   return 0;
 }
+
+
+class MetaPeerTrimCR : public RGWCoroutine {
+  PeerTrimEnv& env;
+  rgw_mdlog_info mdlog_info; //< master's mdlog info
+
+ public:
+  MetaPeerTrimCR(PeerTrimEnv& env) : RGWCoroutine(env.store->ctx()), env(env) {}
+
+  int operate();
+};
+
+int MetaPeerTrimCR::operate()
+{
+  reenter(this) {
+    ldout(cct, 10) << "fetching master mdlog info" << dendl;
+    yield {
+      // query mdlog_info from master for oldest_log_period
+      rgw_http_param_pair params[] = {
+        { "type", "metadata" },
+        { nullptr, nullptr }
+      };
+
+      using LogInfoCR = RGWReadRESTResourceCR<rgw_mdlog_info>;
+      call(new LogInfoCR(cct, env.store->rest_master_conn, env.http,
+                         "/admin/log/", params, &mdlog_info));
+    }
+    if (retcode < 0) {
+      ldout(cct, 4) << "failed to read mdlog info from master" << dendl;
+      return set_cr_error(retcode);
+    }
+    return set_cr_done();
+  }
+  return 0;
+}