From be1e87f3fe9e914aa2448be33336ed6b44611978 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 7 Apr 2010 16:35:28 -0700 Subject: [PATCH] librados: add tmap_update to c++ interface --- src/librados.cc | 36 ++++++++++++++++++++++++++++++++++++ src/osdc/librados.h | 10 ++++++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/librados.cc b/src/librados.cc index 83ae953677df7..246455eafb128 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -119,6 +119,7 @@ public: int remove(PoolCtx& pool, const object_t& oid); int stat(PoolCtx& pool, const object_t& oid, __u64 *psize, time_t *pmtime); + int tmap_update(PoolCtx& pool, const object_t& oid, bufferlist& cmdbl); int exec(PoolCtx& pool, const object_t& oid, const char *cls, const char *method, bufferlist& inbl, bufferlist& outbl); int getxattr(PoolCtx& pool, const object_t& oid, const char *name, bufferlist& bl); @@ -875,6 +876,35 @@ int RadosClient::remove(PoolCtx& pool, const object_t& oid) return r; } +int RadosClient::tmap_update(PoolCtx& pool, const object_t& oid, bufferlist& cmdbl) +{ + utime_t ut = g_clock.now(); + + Mutex mylock("RadosClient::tmap_update::mylock"); + Cond cond; + bool done; + int r; + Context *onack = new C_SafeCond(&mylock, &cond, &done, &r); + + bufferlist outbl; + + lock.Lock(); + SnapContext snapc; + ceph_object_layout layout = objecter->osdmap->make_object_layout(oid, pool.poolid); + ObjectOperation wr; + wr.tmap_update(cmdbl); + objecter->mutate(oid, layout, wr, snapc, ut, 0, onack, NULL); + lock.Unlock(); + + mylock.Lock(); + while (!done) + cond.Wait(mylock); + mylock.Unlock(); + + return r; +} + + int RadosClient::exec(PoolCtx& pool, const object_t& oid, const char *cls, const char *method, bufferlist& inbl, bufferlist& outbl) { @@ -1224,6 +1254,12 @@ int Rados::stat(rados_pool_t pool, const object_t& oid, __u64 *psize, time_t *pm return client->stat(*(RadosClient::PoolCtx *)pool, oid, psize, pmtime); } +int Rados::tmap_update(rados_pool_t pool, const object_t& oid, bufferlist& cmdbl) +{ + if (!client) + return -EINVAL; + return client->tmap_update(*(RadosClient::PoolCtx *)pool, oid, cmdbl); +} int Rados::exec(rados_pool_t pool, const object_t& oid, const char *cls, const char *method, bufferlist& inbl, bufferlist& outbl) { diff --git a/src/osdc/librados.h b/src/osdc/librados.h index ad0da7eb68a90..3060c796c447c 100644 --- a/src/osdc/librados.h +++ b/src/osdc/librados.h @@ -120,13 +120,15 @@ public: int getxattrs(rados_pool_t pool, const object_t& oid, map& attrset); int stat(rados_pool_t pool, const object_t& oid, __u64 *psize, time_t *pmtime); + int tmap_update(rados_pool_t pool, const object_t& oid, bufferlist& cmdbl); + int exec(rados_pool_t pool, const object_t& oid, const char *cls, const char *method, - bufferlist& inbl, bufferlist& outbl); + bufferlist& inbl, bufferlist& outbl); struct ListCtx { - void *ctx; - ListCtx() : ctx(NULL) {} - }; + void *ctx; + ListCtx() : ctx(NULL) {} + }; int list(rados_pool_t pool, int max, std::list& entries, Rados::ListCtx& ctx); int list_pools(std::vector& v); -- 2.39.5