MDLOG_STATUS,
SYNC_ERROR_LIST,
SYNC_ERROR_TRIM,
+ SYNC_POLICY_GET,
+ SYNC_POLICY_CONNECT,
BILOG_LIST,
BILOG_TRIM,
BILOG_STATUS,
OPT::MDLOG_LIST,
OPT::MDLOG_STATUS,
OPT::SYNC_ERROR_LIST,
+ OPT::SYNC_POLICY_GET,
OPT::BILOG_LIST,
OPT::BILOG_STATUS,
OPT::DATA_SYNC_STATUS,
OPT::RESHARD_STATUS,
};
+
bool raw_storage_op = (raw_storage_ops_list.find(opt_cmd) != raw_storage_ops_list.end() ||
raw_period_update);
bool need_cache = readonly_ops_list.find(opt_cmd) == readonly_ops_list.end();
}
}
+ if (opt_cmd == OPT::SYNC_POLICY_GET) {
+ RGWZoneGroup zonegroup(zonegroup_id, zonegroup_name);
+ ret = zonegroup.init(g_ceph_context, store->svc()->sysobj);
+ if (ret < 0) {
+ cerr << "failed to init zonegroup: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ {
+ Formatter::ObjectSection os(*formatter, "result");
+ encode_json("sync_policy", zonegroup.sync_policy, formatter);
+ }
+
+ formatter->flush(cout);
+ }
+
if (opt_cmd == OPT::BILOG_TRIM) {
if (bucket_name.empty()) {
cerr << "ERROR: bucket not specified" << std::endl;
int RGWBucketSyncPolicyHandler::init()
{
const auto& zone_id = zone_svc->get_zone().id;
+ auto& zg = svc.zone->get_zonegroup();
if (!bucket_info.sync_policy) {
return 0;
struct rgw_sync_target {
string id;
string type;
- std::vector<rgw_sync_flow_rule> flow_rules; /* flow rules for trivial sources */
+ std::optional<std::vector<rgw_sync_flow_rule> > flow_rules; /* flow rules for trivial sources,
+ if set then needs to be a subset of higher level rules */
std::set<string> zones; /* target zones. Can be wildcard */
/* FIXME: add config */