typedef void *completion_t;
typedef void (*callback_t)(completion_t cb, void *arg);
+ struct SnapContext {
+ snapid_t seq;
+ vector<snapid_t> snaps;
+ };
+
+
class Rados
{
int snap_create(const pool_t pool, const char *snapname);
int selfmanaged_snap_create(const pool_t pool, uint64_t *snapid);
int snap_remove(const pool_t pool, const char *snapname);
- int snap_rollback_object(const pool_t pool, const object_t oid,
+ int snap_rollback_object(const pool_t pool, const std::string& oid,
const char *snapname);
int selfmanaged_snap_remove(const pool_t pool, uint64_t snapid);
int selfmanaged_snap_rollback_object(const pool_t pool,
- const object_t oid,
+ const std::string& oid,
SnapContext& snapc, uint64_t snapid);
int snap_list(pool_t pool, std::vector<snap_t> *snaps);
int snap_get_name(pool_t pool, snap_t snap, std::string *name);
return ((RadosClient *)client)->snap_remove(pool, snapname);
}
-int Rados::snap_rollback_object(const rados_pool_t pool, const object_t oid,
+int Rados::snap_rollback_object(const rados_pool_t pool, const std::string& oid,
const char *snapname) {
if (!client) return -EINVAL;
return ((RadosClient *)client)->snap_rollback_object(pool, oid, snapname);
}
int Rados::selfmanaged_snap_rollback_object(const rados_pool_t pool,
- const object_t oid,
+ const std::string& oid,
SnapContext& snapc, uint64_t snapid)
{
+ ::SnapContext sn;
if (!client) return -EINVAL;
- return ((RadosClient *)client)->selfmanaged_snap_rollback_object(pool, oid, snapc, snapid);
+ sn.seq = snapc.seq;
+ sn.snaps = snapc.snaps;
+ return ((RadosClient *)client)->selfmanaged_snap_rollback_object(pool, oid, sn, snapid);
}
void Rados::set_snap(rados_pool_t pool, snap_t seq)
}
static int rollback_image(pools_t& pp, struct rbd_obj_header_ondisk *header,
- SnapContext& snapc, uint64_t snapid)
+ ::SnapContext& snapc, uint64_t snapid)
{
uint64_t numseg = get_max_block(header);
for (uint64_t i = 0; i < numseg; i++) {
int r;
string oid = get_block_oid(header, i);
- r = rados.selfmanaged_snap_rollback_object(pp.data, oid, snapc, snapid);
+ librados::SnapContext sn;
+ sn.seq = snapc.seq;
+ sn.snaps = snapc.snaps;
+ r = rados.selfmanaged_snap_rollback_object(pp.data, oid, sn, snapid);
if (r < 0 && r != -ENOENT)
return r;
}
}
static int do_get_snapc(pools_t& pp, string& md_oid, const char *snapname,
- SnapContext& snapc, vector<snap_t>& snaps, uint64_t& snapid)
+ ::SnapContext& snapc, vector<snap_t>& snaps, uint64_t& snapid)
{
bufferlist bl, bl2;
return 0;
}
-static int do_rollback_snap(pools_t& pp, string& md_oid, SnapContext& snapc, uint64_t snapid)
+static int do_rollback_snap(pools_t& pp, string& md_oid, ::SnapContext& snapc, uint64_t snapid)
{
struct rbd_obj_header_ondisk header;
int r = read_header(pp.md, md_oid, &header);
pools_t pp = { 0, 0, 0 };
snap_t snapid = 0;
vector<snap_t> snaps;
- SnapContext snapc;
+ ::SnapContext snapc;
int opt_cmd = OPT_NO_CMD;