RGWUsageIter usage_iter;
while (is_truncated) {
- op_ret = store->getRados()->read_usage(s->user->get_id(), s->bucket_name, start_epoch, end_epoch, max_entries,
- &is_truncated, usage_iter, usage);
-
+ op_ret = s->bucket->read_usage(start_epoch, end_epoch, max_entries, &is_truncated,
+ usage_iter, usage);
if (op_ret == -ENOENT) {
op_ret = 0;
is_truncated = false;
return;
s->bucket->get_info().requester_pays = requester_pays;
- op_ret = store->getRados()->put_bucket_instance_info(s->bucket->get_info(), false, real_time(),
- &s->bucket_attrs);
+ op_ret = s->bucket->put_instance_info(false, real_time());
if (op_ret < 0) {
ldpp_dout(this, 0) << "NOTICE: put_bucket_info on bucket=" << s->bucket->get_name()
<< " returned err=" << op_ret << dendl;
return;
}
+ s->bucket_attrs = s->bucket->get_attrs();
}
int RGWInitMultipart::verify_permission()
s->bucket->get_info().mdsearch_config = mdsearch_config;
- op_ret = store->getRados()->put_bucket_instance_info(s->bucket->get_info(), false, real_time(), &s->bucket_attrs);
+ op_ret = s->bucket->put_instance_info(false, real_time());
if (op_ret < 0) {
ldpp_dout(this, 0) << "NOTICE: put_bucket_info on bucket=" << s->bucket->get_name()
<< " returned err=" << op_ret << dendl;
return;
}
+ s->bucket_attrs = s->bucket->get_attrs();
}
int RGWGetBucketMetaSearch::verify_permission()
{
s->bucket->get_info().mdsearch_config.clear();
- op_ret = store->getRados()->put_bucket_instance_info(s->bucket->get_info(), false, real_time(), &s->bucket_attrs);
+ op_ret = s->bucket->put_instance_info(false, real_time());
if (op_ret < 0) {
ldpp_dout(this, 0) << "NOTICE: put_bucket_info on bucket=" << s->bucket->get_name()
<< " returned err=" << op_ret << dendl;
return;
}
+ s->bucket_attrs = s->bucket->get_attrs();
}
#include "rgw_sync_module.h"
#include "rgw_trim_bilog.h"
#include "rgw_service.h"
+#include "rgw_sal.h"
#include "services/svc_rados.h"
#include "services/svc_bi_rados.h"
}
};
-struct RGWUsageIter {
- string read_iter;
- uint32_t index;
-
- RGWUsageIter() : index(0) {}
-};
-
class RGWGetDataCB {
public:
virtual int handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len) = 0;
struct RGWObjState;
class RGWAccessListFilter;
+struct RGWUsageIter {
+ string read_iter;
+ uint32_t index;
+
+ RGWUsageIter() : index(0) {}
+};
+
namespace rgw { namespace sal {
#define RGW_SAL_VERSION 1
virtual int check_quota(RGWQuotaInfo& user_quota, RGWQuotaInfo& bucket_quota, uint64_t obj_size, bool check_size_only = false) = 0;
virtual int set_instance_attrs(RGWAttrs& attrs, optional_yield y) = 0;
virtual int try_refresh_info(ceph::real_time *pmtime) = 0;
+ virtual int read_usage(uint64_t start_epoch, uint64_t end_epoch, uint32_t max_entries,
+ bool *is_truncated, RGWUsageIter& usage_iter,
+ map<rgw_user_bucket, rgw_usage_log_entry>& usage) = 0;
bool empty() const { return info.bucket.name.empty(); }
const std::string& get_name() const { return info.bucket.name; }
return store->getRados()->try_refresh_bucket_info(info, pmtime, &attrs);
}
+int RGWRadosBucket::read_usage(uint64_t start_epoch, uint64_t end_epoch,
+ uint32_t max_entries, bool *is_truncated,
+ RGWUsageIter& usage_iter,
+ map<rgw_user_bucket, rgw_usage_log_entry>& usage)
+{
+ return store->getRados()->read_usage(owner->get_id(), get_name(), start_epoch,
+ end_epoch, max_entries, is_truncated,
+ usage_iter, usage);
+}
+
int RGWRadosBucket::set_acl(RGWAccessControlPolicy &acl, optional_yield y)
{
bufferlist aclbl;
virtual int check_quota(RGWQuotaInfo& user_quota, RGWQuotaInfo& bucket_quota, uint64_t obj_size, bool check_size_only = false) override;
virtual int set_instance_attrs(RGWAttrs& attrs, optional_yield y) override;
virtual int try_refresh_info(ceph::real_time *pmtime) override;
+ virtual int read_usage(uint64_t start_epoch, uint64_t end_epoch, uint32_t max_entries,
+ bool *is_truncated, RGWUsageIter& usage_iter,
+ map<rgw_user_bucket, rgw_usage_log_entry>& usage) override;
virtual std::unique_ptr<RGWBucket> clone() {
return std::unique_ptr<RGWBucket>(new RGWRadosBucket(*this));
}