*/
int get_features(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
{
- uint64_t snap_id;
bool read_only = false;
bufferlist::iterator iter = in->begin();
try {
+ uint64_t snap_id;
decode(snap_id, iter);
if (!iter.end()) {
decode(read_only, iter);
return -EINVAL;
}
- CLS_LOG(20, "get_features snap_id=%" PRIu64 ", read_only=%d",
- snap_id, read_only);
-
- // NOTE: keep this deprecated snapshot logic to support negative
- // test cases in older (pre-Infernalis) releases. Remove once older
- // releases are no longer supported.
- if (snap_id != CEPH_NOSNAP) {
- cls_rbd_snap snap;
- string snapshot_key;
- key_from_snap_id(snap_id, &snapshot_key);
- int r = read_key(hctx, snapshot_key, &snap);
- if (r < 0) {
- return r;
- }
- }
+ CLS_LOG(20, "get_features read_only=%d", read_only);
uint64_t features;
int r = read_key(hctx, "features", &features);
CLS_ERR("Could not read image's size off disk: %s", cpp_strerror(r).c_str());
return r;
}
- r = read_key(hctx, "features", &snap_meta.features);
- if (r < 0) {
- CLS_ERR("Could not read image's features off disk: %s", cpp_strerror(r).c_str());
- return r;
- }
r = read_key(hctx, "flags", &snap_meta.flags);
if (r < 0 && r != -ENOENT) {
CLS_ERR("Could not read image's flags off disk: %s", cpp_strerror(r).c_str());
snapid_t id;
string name;
uint64_t image_size;
- uint64_t features;
uint8_t protection_status;
cls_rbd_parent parent;
uint64_t flags;
return parent.exists();
}
- cls_rbd_snap() : id(CEPH_NOSNAP), image_size(0), features(0),
+ cls_rbd_snap() : id(CEPH_NOSNAP), image_size(0),
protection_status(RBD_PROTECTION_STATUS_UNPROTECTED),
flags(0), timestamp(utime_t())
{}
encode(id, bl);
encode(name, bl);
encode(image_size, bl);
- encode(features, bl);
+ uint64_t features = 0;
+ encode(features, bl); // unused -- preserve ABI
encode(parent, bl);
encode(protection_status, bl);
encode(flags, bl);
decode(id, p);
decode(name, p);
decode(image_size, p);
- decode(features, p);
+ uint64_t features;
+ decode(features, p); // unused -- preserve ABI
if (struct_v >= 2) {
decode(parent, p);
}
f->dump_unsigned("id", id);
f->dump_string("name", name);
f->dump_unsigned("image_size", image_size);
- f->dump_unsigned("features", features);
if (has_parent()) {
f->open_object_section("parent");
parent.dump(f);
t->id = 1;
t->name = "snap";
t->image_size = 123456;
- t->features = 123;
t->flags = 31;
o.push_back(t);
t = new cls_rbd_snap;
t->id = 2;
t->name = "snap2";
t->image_size = 12345678;
- t->features = 1234;
t->parent.pool = 1;
t->parent.id = "parent";
t->parent.snapid = 456;