Re: [core] Incoming AD review of draft-ietf-core-block-19

Alexey Melnikov <alexey.melnikov@isode.com> Sat, 23 April 2016 12:07 UTC

Return-Path: <alexey.melnikov@isode.com>
X-Original-To: core@ietfa.amsl.com
Delivered-To: core@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7A9C612D90D for <core@ietfa.amsl.com>; Sat, 23 Apr 2016 05:07:22 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.997
X-Spam-Level:
X-Spam-Status: No, score=-2.997 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RP_MATCHES_RCVD=-0.996, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=isode.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 jQTmWO0mubPX for <core@ietfa.amsl.com>; Sat, 23 Apr 2016 05:07:20 -0700 (PDT)
Received: from statler.isode.com (Statler.isode.com [62.232.206.189]) by ietfa.amsl.com (Postfix) with ESMTP id 846EC12D179 for <core@ietf.org>; Sat, 23 Apr 2016 05:07:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1461413239; d=isode.com; s=selector; i=@isode.com; bh=ZqNz9LHWMOAYyqkQbtxrvVk8+fIc0o6DjkeA34n6cPY=; h=From:Sender:Reply-To:Subject:Date:Message-ID:To:Cc:MIME-Version: In-Reply-To:References:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description; b=Bs30pIdjtI5ubtjD8Aa1K4e60AoNVGfwHTYBo5HL5xL6aFJJlfH5bz2VpCIk3Hovs77AmB 6JDX7Hl0Nu/efxnj2vYg0YeMT49M2bumbb8akaEJBpSyCUtJDWC5V/oMerNz7U143syrQ2 CsCvZ7e7XPIZw/C7BzrGmS7n39ZjKKg=;
Received: from [192.168.0.2] (cpc5-nmal20-2-0-cust24.19-2.cable.virginm.net [92.234.84.25]) by statler.isode.com (submission channel) via TCP with ESMTPSA id <VxtldwB-mx-C@statler.isode.com>; Sat, 23 Apr 2016 13:07:19 +0100
To: Carsten Bormann <cabo@tzi.org>
References: <5707D6F8.40000@isode.com> <57186FC3.9010405@tzi.org>
From: Alexey Melnikov <alexey.melnikov@isode.com>
Message-ID: <571B6571.5010602@isode.com>
Date: Sat, 23 Apr 2016 13:07:13 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0
In-Reply-To: <57186FC3.9010405@tzi.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-transfer-encoding: quoted-printable
Archived-At: <http://mailarchive.ietf.org/arch/msg/core/O8_6pAaPvMGG_-KfcUeJULg1YvM>
Cc: core@ietf.org
Subject: Re: [core] Incoming AD review of draft-ietf-core-block-19
X-BeenThere: core@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <core.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/core>, <mailto:core-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/core/>
List-Post: <mailto:core@ietf.org>
List-Help: <mailto:core-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/core>, <mailto:core-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 23 Apr 2016 12:07:22 -0000

Hi Carsten,
Thank you for your responses. Further discussions below:

On 21/04/2016 07:14, Carsten Bormann wrote:
> Alexey Melnikov wrote:
>> Hi,
>> I am mostly happy with this document, but I have a few comments/questions:
>>
>> On page 11:
>>
>>    Clients that want to retrieve
>>    all blocks of a resource SHOULD strive to do so without undue delay.
>>
>> This is not an interoperability issue and it would be impossible to
>> verify compliance with it, unless you have a number that specifies what
>> is "undue delay". So I think you shouldn't use RFC 2119 SHOULD here.
>> Just use lowercased "should" instead.
> 
> Indeed, you cannot measure compliance with this SHOULD.  I still think
> that it is important for interoperability to point out that clients will
> have more successful exchanges if they heed this.  (From an
> interoperability point of view, this is a statement that relieves
> servers of a potential onus to somehow cater for clients that don't.)
> 
>> Similarly, in 2.5:
>>
>>    Clients SHOULD strive to send all blocks of a
>>    request without undue delay.
>>
>> (Similar text in 2.6)
> 
> (Ditto.)

I think I prefer to have some recommendations on what is "undue delay",
if you can add some text.

>> In 2.9.2:
>>
>> Should probably also mention that this response code is also used for
>>  mismatching content-format options
> 
> That is one way to see this; section 2.3 takes the view that mismatching
> content-formats aren't reassembled into one body in the first place so
> an incomplete body is the result of not having all parts.
> (I added back reference in the editor's draft.)

What is the state of the resource in such condition?

>> In 2.10:
>>
>>    A response with a Block1 Option in control usage
>>    with the M bit set invalidates cached responses for the target URI.
>>
>> Can you explain the reason for this?
> 
> 
> If the M bit had not been set the response would have been a final
> response and would be used to update the cache entries for this URI.
> Now, with the M bit set, we know that there will be a final response
> later, but we don't know what that will be.  Continuing to serve a
> previous response from the cache doesn't sound right.  But then, it
> could be argued that the server just promised to perform the request
> atomically later, so nothing has happened yet.  Good question.
> 
>>
>> In 3.2:
>>
>>    A stateless server that simply builds/updates the resource in place
>>    (statelessly) may indicate this by not setting the more bit in the
>>    response (Figure 8); in this case, the response codes are valid
>>    separately for each block being updated.
>>
>> What is the behaviour of both the client and the server if PUT on a
>> particular block fails? Is this clear enough in the document?
> 
> In the stateless case, the resource is now probably broken (unless the
> resource is somehow intrinsically robust to this case).  The client
> should not be using the resource (e.g., try to initiate a firmware
> update from an image it just has been building).  The server is
> stateless with respect to individual requests, so it is patiently
> sitting there for the broken resource to be mended.

How can a resource be "mended" if a PUT failed? I think it would be
reasonable for a server implementation to discard the whole accumulated
payload, so there would be no way to mend it other than by uploading the
whole thing from the beginning. If my interpretation is invalid, I
welcome some clarifications on this.

So I think this needs more clarifying text, either describing what
client might be able to do to fix the resource or explaining that the
client need to restart upload.

>> Other questions I have after reviewing the document. If I missed where
>> they are answered, please point me out to existing text in the document
>> or another RFC:
>>
>> Is there a special error for block size mismatch between multiple requests?
> 
> A block size mismatch is not an error (maybe I don't understand the
> question).

There are MUSTs in the document saying that if one end signalled a
certain block size, the other party needs to use the same or smaller
size. What happens if the other party doesn't obey this rule. Is there a
special error code that can be used to signal that a request is rejected
because the specified block size is too big?

>> As block2 is a critical option, how can a server know if a particular
>> client supports this option?
> 
> The assumption here is that CoAP clients generally do, unless they are
> very specialized and never have to deal with non-trivial amounts of
> information (such as a /.well-known/core).

Is this generally true for all COAP extensions or just some?

Extensibility for most protocols is done by capability
discovery/negotiation and graceful service degradation in absence of a
particular extension. This seems to violate this principle.