return bucket.set_quota(op_state, dpp);
}
-static int purge_bucket_instance(rgw::sal::Store* store, const RGWBucketInfo& bucket_info, const DoutPrefixProvider *dpp)
-{
- const auto& index = bucket_info.layout.current_index;
- const int max_shards = num_shards(index);
- for (int i = 0; i < max_shards; i++) {
- RGWRados::BucketShard bs(static_cast<rgw::sal::RadosStore*>(store)->getRados());
- int ret = bs.init(dpp, bucket_info, index, i);
- if (ret < 0) {
- cerr << "ERROR: bs.init(bucket=" << bucket_info.bucket << ", shard=" << i
- << "): " << cpp_strerror(-ret) << std::endl;
- return ret;
- }
- ret = static_cast<rgw::sal::RadosStore*>(store)->getRados()->bi_remove(dpp, bs);
- if (ret < 0) {
- cerr << "ERROR: failed to remove bucket index object: "
- << cpp_strerror(-ret) << std::endl;
- return ret;
- }
- }
- return 0;
-}
-
inline auto split_tenant(const std::string& bucket_name){
auto p = bucket_name.find('/');
if(p != std::string::npos) {
Formatter *formatter,
rgw::sal::Store* store){
for (const auto &binfo: lst) {
- int ret = purge_bucket_instance(store, binfo, dpp);
+ std::unique_ptr<rgw::sal::Bucket> bucket;
+ store->get_bucket(nullptr, binfo, &bucket);
+ int ret = bucket->purge_instance(dpp);
if (ret == 0){
auto md_key = "bucket.instance:" + binfo.bucket.get_key();
ret = store->meta_remove(dpp, md_key, null_yield);
return 0;
}
- /* Allow transition for only RadosStore */
- rgw::sal::RadosStore *rados = dynamic_cast<rgw::sal::RadosStore*>(oc.store);
-
- if (!rados) {
- ldpp_dout(oc.dpp, 10) << "Object(key:" << oc.o.key << ") is not on RadosStore. Skipping transition to cloud-s3 tier: " << target_placement.storage_class << dendl;
- return -1;
- }
-
r = transition_obj_to_cloud(oc);
if (r < 0) {
ldpp_dout(oc.dpp, 0) << "ERROR: failed to transition obj(key:" << oc.o.key << ") to cloud (r=" << r << ")"
#include "rgw_zone.h"
#include "rgw_bucket_sync.h"
-#include "services/svc_zone.h"
-
#include "include/ceph_assert.h"
#include "rgw_role.h"
#include "rgw_rest_sts.h"
} else if (is_notification_op()) {
return RGWHandler_REST_PSNotifs_S3::create_put_op();
} else if (is_replication_op()) {
- auto sync_policy_handler = static_cast<rgw::sal::RadosStore*>(store)->svc()->zone->get_sync_policy_handler(nullopt);
- if (!sync_policy_handler ||
+ RGWBucketSyncPolicyHandlerRef sync_policy_handler;
+ int ret = store->get_sync_policy_handler(s, nullopt, nullopt,
+ &sync_policy_handler, null_yield);
+ if (ret < 0 || !sync_policy_handler ||
sync_policy_handler->is_legacy_config()) {
return nullptr;
}
class RGWAccessListFilter;
class RGWLC;
-class RGWObjManifest;
-struct RGWZoneGroup;
-struct RGWZoneParams;
-class RGWRealm;
-struct RGWCtl;
struct rgw_user_bucket;
class RGWUsageBatch;
class RGWCoroutinesManagerRegistry;
-class RGWListRawObjsCtx;
class RGWBucketSyncPolicyHandler;
using RGWBucketSyncPolicyHandlerRef = std::shared_ptr<RGWBucketSyncPolicyHandler>;
class RGWDataSyncStatusManager;
return op_target.transition(dpp, placement_rule, mtime, olh_epoch);
}
- int DBObject::transition_to_cloud(Bucket* bucket,
- rgw::sal::PlacementTier* tier,
- rgw_bucket_dir_entry& o,
- std::set<std::string>& cloud_targets,
- CephContext* cct,
- bool update_object,
- const DoutPrefixProvider* dpp,
- optional_yield y)
- {
- return 0;
- }
-
bool DBObject::placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2)
{
/* XXX: support single default zone and zonegroup for now */
uint64_t olh_epoch,
const DoutPrefixProvider* dpp,
optional_yield y) override;
- virtual int transition_to_cloud(Bucket* bucket,
- rgw::sal::PlacementTier* tier,
- rgw_bucket_dir_entry& o,
- std::set<std::string>& cloud_targets,
- CephContext* cct,
- bool update_object,
- const DoutPrefixProvider* dpp,
- optional_yield y) override;
virtual bool placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2) override;
virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override;
return 0;
}
-int MotrObject::transition_to_cloud(Bucket* bucket,
- rgw::sal::PlacementTier* tier,
- rgw_bucket_dir_entry& o,
- std::set<std::string>& cloud_targets,
- CephContext* cct,
- bool update_object,
- const DoutPrefixProvider* dpp,
- optional_yield y)
-{
- return 0;
-}
-
bool MotrObject::placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2)
{
/* XXX: support single default zone and zonegroup for now */
uint64_t olh_epoch,
const DoutPrefixProvider* dpp,
optional_yield y) override;
- virtual int transition_to_cloud(Bucket* bucket,
- rgw::sal::PlacementTier* tier,
- rgw_bucket_dir_entry& o,
- std::set<std::string>& cloud_targets,
- CephContext* cct,
- bool update_object,
- const DoutPrefixProvider* dpp,
- optional_yield y) override;
virtual bool placement_rules_match(rgw_placement_rule& r1, rgw_placement_rule& r2) override;
virtual int dump_obj_layout(const DoutPrefixProvider *dpp, optional_yield y, Formatter* f) override;
virtual const std::string &get_instance() const override { return state.obj.key.instance; }
virtual bool have_instance(void) override { return state.obj.key.have_instance(); }
virtual void clear_instance() override { state.obj.key.instance.clear(); }
+ virtual int transition_to_cloud(Bucket* bucket,
+ rgw::sal::PlacementTier* tier,
+ rgw_bucket_dir_entry& o,
+ std::set<std::string>& cloud_targets,
+ CephContext* cct,
+ bool update_object,
+ const DoutPrefixProvider* dpp,
+ optional_yield y) override {
+ /* Return failure here, so stores which don't transition to cloud will
+ * work with lifecycle */
+ return -1;
+ }
virtual void print(std::ostream& out) const override {
if (bucket)