]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: get bucket tagging
authorChang Liu <liuchang0812@gmail.com>
Mon, 6 May 2019 06:27:16 +0000 (14:27 +0800)
committerChang Liu <liuchang0812@gmail.com>
Tue, 4 Jun 2019 02:36:31 +0000 (10:36 +0800)
Signed-off-by: Chang Liu <liuchang0812@gmail.com>
src/rgw/rgw_op.cc
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_s3.h

index 806895cb48bed8e0b1ef40810d2b4e4f51ddc05c..f188eb94a481712dd817c5ac54f42dd6b4ac1da8 100644 (file)
@@ -1143,6 +1143,30 @@ void RGWDeleteObjTags::execute()
   op_ret = store->set_attrs(s->obj_ctx, s->bucket_info, obj, attrs, &rmattr);
 }
 
+int RGWGetBucketTags::verify_permission()
+{
+
+  //TODO(LC)
+  return 0;
+}
+
+void RGWGetBucketTags::pre_exec()
+{
+  rgw_bucket_object_pre_exec(s);
+}
+
+void RGWGetBucketTags::execute() 
+{
+  auto iter = s->bucket_attrs.find(RGW_ATTR_TAGS);
+  if (iter != s->bucket_attrs.end()) {
+    has_tags = true;
+    tags_bl.append(iter->second);
+  } else {
+    op_ret = -ERR_NO_SUCH_TAG_SET;
+  }
+  send_response_data(tags_bl);
+}
+
 int RGWOp::do_aws4_auth_completion()
 {
   ldpp_dout(this, 5) << "NOTICE: call to do_aws4_auth_completion"  << dendl;
index 413e234e76a73b2839dce7e12121431c910dd63f..8d255690d021c10671aa64fc6e3535ad8ab99abb 100644 (file)
@@ -475,6 +475,36 @@ void RGWDeleteObjTags_ObjStore_S3::send_response()
   end_header(s, this);
 }
 
+void RGWGetBucketTags_ObjStore_S3::send_response_data(bufferlist& bl)
+{
+  if (op_ret)
+    set_req_state_err(s, op_ret);
+  dump_errno(s);
+  end_header(s, this, "application/xml");
+  dump_start(s);
+
+  if (!op_ret) {
+  s->formatter->open_object_section_in_ns("Tagging", XMLNS_AWS_S3);
+  s->formatter->open_object_section("TagSet");
+  if (has_tags){
+    RGWObjTagSet_S3 tagset;
+    auto iter = bl.cbegin();
+    try {
+      tagset.decode(iter);
+    } catch (buffer::error& err) {
+      ldout(s->cct,0) << "ERROR: caught buffer::error, couldn't decode TagSet" << dendl;
+      op_ret= -EIO;
+      return;
+    }
+    tagset.dump_xml(s->formatter);
+  }
+  s->formatter->close_section();
+  s->formatter->close_section();
+  rgw_flush_formatter_and_reset(s, s->formatter);
+  }
+}
+
+
 void RGWListBuckets_ObjStore_S3::send_response_begin(bool has_buckets)
 {
   if (op_ret)
@@ -3151,7 +3181,9 @@ RGWOp *RGWHandler_REST_Bucket_S3::op_get()
     return new RGWGetLC_ObjStore_S3;
   } else if(is_policy_op()) {
     return new RGWGetBucketPolicy;
-  }
+  } else if (is_tagging_op()) {
+    return new RGWGetBucketTags_ObjStore_S3;
+  } 
   return get_obj_op(true);
 }
 
index 3fd69598e46cc22b130c31234466daff9d867ebb..c5ad89217216cdf9bb4137059f130bcb5e08bcde 100644 (file)
@@ -576,6 +576,11 @@ protected:
   bool is_obj_update_op() override {
     return is_acl_op() || is_cors_op();
   }
+
+  bool is_tagging_op() {
+    return s->info.args.exists("tagging");
+  }
   bool is_request_payment_op() {
     return s->info.args.exists("requestPayment");
   }