Re: [nfsv4] Server-side copy question

Olga Kornievskaia <aglo@citi.umich.edu> Tue, 24 October 2017 15:52 UTC

Return-Path: <olga.kornievskaia@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 8677813939B for <nfsv4@ietfa.amsl.com>; Tue, 24 Oct 2017 08:52:27 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.399
X-Spam-Level:
X-Spam-Status: No, score=-2.399 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.199, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=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 A0iubmYQS2Mo for <nfsv4@ietfa.amsl.com>; Tue, 24 Oct 2017 08:52:19 -0700 (PDT)
Received: from mail-vk0-x22d.google.com (mail-vk0-x22d.google.com [IPv6:2607:f8b0:400c:c05::22d]) (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 73146139209 for <nfsv4@ietf.org>; Tue, 24 Oct 2017 08:52:19 -0700 (PDT)
Received: by mail-vk0-x22d.google.com with SMTP id j2so13698431vki.4 for <nfsv4@ietf.org>; Tue, 24 Oct 2017 08:52:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-transfer-encoding; bh=KPftdDfUmDh2MDgXbAe4hyC0ip1Q2ntj3vyYG+MdJ64=; b=B2NVRO7h5ToqLxGIzHOgbvv410bfzqpNb8W5MK51f7fIcv3YkAm5kEPbprN791GwN6 0SWWtgqKtTGmU9dqlzBn5/CoJNuv+uZlvjwi/6XiF0zF4337XBbs/e3jDuFLgKz2DxfC 9W8zw1QEMi82p+FLDluXlkIJHDOXCQKGJE5qZTTOBfGYv8lfhJntr7Misl0EwKORKYG/ 4XTRAWG5oTbyuluKW+/gQ1GurpTn29Tgam3zlFpQebiHykDaWgxwGGhcZDws8iGkGIRR ldsl+UHN4BwLcsbPPqxzWw3E5OrlXZlT3S5Bvnk4SGJXDj52YoSMUbsnYkKLf7ZiIngi s72A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc:content-transfer-encoding; bh=KPftdDfUmDh2MDgXbAe4hyC0ip1Q2ntj3vyYG+MdJ64=; b=bWVGvEblGkXJ+g1jGmy5CW3W3E6OgdWhhhW7d20abpjefSuH6wytnkFIyqMazmDrhc BsfTu7ElOI2AwAqkMD7txz6oZxIenPVMjexB+2bFUy/KEl9fQQ5sfr+oEgn8Tou2K6eR Rss6nbY/7LpQ8V0opM7ZkaWhF+3JHzoi9BSWtaC+P3wgIXkjJfXnz6yDfC2jM2wZ8WmW 8k9igywnUgR08zbRFmQRwBQKqZLfSS8Jq2aBH6LyPRSH8Mi82kRmQf2uVa29JmdQ9jwF T4eZUapJ9yuCEjSe1aB80m3ABNvAfN2CBlTTQvMTMLZSN3vh5ZBzWlg5SB0OqFv5w19p 30Qw==
X-Gm-Message-State: AMCzsaVTUKKdhFVgDx8eHtr2ydg8QoYEXj5YN2HccJCLd0piX+DHYjyZ zxj6IxRnJZfZsYNWJFugMEhSzdfjPr4PZxQlepM=
X-Google-Smtp-Source: ABhQp+Tt06VYG6OOIMR37kvOhXanytSGP2cGE3ai4ikRvc6Swz7yfmaNOWMh957PQVACzuU28PIRgk0qJkpDX3600mY=
X-Received: by 10.31.89.7 with SMTP id n7mr12375979vkb.77.1508860338275; Tue, 24 Oct 2017 08:52:18 -0700 (PDT)
MIME-Version: 1.0
Sender: olga.kornievskaia@gmail.com
Received: by 10.103.59.202 with HTTP; Tue, 24 Oct 2017 08:52:17 -0700 (PDT)
In-Reply-To: <CADaq8jdWkTfQB-Y55ow1A23AGCVM12LtwjXYZ6E7zU7M=Aw89g@mail.gmail.com>
References: <CADaq8jc6vWdXonTs3795QWO8SWJTudo=x9=gR4uKN+tnfBk+dw@mail.gmail.com> <20170224222135.GJ26378@fieldses.org> <CAN-5tyHJb=ercWh_W2uzPfKR86j=dGWx=zYH1y+TjbNTzYh38A@mail.gmail.com> <20170228164420.GA28845@fieldses.org> <CADaq8jdivTUVNx2LXCiecAKY-nfoZP_XoAoNLwc3V1TUD6X8vg@mail.gmail.com> <CC84C4DB-F00F-45FC-8307-BDA5424DA480@netapp.com> <20170228173215.GA29700@fieldses.org> <CAN-5tyF8EZjYNX3cE43BPM9CbxVLygRdPuTJf_RgC7ntDCf9Kg@mail.gmail.com> <20171020193306.GF15211@fieldses.org> <CAN-5tyHaJeis=_f9h9u1St76Og3A_TtBUxZx_Z=ZouG7sa2=6w@mail.gmail.com> <20171024013646.GA22943@fieldses.org> <CADaq8jdWkTfQB-Y55ow1A23AGCVM12LtwjXYZ6E7zU7M=Aw89g@mail.gmail.com>
From: Olga Kornievskaia <aglo@citi.umich.edu>
Date: Tue, 24 Oct 2017 11:52:17 -0400
X-Google-Sender-Auth: a1zE2vKq8sHXYACU83UgAvV8OWU
Message-ID: <CAN-5tyHM5suS=iqP0XL3pD2i2YYtU2k1Wd1jnHb+FT52sXzsHw@mail.gmail.com>
To: David Noveck <davenoveck@gmail.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>, "nfsv4@ietf.org" <nfsv4@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/oI95CfEAUIH2AVTqVNuT1F6IeeI>
Subject: Re: [nfsv4] Server-side copy question
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.22
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: Tue, 24 Oct 2017 15:52:27 -0000

On Tue, Oct 24, 2017 at 7:43 AM, David Noveck <davenoveck@gmail.com> wrote:
>> So in the short write case it sounds like it *is* the server's
>> responsibility to commit.
>
> Perhaps it should be the server's responsibility, but it is not,
> according to RFC7862
>
>> That's weird,
>
> I agree that it is wierd.  I feel it is well-intentioned but not viable
> since
> you are essentially creating your own protocol, if clients depend on
> this behavior an there is no point in doing it, if clients do not.
>
>> but as long as the short write
>> case is rare, maybe it's not a big deal?
>
> From a performance point of view, it is not a big deal.  However it is
> a big deal that the spec is broken. I hate when that happens :-(
>
>>Hm: "The coa_bytes_copied value indicates the number of bytes copied but
>> not which specific bytes have been copied."  That makes coa_bytes_copied
>> pretty much worthless.
>
> Any non-zero value of coa_bytes_copied is worthless because the client does
> not know:
>
> Which particular bytes were copied
> Whether those bytes were copied to the destination stably
> How to commit any  non-stably-written bytes.
>
>>I guess I'd be in favor of using the NFS_OK branch of CB_OFFLOAD
>> whenever a nonzero number of bytes is copied.
>
> That's likely to create an interoperability problem, since there are almost
> certainly clients who assume that when there is no error, all requested
> bytes
> have been copied.

I don't think it's true that clients would assume this. I think the
client can only assume server copied as many bytes as it was specified
in the CB_OFFLOAD bytes_copied regardless of how many bytes the client
had asked for. At least that's how I read the spec.

> Basically, the server is pretending there is no error and

Yes, pretending that there was no error is the part I'm not totally
comfortable with. And I agree with the comments that the client can
try again to get the same error.

> then
> relying on the client to figure out that there was one, which could only be
> done if the
> spec tells the clients about this.  If RFC7862 doesn't do this, you wind up
> essentially creating a private protocol.
>
>> If less than the
>> requested number of bytes were copied, the client can always find out
>> the error (if any) by attempting to copy the rest.
>
> Unfortunately there is no way of determining which bytes were copied so
> there
> is no way of knowing "the rest", i.e. the bytes not copied

I would like to understand the comment by Bruce and you about not
knowing which bytes were copied. I don't understand why it would not
be the bytes from the offset to offset+bytes_copied? And Dave,
wouldn't the "rest of the bytes" be the request length - bytes_copied?
What am I missing?

If you are suggested that the server is allowed to copy a requested
range in any order of smaller chunks then there is a problem with a
non-error case because we don't returned in COPY/CB_OFFLOAD offset and
bytes_copied (just bytes_copied).

I think we know which bytes are copied we just don't know how they
were copied: stable or not (if the server chooses to specify an error
in CB_OFFLOAD).

> On Mon, Oct 23, 2017 at 9:36 PM, J. Bruce Fields <bfields@fieldses.org>
> wrote:
>>
>> On Mon, Oct 23, 2017 at 05:43:42PM -0400, Olga Kornievskaia wrote:
>> > On Fri, Oct 20, 2017 at 3:33 PM, J. Bruce Fields <bfields@fieldses.org>
>> > wrote:
>> > > On Wed, Oct 18, 2017 at 05:22:08PM -0400, Olga Kornievskaia wrote:
>> > >> On Tue, Feb 28, 2017 at 12:32 PM, J. Bruce Fields
>> > >> <bfields@fieldses.org> wrote:
>> > >> > On Tue, Feb 28, 2017 at 05:04:27PM +0000, Adamson, Andy wrote:
>> > >> >> I also thought that bytes copied is only included in the success
>> > >> >> case – but as Olga pointed out, not true. The coa_status of NFS4_OK has the
>> > >> >> coa_resok4->wr_count showing the bytes copied, and the default (e.g. failure
>> > >> >> cases) has the coa_bytes_copied.
>> > >> >>
>> > >> >> So the server can send a CB_OFFLOAD with an error (such as the
>> > >> >> –EINVAL in the example) and send the bytes copied in coa_bytes_copied.
>> > >> >>
>> > >> >>    union offload_info4 switch (nfsstat4 coa_status) {
>> > >> >>    case NFS4_OK:
>> > >> >>            write_response4 coa_resok4;
>> > >> >>    default:
>> > >> >>            length4         coa_bytes_copied;
>> > >> >>    };
>> > >> >
>> > >> > Gah, I'm sorry, Olga said CB_OFFLOAD but for some reason I was
>> > >> > looking
>> > >> > at COPY.
>> > >> >
>> > >> > I have no idea what to think of that.  I don't see why it should be
>> > >> > different from COPY.
>> > >>
>> > >> I'd like to resurrect this thread...
>> > >>
>> > >> This discussion was initiated to allow for the server to do a partial
>> > >> copy instead of failing the copy with EINVAL when copy is requested
>> > >> beyond the end of the file.
>> > >>
>> > >> However, the problem I'm running into is that because CB_OFFLOAD only
>> > >> returns "coa_bytes_copied" and does not include stable_how and
>> > >> verifier. So even if client were to then send a COMMIT for the bytes
>> > >> that were copied, it has no verifier to match from the COMMIT to
>> > >> anything.
>> > >>
>> > >> Should the client then ignore the lack of the matching verifier and
>> > >> just assume the data was committed for the partial bytes?
>> > >
>> > > Yes, sounds like in the asynchronous case the server has to wait for
>> > > the
>> > > writes to reach disk before calling CB_OFFLOAD.  (Do we currently do
>> > > that?).
>> >
>> > Why? No the spec does not require the server to do no such thing. The
>> > server sends back in CB_OFFLOAD if the bytes were written as UNSTABLE
>> > or FILE_SYNC.
>>
>> Look back at what you said before....  So the problem you were
>> explaining (missing stable_how and verifier) was only for the short
>> write case?

Yes.

>> So in the short write case it sounds like it *is* the server's
>> responsibility to commit.

I disagree. I don't see anywhere in the spec that requires the server
to do that.

>>   That's weird, but as long as the short write
>> case is rare, maybe it's not a big deal?
>>
>> Hm: "The coa_bytes_copied value indicates the number of bytes copied but
>> not which specific bytes have been copied."  That makes coa_bytes_copied
>> pretty much worthless.

Yep that's what I thought.

>> I guess I'd be in favor of using the NFS_OK branch of CB_OFFLOAD
>> whenever a nonzero number of bytes is copied.  If less than the
>> requested number of bytes were copied, the client can always find out
>> the error (if any) by attempting to copy the rest.

Ok

>>
>> --b.
>>
>> >
>> > > In theory that shouldn't be too expensive because asynchronous COPY
>> > > should normally be done with a very large range.
>> > >
>> > > (I wonder if the server should just do a synchronous copy if the copy
>> > > would be less than a few megs?)
>> >
>> > Yes the server could determine to convert an asynchronous copy into a
>> > synchronous one based on size.
>> >
>> > I guess I'm still confused how to handle the implementation so that it
>> > doesn't kill interoperability with other possible (future)
>> > implementations...
>>
>> _______________________________________________
>> nfsv4 mailing list
>> nfsv4@ietf.org
>> https://www.ietf.org/mailman/listinfo/nfsv4
>
>