From 14857582bd8b04a1dbe518a2ea363cb503d5d4bc Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Mon, 5 Mar 2012 17:27:44 -0800 Subject: [PATCH] cls_rgw: add cancel operation Signed-off-by: Yehuda Sadeh --- src/cls_rgw.cc | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/cls_rgw.cc b/src/cls_rgw.cc index a6b3e736693cc..18610163f0f6f 100644 --- a/src/cls_rgw.cc +++ b/src/cls_rgw.cc @@ -228,9 +228,31 @@ int rgw_bucket_complete_op(cls_method_context_t hctx, bufferlist *in, bufferlist entry.pending_map.erase(pinter); } - if (op.epoch <= entry.epoch) { + bool cancel = false; + bufferlist update_bl; + bufferlist new_header_bl; + + if (op.tag.size() && op.op == CLS_RGW_OP_CANCEL) { + CLS_LOG("rgw_bucket_complete_op(): cancel requested\n"); + cancel = true; + } else if (op.epoch <= entry.epoch) { CLS_LOG("rgw_bucket_complete_op(): skipping request, old epoch\n"); - return 0; + cancel = true; + } + + bufferlist op_bl; + + if (cancel) { + if (op.tag.size()) { + bufferlist new_key_bl; + ::encode(entry, new_key_bl); + op_bl.append(CEPH_OSD_TMAP_SET); + ::encode(op.name, op_bl); + ::encode(new_key_bl, op_bl); + goto done_update; + } else { + return 0; + } } if (entry.exists) { @@ -240,8 +262,6 @@ int rgw_bucket_complete_op(cls_method_context_t hctx, bufferlist *in, bufferlist stats.total_size_rounded -= get_rounded_size(entry.meta.size); } - bufferlist op_bl; - switch (op.op) { case CLS_RGW_OP_DEL: if (ondisk) { @@ -280,11 +300,11 @@ int rgw_bucket_complete_op(cls_method_context_t hctx, bufferlist *in, bufferlist break; } - bufferlist update_bl; - bufferlist new_header_bl; ::encode(header, new_header_bl); update_bl.append(CEPH_OSD_TMAP_HDR); ::encode(new_header_bl, update_bl); + +done_update: update_bl.claim_append(op_bl); return cls_cxx_map_update(hctx, &update_bl); } -- 2.39.5