Re: [nfsv4] parallel LAYOUTGETs using open stateid

Benny Halevy <bhalevy@panasas.com> Wed, 24 November 2010 22:32 UTC

Return-Path: <bhalevy@panasas.com>
X-Original-To: nfsv4@core3.amsl.com
Delivered-To: nfsv4@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 4ABB028C175 for <nfsv4@core3.amsl.com>; Wed, 24 Nov 2010 14:32:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.274
X-Spam-Level:
X-Spam-Status: No, score=-3.274 tagged_above=-999 required=5 tests=[AWL=-1.009, BAYES_00=-2.599, IP_NOT_FRIENDLY=0.334]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ntixYgRaueSv for <nfsv4@core3.amsl.com>; Wed, 24 Nov 2010 14:32:25 -0800 (PST)
Received: from daytona.panasas.com (daytona.panasas.com [67.152.220.89]) by core3.amsl.com (Postfix) with ESMTP id 4D8DE28C1A8 for <nfsv4@ietf.org>; Wed, 24 Nov 2010 14:32:24 -0800 (PST)
Received: from fs1.bhalevy.com ([172.17.33.15]) by daytona.panasas.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 24 Nov 2010 17:33:24 -0500
Message-ID: <4CED92B3.10400@panasas.com>
Date: Thu, 25 Nov 2010 00:33:23 +0200
From: Benny Halevy <bhalevy@panasas.com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101027 Fedora/3.1.6-1.fc13 Thunderbird/3.1.6
MIME-Version: 1.0
To: Trond Myklebust <Trond.Myklebust@netapp.com>
References: <AANLkTinZ1t1YbL55vkT0OJ0i2j9AqNuvFStTwFoGO-dB@mail.gmail.com> <AANLkTin+0BG=u3o2DZcHgdODoaznePOeTrmQJfh9C6Ym@mail.gmail.com> <4CADD6C7.7030400@panasas.com> <AANLkTindm47sCPBtxAaMhhCtyghWkhJ6VHiP++0PooK1@mail.gmail.com> <1290551533.16684.16.camel@heimdal.trondhjem.org>
In-Reply-To: <1290551533.16684.16.camel@heimdal.trondhjem.org>
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 7bit
X-OriginalArrivalTime: 24 Nov 2010 22:33:25.0103 (UTC) FILETIME=[9B859FF0:01CB8C27]
Cc: nfsv4@ietf.org
Subject: Re: [nfsv4] parallel LAYOUTGETs using open stateid
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/nfsv4>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 24 Nov 2010 22:32:26 -0000

On 2010-11-24 00:32, Trond Myklebust wrote:
> On Tue, 2010-11-02 at 00:47 -0400, Fred Isaman wrote:
>> On Thu, Oct 7, 2010 at 10:18 AM, Benny Halevy <bhalevy@panasas.com> wrote:
>>> On 2010-10-07 09:50, Benny Halevy wrote:
>>>> On Thu, Oct 7, 2010 at 9:21 AM, Fred Isaman <iisaman@citi.umich.edu> wrote:
>>>>> This question came up as I was going through our layout stateid code.
>>>>>
>>>>> Can the client send multiple LAYOUTGETs in parallel before getting a
>>>>> layoutstateid by using an open stateid?
>>>>> If so, what is the server response?  The spec is not clear, but I
>>>>> would assume it would do one of:
>>>>> a) returning an error (what error?) on all but the first LAYOUTGET it sees
>>>>> b) matching the openstateid to the layoutstateid it has already given
>>>>> out and sending a reply with that stateid and a bumped seqid
>>>>
>>>> I'm in favour of (b).
>>>
>>> Just to clarify, what matters in this case is the returned logr_stateid
>>> and seqid while the sent loga_stateid does not matter much.
>>> If there's a pending layout recall on the server which has not been
>>> completed by a matching LAYOUTRETURN the server can safely assume
>>> that the layoutget was sent before the client received the CB_LAYOUTRECALL
>>> and return NFS4ERR_RECALLCONFLICT.
>>>
>>> Benny
>>>
>>>> Are there any problems you see in that approach?
>>>>
>>>> Benny
>>
>> After giving this more thought, I have decided that, because of the
>> forgetful model, the spec gives the server no choice when responding
>> to a LAYOUTGET(openstateid) but to assume that the client has
>> forgotten all previous layouts, so it must hand out a new stateid.
>> Which means that the client MUST serialize any openstate LAYOUTGETs,
>> since otherwise it has no means to determine which order the server
>> processed them, which means it can't tell which is the single
>> currently valid response (which would be the one the server processed
>> last.)
> 
> The other point here is that section 18.43.3 explicitly states that 
> 
>         "Once a layout is held on the file by the client, the
>         loga_stateid field MUST be a stateid as returned from a previous
>         LAYOUTGET or LAYOUTRETURN operation or provided by a
>         CB_LAYOUTRECALL operation"
> 
> Leaving aside the issue of why we would even bother allowing the client
> to use a layout stateid as a loga_stateid, if you can just send the open
> stateid and expect the same results; the above text is very explicit. If
> the client thinks it holds a layout, it MUST send the layout stateid. If
> not, the server must clearly be entitled to assume that the client
> believes that it doesn't hold a layout.

That won't hold water if the client is allowed to send multiple such
LAYOUTGETs in parallel.

Benny

> 
> Cheers
>   Trond