From: Sage Weil Date: Tue, 20 May 2014 21:59:35 +0000 (-0700) Subject: mds: use client-provided time stamp for user-visible file metadata X-Git-Tag: v0.82~57^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9c86a110f8e31c504ca6bf3f211f78bf6b3756b2;p=ceph.git mds: use client-provided time stamp for user-visible file metadata Use the op_stamp from the MDRequest, populated by the MClientRequest when possible, for setting timestamps on user-visible metadata (like ctime, mtime). Signed-off-by: Sage Weil --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index b7c7ba4eccd6..2d6ce9fc9569 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -8645,6 +8645,7 @@ MDRequestRef MDCache::request_start(MClientRequest *req) MDRequestRef mdr = mds->op_tracker.create_request(params); active_requests[params.reqid] = mdr; + mdr->set_op_stamp(req->get_stamp()); dout(7) << "request_start " << *mdr << dendl; return mdr; } diff --git a/src/mds/Mutation.cc b/src/mds/Mutation.cc index 63c4d081311f..f2ea0cea4f9b 100644 --- a/src/mds/Mutation.cc +++ b/src/mds/Mutation.cc @@ -320,7 +320,7 @@ void MDRequestImpl::_dump(utime_t now, Formatter *f) const f->dump_int("inode_export_v", slave_request->inode_export_v); f->dump_bool("has_srci_replica", slave_request->srci_replica.length() != 0); - f->dump_stream("timestamp_now") << slave_request->now; + f->dump_stream("op_stamp") << slave_request->op_stamp; f->close_section(); // request_info } else { // internal request diff --git a/src/mds/Server.cc b/src/mds/Server.cc index c832b504d9a8..1b5c92578463 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -1384,6 +1384,7 @@ void Server::handle_slave_request(MMDSSlaveRequest *m) return; } mdr = mdcache->request_start_slave(m->get_reqid(), m->get_attempt(), m); + mdr->set_op_stamp(m->op_stamp); } assert(mdr->slave_request == 0); // only one at a time, please! @@ -1986,7 +1987,7 @@ CInode* Server::prepare_new_inode(MDRequestRef& mdr, CDir *dir, inodeno_t useino in->inode.uid = mdr->client_request->get_caller_uid(); - in->inode.ctime = in->inode.mtime = in->inode.atime = mdr->now; // now + in->inode.ctime = in->inode.mtime = in->inode.atime = mdr->get_op_stamp(); MClientRequest *req = mdr->client_request; if (req->get_data().length()) { @@ -4299,7 +4300,7 @@ void Server::_link_local(MDRequestRef& mdr, CDentry *dn, CInode *targeti) // project inode update inode_t *pi = targeti->project_inode(); pi->nlink++; - pi->ctime = mdr->now; + pi->ctime = mdr->get_op_stamp(); pi->version = tipv; snapid_t follows = dn->get_dir()->inode->find_snaprealm()->get_newest_seq(); @@ -4391,7 +4392,7 @@ void Server::_link_remote(MDRequestRef& mdr, bool inc, CDentry *dn, CInode *targ op = MMDSSlaveRequest::OP_UNLINKPREP; MMDSSlaveRequest *req = new MMDSSlaveRequest(mdr->reqid, mdr->attempt, op); targeti->set_object_info(req->get_object_info()); - req->now = mdr->now; + req->op_stamp = mdr->get_op_stamp(); mds->send_message_mds(req, linkauth); assert(mdr->more()->waiting_on_slave.count(linkauth) == 0); @@ -4517,6 +4518,7 @@ void Server::handle_slave_link_prep(MDRequestRef& mdr) CDentry::linkage_t *dnl = dn->get_linkage(); assert(dnl->is_primary()); + mdr->set_op_stamp(mdr->slave_request->op_stamp); mdr->now = mdr->slave_request->now; mdr->auth_pin(targeti); @@ -4553,7 +4555,7 @@ void Server::handle_slave_link_prep(MDRequestRef& mdr) ::encode(rollback, le->rollback); mdr->more()->rollback_bl = le->rollback; - pi->ctime = mdr->now; + pi->ctime = mdr->get_op_stamp(); pi->version = targeti->pre_dirty(); dout(10) << " projected inode " << pi << " v " << pi->version << dendl; @@ -4957,7 +4959,7 @@ void Server::_unlink_local(MDRequestRef& mdr, CDentry *dn, CDentry *straydn) inode_t *pi = in->project_inode(); mdr->add_projected_inode(in); // do this _after_ my dn->pre_dirty().. we apply that one manually. pi->version = in->pre_dirty(); - pi->ctime = mdr->now; + pi->ctime = mdr->get_op_stamp(); pi->nlink--; if (pi->nlink == 0) in->state_set(CInode::STATE_ORPHAN); @@ -5065,7 +5067,7 @@ bool Server::_rmdir_prepare_witness(MDRequestRef& mdr, int who, CDentry *dn, CDe MMDSSlaveRequest::OP_RMDIRPREP); dn->make_path(req->srcdnpath); straydn->make_path(req->destdnpath); - req->now = mdr->now; + req->op_stamp = mdr->get_op_stamp(); mdcache->replicate_stray(straydn, who, req->stray); @@ -5118,7 +5120,7 @@ void Server::handle_slave_rmdir_prep(MDRequestRef& mdr) CDentry *straydn = mdr->straydn; dout(10) << " straydn " << *straydn << dendl; - mdr->now = mdr->slave_request->now; + mdr->set_op_stamp(mdr->slave_request->op_stamp); rmdir_rollback rollback; rollback.reqid = mdr->reqid; @@ -5861,7 +5863,7 @@ bool Server::_rename_prepare_witness(MDRequestRef& mdr, int who, set &witne MMDSSlaveRequest::OP_RENAMEPREP); srcdn->make_path(req->srcdnpath); destdn->make_path(req->destdnpath); - req->now = mdr->now; + req->op_stamp = mdr->get_op_stamp(); if (straydn) mdcache->replicate_stray(straydn, who, req->stray); @@ -6075,12 +6077,12 @@ void Server::_rename_prepare(MDRequestRef& mdr, if (!silent) { if (pi) { - pi->ctime = mdr->now; + pi->ctime = mdr->get_op_stamp(); if (linkmerge) pi->nlink--; } if (tpi) { - tpi->ctime = mdr->now; + tpi->ctime = mdr->get_op_stamp(); tpi->nlink--; if (tpi->nlink == 0) oldin->state_set(CInode::STATE_ORPHAN); @@ -6446,7 +6448,7 @@ void Server::handle_slave_rename_prep(MDRequestRef& mdr) if (destdnl->is_primary() && !linkmerge) assert(straydn); - mdr->now = mdr->slave_request->now; + mdr->set_op_stamp(mdr->slave_request->op_stamp); mdr->more()->srcdn_auth_mds = srcdn->authority().first; // set up commit waiter (early, to clean up any freezing etc we do) @@ -7335,7 +7337,7 @@ void Server::handle_client_mksnap(MDRequestRef& mdr) info.ino = diri->ino(); info.snapid = snapid; info.name = snapname; - info.stamp = mdr->now; + info.stamp = mdr->get_op_stamp(); inode_t *pi = diri->project_inode(); pi->ctime = info.stamp; diff --git a/src/messages/MMDSSlaveRequest.h b/src/messages/MMDSSlaveRequest.h index 15f095bf7748..76b5c33b514d 100644 --- a/src/messages/MMDSSlaveRequest.h +++ b/src/messages/MMDSSlaveRequest.h @@ -114,7 +114,7 @@ class MMDSSlaveRequest : public Message { bufferlist inode_export; version_t inode_export_v; bufferlist srci_replica; - utime_t now; + utime_t op_stamp; bufferlist stray; // stray dir + dentry @@ -158,7 +158,7 @@ public: ::encode(srcdnpath, payload); ::encode(destdnpath, payload); ::encode(witnesses, payload); - ::encode(now, payload); + ::encode(op_stamp, payload); ::encode(inode_export, payload); ::encode(inode_export_v, payload); ::encode(srci_replica, payload); @@ -176,7 +176,7 @@ public: ::decode(srcdnpath, p); ::decode(destdnpath, p); ::decode(witnesses, p); - ::decode(now, p); + ::decode(op_stamp, p); ::decode(inode_export, p); ::decode(inode_export_v, p); ::decode(srci_replica, p);