]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/sal: Bucket owner as rgw_user 54379/head
authorCasey Bodley <cbodley@redhat.com>
Tue, 7 Nov 2023 01:26:28 +0000 (20:26 -0500)
committerCasey Bodley <cbodley@redhat.com>
Thu, 9 Nov 2023 16:15:24 +0000 (11:15 -0500)
stop maintaining a User pointer for the bucket owner, and use the
stored rgw_user owner directly

Signed-off-by: Casey Bodley <cbodley@redhat.com>
37 files changed:
src/rgw/driver/d4n/rgw_sal_d4n.cc
src/rgw/driver/d4n/rgw_sal_d4n.h
src/rgw/driver/posix/rgw_sal_posix.cc
src/rgw/driver/posix/rgw_sal_posix.h
src/rgw/driver/rados/rgw_bucket.cc
src/rgw/driver/rados/rgw_cr_rados.h
src/rgw/driver/rados/rgw_cr_tools.cc
src/rgw/driver/rados/rgw_notify.cc
src/rgw/driver/rados/rgw_object_expirer_core.cc
src/rgw/driver/rados/rgw_rest_bucket.cc
src/rgw/driver/rados/rgw_rest_log.cc
src/rgw/driver/rados/rgw_sal_rados.cc
src/rgw/driver/rados/rgw_sal_rados.h
src/rgw/driver/rados/rgw_tools.cc
src/rgw/driver/rados/rgw_user.cc
src/rgw/rgw_admin.cc
src/rgw/rgw_bucket.cc
src/rgw/rgw_lc.cc
src/rgw/rgw_lua_request.cc
src/rgw/rgw_op.cc
src/rgw/rgw_orphan.cc
src/rgw/rgw_quota.cc
src/rgw/rgw_rest_pubsub.cc
src/rgw/rgw_rest_ratelimit.cc
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_usage.cc
src/rgw/rgw_sal.h
src/rgw/rgw_sal_dbstore.cc
src/rgw/rgw_sal_dbstore.h
src/rgw/rgw_sal_filter.cc
src/rgw/rgw_sal_filter.h
src/rgw/rgw_sal_store.h
src/rgw/rgw_swift_auth.cc
src/rgw/rgw_user.cc
src/test/rgw/test_d4n_filter.cc
src/test/rgw/test_rgw_lua.cc

index efeb281c3cea67c1f06a7d04e934523dc50aadd7..a25d5bbdfd95f57bfb4ad063deb3bc0ae703dbdc 100644 (file)
@@ -326,7 +326,6 @@ int D4NFilterObject::D4NFilterReadOp::prepare(optional_yield y, const DoutPrefix
     ldpp_dout(dpp, 20) << "D4N Filter: Cache get object operation failed." << dendl;
   } else {
     /* Set metadata locally */
-    RGWQuotaInfo quota_info;
     RGWObjState* astate;
     source->get_obj_state(dpp, &astate, y);
 
@@ -343,16 +342,9 @@ int D4NFilterObject::D4NFilterReadOp::prepare(optional_yield y, const DoutPrefix
        source->set_instance(it->second);
       } else if (!std::strcmp(it->first.data(), "source_zone_short_id")) {
        astate->zone_short_id = static_cast<uint32_t>(std::stoul(it->second));
-      } else if (!std::strcmp(it->first.data(), "user_quota.max_size")) {
-        quota_info.max_size = std::stoull(it->second);
-      } else if (!std::strcmp(it->first.data(), "user_quota.max_objects")) {
-        quota_info.max_objects = std::stoull(it->second);
-      } else if (!std::strcmp(it->first.data(), "max_buckets")) {
-        source->get_bucket()->get_owner()->set_max_buckets(std::stoull(it->second));
       }
     }
 
-    source->get_bucket()->get_owner()->set_info(quota_info);
     source->set_obj_state(*astate);
    
     /* Set attributes locally */
@@ -491,19 +483,6 @@ int D4NFilterWriter::complete(size_t accounted_size, const std::string& etag,
     bl.clear();
   }
 
-  RGWUserInfo info = obj->get_bucket()->get_owner()->get_info();
-  bl.append(std::to_string(info.quota.user_quota.max_size));
-  baseAttrs.insert({"user_quota.max_size", bl});
-  bl.clear();
-
-  bl.append(std::to_string(info.quota.user_quota.max_objects));
-  baseAttrs.insert({"user_quota.max_objects", bl});
-  bl.clear();
-
-  bl.append(std::to_string(obj->get_bucket()->get_owner()->get_max_buckets()));
-  baseAttrs.insert({"max_buckets", bl});
-  bl.clear();
-
   baseAttrs.insert(attrs.begin(), attrs.end());
 
   int setObjReturn = filter->get_d4n_cache()->setObject(obj->get_key().get_oid(), &baseAttrs);
index a54371f6cc6480b87ca427a50aaa277690ce797b..cebae1eaf6ba5c5fb3befd484a4af357bbc02110 100644 (file)
@@ -78,8 +78,8 @@ class D4NFilterBucket : public FilterBucket {
     D4NFilterDriver* filter;
 
   public:
-    D4NFilterBucket(std::unique_ptr<Bucket> _next, User* _user, D4NFilterDriver* _filter) :
-      FilterBucket(std::move(_next), _user), 
+    D4NFilterBucket(std::unique_ptr<Bucket> _next, D4NFilterDriver* _filter) :
+      FilterBucket(std::move(_next)),
       filter(_filter) {}
     virtual ~D4NFilterBucket() = default;
    
index b72c7868600b7b6df4d117b0665d02d59daa18cd..fc48c4f8fa8c5d3bafad904fbeeff144b1bd4cbf 100644 (file)
@@ -348,16 +348,16 @@ std::unique_ptr<Object> POSIXDriver::get_object(const rgw_obj_key& k)
   return std::make_unique<POSIXObject>(this, k);
 }
 
-int POSIXDriver::load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
+int POSIXDriver::load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
 {
-  *bucket = std::make_unique<POSIXBucket>(this, root_fd, b, u);
+  *bucket = std::make_unique<POSIXBucket>(this, root_fd, b);
   return (*bucket)->load_bucket(dpp, y);
 }
 
-std::unique_ptr<Bucket> POSIXDriver::get_bucket(User* u, const RGWBucketInfo& i)
+std::unique_ptr<Bucket> POSIXDriver::get_bucket(const RGWBucketInfo& i)
 {
   /* Don't need to fetch the bucket info, use the provided one */
-  return std::make_unique<POSIXBucket>(this, root_fd, i, u);
+  return std::make_unique<POSIXBucket>(this, root_fd, i);
 }
 
 std::string POSIXDriver::zone_unique_trans_id(const uint64_t unique_num)
@@ -525,8 +525,7 @@ int POSIXBucket::create(const DoutPrefixProvider* dpp,
                        const CreateParams& params,
                        optional_yield y)
 {
-  ceph_assert(owner);
-  info.owner = owner->get_id();
+  info.owner = params.owner;
 
   info.bucket.marker = params.marker;
   info.bucket.bucket_id = params.bucket_id;
@@ -632,7 +631,7 @@ int POSIXDriver::mint_listing_entry(const std::string &bname,
     POSIXObject *pobj;
     int ret;
 
-    ret = load_bucket(nullptr, nullptr, rgw_bucket(std::string(), bname),
+    ret = load_bucket(nullptr, rgw_bucket(std::string(), bname),
                       &b, null_yield);
     if (ret < 0)
       return ret;
@@ -883,10 +882,6 @@ int POSIXBucket::load_bucket(const DoutPrefixProvider* dpp, optional_yield y)
   mtime = ceph::real_clock::from_time_t(stx.stx_mtime.tv_sec);
   info.creation_time = ceph::real_clock::from_time_t(stx.stx_btime.tv_sec);
 
-  if (owner) {
-    info.owner = owner->get_id();
-  }
-
   ret = open(dpp);
   if (ret < 0) {
     return ret;
@@ -981,7 +976,7 @@ int POSIXBucket::check_bucket_shards(const DoutPrefixProvider* dpp,
   return 0;
 }
 
-int POSIXBucket::chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y)
+int POSIXBucket::chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y)
 {
   /* TODO map user to UID/GID, and change it */
   return 0;
@@ -1204,7 +1199,7 @@ int POSIXBucket::get_shadow_bucket(const DoutPrefixProvider* dpp, optional_yield
 
   open(dpp);
 
-  bp = new POSIXBucket(driver, dir_fd, b, owner, ons);
+  bp = new POSIXBucket(driver, dir_fd, b, ons);
   ret = bp->load_bucket(dpp, y);
   if (ret == -ENOENT && create) {
     /* Create it if it doesn't exist */
index 16f88729ab4a9bb809d63e1814e692284614ccc7..1599808beff33b34d07ac7ca4ada4596b94eab6c 100644 (file)
@@ -52,10 +52,9 @@ public:
                                std::string& user_str, optional_yield y,
                                std::unique_ptr<User>* user) override;
   virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
-  virtual std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i)  override;
-  virtual int load_bucket(const DoutPrefixProvider* dpp, User* u, const
-                         rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
-                         optional_yield y) override;
+  virtual std::unique_ptr<Bucket> get_bucket(const RGWBucketInfo& i)  override;
+  virtual int load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
+                          std::unique_ptr<Bucket>* bucket, optional_yield y) override;
   virtual std::string zone_unique_trans_id(const uint64_t unique_num) override;
 
   virtual std::unique_ptr<Writer> get_append_writer(const DoutPrefixProvider *dpp,
@@ -143,16 +142,16 @@ private:
   std::optional<std::string> ns;
 
 public:
-  POSIXBucket(POSIXDriver *_dr, int _p_fd, const rgw_bucket& _b, User* _u, std::optional<std::string> _ns = std::nullopt)
-    : StoreBucket(_b, _u),
+  POSIXBucket(POSIXDriver *_dr, int _p_fd, const rgw_bucket& _b, std::optional<std::string> _ns = std::nullopt)
+    : StoreBucket(_b),
     driver(_dr),
     parent_fd(_p_fd),
     acls(),
     ns(_ns)
     { }
 
-  POSIXBucket(POSIXDriver *_dr, int _p_fd, const RGWBucketInfo& _i, User* _u)
-    : StoreBucket(_i, _u),
+  POSIXBucket(POSIXDriver *_dr, int _p_fd, const RGWBucketInfo& _i)
+    : StoreBucket(_i),
     driver(_dr),
     parent_fd(_p_fd),
     acls()
@@ -201,7 +200,7 @@ public:
                               RGWBucketEnt* ent) override;
   virtual int check_bucket_shards(const DoutPrefixProvider* dpp,
                                   uint64_t num_objs, optional_yield y) override;
-  virtual int chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y) override;
+  virtual int chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y) override;
   virtual int put_info(const DoutPrefixProvider* dpp, bool exclusive,
                       ceph::real_time mtime, optional_yield y) override;
   virtual int check_empty(const DoutPrefixProvider* dpp, optional_yield y) override;
