return EINVAL;
}
RGWReplicaObjectLogger logger(store, pool_name, META_REPLICA_LOG_OBJ_PREFIX);
- int ret = logger.delete_bound(shard_id, daemon_id);
+ int ret = logger.delete_bound(shard_id, daemon_id, false);
if (ret < 0)
return -ret;
} else if (replica_log_type == ReplicaLog_Data) {
return EINVAL;
}
RGWReplicaObjectLogger logger(store, pool_name, DATA_REPLICA_LOG_OBJ_PREFIX);
- int ret = logger.delete_bound(shard_id, daemon_id);
+ int ret = logger.delete_bound(shard_id, daemon_id, false);
if (ret < 0)
return -ret;
} else if (replica_log_type == ReplicaLog_Bucket) {
}
RGWReplicaBucketLogger logger(store);
- ret = logger.delete_bound(bucket, shard_id, daemon_id, replicalog_index_by_instance);
+ ret = logger.delete_bound(bucket, shard_id, daemon_id, replicalog_index_by_instance, false);
if (ret < 0)
return -ret;
}
}
int RGWReplicaLogger::delete_bound(const string& oid, const string& pool,
- const string& daemon_id)
+ const string& daemon_id, bool purge_all)
{
librados::IoCtx ioctx;
int r = open_ioctx(ioctx, pool);
return r;
}
+ if (purge_all) {
+ return ioctx.remove(oid);
+ }
+
librados::ObjectWriteOperation opw;
cls_replica_log_delete_bound(opw, daemon_id);
return ioctx.operate(oid, &opw);
const utime_t& time,
const list<RGWReplicaItemMarker> *entries);
int delete_bound(const string& oid, const string& pool,
- const string& daemon_id);
+ const string& daemon_id, bool purge_all);
int get_bounds(const string& oid, const string& pool,
RGWReplicaBounds& bounds);
};
return RGWReplicaLogger::update_bound(oid, pool,
daemon_id, marker, time, entries);
}
- int delete_bound(int shard, const string& daemon_id) {
+ int delete_bound(int shard, const string& daemon_id, bool purge_all) {
string oid;
get_shard_oid(shard, oid);
return RGWReplicaLogger::delete_bound(oid, pool,
- daemon_id);
+ daemon_id, purge_all);
}
int get_bounds(int shard, RGWReplicaBounds& bounds) {
string oid;
int update_bound(const rgw_bucket& bucket, int shard_id, const string& daemon_id,
const string& marker, const utime_t& time,
const list<RGWReplicaItemMarker> *entries);
- int delete_bound(const rgw_bucket& bucket, int shard_id, const string& daemon_id, bool index_by_instance) {
+ int delete_bound(const rgw_bucket& bucket, int shard_id, const string& daemon_id, bool index_by_instance, bool purge_all) {
return RGWReplicaLogger::delete_bound(obj_name(bucket, shard_id, index_by_instance), pool,
- daemon_id);
+ daemon_id, purge_all);
}
int get_bounds(const rgw_bucket& bucket, int shard_id, RGWReplicaBounds& bounds, bool index_by_instance) {
return RGWReplicaLogger::get_bounds(obj_name(bucket, shard_id, index_by_instance), pool,
void RGWOp_OBJLog_DeleteBounds::execute() {
string id = s->info.args.get("id"),
daemon_id = s->info.args.get("daemon_id");
+ bool purge_all;
+
+ s->info.args.get_bool("purge-all", &purge_all, false);
if (id.empty() ||
- daemon_id.empty()) {
+ (!purge_all && daemon_id.empty())) {
dout(5) << "Error - invalid parameter list" << dendl;
http_ret = -EINVAL;
return;
dout(5) << "Error parsing id parameter - " << id << ", err " << err << dendl;
http_ret = -EINVAL;
}
-
+
string pool;
RGWReplicaObjectLogger rl(store, pool, prefix);
- http_ret = rl.delete_bound(shard, daemon_id);
+ http_ret = rl.delete_bound(shard, daemon_id, purge_all);
}
static int bucket_instance_to_bucket(RGWRados *store, string& bucket_instance, rgw_bucket& bucket) {
void RGWOp_BILog_DeleteBounds::execute() {
string bucket_instance = s->info.args.get("bucket-instance");
string daemon_id = s->info.args.get("daemon_id");
+ bool purge_all;
- if (daemon_id.empty()) {
+ s->info.args.get_bool("purge-all", &purge_all, false);
+
+ if (daemon_id.empty() && !purge_all) {
dout(5) << "Error - invalid parameter list" << dendl;
http_ret = -EINVAL;
return;
if ((http_ret = get_bucket_for_bounds(store, s->info.args, bucket, &index_by_instance)) < 0) {
return;
}
-
+
+
RGWReplicaBucketLogger rl(store);
- http_ret = rl.delete_bound(bucket, shard_id, daemon_id, index_by_instance);
+ http_ret = rl.delete_bound(bucket, shard_id, daemon_id, index_by_instance, purge_all);
}
RGWOp *RGWHandler_ReplicaLog::op_get() {