]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: es: api to retrieve bucket mdsearch config
authorYehuda Sadeh <yehuda@redhat.com>
Fri, 31 Mar 2017 22:30:39 +0000 (15:30 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Tue, 30 May 2017 20:24:44 +0000 (13:24 -0700)
GET /bucket?mdsearch

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_common.h
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_s3.h

index c1a6bed0807ffb2ad33ce53dcb30f46fa0dacfd2..f7543656485245df92faa0b9b1c0e9651462240b 100644 (file)
@@ -467,6 +467,7 @@ enum RGWOpType {
   RGW_OP_BULK_UPLOAD,
   RGW_OP_METADATA_SEARCH,
   RGW_OP_CONFIG_BUCKET_META_SEARCH,
+  RGW_OP_GET_BUCKET_META_SEARCH,
 };
 
 class RGWAccessControlPolicy;
index 7656a0b60b2269510dc4756f1097a1cfb8e580e0..fe6b7027a2b2abf512fa46aa4d014e226cfd2e6d 100644 (file)
@@ -6339,6 +6339,20 @@ void RGWConfigBucketMetaSearch::execute()
   }
 }
 
+int RGWGetBucketMetaSearch::verify_permission()
+{
+  if (!s->auth.identity->is_owner_of(s->bucket_owner.get_id())) {
+    return -EACCES;
+  }
+
+  return 0;
+}
+
+void RGWGetBucketMetaSearch::pre_exec()
+{
+  rgw_bucket_object_pre_exec(s);
+}
+
 
 RGWHandler::~RGWHandler()
 {
index 8debd7e2efea802fe1824a6a44ad6e4f64f5d610..bbb0bdb0390caf88022f484c39561ff49c1ccb6f 100644 (file)
@@ -2032,4 +2032,18 @@ public:
   virtual uint32_t op_mask() { return RGW_OP_TYPE_WRITE; }
 };
 
+class RGWGetBucketMetaSearch : public RGWOp {
+public:
+  RGWGetBucketMetaSearch() {}
+
+  int verify_permission();
+  void pre_exec();
+  void execute() {}
+
+  virtual void send_response() = 0;
+  virtual const string name() { return "get_bucket_meta_search"; }
+  virtual RGWOpType get_type() { return RGW_OP_GET_BUCKET_META_SEARCH; }
+  virtual uint32_t op_mask() { return RGW_OP_TYPE_READ; }
+};
+
 #endif /* CEPH_RGW_OP_H */
index d73b4666e3a207c15715596228cefcd6a685e4da..8dd6ba6055bf2df8e0b732438953fd9eb2dddb30 100644 (file)
@@ -2785,6 +2785,37 @@ void RGWConfigBucketMetaSearch_ObjStore_S3::send_response()
   end_header(s, this);
 }
 
+void RGWGetBucketMetaSearch_ObjStore_S3::send_response()
+{
+  if (op_ret)
+    set_req_state_err(s, op_ret);
+  dump_errno(s);
+  end_header(s, NULL, "application/xml");
+
+  Formatter *f = s->formatter;
+  f->open_array_section("GetBucketMetaSearchResult");
+  f->open_object_section("Entry");
+  for (auto& e : s->bucket_info.mdsearch_config) {
+    string k = string("x-amz-meta-") + e.first;
+    f->dump_string("Key", k.c_str());
+    const char *type;
+    switch (e.second) {
+      case ESEntityTypeMap::ES_ENTITY_INT:
+        type = "int";
+        break;
+      case ESEntityTypeMap::ES_ENTITY_DATE:
+        type = "date";
+        break;
+      default:
+        type = "str";
+    }
+    f->dump_string("Type", type);
+  }
+  f->close_section();
+  f->close_section();
+  rgw_flush_formatter(s, f);
+}
+
 
 RGWOp *RGWHandler_REST_Service_S3::op_get()
 {
@@ -2854,6 +2885,10 @@ RGWOp *RGWHandler_REST_Bucket_S3::op_get()
     return new RGWGetBucketWebsite_ObjStore_S3;
   }
 
+  if (s->info.args.exists("mdsearch")) {
+    return new RGWGetBucketMetaSearch_ObjStore_S3;
+  }
+
   if (is_acl_op()) {
     return new RGWGetACLs_ObjStore_S3;
   } else if (is_cors_op()) {
index aad591aec5a415332a6daca9720a6796e5912727..d362d07bd65b3061c11bec9b5073b86b622123da 100644 (file)
@@ -427,6 +427,14 @@ public:
   void send_response() override;
 };
 
+class RGWGetBucketMetaSearch_ObjStore_S3 : public RGWGetBucketMetaSearch {
+public:
+  RGWGetBucketMetaSearch_ObjStore_S3() {}
+  ~RGWGetBucketMetaSearch_ObjStore_S3() {}
+
+  void send_response() override;
+};
+
 class RGW_Auth_S3 {
 private:
   static int authorize_v2(RGWRados *store,