*/
class ObjectWriteOperation : public ObjectOperation
{
+ protected:
+ time_t *pmtime;
public:
- ObjectWriteOperation() {}
+ ObjectWriteOperation() : pmtime(NULL) {}
~ObjectWriteOperation() {}
+ void mtime(time_t *pt) {
+ pmtime = pt;
+ }
+
void create(bool exclusive);
void write(uint64_t off, const bufferlist& bl);
void write_full(const bufferlist& bl);
void clone_range(uint64_t dst_off,
const std::string& src_oid, uint64_t src_off,
size_t len);
+
+ friend class IoCtx;
};
/*
int list(Objecter::ListContext *context, int max_entries);
- int operate(IoCtxImpl& io, const object_t& oid, ::ObjectOperation *o, bufferlist *pbl);
+ int operate(IoCtxImpl& io, const object_t& oid, ::ObjectOperation *o, time_t *pmtime, bufferlist *pbl);
int operate_read(IoCtxImpl& io, const object_t& oid, ::ObjectOperation *o, bufferlist *pbl);
int aio_operate(IoCtxImpl& io, const object_t& oid, ::ObjectOperation *o, AioCompletionImpl *c, bufferlist *pbl);
}
int librados::RadosClient::
-operate(IoCtxImpl& io, const object_t& oid, ::ObjectOperation *o, bufferlist *pbl)
+operate(IoCtxImpl& io, const object_t& oid, ::ObjectOperation *o, time_t *pmtime, bufferlist *pbl)
{
- utime_t ut = ceph_clock_now(cct);
+ utime_t ut;
+ if (pmtime) {
+ ut = utime_t(*pmtime, 0);
+ } else {
+ ut = ceph_clock_now(cct);
+ }
/* can't write to a snapshot */
if (io.snap_seq != CEPH_NOSNAP)
return -EINVAL;
+ if (!o->size())
+ return 0;
+
Mutex mylock("RadosClient::mutate::mylock");
Cond cond;
bool done;
if (io.snap_seq != CEPH_NOSNAP)
return -EINVAL;
+ if (!o->size())
+ return 0;
+
Mutex mylock("RadosClient::mutate::mylock");
Cond cond;
bool done;
int librados::IoCtx::operate(const std::string& oid, librados::ObjectWriteOperation *o, bufferlist *pbl)
{
object_t obj(oid);
- return io_ctx_impl->client->operate(*io_ctx_impl, obj, (::ObjectOperation*)o->impl, pbl);
+ return io_ctx_impl->client->operate(*io_ctx_impl, obj, (::ObjectOperation*)o->impl, o->pmtime, pbl);
}
int librados::IoCtx::operate(const std::string& oid, librados::ObjectReadOperation *o, bufferlist *pbl)