Re: [netconf] restconf collections

Kent Watsen <kent+ietf@watsen.net> Mon, 28 September 2020 14:21 UTC

Return-Path: <01000174d5174af9-848a769d-ef3f-49a6-b1d6-1eb8349a489f-000000@amazonses.watsen.net>
X-Original-To: netconf@ietfa.amsl.com
Delivered-To: netconf@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E1AB93A0538 for <netconf@ietfa.amsl.com>; Mon, 28 Sep 2020 07:21:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level:
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=amazonses.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 O6sDr8YI5EwI for <netconf@ietfa.amsl.com>; Mon, 28 Sep 2020 07:21:49 -0700 (PDT)
Received: from a8-88.smtp-out.amazonses.com (a8-88.smtp-out.amazonses.com [54.240.8.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 08E953A08BB for <netconf@ietf.org>; Mon, 28 Sep 2020 07:21:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=224i4yxa5dv7c2xz3womw6peuasteono; d=amazonses.com; t=1601302907; h=From:Content-Type:Mime-Version:Subject:Date:References:To:In-Reply-To:Message-Id:Feedback-ID; bh=A4F06zdf2bsYd8MFPbgk4FwL4JJmExK4pEDTNzorQ4s=; b=cHwZ8bsuB4oXEfVUepoLO+U3bvBrsVquBWSAZ51D9mpSUPqo56xqncvzJKyEAzk9 QsEncBxBh23sgYjEwB/ZAayHz98OrCjjR7aKnWLqvDdD9cvi4gdu6P7X0CQzNzNkOTD /fs/9R3UBEwFalrEjKrgyRlXlIe6hU5z2cSJZ7YA=
From: Kent Watsen <kent+ietf@watsen.net>
Content-Type: multipart/alternative; boundary="Apple-Mail=_71F18AF1-AEDA-429D-829B-85E1CB61A38C"
Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\))
Date: Mon, 28 Sep 2020 14:21:47 +0000
References: <B8F9A780D330094D99AF023C5877DABAADA1006E@dggeml511-mbs.china.huawei.com> <01000174cb6ea9ee-d7716c10-a691-4a97-9e99-022e4c0ef55a-000000@email.amazonses.com> <CABCOCHRzK8658NuwH4rBrmUg-T1KFWA0nZ2RJf_Kd9Q0TFka0g@mail.gmail.com> <01000174cbc7532c-81a16bed-e752-4e61-9a97-dfc95be744b5-000000@email.amazonses.com> <CABCOCHTT=vQWNY9iTUG8Dy8s7qrA0sP5rKcRgsjZkWuXG+q78Q@mail.gmail.com>
To: "netconf@ietf.org" <netconf@ietf.org>
In-Reply-To: <CABCOCHTT=vQWNY9iTUG8Dy8s7qrA0sP5rKcRgsjZkWuXG+q78Q@mail.gmail.com>
Message-ID: <01000174d5174af9-848a769d-ef3f-49a6-b1d6-1eb8349a489f-000000@email.amazonses.com>
X-Mailer: Apple Mail (2.3608.80.23.2.2)
X-SES-Outgoing: 2020.09.28-54.240.8.88
Feedback-ID: 1.us-east-1.DKmIRZFhhsBhtmFMNikgwZUWVrODEw9qVcPhqJEI2DA=:AmazonSES
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/VhK9cza_BTs_tKY9AqWHOU-SDCY>
Subject: Re: [netconf] restconf collections
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NETCONF WG list <netconf.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netconf>, <mailto:netconf-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netconf/>
List-Post: <mailto:netconf@ietf.org>
List-Help: <mailto:netconf-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netconf>, <mailto:netconf-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Sep 2020 14:21:51 -0000

It seems that we need two I-Ds:

1) “restconf-lists"

	a) “update” RFC 8040 (and possibly RFC 8527)
	b) modify Section 3.5 (Data Resource) to state that “list” and “leaf-list” themselves (not just their entries) are “data resources”
	c) define impact on various HTTP methods GET, POST, PUT, DELETE, PATCH, etc.
	d) additionally define query parameters for the GET:
		i) limit: number to return.  Could name ‘count’ to match <get-bulk>
		ii) offset: where to begin.  Need to discuss if <get-bilk>’s “keys” is better
		iii) where: some xpath expression
		iv) direction: ascending | descending

2) “netconf-lists"

	a) “update” RFC 6241 (and possibly RFC 8526)
	b) introduce a <get-bulk> or <get-block> like RPC for paging through the entries of lists and leaf-lists.


Anyone interested in working on said I-Ds, please email me privately.

Thanks,
Kent. // as a contributor


> On Sep 27, 2020, at 11:12 AM, Andy Bierman <andy@yumaworks.com> wrote:
> 
> 
> 
> On Sat, Sep 26, 2020 at 11:57 AM Kent Watsen <kent+ietf@watsen.net <mailto:kent%2Bietf@watsen.net>> wrote:
> 
>> The <get-bulk> operation is not stateful.
>>  http://www.netconfcentral.org/modulereport/yumaworks-getbulk <http://www.netconfcentral.org/modulereport/yumaworks-getbulk>
> This RPC is effectively 1-1 with RC query params approach being discussed.  I like it.
> 
> The “count” param is like “limit”, and “list-test” is like a “where”.
> 
> One difference is that <get-bulk> uses "last-keys” instead of an integral “offset”.   Any thoughts about the pros and cons?  I imagine performance depends on the backend database used.  For instance, SQL supports “offset” so, to support "last-keys” instead would entail a first query to determine the offset for a key.
> 
> 
> 
> It would be unlikely that a distributed server (e.g. data can come from linecards)
> that it is efficient to find the Nth entry.
> 
> Using a count approach is obviously vulnerable to additions and deletions to the dataset.
> If the count keeps changing then the relative Nth entry also keeps changing.
> This causes duplicates or missed entries in the paginated data.  Using key values
> instead of a count this source of inaccuracy is eliminated.  Both approaches
> are vulnerable to "moved" entries (e.g. user-ordered list entry changes position).
> This can happen in theory but (1) user-ordered config=false data is very rare,
> (2) the "move" operation for user-ordered data is very rarely used and (3)
> an entry would have to be moved just at the time the walk was in progress.
> 
>  
> Missing is a “sort”.  That said, of the four params mentioned (limit, offset, where, sort), it might be least important.  At least, a general sort is…and then there is the nasty issue of sorting a user-sorted list.  A likely must-have fallback would be “direction” so, e.g., queries return the most-recent (not the oldest) entires in a time-series list (e.g., a log).  A “direction” parameter would also work well on a user-sorted list.
> 
> 
> sort is much more expensive to implement correctly and makes more
> sense when a stateful snapshot approach is used. Sorting each chunk
> vs. the entire data-set is not that useful.
> 
>  
> 
> 
>> There are 3 completely different approaches:
>> 
>>   1) stateless
>>   2) stateful
>>   3) stateful snapshot
>> 
>> How to efficiently iterate through data that is changing constantly?
>> This problem is harder than it looks.
> 
> Agreed.  I recommend we NOT try to solve that problem.
> 
> 
> 
> But we are solving that problem to some degree.
> Operational state is changing constantly and iterating through a list
> vs. a single GET usually makes the problem worse.
> 
> 
> 
> K.
> 
> 
> Andy