From: Latchesar Ionkov <lionkov@lanl.gov>
To: Fans of the OS Plan 9 from Bell Labs <9fans@cse.psu.edu>
Subject: Re: [9fans] QTCTL?
Date: Thu, 1 Nov 2007 12:08:49 -0600 [thread overview]
Message-ID: <8FB74D5A-05FB-4827-A564-770449B933DE@lanl.gov> (raw)
In-Reply-To: <8ccc8ba40711011103oaefc553l640ee0e17dddb545@mail.gmail.com>
The problem is that the clients with higher latencies badly need to
be able to cache. And the ones with better latencies can afford not
caching :)
On Nov 1, 2007, at 12:03 PM, Francisco J Ballesteros wrote:
> But 5 seconds would be enough to be convinced that a client is not
> properly
> responding to invalidation requests, and cease all its leases. Why
> make other
> clients wait for more? I mean, assuming a central FS and clients
> connected on star
> to it.
>
> On 11/1/07, Latchesar Ionkov <lionkov@lanl.gov> wrote:
>> The 5 seconds lease might work in the local network case, but not
>> caching at all is going to work out pretty well too. What if you want
>> to cache over Internet and you round-trip is 3-4 seconds :)
>>
>> On Nov 1, 2007, at 11:03 AM, Russ Cox wrote:
>>
>>>> The fact is we have loose consistency now, we just don't call it
>>>> that.
>>>> Anytime you are running a file from a server, you have loose
>>>> consistency. It works ok in most cases.
>>>
>>> Because all reads and writes go through to the
>>> server, all file system operations on a particular
>>> server are globally ordered, *and* that global ordering
>>> matches the actual sequence of events in the
>>> physical world (because clients wait for R-messages).
>>> That's a pretty strong consistency statement!
>>>
>>> Any revocation-based system has to have the server
>>> wait for an acknowledgement from the client.
>>> If there is no wait, then between the time that the server
>>> sends the "oops, stop caching this" and the client
>>> processes it, the client might incorrectly use the
>>> now-invalid data. That's why a change file doesn't
>>> provide the same consistency guarantees as pushing
>>> all reads/writes to the file server. To get those, revocations
>>> fundamentally must wait for the client.
>>>
>>> It's also why this doesn't work:
>>>
>>>> Tcache asks whether the server is prepared to cache
>>>> Rcache makes lease available with parameters, Rerror says no.
>>>>
>>>> Tlease says, ok start my lease now (almost immediately
>>>> follows Rache)
>>>> Rlease lease expired or lease needs to be given back early
>>>>
>>>> Tcache done with old lease (may immediately ask for a new
>>>> lease)
>>>> etc.
>>>
>>> because the Rlease/Tcache sequence is a s->c->s
>>> message. If a client doesn't respond with the Tcache
>>> to formally give up the lease, the server has no choice
>>> but to wait.
>>>
>>> If you are willing to assume that each machine has
>>> a real-time clock that runs approximately at the
>>> same rate (so that different machines agree on
>>> what 5 seconds means, but not necessarily what
>>> time it is right now), then you can fix the above messages
>>> by saying that the client lease is only good for a fixed
>>> time period (say 5 seconds) from the time that the
>>> client sent the Tlease. Then the server can overestimate
>>> the lease length as 5 seconds from when it sent the
>>> Rlease, and everything is safe. And if the server
>>> sends a Rlease and the client doesn't respond with
>>> a Tcache to officially renounce the lease, the server
>>> can just wait until Tlease + 5 seconds and go on.
>>> But that means the client has to be renewing the
>>> lease every 5 seconds (more frequently, actually).
>>>
>>> Also, in the case where the lease is just expiring
>>> but not being revoked, then you have to have some
>>> mechanism for establishing the new lease before
>>> the old one runs out. If there is a time between
>>> two leases when you don't hold any leases, then
>>> all your cached data becomes invalid.
>>>
>>> The following works:
>>>
>>> Tnewlease asks for a new lease
>>> Rnewlease grants the lease, for n seconds starting at time of
>>> Tnewlease
>>>
>>> Trenewlease asks to renew the lease
>>> Rrenewlease grants the renewal for n seconds starting at time of
>>> Trenewlease
>>>
>>> Now if the server needs to revoke the lease, it just
>>> refuses to renew and waits until the current lease expires.
>>>
>>> You can add a pseudo-callback to speed up revocation
>>> with a cooperative client:
>>>
>>> Tneeditback offers to give lease back to server early
>>> Rneeditback says I accept your offer, please do
>>>
>>> Tdroplease gives lease back
>>> Rdroplease says okay I got it (not really necessary)
>>>
>>> The lease ends when the client sends Tdroplease,
>>> *not* when the server sends Rneeditback. It can't end
>>> at Rneeditback for the same reason change files don't work.
>>> And this can *only* be an optimization, because it
>>> depends on the client sending Tdroplease. To get
>>> something that works in the presence of misbehaved
>>> clients you have to be able to fall back on the
>>> "wait it out" strategy.
>>>
>>> One could, of course, use a different protocol with
>>> a 9P front end. That's okay for clients, but you'd still
>>> have to teach the back-end server (i.e. fossil) to speak
>>> the other protocol directly in order to get any guarantees.
>>> (If 9P doesn't cut it then anything that's just in front of
>>> (not in place of) a 9P server can't solve the problem.)
>>>
>>> Russ
>>>
>>
>>
next prev parent reply other threads:[~2007-11-01 18:08 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-31 18:40 Francisco J Ballesteros
2007-10-31 18:56 ` Eric Van Hensbergen
2007-10-31 19:13 ` Charles Forsyth
2007-10-31 19:33 ` Eric Van Hensbergen
2007-10-31 19:39 ` erik quanstrom
2007-10-31 20:43 ` geoff
2007-10-31 21:32 ` Charles Forsyth
2007-10-31 22:48 ` roger peppe
2007-10-31 23:35 ` erik quanstrom
2007-11-01 9:29 ` roger peppe
2007-11-01 11:03 ` Eric Van Hensbergen
2007-11-01 11:19 ` Charles Forsyth
2007-11-01 12:11 ` erik quanstrom
2007-10-31 19:42 ` erik quanstrom
2007-10-31 19:49 ` Eric Van Hensbergen
2007-10-31 20:03 ` erik quanstrom
2007-10-31 20:10 ` Latchesar Ionkov
2007-10-31 20:12 ` Eric Van Hensbergen
2007-10-31 20:17 ` Russ Cox
2007-10-31 20:29 ` Francisco J Ballesteros
2007-10-31 20:48 ` Charles Forsyth
2007-10-31 21:23 ` Francisco J Ballesteros
2007-10-31 21:40 ` Russ Cox
2007-10-31 22:11 ` Charles Forsyth
2007-10-31 22:26 ` Francisco J Ballesteros
2007-10-31 22:37 ` Charles Forsyth
2007-10-31 22:43 ` Francisco J Ballesteros
2007-10-31 23:32 ` Eric Van Hensbergen
2007-10-31 23:41 ` [V9fs-developer] " Charles Forsyth
[not found] ` <606b6f003ae9f0ed3e8c3c5f90ddc720@terzarima.net>
2007-11-01 1:13 ` Eric Van Hensbergen
2007-10-31 23:54 ` erik quanstrom
2007-11-01 0:03 ` Charles Forsyth
2007-11-01 1:25 ` Eric Van Hensbergen
2007-11-01 1:44 ` erik quanstrom
2007-11-01 2:15 ` Eric Van Hensbergen
2007-11-01 7:34 ` Skip Tavakkolian
2007-11-01 6:21 ` Bakul Shah
2007-11-01 14:28 ` Russ Cox
2007-11-01 14:38 ` erik quanstrom
2007-11-01 14:41 ` Charles Forsyth
2007-11-01 15:26 ` Sape Mullender
2007-11-01 15:51 ` Latchesar Ionkov
2007-11-01 16:04 ` ron minnich
2007-11-01 16:16 ` Latchesar Ionkov
2007-11-01 16:21 ` Sape Mullender
2007-11-01 16:58 ` Francisco J Ballesteros
2007-11-01 17:11 ` Charles Forsyth
2007-11-01 17:11 ` Francisco J Ballesteros
2007-11-01 17:13 ` Sape Mullender
2007-11-01 17:38 ` ron minnich
2007-11-01 17:56 ` Francisco J Ballesteros
2007-11-01 18:01 ` Francisco J Ballesteros
2007-11-01 18:52 ` Eric Van Hensbergen
2007-11-01 19:29 ` Francisco J Ballesteros
2007-11-01 23:24 ` ron minnich
2007-11-01 17:03 ` Russ Cox
2007-11-01 17:12 ` Sape Mullender
2007-11-01 17:35 ` erik quanstrom
2007-11-01 18:36 ` erik quanstrom
2007-11-01 17:13 ` Charles Forsyth
2007-11-01 17:16 ` Charles Forsyth
2007-11-01 17:20 ` Charles Forsyth
2007-11-01 17:52 ` Eric Van Hensbergen
2007-11-01 18:00 ` Latchesar Ionkov
2007-11-01 18:03 ` Francisco J Ballesteros
2007-11-01 18:08 ` Latchesar Ionkov [this message]
2007-11-01 18:16 ` erik quanstrom
2007-11-01 18:19 ` Francisco J Ballesteros
2007-11-01 18:35 ` Sape Mullender
2007-11-01 19:09 ` Charles Forsyth
2007-11-01 19:07 ` erik quanstrom
2007-11-01 17:14 ` Bakul Shah
2007-11-01 16:17 ` Sape Mullender
2007-11-01 16:27 ` Sape Mullender
2007-11-01 16:58 ` Sape Mullender
2007-11-01 16:59 ` Bakul Shah
2007-11-01 4:21 Brian L. Stuart
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=8FB74D5A-05FB-4827-A564-770449B933DE@lanl.gov \
--to=lionkov@lanl.gov \
--cc=9fans@cse.psu.edu \
/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;
as well as URLs for NNTP newsgroup(s).