Re: [netconf] restconf collections

Qin Wu <> Fri, 02 October 2020 09:37 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id BD10D3A0E77 for <>; Fri, 2 Oct 2020 02:37:31 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 4n9XiLq5f-LH for <>; Fri, 2 Oct 2020 02:37:29 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id C61573A0E3C for <>; Fri, 2 Oct 2020 02:37:29 -0700 (PDT)
Received: from (unknown []) by Forcepoint Email with ESMTP id 197B330D5D65588DFAB1 for <>; Fri, 2 Oct 2020 10:37:28 +0100 (IST)
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Fri, 2 Oct 2020 10:37:27 +0100
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.1.1913.5 via Frontend Transport; Fri, 2 Oct 2020 10:37:27 +0100
Received: from ([]) by ([]) with mapi id 14.03.0487.000; Fri, 2 Oct 2020 17:37:20 +0800
From: Qin Wu <>
To: Kent Watsen <>
CC: Martin Björklund <>, "" <>
Thread-Topic: [netconf] restconf collections
Thread-Index: AdaYm18Gp6YTXWSQQdK//NJQJOxchQ==
Date: Fri, 02 Oct 2020 09:37:19 +0000
Message-ID: <>
Accept-Language: zh-CN, en-US
Content-Language: zh-CN
x-originating-ip: []
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-CFilter-Loop: Reflected
Archived-At: <>
Subject: Re: [netconf] restconf collections
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NETCONF WG list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Fri, 02 Oct 2020 09:37:32 -0000

发件人: Kent Watsen [] 
发送时间: 2020年10月1日 20:37
收件人: Qin Wu <>
抄送: Martin Björklund <>;
主题: Re: [netconf] restconf collections

Hi Qin,

> Some opstate must be persisted, e.g., long-lived counters, logs, etc., but it’s a good point about other opstate not being persisted.   Perhaps “node-tags” can be used here, to differentiate which is which…and servers can indicate if/how they support the ephemeral opstate leafs in queries?
> [Qin]:That's a good case for node tag, in earlier discussion, we discussed operation type, which distinguishs cumulative statistics value from current value. The case discussed here is very close to operation type proposal discussed earlier.

Yes.  Thank you for pointing that out.  I meant to make the same observation before.  Indeed, such node-tags could have dual-purpose: to guide a streaming-strategy and a querying-strategy for certain nodes.

[Qin]:In this case, do you think origin metadata annotation in RFC8342 can be reused, e.g., using 'or:origin = or:dynamic' to indicate ephemeral opstate? or you think 'list' specific node tag is still needed to indicate server specific capability? E.g., expose DB related capability or features?
Note that node tag we proposed is not metadata annotation extension.

> Note sure how others feel about “direction: (c), but my primary use-case revolves around time-series data (e.g., logs), where the interest is commonly on the most-recent entries, so "reverse-->offset—>limit” works nicely.  
> Perhaps an alternative would be to lift a concept from Python with negative indexes so, for instance, offset=-N and limit=-N gives the last N entries?
> [Qin]: Yes, that's what I thought as well, with negative indexes, (b) and (c) seems to me, can be combined.

Can others comment on this?

Presumably, we could eliminate “direction” (c) with this approach.  

Without “direction”, I think that UIs can still support the ability to do column-sorts, whereby the user clicks on a column’s header to toggle ascending vs. descending presentation, but they’ll have to do it client-side.

That is, if wanting to see the 2nd page of results sorted by a column, something like:

	sort(column-name) --> offset(-2*pagesize) --> limit(pagesize)

Followed by the client then flipping the results to present the results in the user-selected order, right?
[Qin]: Yes.
That said, given that DB-backends that support sorts commonly also support direction, it's unclear what this buys us.

>>> Sure, but I wonder if, e.g., a netmask filter, is supportable by 
>>> common DB-backends.  I’m hoping we have some DB-experts on the list!
>> See above.  It can be quite efficient even if the backend doesn't 
>> support it.
> I don’t see that above, but I don’t doubt that it can be so, it’s just a whole lot of implementation complexity.  It seems that we should/must support servers doing it, we just need to find a way (node-tags?) to enable them to express that ability.
> [Qin]: My feeling is this efficiency more depends on the amount of data we need to request. If amount of data we request is huge, maybe, client-> server-> backend may be the better choice.

Is it the amount of data requested or the number of entries in the list?  At least, in my worldview, clients are always requesting a “page” of data, so that part is rather consistently small.
[Qin]: I think it is the latter.
If the intention is to get a complete dump, then maybe the comment from yesterday applies, whereby streaming to an external repository that can be queried offline makes more sense?    - especially considering that the number of on-box logs is likely to be only the most recent (e.g., days), whereas the complete-dump type queries likely wish to extend well-past that.
[Qin]: I think streaming to an external repository is a different use case, we don't need to compare with this polling use case. the assumption we made for paging, is the client doesn't have to deploy external repository for another round query. We are looking for network side solution include filtering, limit, offset parameters support.