void RGWDeleteObj::execute()
{
- op_ret = -EINVAL;
- rgw_obj obj(s->bucket, s->object);
- map<string, bufferlist> attrs;
-
op_ret = get_params();
if (op_ret < 0) {
return;
}
+ rgw_obj obj(s->bucket, s->object);
+ map<string, bufferlist> attrs;
+
+
if (!s->object.empty()) {
if (need_object_expiration() || multipart_delete) {
/* check if obj exists, read orig attrs */
del_op.params.bucket_owner = s->bucket_owner.get_id();
del_op.params.versioning_status = s->bucket_info.versioning_status();
del_op.params.obj_owner = s->owner;
+ del_op.params.unmod_since = unmod_since;
op_ret = del_op.delete_obj();
if (op_ret >= 0) {
op_ret = -ENOENT;
return;
}
+ } else {
+ op_ret = -EINVAL;
}
}
bool delete_marker;
bool multipart_delete;
string version_id;
+ time_t unmod_since; /* if unmodified since */
std::unique_ptr<RGWBulkDelete::Deleter> deleter;
public:
RGWDeleteObj()
: delete_marker(false),
multipart_delete(false),
+ unmod_since(0),
deleter(nullptr) {
}
void execute();
int handle_slo_manifest(bufferlist& bl);
- virtual int get_params() { return 0; };
+ virtual int get_params() { return 0; }
virtual void send_response() = 0;
virtual const string name() { return "delete_obj"; }
virtual RGWOpType get_type() { return RGW_OP_DELETE_OBJ; }
uint32_t bilog_flags;
list<rgw_obj_key> *remove_objs;
utime_t expiration_time;
+ time_t unmod_since;
- DeleteParams() : versioning_status(0), olh_epoch(0), bilog_flags(0), remove_objs(NULL) {}
+ DeleteParams() : versioning_status(0), olh_epoch(0), bilog_flags(0), remove_objs(NULL), unmod_since(0) {}
} params;
struct DeleteResult {
rgw_flush_formatter_and_reset(s, s->formatter);
}
+int RGWDeleteObj_ObjStore_S3::get_params()
+{
+ const char *if_unmod = s->info.env->get("HTTP_X_AMZ_DELETE_IF_UNMODIFIED_SINCE");
+
+ if (if_unmod) {
+ if (parse_time(if_unmod, &unmod_since) < 0) {
+ ldout(s->cct, 10) << "failed to parse time: " << if_unmod << dendl;
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
void RGWDeleteObj_ObjStore_S3::send_response()
{
RGWDeleteObj_ObjStore_S3() {}
~RGWDeleteObj_ObjStore_S3() {}
+ int get_params();
void send_response();
};