OPT_METADATA_SYNC_INIT,
OPT_METADATA_SYNC_RUN,
OPT_MDLOG_LIST,
+ OPT_MDLOG_AUTOTRIM,
OPT_MDLOG_TRIM,
OPT_MDLOG_FETCH,
OPT_MDLOG_STATUS,
} else if (strcmp(prev_cmd, "mdlog") == 0) {
if (strcmp(cmd, "list") == 0)
return OPT_MDLOG_LIST;
+ if (strcmp(cmd, "autotrim") == 0)
+ return OPT_MDLOG_AUTOTRIM;
if (strcmp(cmd, "trim") == 0)
return OPT_MDLOG_TRIM;
if (strcmp(cmd, "fetch") == 0)
formatter->flush(cout);
}
+ if (opt_cmd == OPT_MDLOG_AUTOTRIM) {
+ // need a full history for purging old mdlog periods
+ store->meta_mgr->init_oldest_log_period();
+
+ RGWCoroutinesManager crs(store->ctx(), store->get_cr_registry());
+ RGWHTTPManager http(store->ctx(), crs.get_completion_mgr());
+ int ret = http.set_threaded();
+ if (ret < 0) {
+ cerr << "failed to initialize http client with " << cpp_strerror(ret) << std::endl;
+ return -ret;
+ }
+
+ auto num_shards = g_conf->rgw_md_log_max_shards;
+ ret = crs.run(create_admin_meta_log_trim_cr(store, &http, num_shards));
+ if (ret < 0) {
+ cerr << "automated mdlog trim failed with " << cpp_strerror(ret) << std::endl;
+ return -ret;
+ }
+ }
+
if (opt_cmd == OPT_MDLOG_TRIM) {
utime_t start_time, end_time;
}
return new MetaPeerTrimPollCR(store, http, num_shards, interval);
}
+
+
+struct MetaMasterAdminTrimCR : private MasterTrimEnv, public MetaMasterTrimCR {
+ MetaMasterAdminTrimCR(RGWRados *store, RGWHTTPManager *http, int num_shards)
+ : MasterTrimEnv(store, http, num_shards),
+ MetaMasterTrimCR(*static_cast<MasterTrimEnv*>(this))
+ {}
+};
+
+struct MetaPeerAdminTrimCR : private PeerTrimEnv, public MetaPeerTrimCR {
+ MetaPeerAdminTrimCR(RGWRados *store, RGWHTTPManager *http, int num_shards)
+ : PeerTrimEnv(store, http, num_shards),
+ MetaPeerTrimCR(*static_cast<PeerTrimEnv*>(this))
+ {}
+};
+
+RGWCoroutine* create_admin_meta_log_trim_cr(RGWRados *store,
+ RGWHTTPManager *http,
+ int num_shards)
+{
+ if (store->is_meta_master()) {
+ return new MetaMasterAdminTrimCR(store, http, num_shards);
+ }
+ return new MetaPeerAdminTrimCR(store, http, num_shards);
+}
RGWCoroutine* create_meta_log_trim_cr(RGWRados *store, RGWHTTPManager *http,
int num_shards, utime_t interval);
+// factory function for mdlog trim via radosgw-admin
+RGWCoroutine* create_admin_meta_log_trim_cr(RGWRados *store,
+ RGWHTTPManager *http,
+ int num_shards);
+
#endif