}
};
- static int init_bucket(string& bucket_name, RGWBucketInfo& bucket_info, rgw_bucket& bucket)
+ static int init_bucket(const string& bucket_name, const string& bucket_id,
+ RGWBucketInfo& bucket_info, rgw_bucket& bucket)
{
if (!bucket_name.empty()) {
- int r = store->get_bucket_info(obj_ctx, bucket_name, bucket_info, NULL);
+ RGWObjectCtx obj_ctx(store);
- r = store->get_bucket_info(NULL, bucket_name, bucket_info, NULL);
+ int r;
+ if (bucket_id.empty()) {
- r = store->get_bucket_instance_info(NULL, bucket_instance_id, bucket_info, NULL, NULL);
++ r = store->get_bucket_info(obj_ctx, bucket_name, bucket_info, NULL);
+ } else {
+ string bucket_instance_id = bucket_name + ":" + bucket_id;
++ r = store->get_bucket_instance_info(obj_ctx, bucket_instance_id, bucket_info, NULL, NULL);
+ }
if (r < 0) {
cerr << "could not get bucket info for bucket=" << bucket_name << std::endl;
return r;
}
}
+ if (opt_cmd == OPT_OLH_GET || opt_cmd == OPT_OLH_READLOG) {
+ if (bucket_name.empty()) {
+ cerr << "ERROR: bucket not specified" << std::endl;
+ return EINVAL;
+ }
+ if (object.empty()) {
+ cerr << "ERROR: object not specified" << std::endl;
+ return EINVAL;
+ }
+ RGWBucketInfo bucket_info;
+ int ret = init_bucket(bucket_name, bucket_info, bucket);
+ if (ret < 0) {
+ cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+ }
+
+ if (opt_cmd == OPT_OLH_GET) {
+ RGWOLHInfo olh;
+ rgw_obj obj(bucket, object);
+ int ret = store->get_olh(obj, &olh);
+ if (ret < 0) {
+ cerr << "ERROR: failed reading olh: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+ encode_json("olh", olh, formatter);
+ formatter->flush(cout);
+ }
+
+ if (opt_cmd == OPT_OLH_READLOG) {
+ map<uint64_t, vector<rgw_bucket_olh_log_entry> > log;
+ bool is_truncated;
+
+ RGWObjectCtx rctx(store);
+ rgw_obj obj(bucket, object);
+
+ RGWObjState *state;
+
+ int ret = store->get_obj_state(&rctx, obj, &state, NULL, false); /* don't follow olh */
+ if (ret < 0) {
+ return ret;
+ }
+
+ ret = store->bucket_index_read_olh_log(*state, obj, 0, &log, &is_truncated);
+ if (ret < 0) {
+ cerr << "ERROR: failed reading olh: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+ formatter->open_object_section("result");
+ encode_json("is_truncated", is_truncated, formatter);
+ encode_json("log", log, formatter);
+ formatter->close_section();
+ formatter->flush(cout);
+ }
+
+ if (opt_cmd == OPT_BI_GET) {
+ RGWBucketInfo bucket_info;
+ int ret = init_bucket(bucket_name, bucket_info, bucket);
+ if (ret < 0) {
+ cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+ rgw_obj obj(bucket, object);
+ if (!object_version.empty()) {
+ obj.set_instance(object_version);
+ }
+
+ rgw_cls_bi_entry entry;
+
+ ret = store->bi_get(bucket, obj, bi_index_type, &entry);
+ if (ret < 0) {
+ cerr << "ERROR: bi_get(): " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ encode_json("entry", entry, formatter);
+ formatter->flush(cout);
+ }
+
+ if (opt_cmd == OPT_BI_PUT) {
+ RGWBucketInfo bucket_info;
+ int ret = init_bucket(bucket_name, bucket_info, bucket);
+ if (ret < 0) {
+ cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ rgw_cls_bi_entry entry;
+ cls_rgw_obj_key key;
+ ret = read_decode_json(infile, entry, &key);
+ if (ret < 0) {
+ return 1;
+ }
+
+ 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;
+ }
+ }
+
+ if (opt_cmd == OPT_BI_LIST) {
+ RGWBucketInfo bucket_info;
+ int ret = init_bucket(bucket_name, bucket_info, bucket);
+ if (ret < 0) {
+ cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ list<rgw_cls_bi_entry> entries;
+ bool is_truncated;
+ if (max_entries < 0) {
+ max_entries = 1000;
+ }
+
+
+ formatter->open_array_section("entries");
+
+ do {
+ entries.clear();
+ ret = store->bi_list(bucket, object, marker, max_entries, &entries, &is_truncated);
+ if (ret < 0) {
+ cerr << "ERROR: bi_list(): " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ list<rgw_cls_bi_entry>::iterator iter;
+ for (iter = entries.begin(); iter != entries.end(); ++iter) {
+ rgw_cls_bi_entry& entry = *iter;
+ encode_json("entry", entry, formatter);
+ marker = entry.idx;
+ }
+ formatter->flush(cout);
+ } while (is_truncated);
+ formatter->close_section();
+ formatter->flush(cout);
+ }
+
if (opt_cmd == OPT_OBJECT_RM) {
RGWBucketInfo bucket_info;
- int ret = init_bucket(bucket_name, bucket_info, bucket);
+ int ret = init_bucket(bucket_name, bucket_id, bucket_info, bucket);
if (ret < 0) {
cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
return -ret;