Push them down into the RGWAccess layers.
Signed-off-by: Greg Farnum <gregory.farnum@dreamhost.com>
virtual void set_intent_cb(void *ctx, int (*cb)(void *user_ctx, rgw_obj& obj, RGWIntentEvent intent)) {}
virtual int get_bucket_stats(rgw_bucket& bucket, map<RGWObjCategory, RGWBucketStats>& stats) { return -ENOTSUP; }
+
+ /* The bucket here can either be the bucket name identifier, or the ID
+ * in period format: ".123" */
+ virtual int get_bucket_info(string& bucket, RGWBucketInfo& info) = 0;
};
class RGWStoreManager {
policy.create_default(user_id, display_name);
policy.encode(aclbl);
- ret = rgw_get_bucket_info(bucket_str, bucket_info);
+ ret = rgwstore->get_bucket_info(bucket_str, bucket_info);
if (ret < 0)
return ret;
int bucket_stats(rgw_bucket& bucket, Formatter *formatter)
{
RGWBucketInfo bucket_info;
- int r = rgw_get_bucket_info(bucket.name, bucket_info);
+ int r = rgwstore->get_bucket_info(bucket.name, bucket_info);
if (r < 0)
return r;
if ((!bucket_name.empty()) || bucket_id >= 0) {
if (bucket_id >= 0) {
- int ret = rgw_get_bucket_info_id(bucket_id, bucket_info);
+ char bucket_char[16];
+ snprintf(bucket_char, sizeof(bucket_char), ".%lld",
+ (long long unsigned)bucket_id);
+ string bucket_string(bucket_char);
+ int ret = rgwstore->get_bucket_info(bucket_string, bucket_info);
+
if (ret < 0) {
cerr << "could not retrieve bucket info for bucket_id=" << bucket_id << std::endl;
return ret;
} else {
string bucket_name_str = bucket_name;
RGWBucketInfo bucket_info;
- int r = rgw_get_bucket_info(bucket_name_str, bucket_info);
+ int r = rgwstore->get_bucket_info(bucket_name_str, bucket_info);
if (r < 0) {
cerr << "could not get bucket info for bucket=" << bucket_name_str << std::endl;
return r;
static rgw_bucket pi_buckets(BUCKETS_POOL_NAME);
static string pool_name_prefix = "p";
-
-int rgw_get_bucket_info(string& bucket_name, RGWBucketInfo& info)
-{
- bufferlist bl;
-
- int ret = rgw_get_obj(pi_buckets, bucket_name, bl);
- if (ret < 0) {
- if (ret != -ENOENT)
- return ret;
-
- info.bucket.name = bucket_name;
- info.bucket.pool = bucket_name; // for now
- return 0;
- }
-
- bufferlist::iterator iter = bl.begin();
- try {
- ::decode(info, iter);
- } catch (buffer::error& err) {
- RGW_LOG(0) << "ERROR: could not decode buffer info, caught buffer::error" << dendl;
- return -EIO;
- }
-
- RGW_LOG(0) << "rgw_get_bucket_info: bucket=" << info.bucket << " owner " << info.owner << dendl;
-
- return 0;
-}
-
-int rgw_get_bucket_info_id(uint64_t bucket_id, RGWBucketInfo& info)
-{
- char bucket_char[16];
- snprintf(bucket_char, sizeof(bucket_char), ".%lld",
- (long long unsigned)bucket_id);
- string bucket_string(bucket_char);
-
- return rgw_get_bucket_info(bucket_string, info);
-}
return r;
}
+int RGWFS::get_bucket_info(string& bucket_name, RGWBucketInfo& info)
+{
+ return -ENOTSUP;
+}
void finish_get_obj(void **handle);
int read(void *ctx, rgw_obj& obj, off_t ofs, size_t size, bufferlist& bl);
int obj_stat(void *ctx, rgw_obj& obj, uint64_t *psize, time_t *pmtime);
+
+ virtual int get_bucket_info(string& bucket_name, RGWBucketInfo& info);
};
#endif
if (s->bucket_name_str.size()) {
RGWBucketInfo bucket_info;
- ret = rgw_get_bucket_info(s->bucket_name_str, bucket_info);
+ ret = rgwstore->get_bucket_info(s->bucket_name_str, bucket_info);
if (ret < 0) {
RGW_LOG(0) << "couldn't get bucket from bucket_name (name=" << s->bucket_name_str << ")" << dendl;
return ret;
RGWBucketInfo bucket_info;
- ret = rgw_get_bucket_info(src_bucket_name, bucket_info);
+ ret = rgwstore->get_bucket_info(src_bucket_name, bucket_info);
if (ret < 0)
return ret;
return 0;
}
+int RGWRados::get_bucket_info(string& bucket_name, RGWBucketInfo& info)
+{
+ bufferlist bl;
+
+ int ret = rgw_get_obj(pi_buckets_rados, bucket_name, bl);
+ if (ret < 0) {
+ if (ret != -ENOENT)
+ return ret;
+
+ info.bucket.name = bucket_name;
+ info.bucket.pool = bucket_name; // for now
+ return 0;
+ }
+
+ bufferlist::iterator iter = bl.begin();
+ try {
+ ::decode(info, iter);
+ } catch (buffer::error& err) {
+ RGW_LOG(0) << "ERROR: could not decode buffer info, caught buffer::error" << dendl;
+ return -EIO;
+ }
+
+ RGW_LOG(0) << "rgw_get_bucket_info: bucket=" << info.bucket << " owner " << info.owner << dendl;
+
+ return 0;
+}
+
+
int RGWRados::tmap_get(rgw_obj& obj, bufferlist& header, std::map<string, bufferlist>& m)
{
bufferlist bl;
int decode_policy(bufferlist& bl, ACLOwner *owner);
int get_bucket_stats(rgw_bucket& bucket, map<RGWObjCategory, RGWBucketStats>& stats);
+ virtual int get_bucket_info(string& bucket_name, RGWBucketInfo& info);
int cls_rgw_init_index(rgw_bucket& bucket, string& oid);
int cls_obj_prepare_op(rgw_bucket& bucket, uint8_t op, string& tag, string& name);