From: "Yan, Zheng" <zheng.z.yan@intel.com>
To: Sage Weil <sage@inktank.com>
Cc: ceph-devel@vger.kernel.org, greg@inktank.com, sam.lang@inktank.com
Subject: Re: [PATCH 25/30] mds: bring back old style backtrace handling
Date: Fri, 24 May 2013 08:57:57 +0800 [thread overview]
Message-ID: <519EBB15.30203@intel.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1305231549010.29396@cobra.newdream.net>
On 05/24/2013 06:58 AM, Sage Weil wrote:
> On Thu, 23 May 2013, Yan, Zheng wrote:
> [snip]
>> +
>> +void CInode::store_backtrace(Context *fin)
>> +{
>> + dout(10) << "store_backtrace on " << *this << dendl;
>> + assert(is_dirty_parent());
>> +
>> + auth_pin(this);
>> +
>> + int64_t pool;
>> + if (is_dir())
>> + pool = mdcache->mds->mdsmap->get_metadata_pool();
>> + else
>> + pool = inode.layout.fl_pg_pool;
>> +
>> + inode_backtrace_t bt;
>> + build_backtrace(pool, &bt);
>> + bufferlist bl;
>> + ::encode(bt, bl);
>> +
>> + // write it.
>> + SnapContext snapc;
>> + object_t oid = get_object_name(ino(), frag_t(), "");
>> + object_locator_t oloc(pool);
>> + Context *fin2 = new C_Inode_StoredBacktrace(this, inode.backtrace_version, fin);
>> +
>> + if (!state_test(STATE_DIRTYPOOL)) {
>> + mdcache->mds->objecter->setxattr(oid, oloc, "parent", snapc, bl,
>> + ceph_clock_now(g_ceph_context),
>> + 0, NULL, fin2);
>> + return;
>> + }
>> +
>> + C_GatherBuilder gather(g_ceph_context, fin2);
>> + mdcache->mds->objecter->setxattr(oid, oloc, "parent", snapc, bl,
>> + ceph_clock_now(g_ceph_context),
>> + 0, NULL, gather.new_sub());
>> + for (set<int64_t>::iterator p = bt.old_pools.begin();
>> + p != bt.old_pools.end();
>> + ++p) {
>> + object_locator_t oloc2(*p);
>> + mdcache->mds->objecter->setxattr(oid, oloc2, "parent", snapc, bl,
>> + ceph_clock_now(g_ceph_context),
>> + 0, NULL, gather.new_sub());
>> + }
>
> I think for both of theese operations we need an ObjectWriteOperation that
> does a touch() and then tsetxattr to ensure the object actually exists.
>
will add it
> Also, if one mds has a backtrace write in flight, exports teh inode, and
> the second mds needs to update it, we need to make sure they don't race
> and overwrite a newer trace with an older one. That could be done with a
> parent_version xattr with the backttrace_version in it and a generic rados
> cmpxattr guard, I believe. Even then we may race with an unlink, but that
> may be something we just tolerate...
>
my code calls auth_pin() in CInode::store_backtrace(). I think it also avoid
the race.
Regards
Yan, Zheng
next prev parent reply other threads:[~2013-05-24 0:58 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-23 8:06 [PATCH 0/30] mds: lookup-by-ino & fixes Yan, Zheng
2013-05-23 8:06 ` [PATCH 01/30] mds: journal new subtrees created by rename Yan, Zheng
2013-05-23 8:06 ` [PATCH 02/30] mds: fix underwater dentry cleanup Yan, Zheng
2013-05-23 8:06 ` [PATCH 03/30] mds: don't stop at export bounds when journaling dir context Yan, Zheng
2013-05-23 8:06 ` [PATCH 04/30] mds: adjust subtree auth if import aborts in PREPPED state Yan, Zheng
2013-05-23 8:06 ` [PATCH 05/30] mds: fix uncommitted master wait Yan, Zheng
2013-05-23 8:06 ` [PATCH 06/30] mds: fix slave commit tracking Yan, Zheng
2013-05-23 8:06 ` [PATCH 07/30] mds: fix straydn race Yan, Zheng
2013-05-23 16:44 ` Sage Weil
2013-05-27 2:09 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 08/30] mds: fix import cancel race Yan, Zheng
2013-05-23 8:06 ` [PATCH 09/30] mds: fix typo in Server::do_rename_rollback Yan, Zheng
2013-05-23 8:06 ` [PATCH 10/30] mds: remove buggy cache rejoin code Yan, Zheng
2013-05-23 8:06 ` [PATCH 11/30] mds: unfreeze inode when after rename rollback finishes Yan, Zheng
2013-05-23 8:06 ` [PATCH 12/30] mds: send slave request after target MDS is active Yan, Zheng
2013-05-23 8:06 ` [PATCH 13/30] mds: export CInode::STATE_NEEDSRECOVER Yan, Zheng
2013-05-23 17:59 ` Sage Weil
2013-05-27 2:11 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 14/30] mds: export CInode:mds_caps_wanted Yan, Zheng
2013-05-23 18:04 ` Sage Weil
2013-05-27 2:12 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 15/30] mds: notify auth MDS when cap_wanted changes Yan, Zheng
2013-05-23 8:06 ` [PATCH 16/30] mds: fix Locker::request_inode_file_caps() Yan, Zheng
2013-05-23 8:06 ` [PATCH 17/30] mds: defer releasing cap if necessary Yan, Zheng
2013-05-23 8:06 ` [PATCH 18/30] mds: don't issue Fc cap from replica Yan, Zheng
2013-05-23 18:11 ` Sage Weil
2013-05-27 2:13 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 19/30] mds: fix check for base inode discovery Yan, Zheng
2013-05-23 8:06 ` [PATCH 20/30] mds: slient MDCache::trim_non_auth() Yan, Zheng
2013-05-23 8:06 ` [PATCH 21/30] mds: warn on unconnected snap realms Yan, Zheng
2013-05-23 8:06 ` [PATCH 22/30] mds: reorder EMetaBlob::add_primary_dentry's parameters Yan, Zheng
2013-05-23 8:06 ` [PATCH 23/30] mds: journal backtrace update in EMetaBlob::fullbit Yan, Zheng
2013-05-28 3:08 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 24/30] mds: rename last_renamed_version to backtrace_version Yan, Zheng
2013-05-23 8:06 ` [PATCH 25/30] mds: bring back old style backtrace handling Yan, Zheng
2013-05-23 22:58 ` Sage Weil
2013-05-24 0:57 ` Yan, Zheng [this message]
2013-05-24 1:01 ` Sage Weil
2013-05-27 2:17 ` Yan, Zheng
2013-05-27 20:08 ` Sage Weil
2013-05-28 6:04 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 26/30] mds: update backtraces when unlinking inodes Yan, Zheng
2013-05-23 8:06 ` [PATCH 27/30] mds: remove old backtrace handling Yan, Zheng
2013-05-23 22:46 ` Sage Weil
2013-05-27 2:15 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 28/30] mds: move fetch_backtrace() to class MDCache Yan, Zheng
2013-05-23 8:06 ` [PATCH 29/30] mds: open inode by ino Yan, Zheng
2013-05-27 2:23 ` Yan, Zheng
2013-05-23 8:06 ` [PATCH 30/30] mds: open missing cap inodes Yan, Zheng
2013-05-23 18:22 ` [PATCH 0/30] mds: lookup-by-ino & fixes Sage Weil
2013-05-24 8:44 ` Yan, Zheng
2013-05-27 19:21 ` Sage Weil
2013-05-28 3:03 ` Yan, Zheng
2013-05-30 0:10 ` Sage Weil
2013-05-27 2:56 ` Yan, Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=519EBB15.30203@intel.com \
--to=zheng.z.yan@intel.com \
--cc=ceph-devel@vger.kernel.org \
--cc=greg@inktank.com \
--cc=sage@inktank.com \
--cc=sam.lang@inktank.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.