From: Sam Lang <sam.lang@inktank.com>
To: Gregory Farnum <greg@inktank.com>
Cc: Noah Watkins <jayhawk@cs.ucsc.edu>,
ceph-devel <ceph-devel@vger.kernel.org>,
Sage Weil <sage@inktank.com>
Subject: Re: Hadoop and Ceph client/mds view of modification time
Date: Tue, 27 Nov 2012 11:12:12 -0600 [thread overview]
Message-ID: <50B4F46C.7090504@inktank.com> (raw)
In-Reply-To: <8707A447F7754068A1D89D240265E1B7@inktank.com>
On 11/27/2012 11:07 AM, Gregory Farnum wrote:
> On Tuesday, November 27, 2012 at 8:45 AM, Sam Lang wrote:
>>
>> Hi Noah,
>>
>> I was able to reproduce your issue with a similar test using the fuse
>> client and the clock_offset option for the mds. This is what I see
>> happening:
>>
>> clientA's clock is a few seconds behind the mds clock
>>
>> clientA creates the file
>> - the mds sets the mtime from its current time
>> - clientA acquires the exclusive capability (cap) for the file
>>
>> clientA writes to the file
>> - the mtime is updated locally (at clientA with its current time)
>>
>> clientA closes the file
>> - the exclusive cap is flushed to the mds, but the mtime is less
>> than the create mtime because of the clock skew, so the mds
>> doesn't update it to the mtime from clientA's write
>>
>> clientA stats the file
>> - the mtime from the write (still cached) gets returned. I saw a
>> race in my tests, where sometimes the mtime was from the cache
>> (if the flush hadn't completed I assume), and sometimes it was
>> from the mds.
>>
>> clientB stats the file
>> - the exclusive cap is revoked at clientA, but the mtime returned
>> to clientB is from the mds
>
> Hurray, I think we all agree about what's happening now! :)
>
> Have you checked to see if the MDS ever sets mtime after create, or is it always dictated by the client following that?
It sets it on truncate as well.
-sam
>
>>
>> The goal of the current implementation is to provide an mtime that is
>> non-decreasing, but that conflicts with using mtime as a version in this
>> case. Using mtime as a version has its own set of problems, but I won't
>> go into that here. I think there are a few alternatives if we want to
>> try to have a more consistent mtime value across clients.
>>
>> 1. Let the client set the create mtime. This avoids the issue that the
>> mds and client clocks are out of sync, but in other cases where the
>> client has a clock a few seconds ahead of other clients, we run into a
>> similar problem. This might be reasonable considering clients that
>> share state will more likely have synchronized clocks than the clients
>> and mds.
>>
>> 2. Provide a config option to always set the mtime on cap flush/revoke,
>> even if its less than the current mtime. This breaks the non-decreasing
>> behavior, and requires the user set a config option across the cluster
>> if they want this.
>>
>> 3. When a client acquires the cap for a file, have the mds provide its
>> current time as well. As the client updates the mtime, it uses the
>> timestamp provided by the mds and the time since the cap was acquired.
>> Except for the skew caused by the message latency, this approach allows
>> the mtime to be based off the mds time, so it will be consistent across
>> clients and the mds. It does however, allow a client to set an mtime to
>> the future (based off of its local time), which might be undesirable,
>> but that is more like how NFS behaves. Message latency probably won't
>> be much of an issue either, as the granularity of mtime is a second.
>> Also, the client can set its cap acquired timestamp to the time at which
>> the cap was requested, ensuring that the relative increment includes the
>> round trip latency so that the mtime will always be set further ahead.
>> Of course, this approach would be a lot more intrusive to implement. :-)
>
> I actually like this third approach of letting the MDS be authoritative about time even if it's not directly involved. Given that, I wonder if perhaps the client should just have time translation functions it uses everywhere?
> However, the problem with that is that the different MDS daemons might also disagree about time. Perhaps they could adopt the master MDS clock or something skanky like that… :/
>
> The fundamental issue of time resolution is why things are the way they are now, of course — you usually don't want things going "backwards" in time, but clock skews are a real problem in large clusters so we just decided to not let things go back on the assumption it would be a temporary and little-noticed disparity, with easy-to-understand behavior. Obviously we were wrong about it being little-noticed.
>
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
prev parent reply other threads:[~2012-11-27 17:12 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-20 19:44 Hadoop and Ceph client/mds view of modification time Noah Watkins
2012-11-20 20:20 ` Sam Lang
2012-11-21 16:43 ` Noah Watkins
2012-11-27 16:45 ` Sam Lang
2012-11-27 17:03 ` Sage Weil
2012-11-27 17:09 ` David Zafman
2012-11-27 18:01 ` Sage Weil
2012-11-27 19:05 ` Sam Lang
2012-11-27 19:38 ` David Zafman
2012-11-27 21:14 ` Sam Lang
2012-11-27 22:02 ` David Zafman
2012-11-27 19:59 ` Sage Weil
2012-11-27 17:33 ` Sam Lang
2012-11-27 17:07 ` Gregory Farnum
2012-11-27 17:12 ` Sam Lang [this message]
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=50B4F46C.7090504@inktank.com \
--to=sam.lang@inktank.com \
--cc=ceph-devel@vger.kernel.org \
--cc=greg@inktank.com \
--cc=jayhawk@cs.ucsc.edu \
--cc=sage@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox