int change_pool_auid(const pool_t& pool, __u64 auid);
int snap_create(const pool_t pool, const char *snapname);
+ __u64 selfmanaged_snap_create(const pool_t pool);
int snap_remove(const pool_t pool, const char *snapname);
+ int selfmanaged_snap_remove(const pool_t pool, __u64 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);
int snap_get_stamp(pool_t pool, snap_t snap, time_t *t);
int snap_get_name(PoolCtx *pool, __u64 snapid, std::string *s);
int snap_get_stamp(PoolCtx *pool, __u64 snapid, time_t *t);
int snap_create(const rados_pool_t pool, const char* snapname);
+ __u64 selfmanaged_snap_create(rados_pool_t pool);
int snap_remove(const rados_pool_t pool, const char* snapname);
+ int selfmanaged_snap_remove(rados_pool_t pool, __u64 snapid);
// io
int create(PoolCtx& pool, const object_t& oid, bool exclusive);
return reply;
}
+__u64 RadosClient::selfmanaged_snap_create(rados_pool_t pool)
+{
+ int64_t reply;
+ int poolID = ((PoolCtx *)pool)->poolid;
+
+ Mutex mylock("RadosClient::selfmanaged_snap_create::mylock");
+ Cond cond;
+ bool done;
+ lock.Lock();
+ objecter->allocate_selfmanaged_snap(poolID,
+ new C_SafeCond(&mylock, &cond, &done, &reply));
+ lock.Unlock();
+
+ mylock.Lock();
+ while (!done) cond.Wait(mylock);
+ mylock.Unlock();
+ return (__u64)reply;
+}
+
int RadosClient::snap_remove(const rados_pool_t pool, const char *snapName)
{
int reply;
return reply;
}
+int RadosClient::selfmanaged_snap_remove(rados_pool_t pool, __u64 snapid)
+{
+ int64_t reply;
+ int poolID = ((PoolCtx *)pool)->poolid;
+
+ Mutex mylock("RadosClient::selfmanaged_snap_remove::mylock");
+ Cond cond;
+ bool done;
+ lock.Lock();
+ objecter->delete_selfmanaged_snap(poolID, snapid_t(snapid),
+ new C_SafeCond(&mylock, &cond, &done, &reply));
+ lock.Unlock();
+
+ mylock.Lock();
+ while (!done) cond.Wait(mylock);
+ mylock.Unlock();
+ return (int)reply;
+}
+
int RadosClient::create_pool(string& name, unsigned long long auid)
{
int reply;
return ((RadosClient *)client)->snap_remove(pool, snapname);
}
+__u64 Rados::selfmanaged_snap_create(const rados_pool_t pool)
+{
+ if (!client) return -EINVAL;
+ return ((RadosClient *)client)->selfmanaged_snap_create(pool);
+}
+
+int Rados::selfmanaged_snap_remove(const rados_pool_t pool,
+ __u64 snapid) {
+ if (!client) return -EINVAL;
+ return ((RadosClient *)client)->selfmanaged_snap_remove(pool, snapid);
+}
void Rados::set_snap(rados_pool_t pool, snap_t seq)
{
return radosp->snap_remove(ctx, snapname);
}
+extern "C" __u64 rados_selfmanaged_snap_create(const rados_pool_t pool,
+ const char *snapname)
+{
+ RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool;
+ return radosp->selfmanaged_snap_create(ctx);
+}
+
+extern "C" int rados_selfmanaged_snap_remove(const rados_pool_t pool,
+ __u64 snapid)
+{
+ RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool;
+ return radosp->selfmanaged_snap_remove(ctx, snapid);
+}
+
extern "C" int rados_snap_list(rados_pool_t pool, rados_snap_t *snaps, int maxlen)
{
RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool;