typedef void *completion_t;
typedef void (*callback_t)(completion_t cb, void *arg);
- typedef void *ceph_real_time_t;
-
class CEPH_RADOS_API ListObject
{
public:
void mtime(time_t *pt);
void mtime2(struct timespec *pts);
- void mtime2(ceph_real_time_t *pmtime);
void create(bool exclusive);
void create(bool exclusive,
void stat(uint64_t *psize, time_t *pmtime, int *prval);
void stat2(uint64_t *psize, struct timespec *pts, int *prval);
- void stat2(uint64_t *psize, ceph_real_time_t *pmtime, int *prval);
void getxattr(const char *name, bufferlist *pbl, int *prval);
void getxattrs(std::map<std::string, bufferlist> *pattrs, int *prval);
void read(size_t off, uint64_t len, bufferlist *pbl, int *prval);
int rmxattr(const std::string& oid, const char *name);
int stat(const std::string& oid, uint64_t *psize, time_t *pmtime);
int stat2(const std::string& oid, uint64_t *psize, struct timespec *pts);
- int stat2(const std::string& oid, uint64_t *psize, ceph_real_time_t *pmtime);
int exec(const std::string& oid, const char *cls, const char *method,
bufferlist& inbl, bufferlist& outbl);
/**
int aio_stat(const std::string& oid, AioCompletion *c, uint64_t *psize, time_t *pmtime);
int aio_stat2(const std::string& oid, AioCompletion *c, uint64_t *psize, struct timespec *pts);
- int aio_stat2(const std::string& oid, AioCompletion *c, uint64_t *psize, ceph_real_time_t *pmtime);
/**
* Cancel aio operation
return 0;
}
-int librados::IoCtxImpl::aio_stat2(const object_t& oid, AioCompletionImpl *c,
- uint64_t *psize, ceph_real_time_t *pmtime)
-{
- Context *onack = new C_aio_Ack(c);
-
- c->io = this;
- c->tid = objecter->stat(oid, oloc,
- snap_seq, psize, (ceph::real_time *)pmtime, 0,
- onack, &c->objver);
-
- return 0;
-}
-
int librados::IoCtxImpl::aio_cancel(AioCompletionImpl *c)
{
return objecter->op_cancel(c->tid, -ECANCELED);
return 0;
}
-int librados::IoCtxImpl::stat2(const object_t& oid, uint64_t *psize, ceph_real_time_t *pmtime)
-{
- uint64_t size;
- ceph::real_time mtime;
-
- if (!psize)
- psize = &size;
-
- ::ObjectOperation rd;
- prepare_assert_ops(&rd);
- rd.stat(psize, (ceph::real_time *)pmtime, NULL);
- int r = operate_read(oid, &rd, NULL);
- if (r < 0) {
- return r;
- }
-
- return 0;
-}
-
int librados::IoCtxImpl::getxattr(const object_t& oid,
const char *name, bufferlist& bl)
{
int remove(const object_t& oid, int flags);
int stat(const object_t& oid, uint64_t *psize, time_t *pmtime);
int stat2(const object_t& oid, uint64_t *psize, struct timespec *pts);
- int stat2(const object_t& oid, uint64_t *psize, ceph_real_time_t *pmtime);
int trunc(const object_t& oid, uint64_t size);
int tmap_update(const object_t& oid, bufferlist& cmdbl);
const char *method, bufferlist& inbl, bufferlist *outbl);
int aio_stat(const object_t& oid, AioCompletionImpl *c, uint64_t *psize, time_t *pmtime);
int aio_stat2(const object_t& oid, AioCompletionImpl *c, uint64_t *psize, struct timespec *pts);
- int aio_stat2(const object_t& oid, AioCompletionImpl *c, uint64_t *psize, ceph_real_time_t *pmtime);
int aio_cancel(AioCompletionImpl *c);
int pool_change_auid(unsigned long long auid);
::ObjectOperation *o = &impl->o;
o->stat(psize, pts, prval);
}
-void librados::ObjectReadOperation::stat2(uint64_t *psize, ceph_real_time_t *pmtime, int *prval)
-{
- ::ObjectOperation *o = &impl->o;
- o->stat(psize, (ceph::real_time *)pmtime, prval);
-}
void librados::ObjectReadOperation::read(size_t off, uint64_t len, bufferlist *pbl, int *prval)
{
}
}
-void librados::ObjectWriteOperation::mtime2(ceph_real_time_t *pmtime)
-{
- impl->prt = (ceph::real_time *)pmtime;
-}
-
void librados::ObjectWriteOperation::create(bool exclusive)
{
::ObjectOperation *o = &impl->o;
return io_ctx_impl->stat2(obj, psize, pts);
}
-int librados::IoCtx::stat2(const std::string& oid, uint64_t *psize, ceph_real_time_t *pmtime)
-{
- object_t obj(oid);
- return io_ctx_impl->stat2(obj, psize, pmtime);
-}
-
int librados::IoCtx::exec(const std::string& oid, const char *cls, const char *method,
bufferlist& inbl, bufferlist& outbl)
{
op.write(0, bl);
ASSERT_EQ(0, ioctx.operate("foo", &op));
- uint64_t size;
- time_t mtime;
- ASSERT_EQ(0, ioctx.stat("foo", &size, &mtime));
- ASSERT_EQ(sizeof(buf), size);
- ASSERT_EQ(mtime, ts.tv_sec);
-
- struct timespec ts2;
- ASSERT_EQ(0, ioctx.stat2("foo", &size, &ts2));
- ASSERT_EQ(sizeof(buf), size);
- ASSERT_EQ(ts2.tv_sec, ts.tv_sec);
- ASSERT_EQ(ts2.tv_nsec, ts.tv_nsec);
-
- real_time rt;
- ASSERT_EQ(0, ioctx.stat2("foo", &size, (ceph_real_time_t *)&rt));
- ASSERT_EQ(sizeof(buf), size);
-
- struct timespec ts3 = ceph::real_clock::to_timespec(rt);
- ASSERT_EQ(ts3.tv_sec, ts.tv_sec);
- ASSERT_EQ(ts3.tv_nsec, ts.tv_nsec);
-
- ASSERT_EQ(-ENOENT, ioctx.stat2("nonexistent", &size, (ceph_real_time_t *)&rt));
-}
-
-TEST_F(LibRadosStatPP, Stat2Mtime2RealTimePP) {
- char buf[128];
- memset(buf, 0xcc, sizeof(buf));
- bufferlist bl;
- bl.append(buf, sizeof(buf));
- librados::ObjectWriteOperation op;
- struct timespec ts;
- ts.tv_sec = 1457129052;
- ts.tv_nsec = 123456789;
- real_time rt = real_clock::from_timespec(ts);
- op.mtime2((ceph_real_time_t *)&rt);
- op.write(0, bl);
- ASSERT_EQ(0, ioctx.operate("foo", &op));
+ /* XXX time comparison asserts could spuriously fail */
uint64_t size;
time_t mtime;
ASSERT_EQ(ts2.tv_sec, ts.tv_sec);
ASSERT_EQ(ts2.tv_nsec, ts.tv_nsec);
- real_time rt2;
- ASSERT_EQ(0, ioctx.stat2("foo", &size, (ceph_real_time_t *)&rt2));
- ASSERT_EQ(sizeof(buf), size);
-
- ASSERT_EQ(rt, rt2);
-
- ASSERT_EQ(-ENOENT, ioctx.stat2("nonexistent", &size, (ceph_real_time_t *)&rt));
+ ASSERT_EQ(-ENOENT, ioctx.stat2("nonexistent", &size, &ts2));
}
TEST_F(LibRadosStat, StatNS) {