Re: [nfsv4] Server-side copy question

David Noveck <davenoveck@gmail.com> Sat, 18 February 2017 12:45 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 2653F129424 for <nfsv4@ietfa.amsl.com>; Sat, 18 Feb 2017 04:45:53 -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 gvKNu_tm7t8X for <nfsv4@ietfa.amsl.com>; Sat, 18 Feb 2017 04:45:51 -0800 (PST)
Received: from mail-oi0-x229.google.com (mail-oi0-x229.google.com [IPv6:2607:f8b0:4003:c06::229]) (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 6D22E126CD8 for <nfsv4@ietf.org>; Sat, 18 Feb 2017 04:45:51 -0800 (PST)
Received: by mail-oi0-x229.google.com with SMTP id 62so22066785oih.2 for <nfsv4@ietf.org>; Sat, 18 Feb 2017 04:45:51 -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=/64lDY725TWt9XwCGs0jbqm2K4+L5tqzE+u15snPLc0=; b=Zwt+siD5ftQ5Frot1hYahnvPGZG6ORuk7sS3Lrf1AHs5vc1NJ4HAVrEccIOG0uvjeN Ddk9al9F08Cs2zjboqyQu3ENyPqrpFg1j3HkldVTRFKl6SIPtUj7aybZJGwDXI40Z0F+ ARHYtIO7LNPJXJVnYGICHnnXKLKtqMKCaSdAjM6f6H1qZxJofw5O1y92TFpvAc/bN9X4 6KliQRZqCS6O1ve8ADM4qEnJgF2Eb/1qZZBxq+9dyflHTp9s4vobVCsz4fAkNxlnCjvg +ROVw3A+9K2AxpyVw7OqTZ+IIeMASC4O5/U9NWWeRUVsakyGf0bTjkNwL+5pMVQWqg8Q vqdQ==
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=/64lDY725TWt9XwCGs0jbqm2K4+L5tqzE+u15snPLc0=; b=NuOs3F+A2Baz5gahnzxllMbvOiTC/IFiomBaMU1ZpS8bmXBe4kI+yns2l7moRiz8Q5 v3+DiAKybM8xDvD0gUi7jbZMmpK8LO47iDiiT4o4/Wp3syURlyNyVtUnIBHoo0uSbked 3IMuY7uHXNqdf4rHwOI1GUI2q9dYCG0qaCAFJsIE3ieu166FmCOSwM8ia+st6r4cq2YM jsszEGcRCbBXUfFJwN4GDUpSwq8SGCQ6PL2ZtKQgQV4i9F69WFB12R3icb5d8/u0Yh7t W51PwMqMEXcthiw8rgpnUihyMtf+jiv4utN0dHou+DKsnkUPGfIE/upCO0hPsZQeJfVp ZCkw==
X-Gm-Message-State: AMke39m2BR+20TN8y7bN0/LgSa6Pq/2EjQNMrTK8a2gmWUR7jTLD6VYK3GOhnAVFeQ/jx/kIXS5a2JltySgmcw==
X-Received: by 10.202.212.70 with SMTP id l67mr6636755oig.153.1487421950507; Sat, 18 Feb 2017 04:45:50 -0800 (PST)
MIME-Version: 1.0
Received: by 10.182.137.200 with HTTP; Sat, 18 Feb 2017 04:45:50 -0800 (PST)
In-Reply-To: <20170217195149.GH10894@fieldses.org>
References: <B65A07BE-E379-4507-A9B8-6927DF61A0A5@netapp.com> <CADaq8jdhK2NbJrAa0UHacvBS1w0ucoVpc1LJA3=mxH+_iBfMPQ@mail.gmail.com> <20170217195149.GH10894@fieldses.org>
From: David Noveck <davenoveck@gmail.com>
Date: Sat, 18 Feb 2017 07:45:50 -0500
Message-ID: <CADaq8jc4XRaFSXz7mberFi0Dr-f+FaQcZFi=gKn9OjUifrNSyw@mail.gmail.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Content-Type: multipart/alternative; boundary="001a113deff4fdc2580548cd687d"
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/ipAugQsaPgjBv5gRGq8hia4Lh4s>
Cc: "nfsv4@ietf.org" <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 12:45:53 -0000

> > 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.
>