return 0;
}
+template <class T, class K>
+static int read_decode_json(const string& infile, T& t, K *k)
+{
+ bufferlist bl;
+ int ret = read_input(infile, bl);
+ if (ret < 0) {
+ cerr << "ERROR: failed to read input: " << cpp_strerror(-ret) << std::endl;
+ return ret;
+ }
+ JSONParser p;
+ ret = p.parse(bl.c_str(), bl.length());
+ if (ret < 0) {
+ cout << "failed to parse JSON" << std::endl;
+ return ret;
+ }
+
+ try {
+ t.decode_json(&p, k);
+ } catch (JSONDecoder::err& e) {
+ cout << "failed to decode JSON input: " << e.message << std::endl;
+ return -EINVAL;
+ }
+ return 0;
+}
+
static int parse_date_str(const string& date_str, utime_t& ut)
{
uint64_t epoch = 0;
}
rgw_cls_bi_entry entry;
- ret = read_decode_json(infile, entry);
+ cls_rgw_obj_key key;
+ ret = read_decode_json(infile, entry, &key);
if (ret < 0) {
return 1;
}
- ret = store->bi_put(bucket, entry);
+ rgw_obj obj(bucket, key.name);
+ obj.set_instance(key.instance);
+
+ ret = store->bi_put(bucket, obj, entry);
if (ret < 0) {
cerr << "ERROR: bi_put(): " << cpp_strerror(-ret) << std::endl;
return -ret;
int RGWRados::bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, rgw_cls_bi_entry *entry)
{
- librados::IoCtx index_ctx;
- string oid;
- int r = open_bucket_index(bucket, index_ctx, oid);
- if (r < 0)
- return r;
+ BucketShard bs(this);
+ int ret = bs.init(bucket, obj);
+ if (ret < 0) {
+ ldout(cct, 5) << "bs.init() returned ret=" << ret << dendl;
+ return ret;
+ }
cls_rgw_obj_key key(obj.get_index_key_name(), obj.get_instance());
- int ret = cls_rgw_bi_get(index_ctx, oid, index_type, key, entry);
+ ret = cls_rgw_bi_get(bs.index_ctx, bs.bucket_obj, index_type, key, entry);
if (ret < 0)
return ret;
return 0;
}
-int RGWRados::bi_put(rgw_bucket& bucket, rgw_cls_bi_entry& entry)
+int RGWRados::bi_put(rgw_bucket& bucket, rgw_obj& obj, rgw_cls_bi_entry& entry)
{
- librados::IoCtx index_ctx;
- string oid;
- int r = open_bucket_index(bucket, index_ctx, oid);
- if (r < 0)
- return r;
+ BucketShard bs(this);
+ int ret = bs.init(bucket, obj);
+ if (ret < 0) {
+ ldout(cct, 5) << "bs.init() returned ret=" << ret << dendl;
+ return ret;
+ }
- int ret = cls_rgw_bi_put(index_ctx, oid, entry);
+ ret = cls_rgw_bi_put(bs.index_ctx, bs.bucket_obj, entry);
if (ret < 0)
return ret;
int RGWRados::bi_list(rgw_bucket& bucket, const string& obj_name, const string& marker, uint32_t max, list<rgw_cls_bi_entry> *entries, bool *is_truncated)
{
- librados::IoCtx index_ctx;
- string oid;
- int r = open_bucket_index(bucket, index_ctx, oid);
- if (r < 0)
- return r;
+ rgw_obj obj(bucket, obj_name);
+ BucketShard bs(this);
+ int ret = bs.init(bucket, obj);
+ if (ret < 0) {
+ ldout(cct, 5) << "bs.init() returned ret=" << ret << dendl;
+ return ret;
+ }
- int ret = cls_rgw_bi_list(index_ctx, oid, obj_name, marker, max, entries, is_truncated);
+ ret = cls_rgw_bi_list(bs.index_ctx, bs.bucket_obj, obj_name, marker, max, entries, is_truncated);
if (ret < 0)
return ret;
int bi_get_instance(rgw_obj& obj, rgw_bucket_dir_entry *dirent);
int bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, rgw_cls_bi_entry *entry);
- int bi_put(rgw_bucket& bucket, rgw_cls_bi_entry& entry);
+ int bi_put(rgw_bucket& bucket, rgw_obj& obj, rgw_cls_bi_entry& entry);
int bi_list(rgw_bucket& bucket, const string& obj_name, const string& marker, uint32_t max,
list<rgw_cls_bi_entry> *entries, bool *is_truncated);