index 0e1eb274d4039fed4f89d9a829b7623b41756e23..066654adfa8cc60424b2c6dae44da7e12dfd695b 100644 (file)
@@ -109,8 +109,7 @@ void check_bad_user_bucket_mapping(rgw::sal::Driver* driver, rgw::sal::User& use
 
     for (const auto& ent : listing.buckets) {
       std::unique_ptr<rgw::sal::Bucket> bucket;
-      int r = driver->load_bucket(dpp, &user,
-                                  rgw_bucket(user.get_tenant(), ent.bucket.name),
+      int r = driver->load_bucket(dpp, rgw_bucket(user.get_tenant(), ent.bucket.name),
                                   &bucket, y);
       if (r < 0) {
         ldpp_dout(dpp, 0) << "could not get bucket info for bucket=" << bucket << dendl;
@@ -122,7 +121,7 @@ void check_bad_user_bucket_mapping(rgw::sal::Driver* driver, rgw::sal::User& use
             << " got " << bucket << std::endl;
         if (fix) {
           cout << "fixing" << std::endl;
-         r = bucket->chown(dpp, user, y);
+         r = bucket->chown(dpp, user.get_id(), y);
           if (r < 0) {
             cerr << "failed to fix bucket: " << cpp_strerror(-r) << std::endl;
           }
@@ -183,7 +182,7 @@ int RGWBucket::init(rgw::sal::Driver* _driver, RGWBucketAdminOpState& op_state,
     bucket_name = bucket_name.substr(pos + 1);
   }
 
-  int r = driver->load_bucket(dpp, user.get(), rgw_bucket(tenant, bucket_name),
+  int r = driver->load_bucket(dpp, rgw_bucket(tenant, bucket_name),
                               &bucket, y);
   if (r < 0) {
       set_err_msg(err_msg, "failed to fetch bucket info for bucket=" + bucket_name);
@@ -246,11 +245,6 @@ bool rgw_find_bucket_by_id(const DoutPrefixProvider *dpp, CephContext *cct, rgw:
 int RGWBucket::chown(RGWBucketAdminOpState& op_state, const string& marker,
                      optional_yield y, const DoutPrefixProvider *dpp, std::string *err_msg)
 {
-  /* User passed in by rgw_admin is the new user; get the current user and set it in
-   * the bucket */
-  std::unique_ptr<rgw::sal::User> old_user = driver->get_user(bucket->get_info().owner);
-  bucket->set_owner(old_user.get());
-
   return rgw_chown_bucket_and_objects(driver, bucket.get(), user.get(), marker, err_msg, dpp, y);
 }
 
@@ -1243,11 +1237,9 @@ int RGWBucketAdminOp::remove_bucket(rgw::sal::Driver* driver, RGWBucketAdminOpSt
                                     bool bypass_gc, bool keep_index_consistent)
 {
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  std::unique_ptr<rgw::sal::User> user = driver->get_user(op_state.get_user_id());
 
-  int ret = driver->load_bucket(dpp, user.get(),
-                                rgw_bucket(user->get_tenant(),
-                                           op_state.get_bucket_name()),
+  int ret = driver->load_bucket(dpp, rgw_bucket(op_state.get_tenant(),
+                                                op_state.get_bucket_name()),
                                 &bucket, y);
   if (ret < 0)
     return ret;
@@ -1289,8 +1281,7 @@ static int bucket_stats(rgw::sal::Driver* driver,
   std::unique_ptr<rgw::sal::Bucket> bucket;
   map<RGWObjCategory, RGWStorageStats> stats;
 
-  int ret = driver->load_bucket(dpp, nullptr,
-                                rgw_bucket(tenant_name, bucket_name),
+  int ret = driver->load_bucket(dpp, rgw_bucket(tenant_name, bucket_name),
                                 &bucket, y);
   if (ret < 0) {
     return ret;
@@ -1416,7 +1407,7 @@ int RGWBucketAdminOp::limit_check(rgw::sal::Driver* driver,
        uint64_t num_objects = 0;
 
        std::unique_ptr<rgw::sal::Bucket> bucket;
-       ret = driver->load_bucket(dpp, user.get(), ent.bucket, &bucket, y);
+       ret = driver->load_bucket(dpp, ent.bucket, &bucket, y);
        if (ret < 0)
          continue;
 
@@ -1600,7 +1591,7 @@ void get_stale_instances(rgw::sal::Driver* driver, const std::string& bucket_nam
     std::unique_ptr<rgw::sal::Bucket> bucket;
     rgw_bucket rbucket;
     rgw_bucket_parse_bucket_key(driver->ctx(), bucket_instance, &rbucket, nullptr);
-    int r = driver->load_bucket(dpp, nullptr, rbucket, &bucket, y);
+    int r = driver->load_bucket(dpp, rbucket, &bucket, y);
     if (r < 0){
       // this can only happen if someone deletes us right when we're processing
       ldpp_dout(dpp, -1) << "Bucket instance is invalid: " << bucket_instance
@@ -1620,7 +1611,7 @@ void get_stale_instances(rgw::sal::Driver* driver, const std::string& bucket_nam
   auto [tenant, bname] = split_tenant(bucket_name);
   RGWBucketInfo cur_bucket_info;
   std::unique_ptr<rgw::sal::Bucket> cur_bucket;
-  int r = driver->load_bucket(dpp, nullptr, rgw_bucket(tenant, bname),
+  int r = driver->load_bucket(dpp, rgw_bucket(tenant, bname),
                               &cur_bucket, y);
   if (r < 0) {
     if (r == -ENOENT) {
@@ -1755,7 +1746,7 @@ int RGWBucketAdminOp::clear_stale_instances(rgw::sal::Driver* driver,
                       Formatter *formatter,
                       rgw::sal::Driver* driver){
                      for (const auto &binfo: lst) {
-                      auto bucket = driver->get_bucket(nullptr, binfo);
+                      auto bucket = driver->get_bucket(binfo);
                       int ret = bucket->purge_instance(dpp, y);
                        if (ret == 0){
                          auto md_key = "bucket.instance:" + binfo.bucket.get_key();
@@ -1777,8 +1768,7 @@ static int fix_single_bucket_lc(rgw::sal::Driver* driver,
                                 const DoutPrefixProvider *dpp, optional_yield y)
 {
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  int ret = driver->load_bucket(dpp, nullptr,
-                                rgw_bucket(tenant_name, bucket_name),
+  int ret = driver->load_bucket(dpp, rgw_bucket(tenant_name, bucket_name),
                                 &bucket, y);
   if (ret < 0) {
     // TODO: Should we handle the case where the bucket could've been removed between
@@ -1949,7 +1939,7 @@ int RGWBucketAdminOp::fix_obj_expiry(rgw::sal::Driver* driver,
     ldpp_dout(dpp, -1) << "failed to initialize bucket" << dendl;
     return ret;
   }
-  auto bucket = driver->get_bucket(nullptr, admin_bucket.get_bucket_info());
+  auto bucket = driver->get_bucket(admin_bucket.get_bucket_info());
 
   return fix_bucket_obj_expiry(dpp, driver, bucket.get(), flusher, dry_run, y);
 }
@@ -2630,7 +2620,7 @@ int RGWMetadataHandlerPut_BucketInstance::put_post(const DoutPrefixProvider *dpp
 
   /* update lifecyle policy */
   {
-    auto bucket = bihandler->driver->get_bucket(nullptr, bci.info);
+    auto bucket = bihandler->driver->get_bucket(bci.info);
 
     auto lc = bihandler->driver->get_rgwlc();
 
index ff7a0efb481aaa0e30b2f0aad85ae5fb153e8504..676fd3d3cae2c50ac3d97ae9a1ef725456dd9e05 100644 (file)
@@ -1350,7 +1350,7 @@ public:
     if (_zones_trace) {
       zones_trace = *_zones_trace;
     }
-    bucket = store->get_bucket(nullptr, _bucket_info);
+    bucket = store->get_bucket(_bucket_info);
     obj = bucket->get_object(_key);
   }
 };
index 928cc9c0c988ecc2dbe46c582617155c8b1c0962..a46ba1ac6e1236708c311806cfaaafe09964156f 100644 (file)
@@ -100,8 +100,7 @@ int RGWGetUserInfoCR::Request::_send_request(const DoutPrefixProvider *dpp)
 template<>
 int RGWGetBucketInfoCR::Request::_send_request(const DoutPrefixProvider *dpp)
 {
-  return store->load_bucket(dpp, nullptr,
-                            rgw_bucket(params.tenant, params.bucket_name),
+  return store->load_bucket(dpp, rgw_bucket(params.tenant, params.bucket_name),
                             &result->bucket, null_yield);
 }
 
index 7abb0d84a7d19be693bbb4dd0dabb6c51ec32e61..3935957bc5c3e56061fd7c2b98222c58362208c4 100644 (file)
@@ -873,8 +873,7 @@ static inline void populate_event(reservation_t& res,
   event.x_amz_id_2 = res.store->getRados()->host_id; // RGW on which the change was made
   // configurationId is filled from notification configuration
   event.bucket_name = res.bucket->get_name();
-  event.bucket_ownerIdentity = res.bucket->get_owner() ?
-    res.bucket->get_owner()->get_id().id : res.bucket->get_info().owner.id;
+  event.bucket_ownerIdentity = res.bucket->get_owner().id;
   const auto region = res.store->get_zone()->get_zonegroup().get_api_name();
   rgw::ARN bucket_arn(res.bucket->get_key());
   bucket_arn.region = region; 
index ba6580b89b07327579a4ba786697cb30ea7bb3a8..72c21c1d262a648185bdb0630500322880288556 100644 (file)
@@ -201,7 +201,7 @@ int RGWObjectExpirer::garbage_single_object(const DoutPrefixProvider *dpp, objex
   RGWBucketInfo bucket_info;
   std::unique_ptr<rgw::sal::Bucket> bucket;
 
-  int ret = driver->load_bucket(dpp, nullptr, rgw_bucket(hint.tenant, hint.bucket_name, hint.bucket_id), &bucket, null_yield);
+  int ret = driver->load_bucket(dpp, rgw_bucket(hint.tenant, hint.bucket_name, hint.bucket_id), &bucket, null_yield);
   if (-ENOENT == ret) {
     ldpp_dout(dpp, 15) << "NOTICE: cannot find bucket = " \
         << hint.bucket_name << ". The object must be already removed" << dendl;
index 4fac8ef64f7c5a49321b37527f40f5d4100cff96..dc71e40335ffa9dbfc7fba82f2c3d2856035c35a 100644 (file)
@@ -233,7 +233,7 @@ void RGWOp_Bucket_Remove::execute(optional_yield y)
     return;
   }
 
-  op_ret = driver->load_bucket(s, nullptr, rgw_bucket("", bucket_name),
+  op_ret = driver->load_bucket(s, rgw_bucket("", bucket_name),
                                &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 0) << "get_bucket returned ret=" << op_ret << dendl;
@@ -301,7 +301,7 @@ void RGWOp_Set_Bucket_Quota::execute(optional_yield y)
   }
   if (use_http_params) {
     std::unique_ptr<rgw::sal::Bucket> bucket;
-    op_ret = driver->load_bucket(s, nullptr, rgw_bucket(uid.tenant, bucket_name),
+    op_ret = driver->load_bucket(s, rgw_bucket(uid.tenant, bucket_name),
                                  &bucket, s->yield);
     if (op_ret < 0) {
       return;
index d331097f10b94fba144055e7071013542214f81b..9c0467ec36a4960ee67f63ad3799626ca196fe66 100644 (file)
@@ -414,7 +414,7 @@ void RGWOp_BILog_List::execute(optional_yield y) {
     b.name = bn;
     b.bucket_id = bucket_instance;
   }
-  op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
+  op_ret = driver->load_bucket(s, b, &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 5) << "could not get bucket info for bucket=" << bucket_name << dendl;
     return;
@@ -541,7 +541,7 @@ void RGWOp_BILog_Info::execute(optional_yield y) {
     b.name = bn;
     b.bucket_id = bucket_instance;
   }
-  op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
+  op_ret = driver->load_bucket(s, b, &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 5) << "could not get bucket info for bucket=" << bucket_name << dendl;
     return;
@@ -635,7 +635,7 @@ void RGWOp_BILog_Delete::execute(optional_yield y) {
     b.name = bn;
     b.bucket_id = bucket_instance;
   }
-  op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
+  op_ret = driver->load_bucket(s, b, &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 5) << "could not get bucket info for bucket=" << bucket_name << dendl;
     return;
@@ -985,7 +985,7 @@ void RGWOp_BILog_Status::execute(optional_yield y)
 
   // read the bucket instance info for num_shards
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  op_ret = driver->load_bucket(s, nullptr, b, &bucket, y);
+  op_ret = driver->load_bucket(s, b, &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 4) << "failed to read bucket info: " << cpp_strerror(op_ret) << dendl;
     return;
@@ -1069,7 +1069,7 @@ void RGWOp_BILog_Status::execute(optional_yield y)
     if (*pipe.dest.bucket != pinfo->bucket) {
       opt_dest_info.emplace();
       std::unique_ptr<rgw::sal::Bucket> dest_bucket;
-      op_ret = driver->load_bucket(s, nullptr, *pipe.dest.bucket, &dest_bucket, y);
+      op_ret = driver->load_bucket(s, *pipe.dest.bucket, &dest_bucket, y);
       if (op_ret < 0) {
         ldpp_dout(this, 4) << "failed to read target bucket info (bucket=: " << cpp_strerror(op_ret) << dendl;
         return;
index 08722cc24b519ffe27e8c23488a7af10bb17eb5d..ed6e2525ac2b818c311242bc676e7ff351d57e62 100644 (file)
@@ -124,15 +124,12 @@ int RadosBucket::create(const DoutPrefixProvider* dpp,
                         const CreateParams& params,
                         optional_yield y)
 {
-  ceph_assert(owner);
-  const rgw_user& owner_id = owner->get_id();
-
   rgw_bucket key = get_key();
   key.marker = params.marker;
   key.bucket_id = params.bucket_id;
 
   int ret = store->getRados()->create_bucket(
-      dpp, y, key, owner_id, params.zonegroup_id,
+      dpp, y, key, params.owner, params.zonegroup_id,
       params.placement_rule, params.zone_placement, params.attrs,
       params.obj_lock_enabled, params.swift_ver_location,
       params.quota, params.creation_time, &bucket_version, info);
@@ -146,7 +143,7 @@ int RadosBucket::create(const DoutPrefixProvider* dpp,
      * If all is ok then update the user's list of buckets.  Otherwise inform
      * client about a name conflict.
      */
-    if (info.owner != owner_id) {
+    if (info.owner != params.owner) {
       return -ERR_BUCKET_EXISTS;
     }
     ret = 0;
@@ -154,10 +151,10 @@ int RadosBucket::create(const DoutPrefixProvider* dpp,
     return ret;
   }
 
-  ret = link(dpp, owner, y, false);
+  ret = link(dpp, params.owner, y, false);
   if (ret && !existed && ret != -EEXIST) {
     /* if it exists (or previously existed), don't remove it! */
-    ret = unlink(dpp, owner, y);
+    ret = unlink(dpp, params.owner, y);
     if (ret < 0) {
       ldpp_dout(dpp, 0) << "WARNING: failed to unlink bucket: ret=" << ret
                       << dendl;
@@ -542,7 +539,7 @@ int RadosBucket::read_stats_async(const DoutPrefixProvider *dpp,
 int RadosBucket::sync_user_stats(const DoutPrefixProvider *dpp, optional_yield y,
                                  RGWBucketEnt* ent)
 {
-  return store->ctl()->bucket->sync_user_stats(dpp, owner->get_id(), info, y, ent);
+  return store->ctl()->bucket->sync_user_stats(dpp, info.owner, info, y, ent);
 }
 
 int RadosBucket::check_bucket_shards(const DoutPrefixProvider* dpp,
@@ -551,17 +548,17 @@ int RadosBucket::check_bucket_shards(const DoutPrefixProvider* dpp,
   return store->getRados()->check_bucket_shards(info, num_objs, dpp, y);
 }
 
-int RadosBucket::link(const DoutPrefixProvider* dpp, User* new_user, optional_yield y, bool update_entrypoint, RGWObjVersionTracker* objv)
+int RadosBucket::link(const DoutPrefixProvider* dpp, const rgw_user& new_user, optional_yield y, bool update_entrypoint, RGWObjVersionTracker* objv)
 {
   RGWBucketEntryPoint ep;
   ep.bucket = info.bucket;
-  ep.owner = new_user->get_id();
+  ep.owner = new_user;
   ep.creation_time = get_creation_time();
   ep.linked = true;
   Attrs ep_attrs;
   rgw_ep_info ep_data{ep, ep_attrs};
 
-  int r = store->ctl()->bucket->link_bucket(new_user->get_id(), info.bucket,
+  int r = store->ctl()->bucket->link_bucket(new_user, info.bucket,
                                            get_creation_time(), y, dpp, update_entrypoint,
                                            &ep_data);
   if (r < 0)
@@ -573,27 +570,20 @@ int RadosBucket::link(const DoutPrefixProvider* dpp, User* new_user, optional_yi
   return r;
 }
 
-int RadosBucket::unlink(const DoutPrefixProvider* dpp, User* new_user, optional_yield y, bool update_entrypoint)
+int RadosBucket::unlink(const DoutPrefixProvider* dpp, const rgw_user& owner, optional_yield y, bool update_entrypoint)
 {
-  return store->ctl()->bucket->unlink_bucket(new_user->get_id(), info.bucket, y, dpp, update_entrypoint);
+  return store->ctl()->bucket->unlink_bucket(owner, info.bucket, y, dpp, update_entrypoint);
 }
 
-int RadosBucket::chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y)
+int RadosBucket::chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y)
 {
   std::string obj_marker;
-  int r;
-
-  if (!owner) {
-      ldpp_dout(dpp, 0) << __func__ << " Cannot chown without an owner " << dendl;
-      return -EINVAL;
-  }
-
-  r = this->unlink(dpp, owner, y);
+  int r = this->unlink(dpp, info.owner, y);
   if (r < 0) {
     return r;
   }
 
-  return this->link(dpp, &new_user, y);
+  return this->link(dpp, new_owner, y);
 }
 
 int RadosBucket::put_info(const DoutPrefixProvider* dpp, bool exclusive, ceph::real_time _mtime, optional_yield y)
@@ -633,14 +623,14 @@ int RadosBucket::read_usage(const DoutPrefixProvider *dpp, uint64_t start_epoch,
                               RGWUsageIter& usage_iter,
                               map<rgw_user_bucket, rgw_usage_log_entry>& usage)
 {
-  return store->getRados()->read_usage(dpp, owner->get_id(), get_name(), start_epoch,
+  return store->getRados()->read_usage(dpp, info.owner, get_name(), start_epoch,
                                       end_epoch, max_entries, is_truncated,
                                       usage_iter, usage);
 }
 
 int RadosBucket::trim_usage(const DoutPrefixProvider *dpp, uint64_t start_epoch, uint64_t end_epoch, optional_yield y)
 {
-  return store->getRados()->trim_usage(dpp, owner->get_id(), get_name(), start_epoch, end_epoch, y);
+  return store->getRados()->trim_usage(dpp, info.owner, get_name(), start_epoch, end_epoch, y);
 }
 
 int RadosBucket::remove_objs_from_index(const DoutPrefixProvider *dpp, std::list<rgw_obj_index_key>& objs_to_unlink)
@@ -987,16 +977,16 @@ std::unique_ptr<Object> RadosStore::get_object(const rgw_obj_key& k)
   return std::make_unique<RadosObject>(this, k);
 }
 
-std::unique_ptr<Bucket> RadosStore::get_bucket(User* u, const RGWBucketInfo& i)
+std::unique_ptr<Bucket> RadosStore::get_bucket(const RGWBucketInfo& i)
 {
   /* Don't need to fetch the bucket info, use the provided one */
-  return std::make_unique<RadosBucket>(this, i, u);
+  return std::make_unique<RadosBucket>(this, i);
 }
 
-int RadosStore::load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b,
+int RadosStore::load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
                             std::unique_ptr<Bucket>* bucket, optional_yield y)
 {
-  *bucket = std::make_unique<RadosBucket>(this, b, u);
+  *bucket = std::make_unique<RadosBucket>(this, b);
   return (*bucket)->load_bucket(dpp, y);
 }
 
@@ -2102,7 +2092,7 @@ int RadosObject::swift_versioning_restore(bool& restored,
 {
   rgw_obj obj = get_obj();
   return store->getRados()->swift_versioning_restore(*rados_ctx,
-                                                    bucket->get_owner()->get_id(),
+                                                    bucket->get_owner(),
                                                     bucket->get_info(),
                                                     obj,
                                                     restored,
index c67d23289ed28b6cc4063d3739b3423b65ffe6a7..7efd7757c3c4b8e011c0b3731cb4109eac14589c 100644 (file)
@@ -135,8 +135,8 @@ class RadosStore : public StoreDriver {
     virtual int get_user_by_email(const DoutPrefixProvider* dpp, const std::string& email, optional_yield y, std::unique_ptr<User>* user) override;
     virtual int get_user_by_swift(const DoutPrefixProvider* dpp, const std::string& user_str, optional_yield y, std::unique_ptr<User>* user) override;
     virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
-    std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
-    int load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b,
+    std::unique_ptr<Bucket> get_bucket(const RGWBucketInfo& i) override;
+    int load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
                     std::unique_ptr<Bucket>* bucket, optional_yield y) override;
     virtual bool is_meta_master() override;
     virtual Zone* get_zone() { return zone.get(); }
@@ -479,12 +479,6 @@ class RadosBucket : public StoreBucket {
         acls() {
     }
 
-    RadosBucket(RadosStore *_st, User* _u)
-      : StoreBucket(_u),
-       store(_st),
-        acls() {
-    }
-
     RadosBucket(RadosStore *_st, const rgw_bucket& _b)
       : StoreBucket(_b),
        store(_st),
@@ -497,18 +491,6 @@ class RadosBucket : public StoreBucket {
         acls() {
     }
 
-    RadosBucket(RadosStore *_st, const rgw_bucket& _b, User* _u)
-      : StoreBucket(_b, _u),
-       store(_st),
-        acls() {
-    }
-
-    RadosBucket(RadosStore *_st, const RGWBucketInfo& _i, User* _u)
-      : StoreBucket(_i, _u),
-       store(_st),
-        acls() {
-    }
-
     virtual ~RadosBucket();
     virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
     virtual int list(const DoutPrefixProvider* dpp, ListParams&, int, ListResults&, optional_yield y) override;
@@ -535,7 +517,7 @@ class RadosBucket : public StoreBucket {
                         RGWBucketEnt* ent) override;
     int check_bucket_shards(const DoutPrefixProvider* dpp, uint64_t num_objs,
                             optional_yield y) override;
-    virtual int chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y) override;
+    virtual int chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y) override;
     virtual int put_info(const DoutPrefixProvider* dpp, bool exclusive, ceph::real_time mtime, optional_yield y) override;
     virtual int check_empty(const DoutPrefixProvider* dpp, optional_yield y) override;
     virtual int check_quota(const DoutPrefixProvider *dpp, RGWQuota& quota, uint64_t obj_size, optional_yield y, bool check_size_only = false) override;
@@ -575,8 +557,8 @@ class RadosBucket : public StoreBucket {
         optional_yield y, const DoutPrefixProvider *dpp) override;
 
   private:
-    int link(const DoutPrefixProvider* dpp, User* new_user, optional_yield y, bool update_entrypoint = true, RGWObjVersionTracker* objv = nullptr);
-    int unlink(const DoutPrefixProvider* dpp, User* new_user, optional_yield y, bool update_entrypoint = true);
+    int link(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y, bool update_entrypoint = true, RGWObjVersionTracker* objv = nullptr);
+    int unlink(const DoutPrefixProvider* dpp, const rgw_user& owner, optional_yield y, bool update_entrypoint = true);
     friend class RadosUser;
 };
 
index 72a7da1c31de191e555aa4d1cc982a1d5cb31446..635e5ce887d09899b54e18b7f22f9ffede411265 100644 (file)
@@ -285,7 +285,7 @@ int RGWDataAccess::Bucket::finish_init()
 int RGWDataAccess::Bucket::init(const DoutPrefixProvider *dpp, optional_yield y)
 {
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  int ret = sd->driver->load_bucket(dpp, nullptr, rgw_bucket(tenant, name), &bucket, y);
+  int ret = sd->driver->load_bucket(dpp, rgw_bucket(tenant, name), &bucket, y);
   if (ret < 0) {
     return ret;
   }
@@ -327,7 +327,7 @@ int RGWDataAccess::Object::put(bufferlist& data,
 
   rgw::BlockingAioThrottle aio(driver->ctx()->_conf->rgw_put_obj_min_window_size);
 
-  std::unique_ptr<rgw::sal::Bucket> b = driver->get_bucket(nullptr, bucket_info);
+  std::unique_ptr<rgw::sal::Bucket> b = driver->get_bucket(bucket_info);
   std::unique_ptr<rgw::sal::Object> obj = b->get_object(key);
 
   auto& owner = bucket->policy.get_owner();
index c27be158c334727679c200329e2fbd1f00bbf43d..506ac0acf112206e599499411069ab9e832c05e5 100644 (file)
@@ -1579,7 +1579,7 @@ int RGWUser::execute_rename(const DoutPrefixProvider *dpp, RGWUserAdminOpState&
 
     for (const auto& ent : listing.buckets) {
       std::unique_ptr<rgw::sal::Bucket> bucket;
-      ret = driver->load_bucket(dpp, old_user.get(), ent.bucket, &bucket, y);
+      ret = driver->load_bucket(dpp, ent.bucket, &bucket, y);
       if (ret < 0) {
         set_err_msg(err_msg, "failed to fetch bucket info for bucket=" + bucket->get_name());
         return ret;
@@ -1785,7 +1785,7 @@ int RGWUser::execute_remove(const DoutPrefixProvider *dpp, RGWUserAdminOpState&
 
     for (const auto& ent : listing.buckets) {
       std::unique_ptr<rgw::sal::Bucket> bucket;
-      ret = driver->load_bucket(dpp, user, ent.bucket, &bucket, y);
+      ret = driver->load_bucket(dpp, ent.bucket, &bucket, y);
       if (ret < 0) {
         set_err_msg(err_msg, "unable to load bucket " + ent.bucket.name);
         return ret;
index 46aef1ee2d24f7d8c53b5806f0d452fcfb3e2ff2..d44e66c700cd66663a60179d5e46b39c35c227d6 100644 (file)
@@ -1189,20 +1189,19 @@ public:
   }
 };
 
-static int init_bucket(rgw::sal::User* user, const rgw_bucket& b,
+static int init_bucket(const rgw_bucket& b,
                        std::unique_ptr<rgw::sal::Bucket>* bucket)
 {
-  return driver->load_bucket(dpp(), user, b, bucket, null_yield);
+  return driver->load_bucket(dpp(), b, bucket, null_yield);
 }
 
-static int init_bucket(rgw::sal::User* user,
-                      const string& tenant_name,
+static int init_bucket(const string& tenant_name,
                       const string& bucket_name,
                       const string& bucket_id,
                        std::unique_ptr<rgw::sal::Bucket>* bucket)
 {
   rgw_bucket b{tenant_name, bucket_name, bucket_id};
-  return init_bucket(user, b, bucket);
+  return init_bucket(b, bucket);
 }
 
 static int read_input(const string& infile, bufferlist& bl)
@@ -1407,8 +1406,7 @@ int set_bucket_quota(rgw::sal::Driver* driver, OPT opt_cmd,
                      bool have_max_size, bool have_max_objects)
 {
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  int r = driver->load_bucket(dpp(), nullptr,
-                              rgw_bucket(tenant_name, bucket_name),
+  int r = driver->load_bucket(dpp(), rgw_bucket(tenant_name, bucket_name),
                               &bucket, null_yield);
   if (r < 0) {
     cerr << "could not get bucket info for bucket=" << bucket_name << ": " << cpp_strerror(-r) << std::endl;
@@ -1433,8 +1431,7 @@ int set_bucket_ratelimit(rgw::sal::Driver* driver, OPT opt_cmd,
                      bool have_max_read_bytes, bool have_max_write_bytes)
 {
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  int r = driver->load_bucket(dpp(), nullptr,
-                              rgw_bucket(tenant_name, bucket_name),
+  int r = driver->load_bucket(dpp(), rgw_bucket(tenant_name, bucket_name),
                               &bucket, null_yield);
   if (r < 0) {
     cerr << "could not get bucket info for bucket=" << bucket_name << ": " << cpp_strerror(-r) << std::endl;
@@ -1538,8 +1535,7 @@ int show_bucket_ratelimit(rgw::sal::Driver* driver, const string& tenant_name,
                           const string& bucket_name, Formatter *formatter)
 {
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  int r = driver->load_bucket(dpp(), nullptr,
-                              rgw_bucket(tenant_name, bucket_name),
+  int r = driver->load_bucket(dpp(), rgw_bucket(tenant_name, bucket_name),
                               &bucket, null_yield);
   if (r < 0) {
     cerr << "could not get bucket info for bucket=" << bucket_name << ": " << cpp_strerror(-r) << std::endl;
@@ -1724,7 +1720,7 @@ int do_check_object_locator(const string& tenant_name, const string& bucket_name
 
   f->open_object_section("bucket");
   f->dump_string("bucket", bucket_name);
-  int ret = init_bucket(nullptr, tenant_name, bucket_name, bucket_id, &bucket);
+  int ret = init_bucket(tenant_name, bucket_name, bucket_id, &bucket);
   if (ret < 0) {
     cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
     return ret;
@@ -2041,12 +2037,11 @@ static int update_period(rgw::sal::ConfigStore* cfgstore,
   return 0;
 }
 
-static int init_bucket_for_sync(rgw::sal::User* user,
-                               const string& tenant, const string& bucket_name,
+static int init_bucket_for_sync(const string& tenant, const string& bucket_name,
                                 const string& bucket_id,
                                std::unique_ptr<rgw::sal::Bucket>* bucket)
 {
-  int ret = init_bucket(user, tenant, bucket_name, bucket_id, bucket);
+  int ret = init_bucket(tenant, bucket_name, bucket_id, bucket);
   if (ret < 0) {
     cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
     return ret;
@@ -2522,7 +2517,7 @@ static int bucket_source_sync_status(const DoutPrefixProvider *dpp, rgw::sal::Ra
   }
 
   std::unique_ptr<rgw::sal::Bucket> source_bucket;
-  int r = init_bucket(nullptr, *pipe.source.bucket, &source_bucket);
+  int r = init_bucket(*pipe.source.bucket, &source_bucket);
   if (r < 0) {
     ldpp_dout(dpp, -1) << "failed to read source bucket info: " << cpp_strerror(r) << dendl;
     return r;
@@ -2651,7 +2646,7 @@ static void get_hint_entities(const std::set<rgw_zone_id>& zones, const std::set
   for (auto& zone_id : zones) {
     for (auto& b : buckets) {
       std::unique_ptr<rgw::sal::Bucket> hint_bucket;
-      int ret = init_bucket(nullptr, b, &hint_bucket);
+      int ret = init_bucket(b, &hint_bucket);
       if (ret < 0) {
        ldpp_dout(dpp(), 20) << "could not init bucket info for hint bucket=" << b << " ... skipping" << dendl;
        continue;
@@ -2694,7 +2689,7 @@ static int sync_info(std::optional<rgw_zone_id> opt_target_zone, std::optional<r
   if (eff_bucket) {
     std::unique_ptr<rgw::sal::Bucket> bucket;
 
-    int ret = init_bucket(nullptr, *eff_bucket, &bucket);
+    int ret = init_bucket(*eff_bucket, &bucket);
     if (ret < 0 && ret != -ENOENT) {
       cerr << "ERROR: init_bucket failed: " << cpp_strerror(-ret) << std::endl;
       return ret;
@@ -2998,7 +2993,7 @@ int check_reshard_bucket_params(rgw::sal::Driver* driver,
     return -EINVAL;
   }
 
-  int ret = init_bucket(nullptr, tenant, bucket_name, bucket_id, bucket);
+  int ret = init_bucket(tenant, bucket_name, bucket_id, bucket);
   if (ret < 0) {
     cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
     return ret;
@@ -3181,7 +3176,7 @@ public:
       return 0;
     }
 
-    ret = init_bucket(nullptr, *b, &bucket);
+    ret = init_bucket(*b, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return ret;
@@ -7020,7 +7015,7 @@ int main(int argc, const char **argv)
       bucket_op.marker = marker;
       RGWBucketAdminOp::info(driver, bucket_op, stream_flusher, null_yield, dpp());
     } else {
-      int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+      int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
       if (ret < 0) {
         cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
         return -ret;
@@ -7113,7 +7108,7 @@ int main(int argc, const char **argv)
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -7227,7 +7222,7 @@ int main(int argc, const char **argv)
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -7435,7 +7430,7 @@ next:
 
 
     if (!bucket_name.empty()) {
-      int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+      int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
       if (ret < 0) {
        cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
        return -ret;
@@ -7479,7 +7474,7 @@ next:
     }
 
     if (!bucket_name.empty()) {
-      int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+      int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
       if (ret < 0) {
        cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
        return -ret;
@@ -7518,7 +7513,7 @@ next:
   }
 
   if (opt_cmd == OPT::OLH_GET) {
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -7535,7 +7530,7 @@ next:
   }
 
   if (opt_cmd == OPT::OLH_READLOG) {
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -7573,7 +7568,7 @@ next:
       cerr << "ERROR: object not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -7599,7 +7594,7 @@ next:
       cerr << "ERROR: bucket name not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -7627,7 +7622,7 @@ next:
       return EINVAL;
     }
 
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       ldpp_dout(dpp(), 0) << "ERROR: could not init bucket: " << cpp_strerror(-ret) <<
        dendl;
@@ -7697,14 +7692,14 @@ next:
       cerr << "ERROR: bucket name not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
     }
 
     std::unique_ptr<rgw::sal::Bucket> cur_bucket;
-    ret = init_bucket(user.get(), tenant, bucket_name, string(), &cur_bucket);
+    ret = init_bucket(tenant, bucket_name, string(), &cur_bucket);
     if (ret == -ENOENT) {
       // no bucket entrypoint
     } else if (ret < 0) {
@@ -7782,7 +7777,7 @@ next:
   }
 
   if (opt_cmd == OPT::OBJECT_RM) {
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -7806,7 +7801,7 @@ next:
       return EINVAL;
     }
 
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -7849,7 +7844,7 @@ next:
       return EINVAL;
     }
 
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) <<
        "." << std::endl;
@@ -7942,7 +7937,7 @@ next:
       return EINVAL;
     }
 
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -8184,7 +8179,7 @@ next:
       return EINVAL;
     }
 
-    ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -8221,7 +8216,7 @@ next:
     }
 
     bool bucket_initable = true;
-    ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       if (yes_i_really_mean_it) {
         bucket_initable = false;
@@ -8283,7 +8278,7 @@ next:
   } // OPT_RESHARD_CANCEL
 
   if (opt_cmd == OPT::OBJECT_UNLINK) {
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -8303,7 +8298,7 @@ next:
   }
 
   if (opt_cmd == OPT::OBJECT_STAT) {
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -8509,7 +8504,7 @@ next:
     }
 
     RGWLifecycleConfiguration config;
-    ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -8535,7 +8530,7 @@ next:
   if (opt_cmd == OPT::LC_PROCESS) {
     if ((! bucket_name.empty()) ||
        (! bucket_id.empty())) {
-        int ret = init_bucket(nullptr, tenant, bucket_name, bucket_id, &bucket);
+        int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
        if (ret < 0) {
          cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret)
               << std::endl;
@@ -8696,7 +8691,7 @@ next:
 
     if (sync_stats) {
       if (!bucket_name.empty()) {
-        int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+        int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
         if (ret < 0) {
           cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
           return -ret;
@@ -9219,7 +9214,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket_for_sync(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket_for_sync(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -9227,7 +9222,7 @@ next:
     if (opt_sb && opt_sb->bucket_id.empty()) {
       string sbid;
       std::unique_ptr<rgw::sal::Bucket> sbuck;
-      int ret = init_bucket_for_sync(user.get(), opt_sb->tenant, opt_sb->name, sbid, &sbuck);
+      int ret = init_bucket_for_sync(opt_sb->tenant, opt_sb->name, sbid, &sbuck);
       if (ret < 0) {
         return -ret;
       }
@@ -9258,7 +9253,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -9310,7 +9305,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -9322,7 +9317,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -9338,7 +9333,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket_for_sync(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket_for_sync(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -9371,7 +9366,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket_for_sync(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket_for_sync(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       return -ret;
     }
@@ -9396,7 +9391,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -9906,7 +9901,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -9929,7 +9924,7 @@ next:
       cerr << "ERROR: bucket not specified" << std::endl;
       return EINVAL;
     }
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -10514,7 +10509,7 @@ next:
     RGWPubSub ps(driver, tenant);
 
     rgw_pubsub_bucket_topics result;
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -10581,7 +10576,7 @@ next:
       return EINVAL;
     }
 
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
@@ -10635,7 +10630,7 @@ next:
       return EINVAL;
     }
 
-    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    int ret = init_bucket(tenant, bucket_name, bucket_id, &bucket);
     if (ret < 0) {
       cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
       return -ret;
index 852469b7eac93e4b459cda37c2a47bea0b61a225..93cd2ea76349315d14da513b464181388c3f2bf5 100644 (file)
@@ -137,7 +137,7 @@ int rgw_chown_bucket_and_objects(rgw::sal::Driver* driver, rgw::sal::Bucket* buc
                                 const DoutPrefixProvider *dpp, optional_yield y)
 {
   /* Chown on the bucket */
-  int ret = bucket->chown(dpp, *new_user, y);
+  int ret = bucket->chown(dpp, new_user->get_id(), y);
   if (ret < 0) {
     set_err_msg(err_msg, "Failed to change object ownership: " + cpp_strerror(-ret));
   }
index ca8330c396244fbbe0eee7a1cd024054e7800bf9..978f9736b8ebf3bca0a93d54b3f72b5bcb68b92b 100644 (file)
@@ -1331,17 +1331,8 @@ public:
 
     /* notifications */
     auto& bucket = oc.bucket;
-    auto& bucket_info = oc.bucket->get_info();
     std::string version_id;
 
-    std::unique_ptr<rgw::sal::User> user;
-    user = oc.driver->get_user(bucket_info.owner);
-    if (! bucket->get_owner()) {
-      if (user) {
-       bucket->set_owner(user.get());
-      }
-    }
-
     auto& obj = oc.obj;
 
     const auto event_type = (bucket->versioned() &&
@@ -1619,8 +1610,7 @@ int RGWLC::bucket_lc_process(string& shard_id, LCWorker* worker,
     return 0;
   }
 
-  int ret = driver->load_bucket(this, nullptr,
-                                rgw_bucket(bucket_tenant, bucket_name),
+  int ret = driver->load_bucket(this, rgw_bucket(bucket_tenant, bucket_name),
                                 &bucket, null_yield);
   if (ret < 0) {
     ldpp_dout(this, 0) << "LC:get_bucket for " << bucket_name
@@ -1628,13 +1618,6 @@ int RGWLC::bucket_lc_process(string& shard_id, LCWorker* worker,
     return ret;
   }
 
-  ret = bucket->load_bucket(this, null_yield);
-  if (ret < 0) {
-    ldpp_dout(this, 0) << "LC:load_bucket for " << bucket_name
-                      << " failed" << dendl;
-    return ret;
-  }
-
   auto stack_guard = make_scope_guard(
     [&worker]
       {
@@ -1757,15 +1740,6 @@ int RGWLC::bucket_lc_process(string& shard_id, LCWorker* worker,
     worker->workpool->drain();
   }
 
-  std::unique_ptr<rgw::sal::User> user;
-  if (! bucket->get_owner()) {
-    auto& bucket_info = bucket->get_info();
-    std::unique_ptr<rgw::sal::User> user = driver->get_user(bucket_info.owner);
-      if (user) {
-       bucket->set_owner(user.get());
-      }
-  }
-
   ret = handle_multipart_expiration(bucket.get(), prefix_map, worker, stop_at, once);
   return ret;
 }
index 058384929b3cb5bf93cede6639a0f34f37bc46e4..cb819deff14c3277f1427000402568d8f3649083 100644 (file)
@@ -305,7 +305,7 @@ struct BucketMetaTable : public EmptyMetaTable {
       create_metatable<PlacementRuleMetaTable>(L, name, index, false, &(bucket->get_info().placement_rule));
     } else if (strcasecmp(index, "User") == 0) {
       create_metatable<UserMetaTable>(L, name, index, false, 
-          const_cast<rgw_user*>(&bucket->get_owner()->get_id()));
+          const_cast<rgw_user*>(&bucket->get_owner()));
     } else {
       return error_unknown_field(L, index, name);
     }
index 00715db9219d1251670f821dcb45381b94119319..dc802b4c4528768b0dafadbfa0d5610fb6464994 100644 (file)
@@ -533,8 +533,8 @@ int rgw_build_bucket_policies(const DoutPrefixProvider *dpp, rgw::sal::Driver* d
   /* check if copy source is within the current domain */
   if (!s->src_bucket_name.empty()) {
     std::unique_ptr<rgw::sal::Bucket> src_bucket;
-    ret = driver->load_bucket(dpp, nullptr,
-                              rgw_bucket(s->src_tenant_name, s->src_bucket_name),
+    ret = driver->load_bucket(dpp, rgw_bucket(s->src_tenant_name,
+                                              s->src_bucket_name),
                               &src_bucket, y);
     if (ret == 0) {
       s->local_source = zonegroup.equals(src_bucket->get_info().zonegroup);
@@ -554,9 +554,8 @@ int rgw_build_bucket_policies(const DoutPrefixProvider *dpp, rgw::sal::Driver* d
 
     /* This is the only place that s->bucket is created.  It should never be
      * overwritten. */
-    ret = driver->load_bucket(dpp, s->user.get(),
-                              rgw_bucket(s->bucket_tenant, s->bucket_name,
-                                         s->bucket_instance_id),
+    ret = driver->load_bucket(dpp, rgw_bucket(s->bucket_tenant, s->bucket_name,
+                                              s->bucket_instance_id),
                               &s->bucket, y);
     if (ret < 0) {
       if (ret != -ENOENT) {
@@ -1976,8 +1975,7 @@ int RGWGetObj::handle_user_manifest(const char *prefix, optional_yield y)
 
   if (bucket_name.compare(s->bucket->get_name()) != 0) {
     map<string, bufferlist> bucket_attrs;
-    r = driver->load_bucket(this, s->user.get(),
-                            rgw_bucket(s->user->get_tenant(), bucket_name),
+    r = driver->load_bucket(this, rgw_bucket(s->user->get_tenant(), bucket_name),
                             &ubucket, y);
     if (r < 0) {
       ldpp_dout(this, 0) << "could not get bucket info for bucket="
@@ -2108,8 +2106,8 @@ int RGWGetObj::handle_slo_manifest(bufferlist& bl, optional_yield y)
        RGWAccessControlPolicy& _bucket_acl = allocated_acls.back();
 
        std::unique_ptr<rgw::sal::Bucket> tmp_bucket;
-       int r = driver->load_bucket(this, s->user.get(),
-                                    rgw_bucket(s->user->get_tenant(), bucket_name),
+       int r = driver->load_bucket(this, rgw_bucket(s->user->get_tenant(),
+                                                     bucket_name),
                                     &tmp_bucket, y);
         if (r < 0) {
           ldpp_dout(this, 0) << "could not get bucket info for bucket="
@@ -3019,7 +3017,7 @@ void RGWStatBucket::execute(optional_yield y)
     return;
   }
 
-  op_ret = driver->load_bucket(this, s->user.get(), s->bucket->get_key(), &bucket, y);
+  op_ret = driver->load_bucket(this, s->bucket->get_key(), &bucket, y);
   if (op_ret) {
     return;
   }
@@ -3488,8 +3486,7 @@ void RGWCreateBucket::execute(optional_yield y)
   }
 
   // read the bucket info if it exists
-  op_ret = driver->load_bucket(this, s->user.get(),
-                               rgw_bucket(s->bucket_tenant, s->bucket_name),
+  op_ret = driver->load_bucket(this, rgw_bucket(s->bucket_tenant, s->bucket_name),
                                &s->bucket, y);
   if (op_ret < 0 && op_ret != -ENOENT)
     return;
@@ -3530,6 +3527,7 @@ void RGWCreateBucket::execute(optional_yield y)
 
   s->bucket_owner.set_id(s->user->get_id());
   s->bucket_owner.set_name(s->user->get_display_name());
+  createparams.owner = s->user->get_id();
 
   buffer::list aclbl;
   policy.encode(aclbl);
@@ -3610,7 +3608,7 @@ void RGWCreateBucket::execute(optional_yield y)
       op_ret = s->bucket->load_bucket(this, y);
       if (op_ret < 0) {
         return;
-      } else if (!s->bucket->is_owner(s->user.get())) {
+      } else if (s->bucket->get_owner() != s->user->get_id()) {
         /* New bucket doesn't belong to the account we're operating on. */
         op_ret = -EEXIST;
         return;
@@ -3789,23 +3787,16 @@ int RGWPutObj::init_processing(optional_yield y) {
       }
     }
     std::unique_ptr<rgw::sal::Bucket> bucket;
-    ret = driver->load_bucket(this, s->user.get(),
-                              rgw_bucket(copy_source_tenant_name,
-                                         copy_source_bucket_name),
+    ret = driver->load_bucket(this, rgw_bucket(copy_source_tenant_name,
+                                               copy_source_bucket_name),
                               &bucket, y);
     if (ret < 0) {
-      ldpp_dout(this, 5) << __func__ << "(): get_bucket() returned ret=" << ret << dendl;
+      ldpp_dout(this, 5) << __func__ << "(): load_bucket() returned ret=" << ret << dendl;
       if (ret == -ENOENT) {
         ret = -ERR_NO_SUCH_BUCKET;
       }
       return ret;
     }
-
-    ret = bucket->load_bucket(this, y);
-    if (ret < 0) {
-      ldpp_dout(this, 5) << __func__ << "(): load_bucket() returned ret=" << ret << dendl;
-      return ret;
-    }
     copy_source_bucket_info = bucket->get_info();
 
     /* handle x-amz-copy-source-range */
@@ -3853,7 +3844,7 @@ int RGWPutObj::verify_permission(optional_yield y)
     RGWAccessControlPolicy cs_acl(s->cct);
     boost::optional<Policy> policy;
     map<string, bufferlist> cs_attrs;
-    auto cs_bucket = driver->get_bucket(nullptr, copy_source_bucket_info);
+    auto cs_bucket = driver->get_bucket(copy_source_bucket_info);
     auto cs_object = cs_bucket->get_object(rgw_obj_key(copy_source_object_name,
                                                        copy_source_version_id));
     cs_object->set_atomic();
@@ -4039,7 +4030,7 @@ int RGWPutObj::get_data(const off_t fst, const off_t lst, bufferlist& bl)
   new_ofs = fst;
   new_end = lst;
 
-  auto bucket = driver->get_bucket(nullptr, copy_source_bucket_info);
+  auto bucket = driver->get_bucket(copy_source_bucket_info);
   auto obj = bucket->get_object(rgw_obj_key(copy_source_object_name,
                                             copy_source_version_id));
   auto read_op = obj->get_read_op();
@@ -4300,7 +4291,7 @@ void RGWPutObj::execute(optional_yield y)
     return;
   }
   if ((! copy_source.empty()) && !copy_source_range) {
-    auto bucket = driver->get_bucket(nullptr, copy_source_bucket_info);
+    auto bucket = driver->get_bucket(copy_source_bucket_info);
     auto obj = bucket->get_object(rgw_obj_key(copy_source_object_name,
                                               copy_source_version_id));
 
@@ -5474,9 +5465,8 @@ int RGWCopyObj::init_processing(optional_yield y)
     return op_ret;
   }
 
-  op_ret = driver->load_bucket(this, s->user.get(),
-                               rgw_bucket(s->src_tenant_name,
-                                          s->src_bucket_name),
+  op_ret = driver->load_bucket(this, rgw_bucket(s->src_tenant_name,
+                                                s->src_bucket_name),
                                &src_bucket, y);
   if (op_ret < 0) {
     if (op_ret == -ENOENT) {
@@ -7437,9 +7427,8 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path, optional_yie
   ACLOwner bowner;
   RGWObjVersionTracker ot;
 
-  int ret = driver->load_bucket(dpp, s->user.get(),
-                                rgw_bucket(s->user->get_tenant(),
-                                           path.bucket_name),
+  int ret = driver->load_bucket(dpp, rgw_bucket(s->user->get_tenant(),
+                                                path.bucket_name),
                                 &bucket, y);
   if (ret < 0) {
     goto binfo_fail;
@@ -7693,7 +7682,7 @@ int RGWBulkUploadOp::handle_dir(const std::string_view path, optional_yield y)
 
   // load the bucket
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  ret = driver->load_bucket(this, s->user.get(), new_bucket, &bucket, y);
+  ret = driver->load_bucket(this, new_bucket, &bucket, y);
 
   // return success if it exists
   if (ret != -ENOENT) {
@@ -7704,6 +7693,7 @@ int RGWBulkUploadOp::handle_dir(const std::string_view path, optional_yield y)
   const auto& zonegroup = s->penv.site->get_zonegroup();
 
   rgw::sal::Bucket::CreateParams createparams;
+  createparams.owner = s->user->get_id();
   createparams.zonegroup_id = zonegroup.id;
   createparams.placement_rule.storage_class = s->info.storage_class;
   op_ret = select_bucket_placement(this, zonegroup, s->user->get_info(),
@@ -7831,8 +7821,8 @@ int RGWBulkUploadOp::handle_file(const std::string_view path,
   std::unique_ptr<rgw::sal::Bucket> bucket;
   ACLOwner bowner;
 
-  op_ret = driver->load_bucket(this, s->user.get(),
-                               rgw_bucket(s->user->get_tenant(), bucket_name),
+  op_ret = driver->load_bucket(this, rgw_bucket(s->user->get_tenant(),
+                                                bucket_name),
                                &bucket, y);
   if (op_ret < 0) {
     if (op_ret == -ENOENT) {
index 8b9125f29067fc73f945f6076ae6275b89bff96a..b7dc562c721b9c89f955b659e2b41e0e2e93de95 100644 (file)
@@ -502,7 +502,7 @@ int RGWOrphanSearch::build_linked_oids_for_bucket(const DoutPrefixProvider *dpp,
   }
 
   std::unique_ptr<rgw::sal::Bucket> cur_bucket;
-  ret = store->load_bucket(dpp, nullptr, orphan_bucket, &cur_bucket, null_yield);
+  ret = store->load_bucket(dpp, orphan_bucket, &cur_bucket, null_yield);
   if (ret < 0) {
     if (ret == -ENOENT) {
       /* probably raced with bucket removal */
@@ -529,7 +529,7 @@ int RGWOrphanSearch::build_linked_oids_for_bucket(const DoutPrefixProvider *dpp,
   rgw_bucket b;
   rgw_bucket_parse_bucket_key(store->ctx(), bucket_instance_id, &b, nullptr);
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  ret = store->load_bucket(dpp, nullptr, b, &bucket, null_yield);
+  ret = store->load_bucket(dpp, b, &bucket, null_yield);
   if (ret < 0) {
     if (ret == -ENOENT) {
       /* probably raced with bucket removal */
@@ -1241,7 +1241,7 @@ int RGWRadosList::process_bucket(
        continue;
       }
 
-      auto bucket = store->get_bucket(nullptr, bucket_info);
+      auto bucket = store->get_bucket(bucket_info);
       // we need to do this in two cases below, so use a lambda
       auto do_stat_key =
        [&](const rgw_obj_key& key) -> int {
@@ -1388,7 +1388,7 @@ int RGWRadosList::run(const DoutPrefixProvider *dpp,
     bucket_process_map.erase(front);
 
     std::unique_ptr<rgw::sal::Bucket> bucket;
-    ret = store->load_bucket(dpp, nullptr, rgw_bucket(tenant_name, bucket_name),
+    ret = store->load_bucket(dpp, rgw_bucket(tenant_name, bucket_name),
                              &bucket, null_yield);
     if (ret == -ENOENT) {
       std::cerr << "WARNING: bucket " << bucket_name <<
@@ -1460,8 +1460,7 @@ int RGWRadosList::run(const DoutPrefixProvider *dpp,
   // initial bucket
 
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  ret = store->load_bucket(dpp, nullptr,
-                           rgw_bucket(tenant_name, start_bucket_name),
+  ret = store->load_bucket(dpp, rgw_bucket(tenant_name, start_bucket_name),
                            &bucket, null_yield);
   if (ret == -ENOENT) {
     // bucket deletion race?
index 3786ccd6729a1068b045e286e979d12e25a0ad1d..c2f300b1fdb8333bcf42959c2cadebff9d1c1f03 100644 (file)
@@ -265,7 +265,7 @@ int BucketAsyncRefreshHandler::init_fetch()
   std::unique_ptr<rgw::sal::Bucket> rbucket;
 
   const DoutPrefix dp(driver->ctx(), dout_subsys, "rgw bucket async refresh handler: ");
-  int r = driver->load_bucket(&dp, nullptr, bucket, &rbucket, null_yield);
+  int r = driver->load_bucket(&dp, bucket, &rbucket, null_yield);
   if (r < 0) {
     ldpp_dout(&dp, 0) << "could not get bucket info for bucket=" << bucket << " r=" << r << dendl;
     return r;
@@ -340,7 +340,7 @@ int RGWBucketStatsCache::fetch_stats_from_storage(const rgw_user& _u, const rgw_
   std::unique_ptr<rgw::sal::User> user = driver->get_user(_u);
   std::unique_ptr<rgw::sal::Bucket> bucket;
 
-  int r = driver->load_bucket(dpp, user.get(), _b, &bucket, y);
+  int r = driver->load_bucket(dpp, _b, &bucket, y);
   if (r < 0) {
     ldpp_dout(dpp, 0) << "could not get bucket info for bucket=" << _b << " r=" << r << dendl;
     return r;
@@ -613,7 +613,7 @@ int RGWUserStatsCache::sync_bucket(const rgw_user& _u, rgw_bucket& _b, optional_
   std::unique_ptr<rgw::sal::User> user = driver->get_user(_u);
   std::unique_ptr<rgw::sal::Bucket> bucket;
 
-  int r = driver->load_bucket(dpp, user.get(), _b, &bucket, y);
+  int r = driver->load_bucket(dpp, _b, &bucket, y);
   if (r < 0) {
     ldpp_dout(dpp, 0) << "could not get bucket info for bucket=" << _b << " r=" << r << dendl;
     return r;
index d2a1c72f3aa755baa4c7d0ce9bcc2dffdc158ab0..04f21d9b87d90d373d3619a4737efe3dc4fce415 100644 (file)
@@ -960,10 +960,8 @@ void RGWPSCreateNotifOp::execute(optional_yield y) {
     return;
   }
 
-  std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  op_ret = driver->load_bucket(this, user.get(),
-                               rgw_bucket(s->bucket_tenant, s->bucket_name),
+  op_ret = driver->load_bucket(this, rgw_bucket(s->bucket_tenant, s->bucket_name),
                                &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 1) << "failed to get bucket '" << 
@@ -1110,10 +1108,8 @@ void RGWPSDeleteNotifOp::execute(optional_yield y) {
     return;
   }
 
-  std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  op_ret = driver->load_bucket(this, user.get(),
-                               rgw_bucket(s->bucket_tenant, s->bucket_name),
+  op_ret = driver->load_bucket(this, rgw_bucket(s->bucket_tenant, s->bucket_name),
                                &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 1) << "failed to get bucket '" << 
@@ -1209,10 +1205,8 @@ void RGWPSListNotifsOp::execute(optional_yield y) {
     return;
   }
 
-  std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  op_ret = driver->load_bucket(this, user.get(),
-                               rgw_bucket(s->bucket_tenant, s->bucket_name),
+  op_ret = driver->load_bucket(this, rgw_bucket(s->bucket_tenant, s->bucket_name),
                                &bucket, y);
   if (op_ret < 0) {
     ldpp_dout(this, 1) << "failed to get bucket '" << 
index e5d1aabb1503dcb1be35bc9cbbaf2bb546e1b13d..3de8ca2618dc8779a99032ccda32fb168230b191 100644 (file)
@@ -36,8 +36,7 @@ void RGWOp_Ratelimit_Info::execute(optional_yield y)
 
   if (ratelimit_scope == "bucket" && !bucket_name.empty() && !global) {
     std::unique_ptr<rgw::sal::Bucket> bucket;
-    int r = driver->load_bucket(s, nullptr,
-                                rgw_bucket(tenant_name, bucket_name),
+    int r = driver->load_bucket(s, rgw_bucket(tenant_name, bucket_name),
                                 &bucket, y);
     if (r != 0) {
       op_ret = r;
@@ -275,8 +274,7 @@ void RGWOp_Ratelimit_Set::execute(optional_yield y)
   if (ratelimit_scope == "bucket" && !bucket_name.empty() && !global) {
     ldpp_dout(this, 0) << "getting bucket info" << dendl;
     std::unique_ptr<rgw::sal::Bucket> bucket;
-    op_ret = driver->load_bucket(this, nullptr,
-                                 rgw_bucket(tenant_name, bucket_name),
+    op_ret = driver->load_bucket(this, rgw_bucket(tenant_name, bucket_name),
                                  &bucket, y);
     if (op_ret) {
       ldpp_dout(this, 0) << "Error on getting bucket info" << dendl;
index 971b63e85d799114585f4f0933bb5132112f8b9d..6d56766d10eb72d1c8a1dc1388a0a91a0f5d1d61 100644 (file)
@@ -2343,7 +2343,7 @@ static void dump_bucket_metadata(req_state *s, rgw::sal::Bucket* bucket,
   dump_header(s, "X-RGW-Bytes-Used", static_cast<long long>(stats.size));
 
   // only bucket's owner is allowed to get the quota settings of the account
-  if (bucket->is_owner(s->user.get())) {
+  if (bucket->get_owner() == s->user->get_id()) {
     auto user_info = s->user->get_info();
     auto bucket_quota = s->bucket->get_info().quota; // bucket quota
     dump_header(s, "X-RGW-Quota-User-Size", static_cast<long long>(user_info.quota.user_quota.max_size));
index b941d4bb099253bc64f72c47434e01a0e9b37c2c..53815e11d1f2c6f159e32069b327abebe69ec321 100644 (file)
@@ -858,8 +858,7 @@ int RGWPutObj_ObjStore_SWIFT::update_slo_segment_size(rgw_slo_entry& entry) {
   std::unique_ptr<rgw::sal::Bucket> bucket;
 
   if (bucket_name.compare(s->bucket->get_name()) != 0) {
-    r = driver->load_bucket(s, s->user.get(),
-                            rgw_bucket(s->user->get_id().tenant, bucket_name),
+    r = driver->load_bucket(s, rgw_bucket(s->user->get_tenant(), bucket_name),
                             &bucket, s->yield);
     if (r < 0) {
       ldpp_dout(this, 0) << "could not get bucket info for bucket="
@@ -2123,8 +2122,7 @@ void RGWFormPost::get_owner_info(const req_state* const s,
 
   /* Need to get user info of bucket owner. */
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  int ret = driver->load_bucket(s, user.get(),
-                                rgw_bucket(bucket_tenant, bucket_name),
+  int ret = driver->load_bucket(s, rgw_bucket(bucket_tenant, bucket_name),
                                 &bucket, s->yield);
   if (ret < 0) {
     throw ret;
index 65b035c00727bc9b2273f74affe53b8114cb653b..806affa6f8835facb5689ca9fc1bff274954b2fc 100644 (file)
@@ -30,18 +30,19 @@ void RGWOp_Usage_Get::execute(optional_yield y) {
 
   string uid_str;
   string bucket_name;
+  string tenant;
   uint64_t start, end;
   bool show_entries;
   bool show_summary;
 
   RESTArgs::get_string(s, "uid", uid_str, &uid_str);
   RESTArgs::get_string(s, "bucket", bucket_name, &bucket_name);
+  RESTArgs::get_string(s, "tenant", "", &tenant);
   std::unique_ptr<rgw::sal::User> user = driver->get_user(rgw_user(uid_str));
   std::unique_ptr<rgw::sal::Bucket> bucket;
 
   if (!bucket_name.empty()) {
-    op_ret = driver->load_bucket(nullptr, user.get(),
-                                 rgw_bucket(std::string(), bucket_name),
+    op_ret = driver->load_bucket(this, rgw_bucket(tenant, bucket_name),
                                  &bucket, null_yield);
     if (op_ret < 0) {
       return;
@@ -84,16 +85,17 @@ public:
 void RGWOp_Usage_Delete::execute(optional_yield y) {
   string uid_str;
   string bucket_name;
+  string tenant;
   uint64_t start, end;
 
   RESTArgs::get_string(s, "uid", uid_str, &uid_str);
   RESTArgs::get_string(s, "bucket", bucket_name, &bucket_name);
+  RESTArgs::get_string(s, "tenant", "", &tenant);
   std::unique_ptr<rgw::sal::User> user = driver->get_user(rgw_user(uid_str));
   std::unique_ptr<rgw::sal::Bucket> bucket;
 
   if (!bucket_name.empty()) {
-    op_ret = driver->load_bucket(nullptr, user.get(),
-                                 rgw_bucket(std::string(), bucket_name),
+    op_ret = driver->load_bucket(this, rgw_bucket(tenant, bucket_name),
                                  &bucket, null_yield);
     if (op_ret < 0) {
       return;
index 2fb2ec98a06e2129a3091e5c486758c4981f6513..fc93fa10431f8b5f93b027125a2532118e27441e 100644 (file)
@@ -291,10 +291,10 @@ class Driver {
      * there is a Bucket, otherwise use the get_object() in the Bucket class. */
     virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) = 0;
     /** Get a Bucket by info.  Does not query the driver, just uses the give bucket info. */
-    virtual std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) = 0;
+    virtual std::unique_ptr<Bucket> get_bucket(const RGWBucketInfo& i) = 0;
     /** Load a Bucket by key.  Queries driver for bucket info.  On -ENOENT, the
      * bucket must still be allocated to support bucket->create(). */
-    virtual int load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b,
+    virtual int load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
                             std::unique_ptr<Bucket>* bucket, optional_yield y) = 0;
     /** For multisite, this driver is the zone's master */
     virtual bool is_meta_master() = 0;
@@ -647,11 +647,9 @@ class Bucket {
     /** Set the ACL for this bucket */
     virtual int set_acl(const DoutPrefixProvider* dpp, RGWAccessControlPolicy& acl, optional_yield y) = 0;
 
-    // XXXX hack
-    virtual void set_owner(rgw::sal::User* _owner) = 0;
-
     /// Input parameters for create().
     struct CreateParams {
+      rgw_user owner;
       std::string zonegroup_id;
       rgw_placement_rule placement_rule;
       // zone placement is optional on buckets created for another zonegroup
@@ -692,13 +690,11 @@ class Bucket {
                                     uint64_t num_objs, optional_yield y) = 0;
     /** Change the owner of this bucket in the backing store.  Current owner must be set.  Does not
      * change ownership of the objects in the bucket. */
-    virtual int chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y) = 0;
+    virtual int chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y) = 0;
     /** Store the cached bucket info into the backing store */
     virtual int put_info(const DoutPrefixProvider* dpp, bool exclusive, ceph::real_time mtime, optional_yield y) = 0;
-    /** Check to see if the given user is the owner of this bucket */
-    virtual bool is_owner(User* user) = 0;
     /** Get the owner of this bucket */
-    virtual User* get_owner(void) = 0;
+    virtual const rgw_user& get_owner() const = 0;
     /** Check in the backing store if this bucket is empty */
     virtual int check_empty(const DoutPrefixProvider* dpp, optional_yield y) = 0;
     /** Chec k if the given size fits within the quota */
index d406289f048888c954c345ddfab7ee91ee571048..6c8778b872383a395b77ebc2756ade46f52ed75b 100644 (file)
@@ -62,15 +62,12 @@ namespace rgw::sal {
                        const CreateParams& params,
                        optional_yield y)
   {
-    ceph_assert(owner);
-    const rgw_user& owner_id = owner->get_id();
-
     rgw_bucket key = get_key();
     key.marker = params.marker;
     key.bucket_id = params.bucket_id;
 
     /* XXX: We may not need to send all these params. Cleanup the unused ones */
-    return store->getDB()->create_bucket(dpp, owner_id, key,
+    return store->getDB()->create_bucket(dpp, params.owner, key,
         params.zonegroup_id, params.placement_rule, params.attrs,
         params.swift_ver_location, params.quota, params.creation_time,
         &bucket_version, info, y);
@@ -241,11 +238,11 @@ namespace rgw::sal {
     return 0;
   }
 
-  int DBBucket::chown(const DoutPrefixProvider *dpp, User& new_user, optional_yield y)
+  int DBBucket::chown(const DoutPrefixProvider *dpp, const rgw_user& new_owner, optional_yield y)
   {
     int ret;
 
-    ret = store->getDB()->update_bucket(dpp, "owner", info, false, &(new_user.get_id()), nullptr, nullptr, nullptr);
+    ret = store->getDB()->update_bucket(dpp, "owner", info, false, &new_owner, nullptr, nullptr, nullptr);
     return ret;
   }
 
@@ -1552,16 +1549,16 @@ namespace rgw::sal {
   }
 
 
-  std::unique_ptr<Bucket> DBStore::get_bucket(User* u, const RGWBucketInfo& i)
+  std::unique_ptr<Bucket> DBStore::get_bucket(const RGWBucketInfo& i)
   {
     /* Don't need to fetch the bucket info, use the provided one */
-    return std::make_unique<DBBucket>(this, i, u);
+    return std::make_unique<DBBucket>(this, i);
   }
 
-  int DBStore::load_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b,
+  int DBStore::load_bucket(const DoutPrefixProvider *dpp, const rgw_bucket& b,
                            std::unique_ptr<Bucket>* bucket, optional_yield y)
   {
-    *bucket = std::make_unique<DBBucket>(this, b, u);
+    *bucket = std::make_unique<DBBucket>(this, b);
     return (*bucket)->load_bucket(dpp, y);
   }
 
index 26a8dfbcafddf514da629769d2b28719f7fa3385..646ee23f8875065385004338b634b325db0687af 100644 (file)
@@ -121,12 +121,6 @@ protected:
         acls() {
         }
 
-      DBBucket(DBStore *_st, User* _u)
-        : StoreBucket(_u),
-        store(_st),
-        acls() {
-        }
-
       DBBucket(DBStore *_st, const rgw_bucket& _b)
         : StoreBucket(_b),
         store(_st),
@@ -139,18 +133,6 @@ protected:
         acls() {
         }
 
-      DBBucket(DBStore *_st, const rgw_bucket& _b, User* _u)
-        : StoreBucket(_b, _u),
-        store(_st),
-        acls() {
-        }
-
-      DBBucket(DBStore *_st, const RGWBucketInfo& _i, User* _u)
-        : StoreBucket(_i, _u),
-        store(_st),
-        acls() {
-        }
-
       ~DBBucket() { }
 
       virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
@@ -178,7 +160,7 @@ protected:
                           RGWBucketEnt* ent) override;
       int check_bucket_shards(const DoutPrefixProvider *dpp,
                               uint64_t num_objs, optional_yield y) override;
-      virtual int chown(const DoutPrefixProvider *dpp, User& new_user, optional_yield y) override;
+      virtual int chown(const DoutPrefixProvider *dpp, const rgw_user& new_owner, optional_yield y) override;
       virtual int put_info(const DoutPrefixProvider *dpp, bool exclusive, ceph::real_time mtime, optional_yield y) override;
       virtual int check_empty(const DoutPrefixProvider *dpp, optional_yield y) override;
       virtual int check_quota(const DoutPrefixProvider *dpp, RGWQuota& quota, uint64_t obj_size, optional_yield y, bool check_size_only = false) override;
@@ -763,8 +745,8 @@ public:
       virtual int get_user_by_swift(const DoutPrefixProvider *dpp, const std::string& user_str, optional_yield y, std::unique_ptr<User>* user) override;
       virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
       virtual std::string get_cluster_id(const DoutPrefixProvider* dpp, optional_yield y);
-      std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
-      int load_bucket(const DoutPrefixProvider *dpp, User* u, const rgw_bucket& b,
+      std::unique_ptr<Bucket> get_bucket(const RGWBucketInfo& i) override;
+      int load_bucket(const DoutPrefixProvider *dpp, const rgw_bucket& b,
                       std::unique_ptr<Bucket>* bucket, optional_yield y) override;
       virtual bool is_meta_master() override;
       virtual Zone* get_zone() { return &zone; }
index f3ee09fe0c988a4a6b5fcdcaf14f9c01bc83b483..b49c6887b62ec1589abc41e78b6f5a7f730565e3 100644 (file)
@@ -161,16 +161,17 @@ std::unique_ptr<Object> FilterDriver::get_object(const rgw_obj_key& k)
   return std::make_unique<FilterObject>(std::move(o));
 }
 
-std::unique_ptr<Bucket> FilterDriver::get_bucket(User* u, const RGWBucketInfo& i)
+std::unique_ptr<Bucket> FilterDriver::get_bucket(const RGWBucketInfo& i)
 {
-  return std::make_unique<FilterBucket>(next->get_bucket(nextUser(u), i), u);
+  return std::make_unique<FilterBucket>(next->get_bucket(i));
 }
 
-int FilterDriver::load_bucket(const DoutPrefixProvider* dpp, User* u, const rgw_bucket& b, std::unique_ptr<Bucket>* bucket, optional_yield y)
+int FilterDriver::load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
+                              std::unique_ptr<Bucket>* bucket, optional_yield y)
 {
   std::unique_ptr<Bucket> nb;
-  const int ret = next->load_bucket(dpp, nextUser(u), b, &nb, y);
-  *bucket = std::make_unique<FilterBucket>(std::move(nb), u);
+  const int ret = next->load_bucket(dpp, b, &nb, y);
+  *bucket = std::make_unique<FilterBucket>(std::move(nb));
   return ret;
 }
 
@@ -629,9 +630,9 @@ int FilterBucket::check_bucket_shards(const DoutPrefixProvider* dpp,
   return next->check_bucket_shards(dpp, num_objs, y);
 }
 
-int FilterBucket::chown(const DoutPrefixProvider* dpp, User& new_user, optional_yield y)
+int FilterBucket::chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner, optional_yield y)
 {
-  return next->chown(dpp, new_user, y);
+  return next->chown(dpp, new_owner, y);
 }
 
 int FilterBucket::put_info(const DoutPrefixProvider* dpp, bool exclusive,
@@ -640,9 +641,9 @@ int FilterBucket::put_info(const DoutPrefixProvider* dpp, bool exclusive,
   return next->put_info(dpp, exclusive, _mtime, y);
 }
 
-bool FilterBucket::is_owner(User* user)
+const rgw_user& FilterBucket::get_owner() const
 {
-  return next->is_owner(nextUser(user));
+  return next->get_owner();
 }
 
 int FilterBucket::check_empty(const DoutPrefixProvider* dpp, optional_yield y)
index 943170dd0820b7bcf4d461ba8a9652bd5a677d5f..239a80a646531a089bac43160e659f13330785f0 100644 (file)
@@ -157,10 +157,9 @@ public:
                                std::string& user_str, optional_yield y,
                                std::unique_ptr<User>* user) override;
   virtual std::unique_ptr<Object> get_object(const rgw_obj_key& k) override;
-  std::unique_ptr<Bucket> get_bucket(User* u, const RGWBucketInfo& i) override;
-  int load_bucket(const DoutPrefixProvider* dpp, User* u,
-                  const rgw_bucket& b, std::unique_ptr<Bucket>* bucket,
-                  optional_yield y) override;
+  std::unique_ptr<Bucket> get_bucket(const RGWBucketInfo& i) override;
+  int load_bucket(const DoutPrefixProvider* dpp, const rgw_bucket& b,
+                  std::unique_ptr<Bucket>* bucket, optional_yield y) override;
   virtual bool is_meta_master() override;
   virtual Zone* get_zone() override { return zone.get(); }
   virtual std::string zone_unique_id(uint64_t unique_num) override;
@@ -365,13 +364,10 @@ public:
 class FilterBucket : public Bucket {
 protected:
   std::unique_ptr<Bucket> next;
-private:
-  User* user;
 
 public:
 
-  FilterBucket(std::unique_ptr<Bucket> _next, User* _user) :
-    next(std::move(_next)), user(_user) {}
+  FilterBucket(std::unique_ptr<Bucket> _next) : next(std::move(_next)) {}
   virtual ~FilterBucket() = default;
 
   virtual std::unique_ptr<Object> get_object(const rgw_obj_key& key) override;
@@ -389,7 +385,6 @@ public:
   virtual int set_acl(const DoutPrefixProvider* dpp, RGWAccessControlPolicy& acl,
                      optional_yield y) override;
 
-  virtual void set_owner(rgw::sal::User* _owner) override { next->set_owner(_owner); }
   virtual int create(const DoutPrefixProvider* dpp,
                     const CreateParams& params,
                     optional_yield y) override;
@@ -407,12 +402,11 @@ public:
                       RGWBucketEnt* ent) override;
   int check_bucket_shards(const DoutPrefixProvider* dpp,
                           uint64_t num_objs, optional_yield y) override;
-  virtual int chown(const DoutPrefixProvider* dpp, User& new_user,
+  virtual int chown(const DoutPrefixProvider* dpp, const rgw_user& new_owner,
                    optional_yield y) override;
   virtual int put_info(const DoutPrefixProvider* dpp, bool exclusive,
                       ceph::real_time mtime, optional_yield y) override;
-  virtual bool is_owner(User* user) override;
-  virtual User* get_owner(void) override { return user; }
+  virtual const rgw_user& get_owner() const override;
   virtual int check_empty(const DoutPrefixProvider* dpp, optional_yield y) override;
   virtual int check_quota(const DoutPrefixProvider *dpp, RGWQuota& quota,
                          uint64_t obj_size, optional_yield y,
@@ -453,8 +447,7 @@ public:
   virtual bool versioning_enabled() override { return next->versioning_enabled(); }
 
   virtual std::unique_ptr<Bucket> clone() override {
-    std::unique_ptr<Bucket> nb = next->clone();
-    return std::make_unique<FilterBucket>(std::move(nb), user);
+    return std::make_unique<FilterBucket>(next->clone());
   }
 
   virtual std::unique_ptr<MultipartUpload> get_multipart_upload(
index 943830c77fe4dcca0e7a011f81d3f558127309ec..b1592413d782f4c5a283f8be3592572585563aff 100644 (file)
@@ -80,7 +80,6 @@ class StoreUser : public User {
 class StoreBucket : public Bucket {
   protected:
     RGWBucketInfo info;
-    User* owner = nullptr;
     Attrs attrs;
     obj_version bucket_version;
     ceph::real_time mtime;
@@ -88,22 +87,13 @@ class StoreBucket : public Bucket {
   public:
 
     StoreBucket() = default;
-    StoreBucket(User* u) : owner(u) { }
     StoreBucket(const rgw_bucket& b) { info.bucket = b; }
     StoreBucket(const RGWBucketInfo& i) : info(i) {}
-    StoreBucket(const rgw_bucket& b, User* u) : owner(u) { info.bucket = b; }
-    StoreBucket(const RGWBucketInfo& i, User* u) : info(i), owner(u) {}
     virtual ~StoreBucket() = default;
 
     virtual Attrs& get_attrs(void) override { return attrs; }
     virtual int set_attrs(Attrs a) override { attrs = a; return 0; }
-    virtual void set_owner(rgw::sal::User* _owner) override {
-      owner = _owner;
-      info.owner = owner->get_id();
-    }
-    virtual User* get_owner(void) override { return owner; };
-    /* Make sure to call get_bucket_info() if you need it first */
-    virtual bool is_owner(User* user) override { return (info.owner.compare(user->get_id()) == 0); }
+    virtual const rgw_user& get_owner() const override { return info.owner; };
     virtual bool empty() const override { return info.bucket.name.empty(); }
     virtual const std::string& get_name() const override { return info.bucket.name; }
     virtual const std::string& get_tenant() const override { return info.bucket.tenant; }
index 852449ad20f6dae3fa73ce4cc1dcc853a9bbfd77..b58f0b45d8e7be7863390195c3ad7ad0c41fb7ca 100644 (file)
@@ -119,7 +119,7 @@ void TempURLEngine::get_owner_info(const DoutPrefixProvider* dpp, const req_stat
   b.tenant = std::move(bucket_tenant);
   b.name = std::move(bucket_name);
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  int ret = driver->load_bucket(dpp, nullptr, b, &bucket, s->yield);
+  int ret = driver->load_bucket(dpp, b, &bucket, s->yield);
   if (ret < 0) {
     throw ret;
   }
index 1f88779d935d59e407fe94a7a7c048869a0e2985..02403e5f342e454511794490e612e72f39657308 100644 (file)
@@ -30,7 +30,7 @@ int rgw_user_sync_all_stats(const DoutPrefixProvider *dpp, rgw::sal::Driver* dri
 
     for (auto& ent : listing.buckets) {
       std::unique_ptr<rgw::sal::Bucket> bucket;
-      ret = driver->load_bucket(dpp, user, ent.bucket, &bucket, y);
+      ret = driver->load_bucket(dpp, ent.bucket, &bucket, y);
       if (ret < 0) {
         ldpp_dout(dpp, 0) << "ERROR: could not read bucket info: bucket=" << bucket << " ret=" << ret << dendl;
         continue;
index 2d39981806c8ef6a718dbdffb0c8f84e98810bca..4f54d9b86bb03fab56f11df3735821467bb14170 100644 (file)
@@ -117,7 +117,7 @@ class D4NFilterFixture : public ::testing::Test {
       RGWBucketInfo info;
       info.bucket.name = "test_bucket";
 
-      testBucket = driver->get_bucket(testUser.get(), info);
+      testBucket = driver->get_bucket(info);
 
       rgw::sal::Bucket::CreateParams params;
       params.zonegroup_id = "test_id";
@@ -1699,9 +1699,6 @@ TEST_F(D4NFilterFixture, StoreGetMetadata) {
   value.push_back(make_pair("source_zone_short_id", "300"));
   value.push_back(make_pair("bucket_count", "10"));
   value.push_back(make_pair("bucket_size", "20"));
-  value.push_back(make_pair("user_quota.max_size", "0"));
-  value.push_back(make_pair("user_quota.max_objects", "0"));
-  value.push_back(make_pair("max_buckets", "2000"));
 
   client.hmset("rgw-object:test_object_StoreGetMetadata:cache", value, [](cpp_redis::reply& reply) {
     if (!reply.is_null()) {
@@ -1730,7 +1727,6 @@ TEST_F(D4NFilterFixture, StoreGetMetadata) {
   ASSERT_EQ(testROp->prepare(null_yield, dpp), 0);
 
   /* Check updated metadata values */ 
-  RGWUserInfo info = testObject_StoreGetMetadata->get_bucket()->get_owner()->get_info();
   static StoreObject* storeObject = static_cast<StoreObject*>(dynamic_cast<rgw::sal::FilterObject*>(testObject_StoreGetMetadata.get())->get_next());
 
   EXPECT_EQ(to_iso_8601(storeObject->state.mtime), "2021-11-08T21:13:38.334696731Z");
@@ -1738,9 +1734,6 @@ TEST_F(D4NFilterFixture, StoreGetMetadata) {
   EXPECT_EQ(storeObject->state.accounted_size, (uint64_t)200);
   EXPECT_EQ(storeObject->state.epoch, (uint64_t)3);
   EXPECT_EQ(storeObject->state.zone_short_id, (uint32_t)300);
-  EXPECT_EQ(info.quota.user_quota.max_size, (int64_t)0);
-  EXPECT_EQ(info.quota.user_quota.max_objects, (int64_t)0);
-  EXPECT_EQ(testObject_StoreGetMetadata->get_bucket()->get_owner()->get_max_buckets(), (int32_t)2000);
 }
 
 TEST_F(D4NFilterFixture, StoreModifyAttr) {
index 8502ce81ef5acb8cc62f525516cf8d155b94df7d..be9fa6aed1622dc6bb7915e585006eca97f95a68 100644 (file)
@@ -338,13 +338,14 @@ TEST(TestRGWLua, Bucket)
 
   DEFINE_REQ_STATE;
 
-  rgw_bucket b;
-  b.tenant = "mytenant";
-  b.name = "myname";
-  b.marker = "mymarker";
-  b.bucket_id = "myid"; 
-  s.bucket.reset(new sal::RadosBucket(nullptr, b));
-  s.bucket->set_owner(new sal::RadosUser(nullptr, rgw_user("mytenant", "myuser")));
+  RGWBucketInfo info;
+  info.bucket.tenant = "mytenant";
+  info.bucket.name = "myname";
+  info.bucket.marker = "mymarker";
+  info.bucket.bucket_id = "myid";
+  info.owner.id = "myuser";
+  info.owner.tenant = "mytenant";
+  s.bucket.reset(new sal::RadosBucket(nullptr, info));
 
   const auto rc = lua::request::execute(nullptr, nullptr, nullptr, &s, nullptr, script);
   ASSERT_EQ(rc, 0);
@@ -1558,10 +1559,11 @@ TEST(TestRGWLua, DifferentContextUser)
   DEFINE_REQ_STATE;
 
   s.user.reset(new sal::RadosUser(nullptr, rgw_user("tenant1", "user1")));
-  rgw_bucket b;
-  b.name = "bucket1";
-  s.bucket.reset(new sal::RadosBucket(nullptr, b));
-  s.bucket->set_owner(new sal::RadosUser(nullptr, rgw_user("tenant2", "user2")));
+  RGWBucketInfo info;
+  info.bucket.name = "bucket1";
+  info.owner.id = "user2";
+  info.owner.tenant = "tenant2";
+  s.bucket.reset(new sal::RadosBucket(nullptr, info));
 
   const auto rc = lua::request::execute(nullptr, nullptr, nullptr, &s, nullptr, script);
   ASSERT_EQ(rc, 0);