Re: [nfsv4] Server-side copy question

David Noveck <davenoveck@gmail.com> Sat, 18 February 2017 20:57 UTC

Return-Path: <davenoveck@gmail.com>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 22D451295CC for <nfsv4@ietfa.amsl.com>; Sat, 18 Feb 2017 12:57:23 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level:
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2ghGBapCT2dc for <nfsv4@ietfa.amsl.com>; Sat, 18 Feb 2017 12:57:21 -0800 (PST)
Received: from mail-oi0-x232.google.com (mail-oi0-x232.google.com [IPv6:2607:f8b0:4003:c06::232]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8273012953E for <nfsv4@ietf.org>; Sat, 18 Feb 2017 12:57:21 -0800 (PST)
Received: by mail-oi0-x232.google.com with SMTP id 62so24753158oih.2 for <nfsv4@ietf.org>; Sat, 18 Feb 2017 12:57:21 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=x+lNAIvtNqQheBs8Jcf1Du8xRbxVsQgHHsgclwzYCio=; b=XNX5rTi6SCgYWTefJ/p0mVhsdb0eYRNKQfe6XVoRAGbJU+QiLJgV+7jpu0ITqj7TG6 0ucxTHNdFGBK4/3WVsK2BzswRPPxqKh7w7HPGH2VoZ3KOYMvHMVhNmXw5fjlQiLYC9pp +7WP5VIE7sUg5ZAXAyAosTEMOZGWUcO7edWpU4Crh0I2YqpiePEJTYqurCog6/M4ZVis KyphiDAI6zFdEpsY7KDhmnPsYgrU18kcHmAIMnxeXe8Q+R8Zv1COmKntX/kolOA+Ugaq dAKk9fXZub6T9W8wsWsev6bozZjdrhyEZlgfS/dEDyQPZw1aCpgZwgYeAOdAYHRSJZMz H8CQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=x+lNAIvtNqQheBs8Jcf1Du8xRbxVsQgHHsgclwzYCio=; b=QK/RlS2bkKcsDSmdzgk4EBvNCLi/1eCUE+1O/Gu9A03wA1CD73V7ESy7e94wQTXxQq LHDQftZws6DIDa22/ma3IN1wgmUCZjI9WsW9o56q3SG0wadYmbAOciX895X7ZiJd5WSN VG2gSRiw1la6PjZTDunM1oYzAa4STBmfaac1fTAbRgxagh3Le60NClvR8VqCHuPIebCb cQZ8A2gUrclIa/ev6bygcOUfK8+xNWjr5uWH8ItwKZVaJO0hKl8FHQfHeCee4wFg+UVd 7PYwXmnOEHNDLZeRQm3AlB5owqEjL4C7R+9lHZAOQyUh1CMfp3dLplAc8WHILUqQ5TDJ NaOw==
X-Gm-Message-State: AMke39nkrt0r9MhKT4kRWbZaiB9q/0SeXU0+SFFgatYzQRnlgK/kvFinJs22WwjPuqW+PNZcP7jLB6gy4DUZmQ==
X-Received: by 10.202.84.194 with SMTP id i185mr7260041oib.50.1487451440526; Sat, 18 Feb 2017 12:57:20 -0800 (PST)
MIME-Version: 1.0
Received: by 10.182.137.200 with HTTP; Sat, 18 Feb 2017 12:57:20 -0800 (PST)
In-Reply-To: <3889A2C2-9261-4809-92F9-9CF2F00A894D@gmail.com>
References: <B65A07BE-E379-4507-A9B8-6927DF61A0A5@netapp.com> <CADaq8jdhK2NbJrAa0UHacvBS1w0ucoVpc1LJA3=mxH+_iBfMPQ@mail.gmail.com> <20170217195149.GH10894@fieldses.org> <CADaq8jc4XRaFSXz7mberFi0Dr-f+FaQcZFi=gKn9OjUifrNSyw@mail.gmail.com> <3889A2C2-9261-4809-92F9-9CF2F00A894D@gmail.com>
From: David Noveck <davenoveck@gmail.com>
Date: Sat, 18 Feb 2017 15:57:20 -0500
Message-ID: <CADaq8jeo_r8jqj_WK3khX38LvwE0bG+5xdEwmkAwq-N6pCTeAg@mail.gmail.com>
To: Trond Myklebust <trondmy@gmail.com>
Content-Type: multipart/alternative; boundary="001a113d2eb8bbbbd80548d4463e"
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/hApa0kraaT0_4Zc00RHi27qc-Cg>
Cc: Bruce James Fields <bfields@fieldses.org>, IETF NFSv4 WG Mailing List <nfsv4@ietf.org>
Subject: Re: [nfsv4] Server-side copy question
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/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: Sat, 18 Feb 2017 20:57:23 -0000

> Could we please make that message to implementors stronger, but saying “the server SHOULD limit the are to be copied to reflect the size of the source file, but it MAY fail the operation with NFS4ERR_INVAL”?

I think we can do something in this regard but your text is not in
accord with RFC2119, although I recall seeing things like this in
other documents.  SHOULD means a client is allowed to do something
else under some fairly restrictive conditions while MAY says he can
choose to do something simply because he wants to.  While it is
reasonable to say you "should do X by may do Y", saying you "SHOULD do
X but MAY do Y" is almost always self-contradictory.

How about leaving the proposed text and adding the following sentence?

The latter is generally preferable since the former might  force
clients implementing primitives for copying byte ranges to check the
size of the file before issuing the copy, which in turn raises issues
because such a check and the copy are done at different times and the
size might change between the two operations.


On Sat, Feb 18, 2017 at 1:29 PM, Trond Myklebust <trondmy@gmail.com> wrote:

>
> So here is my proposed corrected text:
>
> When the source offset is greater than the size of the source file, the
> error
>
> is reported by failing the operation with NFS4ERR_INVAL.  Otherwise, If
>
> the source offset plus count is greater than the size of the source file,
> the
>
> server MAY fail the operation with NFS4ERR_INVAL.or limit the area to
>
> be copied to reflect the size of the source file.
>
> Could we please make that message to implementors stronger, but saying
> “the server SHOULD limit the are to be copied to reflect the size of the
> source file, but it MAY fail the operation with NFS4ERR_INVAL”?
>
> Cheers
>   Trond
>
>
>
> On Feb 18, 2017, at 07:45, David Noveck <davenoveck@gmail.com> wrote:
>
> > > I agree but think that the most expedient way of addressing this
> problem is
> > > in the Linux client,  It can check against the file size before
> issuing the
> > > COPY request  to prevent an erroneous INVAL error being returned.
>
> > That doesn't work, due to races with concurrent modifications to the
> > file.
>
> I'm not sure whether it works or not.  I can't find an obvious breakage
> but I can't prove that none exists.
>
> In any case, we can't consider this an easy fix for the issue.
>
> > The server itself would seem susceptible to such races: if it implements
> > the copy as a read-write loop then blocking concurrent truncates
> > probably isn't reasonable, so its only choice is a short copy.  (Too
> > late to return INVAL once you've written to the destination....).
>
> That's an implementation problem that would exist no matter
> what we do to the spec text under discussion.
>
> > I really think the spec's just wrong here.'
>
> I agree, as does Tom and Jorge as well I suppose.   Nobody has said it
> was a good choice.
>
> The question is what to do to fix it.  This is particularly difficult given
> the misuse of "MUST".  The problem I'm worried about is that
> the existing approach is presented as required for interoperability.
> We know of cases where that approach has been followed and
> the problem is that the existing spec essentially says that clients
> might break if servers do something else. :-(
>
> We know that isn't true but sombody (Spencer D?) is going to have
> to convince people in the IESG of that.
>
> So I think the focus of any correction has to be on the fact that the
> "MUST"
> is wrong rather than on the fact (also true) that the wrong behavior was
> chosen.
>
> So here is my proposed corrected text:
>
> When the source offset is greater than the size of the source file, the
> error
>
> is reported by failing the operation with NFS4ERR_INVAL.  Otherwise, If
>
> the source offset plus count is greater than the size of the source file,
> the
>
> server MAY fail the operation with NFS4ERR_INVAL.or limit the area to
>
> be copied to reflect the size of the source file.
>
>
>
>
> On Fri, Feb 17, 2017 at 2:51 PM, J. Bruce Fields <bfields@fieldses.org>
> wrote:
>
>> On Thu, Feb 16, 2017 at 08:00:36AM -0500, David Noveck wrote:
>> > I agree but think that the most expedient way of addressing this
>> problem is
>> > in the Linux client,  It can check against the file size before issuing
>> the
>> > COPY request  to prevent an erroneous INVAL error being returned.
>>
>> That doesn't work, due to races with concurrent modifications to the
>> file.
>>
>> The server itself would seem succeptible to such races: if it implements
>> the copy as a read-write loop then blocking concurrent truncates
>> probably isn't reasonable, so its only choice is a short copy.  (Too
>> late to return INVAL once you've written to the destination....).
>>
>> I really think the spec's just wrong here.
>>
>> --b.
>>
>
> _______________________________________________
> nfsv4 mailing list
> nfsv4@ietf.org
> https://www.ietf.org/mailman/listinfo/nfsv4
>
>
>