rados_op->exec("rbd", "object_map_update", in);
}
+ int metadata_set(librados::IoCtx *ioctx, const std::string &oid,
+ const std::string &key, const std::string &data)
+ {
+ bufferlist in;
+ ::encode(key, in);
+ ::encode(data, in);
+ bufferlist out;
+ return ioctx->exec(oid, "rbd", "metadata_set", in, out);
+ }
+
+ int metadata_remove(librados::IoCtx *ioctx, const std::string &oid,
+ const std::string &key)
+ {
+ bufferlist in;
+ ::encode(key, in);
+ bufferlist out;
+ return ioctx->exec(oid, "rbd", "metadata_remove", in, out);
+ }
+
+ int metadata_list(librados::IoCtx *ioctx, const std::string &oid,
+ map<string, string> *pairs)
+ {
+ assert(pairs);
+ bufferlist in, out;
+ int r = ioctx->exec(oid, "rbd", "metadata_list", in, out);
+ if (r < 0)
+ return r;
+
+ bufferlist::iterator iter = out.begin();
+ try {
+ ::decode(*pairs, iter);
+ } catch (const buffer::error &err) {
+ return -EBADMSG;
+ }
+
+ return 0;
+ }
} // namespace cls_client
} // namespace librbd
uint8_t new_object_state,
const boost::optional<uint8_t> ¤t_object_state);
+ // operations on the rbd_object_map.$image_id object
+ int metadata_set(librados::IoCtx *ioctx, const std::string &oid,
+ const std::string &key, const std::string &data);
+ int metadata_remove(librados::IoCtx *ioctx, const std::string &oid,
+ const std::string &key);
+ int metadata_list(librados::IoCtx *ioctx, const std::string &oid,
+ map<string, string> *pairs);
+
// class operations on the old format, kept for
// backwards compatability
int old_snapshot_add(librados::IoCtx *ioctx, const std::string &oid,