From da13c5aeca05198ccdf8ed48ff3d28dc973a6b61 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 15 Jan 2010 11:00:47 -0800 Subject: [PATCH] librados: implement C versions of snap calls --- src/librados.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++ src/osdc/librados.h | 1 + 2 files changed, 50 insertions(+) diff --git a/src/librados.cc b/src/librados.cc index 0d3cde7bb1e01..da904382f764f 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -1408,6 +1408,55 @@ extern "C" int rados_read(rados_pool_t pool, const char *o, off_t off, char *buf return ret; } +// snaps + +extern "C" int rados_snap_create(const rados_pool_t pool, const char *snapname) +{ + RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool; + return radosp->snap_create(ctx, snapname); +} + +extern "C" int rados_snap_remove(const rados_pool_t pool, const char *snapname) +{ + RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool; + return radosp->snap_remove(ctx, snapname); +} + +extern "C" int rados_snap_list(rados_pool_t pool, rados_snap_t *snaps, int maxlen) +{ + RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool; + vector snapvec; + int r = radosp->snap_list(ctx, &snapvec); + if (r < 0) + return r; + if ((int)snapvec.size() <= maxlen) { + for (unsigned i=0; isnap_lookup(ctx, name, id); +} + +extern "C" int rados_snap_get_name(rados_pool_t pool, rados_snap_t id, char *name, int maxlen) +{ + RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool; + std::string sname; + int r = radosp->snap_get_name(ctx, id, &sname); + if (r < 0) + return r; + if ((int)sname.length() >= maxlen) + return -ERANGE; + strncpy(name, sname.c_str(), maxlen); + return 0; +} + + extern "C" int rados_getxattr(rados_pool_t pool, const char *o, const char *name, char *buf, size_t len) { RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool; diff --git a/src/osdc/librados.h b/src/osdc/librados.h index ee998c7e9ae8e..44097ad850681 100644 --- a/src/osdc/librados.h +++ b/src/osdc/librados.h @@ -56,6 +56,7 @@ int rados_pool_list_next(rados_pool_t pool, const char **entry, rados_list_ctx_t int rados_snap_create(const rados_pool_t pool, const char *snapname); int rados_snap_remove(const rados_pool_t pool, const char *snapname); int rados_snap_list(rados_pool_t pool, rados_snap_t *snaps, int maxlen); +int rados_snap_lookup(rados_pool_t pool, const char *name, rados_snap_t *id); int rados_snap_get_name(rados_pool_t pool, rados_snap_t id, char *name, int maxlen); /* read/write objects */ -- 2.39.5