From: Yan, Zheng Date: Wed, 25 Oct 2017 03:50:51 +0000 (+0800) Subject: mds: properly distinguish snaptable TABLE_OP_CREATE from TABLE_OP_UPDATE X-Git-Tag: v13.0.2~852^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c38fc186c2d17a3672b0e39d8d886e2534c756f2;p=ceph.git mds: properly distinguish snaptable TABLE_OP_CREATE from TABLE_OP_UPDATE SnapInfo::encode() does not encode long_name, operation name stored in long_name gets lost after mds restarts Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/SnapServer.cc b/src/mds/SnapServer.cc index 2d567ac02ab6..8944a4f39fe6 100644 --- a/src/mds/SnapServer.cc +++ b/src/mds/SnapServer.cc @@ -78,7 +78,6 @@ void SnapServer::_prepare(bufferlist &bl, uint64_t reqid, mds_rank_t bymds) ::decode(info.name, p); ::decode(info.stamp, p); info.snapid = ++last_snap; - info.long_name = "create"; pending_update[version] = info; dout(10) << "prepare v" << version << " create " << info << dendl; } else { @@ -115,7 +114,6 @@ void SnapServer::_prepare(bufferlist &bl, uint64_t reqid, mds_rank_t bymds) ::decode(info.snapid, p); ::decode(info.name, p); ::decode(info.stamp, p); - info.long_name = "update"; // bump last_snap... we use it as a version value on the snaprealm. ++last_snap; @@ -136,7 +134,7 @@ void SnapServer::_get_reply_buffer(version_t tid, bufferlist *pbl) const { auto p = pending_update.find(tid); if (p != pending_update.end()) { - if (pbl && p->second.long_name == "create") + if (pbl && !snaps.count(p->second.snapid)) // create ::encode(p->second.snapid, *pbl); return; } @@ -160,12 +158,13 @@ void SnapServer::_commit(version_t tid, MMDSTableRequest *req) if (pending_update.count(tid)) { SnapInfo &info = pending_update[tid]; string opname; - if (info.long_name.empty()) + if (snaps.count(info.snapid)) { + opname = "update"; + if (info.stamp == utime_t()) + info.stamp = snaps[info.snapid].stamp; + } else { opname = "create"; - else - opname.swap(info.long_name); - if (info.stamp == utime_t() && snaps.count(info.snapid)) - info.stamp = snaps[info.snapid].stamp; + } dout(7) << "commit " << tid << " " << opname << " " << info << dendl; snaps[info.snapid] = info; pending_update.erase(tid); @@ -199,10 +198,10 @@ void SnapServer::_rollback(version_t tid) if (pending_update.count(tid)) { SnapInfo &info = pending_update[tid]; string opname; - if (info.long_name.empty()) - opname = "create"; + if (snaps.count(info.snapid)) + opname = "update"; else - opname.swap(info.long_name); + opname = "create"; dout(7) << "rollback " << tid << " " << opname << " " << info << dendl; pending_update.erase(tid); }