Re: [nfsv4] [Technical Errata Reported] RFC8166 (6528)

Tom Talpey <tom@talpey.com> Wed, 21 April 2021 13:52 UTC

Return-Path: <tom@talpey.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 930A23A2A62 for <nfsv4@ietfa.amsl.com>; Wed, 21 Apr 2021 06:52:08 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.92
X-Spam-Level:
X-Spam-Status: No, score=-1.92 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 rVhwlXbaCHf3 for <nfsv4@ietfa.amsl.com>; Wed, 21 Apr 2021 06:52:03 -0700 (PDT)
Received: from p3plsmtpa07-01.prod.phx3.secureserver.net (p3plsmtpa07-01.prod.phx3.secureserver.net [173.201.192.230]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D47C53A297D for <nfsv4@ietf.org>; Wed, 21 Apr 2021 06:51:42 -0700 (PDT)
Received: from [192.168.0.116] ([71.184.94.153]) by :SMTPAUTH: with ESMTPSA id ZDGXlSUQVlgqpZDGXlOGDG; Wed, 21 Apr 2021 06:51:41 -0700
X-CMAE-Analysis: v=2.4 cv=Es8XEQQA c=1 sm=1 tr=0 ts=60802dee a=vbvdVb1zh1xTTaY8rfQfKQ==:117 a=vbvdVb1zh1xTTaY8rfQfKQ==:17 a=IkcTkHD0fZMA:10 a=SEc3moZ4AAAA:8 a=BqEg4_3jAAAA:8 a=pGLkceISAAAA:8 a=48vgC7mUAAAA:8 a=wWFgaD3hMJgE11YN4V0A:9 a=QEXdDO2ut3YA:10 a=5oRCH6oROnRZc2VpWJZ3:22 a=0mFWnFbQd5xWBqmg7tTt:22 a=w1C3t2QeGrPiZgrLijVG:22
X-SECURESERVER-ACCT: tom@talpey.com
To: Chuck Lever III <chuck.lever@oracle.com>
Cc: "nfsv4@ietf.org" <nfsv4@ietf.org>
References: <20210412164024.82CB8F4075A@rfc-editor.org> <A4A2576B-A0BD-4B29-B1C1-C5498AC938DC@oracle.com> <296b1959-4f6c-d24b-7eaf-d26f185bc5f2@talpey.com> <17D8AEB3-5D3F-4E77-918B-98E9716E30BB@oracle.com> <17d9ad34-50c6-611a-8e2a-888239b33a8d@talpey.com> <8FFB28EA-6C04-4F43-B4D3-67A15A479737@oracle.com>
From: Tom Talpey <tom@talpey.com>
Message-ID: <8269f1ef-e69d-c141-b2aa-31dd35bd47b4@talpey.com>
Date: Wed, 21 Apr 2021 09:51:41 -0400
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1
MIME-Version: 1.0
In-Reply-To: <8FFB28EA-6C04-4F43-B4D3-67A15A479737@oracle.com>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-CMAE-Envelope: MS4xfEAAtE8W6PhGbx6lhU2cliAxKt+K4iNcUohatlop0Xih490vwedGmmvxN7ZyN4nzFs4qqY5SJTfQYXlojUrK7xf0xe2N8ZwBaqAEsjl3HzbAHGGwmFNB FOA2PRolZiVU+volVwSfiW62pvQtUrS7+1/BseYerlm38+H1z32dFfQi+HR8zKJQpMDno3YuaM4orOMCV+F0IjBBn2LAjUnbOGU=
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/mYIhd_VufZXmQgd-a0K-f2ZAcgc>
Subject: Re: [nfsv4] [Technical Errata Reported] RFC8166 (6528)
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.29
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: Wed, 21 Apr 2021 13:52:15 -0000

On 4/21/2021 9:25 AM, Chuck Lever III wrote:
> 
> 
>> On Apr 21, 2021, at 9:20 AM, Tom Talpey <tom@talpey.com> wrote:
>>
>> On 4/20/2021 1:13 PM, Chuck Lever III wrote:
>>>> On Apr 20, 2021, at 11:36 AM, Tom Talpey <tom@talpey.com> wrote:
>>>>
>>>> On 4/20/2021 11:17 AM, Chuck Lever III wrote:
>>>>> Sorry for the delay, I wasn't sure where to begin further conversation
>>>>> on this errata.
>>>>>> On Apr 12, 2021, at 12:40 PM, RFC Errata System <rfc-editor@rfc-editor.org> wrote:
>>>>>>
>>>>>> The following errata report has been submitted for RFC8166,
>>>>>> "Remote Direct Memory Access Transport for Remote Procedure Call Version 1".
>>>>>>
>>>>>> --------------------------------------
>>>>>> You may review the report below and at:
>>>>>> https://www.rfc-editor.org/errata/eid6528
>>>>>>
>>>>>> --------------------------------------
>>>>>> Type: Technical
>>>>>> Reported by: David Noveck <davenoveck@gmail.com>
>>>>>>
>>>>>> Section: 4.2.4
>>>>>>
>>>>>> Original Text
>>>>>> -------------
>>>>>> A Requester MUST NOT send an RPC-over-RDMA header with the RDMA_ERROR
>>>>>> procedure.  A Responder MUST silently discard RDMA_ERROR procedures
>>>>> Stated as a co-author of this document, I agree that this text is
>>>>> problematic for version negotiation, which uses the RDMA_ERROR
>>>>> procedure/header type.
>>>>> One vote for "verified".
>>>>>> Corrected Text
>>>>>> --------------
>>>>>> An RDMA_ERROR header cannot be sent without an assurance that, the receiver
>>>>>> has posted a receive operation which its sending will satisfy.  In most cases,
>>>>>> this means that a Requester (i.e. one sending RPC Calls) MUST NOT send an
>>>>>> RPC-over-RDMA header with the RDMA_ERROR procedure.  Similarly, a Responder
>>>>>> (i.e. one sending RPC Replies) MUST silently discard RDMA_ERROR procedures.
>>>>> I don't recall that the issue that prompted the addition of the
>>>>> original text was the requirement for a posted Receive. That
>>>>> might be slightly revisionist.
>>>>> Though it is true sending an RDMA_ERROR when there is no Receive
>>>>> waiting will likely result in loss of connection, I think the
>>>>> typical scenario is that RDMA_ERROR is in response to a previous
>>>>> message; thus missing a Receive would be an implementation bug.
>>>>
>>>> Why is this particular RDMA_ERROR so important? It seems to me like
>>>> a ton of normative text for a version mismatch, which basically
>>>> should never happen.
>>> It will happen now that we have rpcrdma-version-two.
>>>> If anything, changing "silently discard" to
>>>> "close the connection" would be just as appripriate.
>>> I prefer to avoid "close the connection" as a first resort since
>>> it can impact other RPC transactions that are ongoing. That might
>>> not be a concern for ERR_VERS, but it could very well be a
>>> problem for ERR_CHUNK.
>>>> Can someone motivate the scenario for me?
>>> The problem is that RFC 8166 defines only forward-direction
>>> operation, where the Requester/Responder roles are clear. With
>>> the introduction of reverse-direction operation and control
>>> plane operations, it becomes impossible to implement the
>>> requirements stipulated in S4.2.4 because there are now scenarios
>>> where the Receiver has no way to determine whether it is a
>>> Requester or a Responder.
>>
>> Oh. So, the idea is that the ULP reverse channel might attempt to
>> establish an RPCRDMA version which might be different from the forward
>> channel?
> 
> Or it could be due to a bug. The point is this text in RFC 8166
> can't work.
> 
> 
>> How is that useful, or even plausible? I think the answer will
>> guide the proposed fix.
>>
>> I don't think, in any case, that it's at all useful to allow the
>> version to change after both sides have exchanged messages with
>> matching versions. If that happens, closing the connection is the
>> only valid action.
> 
> This errata deals strictly with RFC 8166. For an RPC/RDMA v1 client,
> why wouldn't sending an ERR_VERS work for v1?
> 
> For later versions, we'll need a new error code to indicate that
> the Receiver detected a supported but unexpected version.

I'll find time to take a closer look. I fully agree that an erratum
needs to be tightly scoped. Longer term, I'm skeptical of the value
of extending error codes for this. A v1 RDMA_ERROR reply seems like
the most universal approach, on the face of it. But heroically
attempting to recover from this is, to me, a complete non-goal.

Tom.

>>> I think Dave is concerned about how these requirements impact the
>>> operation of versions subsequent to v1, or during version negotiation
>>> between a v1-only implementation and a polyglot.
>>>>> "In most cases," is not appropriate with MUST/MUST NOT. We could
>>>>> stipulate that the exact cases where these requirements hold is
>>>>> when sending ERR_CHUNK. These requirements do not hold for ERR_VERS.
>>>>
>>>> I'll go further - "in most cases" isn't appropriate for a spec.
>>>>
>>>> Tom.
>>>>
>>>>>> However, in the case of providing an RDMA_ERROR headers containing an error
>>>>>> code of ERR_VERS, such a schema is not realizable, since there is no way for
>>>>>> a receiver who does not support a particular version, to determine whether
>>>>>> an RPC Call or Reply is being sent, leaving the receiver uncertain as to whether
>>>>>> it is being Addressed as a Requester or a Responder, leaving it unable to
>>>>>> participate in version negotiation.
>>>>> The particular issue is that either:
>>>>> - the Sender of the message with the unsupported version might be
>>>>> using a procedure of the new protocol version that is not supported
>>>>> in the protocol version the Receiver supports, or
>>>>> - the Sender of the message with the unsupported version might be
>>>>> using a procedure that does not bear an RPC message or any other
>>>>> indication of message direction.
>>>>> Thus the Receiver would not be able to determine the direction of
>>>>> the incoming message.
>>>>> I'm not convinced that RFC 8166 Section 4.2 is an appropriate place
>>>>> to explain this reasoning. (Stating it here in the errata is OK).
>>>>> The above could be dropped in the Corrected text.
>>>>>> In the case of version errors, the
>>>>>> implementation is to rely on the assumption that forward direction requests
>>>>>> are being done and reserve direction requests only done once the version is
>>>>>> properly negotiated.
>>>>> Shorter:
>>>>> "For the purpose of version negotiation, the receiver is to assume
>>>>> that reverse-direction operation is started only once the connection's
>>>>> transport protocol version has been fixed using forward direction
>>>>> operations."
>>>>> One problem with this is that reverse-direction operation is defined
>>>>> in a separate RFC (8167).
>>>>>> As a result, such messages MUST NOT be sent by the
>>>>>> client and MUST be silently discarded by servers.
>>>>> I'd like to confirm that what the reporter intended in the second
>>>>> sentence above was "client" and "servers" and not "Requester" and
>>>>> "Responders".
>>>>>> Notes
>>>>>> -----
>>>>>> Even if one feels that this is not an appropriate correction, the existing text must be fixed somehow.   In assuming that the terms Requester and Responder can be used this way in this context is likely to result in some implementers concluding that version errors can never be sent while other might be unabble to coonclude that given the effort expended in the spec to make such errors be interpretable by anf rpc-over-rdma version.
>>>>>>
>>>>>> Instructions:
>>>>>> -------------
>>>>>> This erratum is currently posted as "Reported". If necessary, please
>>>>>> use "Reply All" to discuss whether it should be verified or
>>>>>> rejected. When a decision is reached, the verifying party
>>>>>> can log in to change the status and edit the report, if necessary.
>>>>>>
>>>>>> --------------------------------------
>>>>>> RFC8166 (draft-ietf-nfsv4-rfc5666bis-11)
>>>>>> --------------------------------------
>>>>>> Title               : Remote Direct Memory Access Transport for Remote Procedure Call Version 1
>>>>>> Publication Date    : June 2017
>>>>>> Author(s)           : C. Lever, Ed., W. Simpson, T. Talpey
>>>>>> Category            : PROPOSED STANDARD
>>>>>> Source              : Network File System Version 4
>>>>>> Area                : Transport
>>>>>> Stream              : IETF
>>>>>> Verifying Party     : IESG
>>>>> --
>>>>> Chuck Lever
>>>>> _______________________________________________
>>>>> nfsv4 mailing list
>>>>> nfsv4@ietf.org
>>>>> https://www.ietf.org/mailman/listinfo/nfsv4
>>>>
>>>> _______________________________________________
>>>> nfsv4 mailing list
>>>> nfsv4@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/nfsv4
>>> --
>>> Chuck Lever
> 
> --
> Chuck Lever
> 
> 
> 
>