]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: verify bucket location only if exists
authorYehuda Sadeh <yehuda@inktank.com>
Wed, 29 May 2013 20:50:50 +0000 (13:50 -0700)
committerYehuda Sadeh <yehuda@inktank.com>
Wed, 29 May 2013 20:50:50 +0000 (13:50 -0700)
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc

index 1fc9229ebc759019e053d67028bb8c401c8b725f..a1b46bcefbdcbe4dc4a7af6f07668d1080d09265 100644 (file)
@@ -298,10 +298,14 @@ static int rgw_build_policies(RGWRados *store, struct req_state *s, bool only_bu
 
   RGWBucketInfo bucket_info;
   if (s->bucket_name_str.size()) {
+    bool exists = true;
     ret = store->get_bucket_info(s->obj_ctx, s->bucket_name_str, bucket_info, &s->objv_tracker);
     if (ret < 0) {
-      ldout(s->cct, 0) << "NOTICE: couldn't get bucket from bucket_name (name=" << s->bucket_name_str << ")" << dendl;
-      return ret;
+      if (ret != -ENOENT) {
+        ldout(s->cct, 0) << "NOTICE: couldn't get bucket from bucket_name (name=" << s->bucket_name_str << ")" << dendl;
+        return ret;
+      }
+      exists = false;
     }
     s->bucket = bucket_info.bucket;
 
@@ -312,7 +316,7 @@ static int rgw_build_policies(RGWRados *store, struct req_state *s, bool only_bu
     s->bucket_owner = s->bucket_acl->get_owner();
 
     string& region = bucket_info.region;
-    if ((region.empty() && !store->region.is_master) &&
+    if (exists && (region.empty() && !store->region.is_master) &&
         (region != store->region.name)) {
       ldout(s->cct, 0) << "NOTICE: request for data in a different region (" << region << " != " << store->region.name << ")" << dendl;
       return -ERR_PERMANENT_REDIRECT;
index c547f0d037537013a58a9d61914f2ed7e5322e50..73e0c48f6a800fc99d49be85f6f95bb26ce635a0 100644 (file)
@@ -3776,13 +3776,8 @@ int RGWRados::get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& inf
 
   int ret = rgw_get_system_obj(this, ctx, zone.domain_root, bucket_name, bl, objv_tracker, pattrs);
   if (ret < 0) {
-    if (ret != -ENOENT)
-      return ret;
-
-    info.bucket.name = bucket_name;
-    info.bucket.data_pool = bucket_name; // for now
-    info.bucket.index_pool = bucket_name; // for now
-    return 0;
+    info.bucket.name = bucket_name; /* only init this field */
+    return ret;
   }
 
   bufferlist::iterator iter = bl.begin();